diff --git a/codebook.toml b/codebook.toml deleted file mode 100644 index 57cdd2569c3..00000000000 --- a/codebook.toml +++ /dev/null @@ -1 +0,0 @@ -words = ["breakpoint"] diff --git a/crates/agent_ui/src/thread_metadata_store.rs b/crates/agent_ui/src/thread_metadata_store.rs index ff6eb3b98ec..fee098f3760 100644 --- a/crates/agent_ui/src/thread_metadata_store.rs +++ b/crates/agent_ui/src/thread_metadata_store.rs @@ -162,7 +162,7 @@ fn migrate_thread_metadata(cx: &mut App) -> Task> { .push(entry); } for entries in per_project.values_mut() { - entries.sort_by(|a, b| b.updated_at.cmp(&a.updated_at)); + entries.sort_by_key(|entry| std::cmp::Reverse(entry.updated_at)); for entry in entries.iter_mut().take(5) { entry.archived = false; } @@ -2321,7 +2321,7 @@ mod tests { .filter(|m| *m.folder_paths() == project_a_paths) .collect(); assert_eq!(project_a_entries.len(), 7); - project_a_entries.sort_by(|a, b| b.updated_at.cmp(&a.updated_at)); + project_a_entries.sort_by_key(|entry| std::cmp::Reverse(entry.updated_at)); for entry in &project_a_entries[..5] { assert!( diff --git a/crates/dap_adapters/src/javascript.rs b/crates/dap_adapters/src/javascript.rs index 68f5ca7e797..8bdcf52807b 100644 --- a/crates/dap_adapters/src/javascript.rs +++ b/crates/dap_adapters/src/javascript.rs @@ -103,7 +103,7 @@ impl JsDebugAdapter { if let Some(env) = configuration.get("env").cloned() && let Ok(env) = serde_json::from_value::>(env) { - envs.extend(env.into_iter()); + envs.extend(env); } configuration diff --git a/crates/debugger_ui/src/tests/console.rs b/crates/debugger_ui/src/tests/console.rs index 9e672be080a..b3a8fb0b6b0 100644 --- a/crates/debugger_ui/src/tests/console.rs +++ b/crates/debugger_ui/src/tests/console.rs @@ -328,7 +328,7 @@ async fn test_escape_code_processing(executor: BackgroundExecutor, cx: &mut Test let text_highlights = editor.update(cx, |editor, cx| { let mut text_highlights = editor.all_text_highlights(window, cx).into_iter().flat_map(|(_, ranges)| ranges).collect::>(); - text_highlights.sort_by(|a, b| a.start.cmp(&b.start)); + text_highlights.sort_by_key(|hl| hl.start); text_highlights }); pretty_assertions::assert_eq!( diff --git a/crates/denoise/src/lib.rs b/crates/denoise/src/lib.rs index f6cbf0fadf1..e92831b9657 100644 --- a/crates/denoise/src/lib.rs +++ b/crates/denoise/src/lib.rs @@ -118,12 +118,8 @@ fn run_neural_denoiser( input_rx: mpsc::Receiver<[f32; BLOCK_SHIFT]>, ) { let mut engine = Engine::new(); - loop { - let Ok(sub_block) = input_rx.recv() else { - // tx must have dropped, stop thread - break; - }; - + // until tx is dropped + while let Ok(sub_block) = input_rx.recv() { let denoised_sub_block = engine.feed(&sub_block); if denoised_tx.send(denoised_sub_block).is_err() { break; diff --git a/crates/diagnostics/src/buffer_diagnostics.rs b/crates/diagnostics/src/buffer_diagnostics.rs index 040aeae4742..e703e193c31 100644 --- a/crates/diagnostics/src/buffer_diagnostics.rs +++ b/crates/diagnostics/src/buffer_diagnostics.rs @@ -542,23 +542,22 @@ impl BufferDiagnosticsEditor { // display map for the new diagnostics. Update the `blocks` // property before finishing, to ensure the blocks are removed // on the next execution. - let editor_blocks = - anchor_ranges - .into_iter() - .zip(blocks.into_iter()) - .map(|(anchor, block)| { - let editor = buffer_diagnostics_editor.editor.downgrade(); + let editor_blocks = anchor_ranges + .into_iter() + .zip(blocks) + .map(|(anchor, block)| { + let editor = buffer_diagnostics_editor.editor.downgrade(); - BlockProperties { - placement: BlockPlacement::Near(anchor.start), - height: Some(1), - style: BlockStyle::Flex, - render: Arc::new(move |block_context| { - block.render_block(editor.clone(), block_context) - }), - priority: 1, - } - }); + BlockProperties { + placement: BlockPlacement::Near(anchor.start), + height: Some(1), + style: BlockStyle::Flex, + render: Arc::new(move |block_context| { + block.render_block(editor.clone(), block_context) + }), + priority: 1, + } + }); let block_ids = buffer_diagnostics_editor.editor.update(cx, |editor, cx| { editor.display_map.update(cx, |display_map, cx| { diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index 49e17e69b00..4ee8259dd69 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -667,10 +667,8 @@ impl ProjectDiagnosticsEditor { } } - let editor_blocks = anchor_ranges - .into_iter() - .zip_eq(result_blocks.into_iter()) - .filter_map(|(anchor, block)| { + let editor_blocks = anchor_ranges.into_iter().zip_eq(result_blocks).filter_map( + |(anchor, block)| { let block = block?; let editor = this.editor.downgrade(); Some(BlockProperties { @@ -680,7 +678,8 @@ impl ProjectDiagnosticsEditor { render: Arc::new(move |bcx| block.render_block(editor.clone(), bcx)), priority: 1, }) - }); + }, + ); let block_ids = this.editor.update(cx, |editor, cx| { editor.display_map.update(cx, |display_map, cx| { diff --git a/crates/edit_prediction/src/edit_prediction.rs b/crates/edit_prediction/src/edit_prediction.rs index 824c45036b7..6c98e296ef4 100644 --- a/crates/edit_prediction/src/edit_prediction.rs +++ b/crates/edit_prediction/src/edit_prediction.rs @@ -2514,7 +2514,7 @@ impl EditPredictionStore { .collect() }); - candidates.sort_by(|a, b| b.1.cmp(&a.1)); + candidates.sort_by_key(|c| std::cmp::Reverse(c.1)); for (path, _) in candidates { let candidate_buffer = project diff --git a/crates/edit_prediction/src/edit_prediction_tests.rs b/crates/edit_prediction/src/edit_prediction_tests.rs index be6ea025496..00d52023f4d 100644 --- a/crates/edit_prediction/src/edit_prediction_tests.rs +++ b/crates/edit_prediction/src/edit_prediction_tests.rs @@ -3315,8 +3315,7 @@ async fn test_edit_prediction_settled(cx: &mut TestAppContext) { // Let the worker process the channel message before we start advancing. cx.run_until_parked(); - let mut region_a_edit_offset = 5; - for _ in 0..3 { + for region_a_edit_offset in (5..).take(3) { // Edit inside region A (not at the boundary) so `last_edit_at` is // updated before the worker's next wake. buffer.update(cx, |buffer, cx| { @@ -3326,7 +3325,6 @@ async fn test_edit_prediction_settled(cx: &mut TestAppContext) { cx, ); }); - region_a_edit_offset += 1; cx.run_until_parked(); cx.executor() diff --git a/crates/edit_prediction_cli/src/filter_languages.rs b/crates/edit_prediction_cli/src/filter_languages.rs index 989a112a50a..cdf503fa23c 100644 --- a/crates/edit_prediction_cli/src/filter_languages.rs +++ b/crates/edit_prediction_cli/src/filter_languages.rs @@ -168,7 +168,7 @@ fn get_all_languages(extension_map: &HashMap) -> Vec<(String, Ve } let mut result: Vec<_> = language_to_extensions.into_iter().collect(); - result.sort_by(|a, b| a.0.to_lowercase().cmp(&b.0.to_lowercase())); + result.sort_by_key(|res| res.0.to_lowercase()); for (_, extensions) in &mut result { extensions.sort(); } @@ -380,7 +380,7 @@ pub fn run_filter_languages( if let Some(top_n) = args.show_top_excluded { if !excluded_extensions.is_empty() { let mut sorted: Vec<_> = excluded_extensions.into_iter().collect(); - sorted.sort_by(|a, b| b.1.cmp(&a.1)); + sorted.sort_by_key(|res| std::cmp::Reverse(res.1)); eprintln!("\nTop {} excluded extensions:", top_n.min(sorted.len())); for (ext, count) in sorted.into_iter().take(top_n) { eprintln!(" {:>6} .{}", count, ext); @@ -439,7 +439,7 @@ fn run_stats(input: &Path, extension_map: &HashMap) -> Result<() } let mut sorted_counts: Vec<_> = language_counts.into_iter().collect(); - sorted_counts.sort_by(|a, b| b.1.cmp(&a.1)); + sorted_counts.sort_by_key(|res| std::cmp::Reverse(res.1)); println!("Language distribution ({} total examples):", total_count); println!(); @@ -452,7 +452,7 @@ fn run_stats(input: &Path, extension_map: &HashMap) -> Result<() println!(); println!("Unknown extensions:"); let mut sorted_unknown: Vec<_> = unknown_extensions.into_iter().collect(); - sorted_unknown.sort_by(|a, b| b.1.cmp(&a.1)); + sorted_unknown.sort_by_key(|res| std::cmp::Reverse(res.1)); for (ext, count) in sorted_unknown.iter().take(30) { println!(" {:>6} .{}", count, ext); } diff --git a/crates/editor/src/display_map/block_map.rs b/crates/editor/src/display_map/block_map.rs index c3dbfa4f6dd..7664ff4d2d7 100644 --- a/crates/editor/src/display_map/block_map.rs +++ b/crates/editor/src/display_map/block_map.rs @@ -4398,8 +4398,7 @@ mod tests { let mut expected_longest_rows_in_range = vec![]; let mut longest_line_len_in_range = 0; - let mut row = start_row as u32; - for line in &expected_lines[start_row..end_row] { + for (row, line) in (start_row as u32..).zip(&expected_lines[start_row..end_row]) { let line_char_count = line.chars().count() as isize; match line_char_count.cmp(&longest_line_len_in_range) { Ordering::Less => {} @@ -4410,7 +4409,6 @@ mod tests { expected_longest_rows_in_range.push(row); } } - row += 1; } let longest_row_in_range = blocks_snapshot diff --git a/crates/editor/src/display_map/tab_map.rs b/crates/editor/src/display_map/tab_map.rs index bb0e642df38..24f0206cccd 100644 --- a/crates/editor/src/display_map/tab_map.rs +++ b/crates/editor/src/display_map/tab_map.rs @@ -1577,6 +1577,10 @@ mod tests { let mut all_tab_stops = Vec::new(); let mut byte_offset = 1; let mut char_offset = 1; + #[expect( + clippy::explicit_counter_loop, + reason = "Lint does not account for char_offset being needed after the loop" + )] for ch in buffer_snapshot.text().chars() { if ch == '\t' { all_tab_stops.push(TabStop { diff --git a/crates/editor/src/document_colors.rs b/crates/editor/src/document_colors.rs index d62bb87404d..4ce89f90c99 100644 --- a/crates/editor/src/document_colors.rs +++ b/crates/editor/src/document_colors.rs @@ -51,8 +51,8 @@ impl LspColorData { to_remove: Vec::new(), to_insert: self .buffer_colors - .iter() - .flat_map(|(_, buffer_colors)| buffer_colors.colors.iter()) + .values() + .flat_map(|buffer_colors| buffer_colors.colors.iter()) .map(|(range, color, id)| { Inlay::color( id.id(), @@ -120,8 +120,8 @@ impl LspColorData { Vec::new() } else { self.buffer_colors - .iter() - .flat_map(|(_, buffer_colors)| &buffer_colors.colors) + .values() + .flat_map(|buffer_colors| &buffer_colors.colors) .map(|(range, color, _)| { let display_range = range.clone().to_display_points(snapshot); let color = Hsla::from(Rgba { diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 42e4ebb606d..c9ca01c7878 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -24465,8 +24465,8 @@ impl Editor { let snapshot = self.snapshot(window, cx); let mut used_highlight_orders = HashMap::default(); self.highlighted_rows - .iter() - .flat_map(|(_, highlighted_rows)| highlighted_rows.iter()) + .values() + .flat_map(|highlighted_rows| highlighted_rows.iter()) .fold( BTreeMap::::new(), |mut unique_rows, highlight| { diff --git a/crates/editor/src/runnables.rs b/crates/editor/src/runnables.rs index 25db455d462..7b0b4d572a5 100644 --- a/crates/editor/src/runnables.rs +++ b/crates/editor/src/runnables.rs @@ -1288,7 +1288,7 @@ mod tests { .runnables .iter() .flat_map(|(_, (_, tasks))| { - tasks.iter().flat_map(|(_, runnable_tasks)| { + tasks.values().flat_map(|runnable_tasks| { runnable_tasks .templates .iter() diff --git a/crates/file_finder/src/file_finder.rs b/crates/file_finder/src/file_finder.rs index d75481f6f74..66acefde69f 100644 --- a/crates/file_finder/src/file_finder.rs +++ b/crates/file_finder/src/file_finder.rs @@ -612,10 +612,7 @@ impl Matches { // We build a sorted Vec, eliminating duplicate search matches. // Search matches with the same paths should have equal `ProjectPanelOrdMatch`, so we should // not have any duplicates after building the final list. - for new_match in new_history_matches - .into_values() - .chain(new_search_matches.into_iter()) - { + for new_match in new_history_matches.into_values().chain(new_search_matches) { match self.position(&new_match, currently_opened) { Ok(_duplicate) => continue, Err(i) => { diff --git a/crates/git/src/blame.rs b/crates/git/src/blame.rs index 7597e29aee8..43627453f0f 100644 --- a/crates/git/src/blame.rs +++ b/crates/git/src/blame.rs @@ -29,7 +29,7 @@ impl Blame { ) -> Result { let output = run_git_blame(git, path, content, line_ending).await?; let mut entries = parse_git_blame(&output)?; - entries.sort_unstable_by(|a, b| a.range.start.cmp(&b.range.start)); + entries.sort_unstable_by_key(|entry| entry.range.start); let mut unique_shas = HashSet::default(); diff --git a/crates/git_ui/src/project_diff.rs b/crates/git_ui/src/project_diff.rs index 67d9a96b2d6..3301fbc66f7 100644 --- a/crates/git_ui/src/project_diff.rs +++ b/crates/git_ui/src/project_diff.rs @@ -822,7 +822,7 @@ impl ProjectDiff { let mut buffers_to_fold = Vec::new(); - for (entry, path_key) in buffers_to_load.into_iter().zip(path_keys.into_iter()) { + for (entry, path_key) in buffers_to_load.into_iter().zip(path_keys) { if let Some((buffer, diff)) = entry.load.await.log_err() { // We might be lagging behind enough that all future entry.load futures are no longer pending. // If that is the case, this task will never yield, starving the foreground thread of execution time. diff --git a/crates/json_schema_store/src/json_schema_store.rs b/crates/json_schema_store/src/json_schema_store.rs index b0cd3c0b35c..afe6c51e811 100644 --- a/crates/json_schema_store/src/json_schema_store.rs +++ b/crates/json_schema_store/src/json_schema_store.rs @@ -313,7 +313,7 @@ async fn resolve_dynamic_schema( .all_lsp_adapters() .into_iter() .map(|adapter| adapter.name()) - .chain(languages.available_lsp_adapter_names().into_iter()) + .chain(languages.available_lsp_adapter_names()) .map(|name| name.to_string()) .collect(); diff --git a/crates/language/src/syntax_map/syntax_map_tests.rs b/crates/language/src/syntax_map/syntax_map_tests.rs index 247076b6f25..8bff7ce1415 100644 --- a/crates/language/src/syntax_map/syntax_map_tests.rs +++ b/crates/language/src/syntax_map/syntax_map_tests.rs @@ -1163,7 +1163,7 @@ fn test_random_edits( let layers = syntax_map.layers(&buffer); let reference_layers = reference_syntax_map.layers(&buffer); - for (edited_layer, reference_layer) in layers.into_iter().zip(reference_layers.into_iter()) { + for (edited_layer, reference_layer) in layers.into_iter().zip(reference_layers) { assert_eq!( edited_layer.node().to_sexp(), reference_layer.node().to_sexp() @@ -1326,9 +1326,7 @@ fn test_edit_sequence(language_name: &str, steps: &[&str], cx: &mut App) -> (Buf reference_layers.len(), "wrong number of layers at step {i}" ); - for (edited_layer, reference_layer) in - mutated_layers.into_iter().zip(reference_layers.into_iter()) - { + for (edited_layer, reference_layer) in mutated_layers.into_iter().zip(reference_layers) { assert_eq!( edited_layer.node().to_sexp(), reference_layer.node().to_sexp(), diff --git a/crates/languages/src/python.rs b/crates/languages/src/python.rs index dd059313b6d..5cdff8654ff 100644 --- a/crates/languages/src/python.rs +++ b/crates/languages/src/python.rs @@ -895,7 +895,7 @@ impl ContextProvider for PythonContextProvider { Ok(task::TaskVariables::from_iter( test_target .into_iter() - .chain(module_target.into_iter()) + .chain(module_target) .chain([toolchain]), )) }) diff --git a/crates/multi_buffer/src/multi_buffer.rs b/crates/multi_buffer/src/multi_buffer.rs index 8b7b1002d96..de0a43bac91 100644 --- a/crates/multi_buffer/src/multi_buffer.rs +++ b/crates/multi_buffer/src/multi_buffer.rs @@ -3575,10 +3575,7 @@ impl MultiBufferSnapshot { continue 'anchors; }; cursor.seek_forward(path, Bias::Left); - 'excerpts: loop { - let Some(excerpt) = cursor.item() else { - break; - }; + 'excerpts: while let Some(excerpt) = cursor.item() { if excerpt.path_key != *path { break; } diff --git a/crates/multi_buffer/src/multi_buffer_tests.rs b/crates/multi_buffer/src/multi_buffer_tests.rs index a7f4b18cc42..2f4046b8601 100644 --- a/crates/multi_buffer/src/multi_buffer_tests.rs +++ b/crates/multi_buffer/src/multi_buffer_tests.rs @@ -2955,7 +2955,7 @@ impl ReferenceMultibuffer { }) .collect::>(); - new_ranges.sort_by(|l, r| l.context.start.cmp(&r.context.start)); + new_ranges.sort_by_key(|nr| nr.context.start); self.set_excerpts( path.unwrap(), @@ -3899,7 +3899,7 @@ fn mutate_excerpt_ranges( } existing_ranges.extend(ranges_to_add); - existing_ranges.sort_by(|l, r| l.start.cmp(&r.start)); + existing_ranges.sort_by_key(|r| r.start); } fn check_multibuffer( diff --git a/crates/multi_buffer/src/path_key.rs b/crates/multi_buffer/src/path_key.rs index 3af1d5be32c..a2fd1ae2646 100644 --- a/crates/multi_buffer/src/path_key.rs +++ b/crates/multi_buffer/src/path_key.rs @@ -311,7 +311,7 @@ impl MultiBuffer { cursor.next(); } - ranges.sort_by(|l, r| l.context.start.cmp(&r.context.start)); + ranges.sort_by_key(|r| r.context.start); self.set_excerpt_ranges_for_path(path.clone(), buffer, buffer_snapshot, ranges, cx); } diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index 13d1cd90f47..01aab2be7ac 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -2969,8 +2969,8 @@ impl LocalLspStore { .flat_map(|(worktree_id, servers)| { servers .roots - .iter() - .flat_map(|(_, language_servers)| language_servers) + .values() + .flatten() .map(move |(_, (server_node, server_languages))| { (worktree_id, server_node, server_languages) }) diff --git a/crates/project/tests/integration/project_tests.rs b/crates/project/tests/integration/project_tests.rs index 6997435eb2a..c512c893cc4 100644 --- a/crates/project/tests/integration/project_tests.rs +++ b/crates/project/tests/integration/project_tests.rs @@ -10520,7 +10520,7 @@ fn merge_pending_ops_snapshots( t_ops.ops.push(s_op); } } - t_ops.ops.sort_by(|l, r| l.id.cmp(&r.id)); + t_ops.ops.sort_by_key(|op| op.id); } else { target.push(s_ops); } diff --git a/crates/recent_projects/src/recent_projects.rs b/crates/recent_projects/src/recent_projects.rs index b8df94c0230..b93fa009fce 100644 --- a/crates/recent_projects/src/recent_projects.rs +++ b/crates/recent_projects/src/recent_projects.rs @@ -220,7 +220,7 @@ fn get_open_folders(workspace: &Workspace, cx: &App) -> Vec { }) .collect(); - entries.sort_by(|a, b| a.name.to_lowercase().cmp(&b.name.to_lowercase())); + entries.sort_by_key(|entry| entry.name.to_lowercase()); entries } diff --git a/crates/snippet_provider/src/lib.rs b/crates/snippet_provider/src/lib.rs index 7edacb9af68..e51205678b1 100644 --- a/crates/snippet_provider/src/lib.rs +++ b/crates/snippet_provider/src/lib.rs @@ -219,8 +219,8 @@ impl SnippetProvider { .get(language) .cloned() .unwrap_or_default() - .into_iter() - .flat_map(|(_, snippets)| snippets.into_iter()) + .into_values() + .flat_map(|snippets| snippets.into_iter()) .collect(); if LOOKUP_GLOBALS { if let Some(global_watcher) = cx.try_global::() { diff --git a/crates/terminal_view/src/persistence.rs b/crates/terminal_view/src/persistence.rs index 50b1e350fa9..5c1e659b0f3 100644 --- a/crates/terminal_view/src/persistence.rs +++ b/crates/terminal_view/src/persistence.rs @@ -147,14 +147,12 @@ fn populate_pane_items( window: &mut Window, cx: &mut Context, ) { - let mut item_index = pane.items_len(); let mut active_item_index = None; - for item in items { + for (item_index, item) in (pane.items_len()..).zip(items) { if Some(item.item_id().as_u64()) == active_item { active_item_index = Some(item_index); } pane.add_item(Box::new(item), false, false, None, window, cx); - item_index += 1; } if let Some(index) = active_item_index { pane.activate_item(index, false, false, window, cx); diff --git a/crates/vim/src/helix/surround.rs b/crates/vim/src/helix/surround.rs index a1aa7b21afe..976a27390b3 100644 --- a/crates/vim/src/helix/surround.rs +++ b/crates/vim/src/helix/surround.rs @@ -82,7 +82,7 @@ fn apply_helix_surround_edits( let selections = editor.selections.all_display(&display_map); let (mut edits, anchors) = build(&display_map, selections); - edits.sort_by(|a, b| b.0.start.cmp(&a.0.start)); + edits.sort_by_key(|edit| edit.0.start); editor.edit(edits, cx); editor.change_selections(Default::default(), window, cx, |s| { diff --git a/crates/vim/src/state.rs b/crates/vim/src/state.rs index 3bd4c0a5b80..3ca4d704c7c 100644 --- a/crates/vim/src/state.rs +++ b/crates/vim/src/state.rs @@ -1411,7 +1411,7 @@ impl RegistersView { }) } }); - matches.sort_by(|a, b| a.name.cmp(&b.name)); + matches.sort_by_key(|m| m.name); let delegate = RegistersViewDelegate { selected_index: 0, matches, diff --git a/crates/worktree/src/worktree.rs b/crates/worktree/src/worktree.rs index 3f58448d312..c34f358bc84 100644 --- a/crates/worktree/src/worktree.rs +++ b/crates/worktree/src/worktree.rs @@ -5019,7 +5019,7 @@ impl BackgroundScanner { } } - for (path, metadata) in relative_paths.iter().zip(metadata.into_iter()) { + for (path, metadata) in relative_paths.iter().zip(metadata) { let abs_path: Arc = root_abs_path.join(path.as_std_path()).into(); match metadata { Ok(Some((metadata, canonical_path))) => { diff --git a/crates/zeta_prompt/src/multi_region.rs b/crates/zeta_prompt/src/multi_region.rs index 5bd486df767..be416b513fa 100644 --- a/crates/zeta_prompt/src/multi_region.rs +++ b/crates/zeta_prompt/src/multi_region.rs @@ -611,11 +611,10 @@ fn map_boundary_offset( .saturating_sub(span_common_prefix) .saturating_sub(span_common_suffix); - if old_changed_len == 0 { - new_changed_start - } else { - new_changed_start + ((old_rel - old_changed_start) * new_changed_len / old_changed_len) - } + new_changed_start + + ((old_rel - old_changed_start) * new_changed_len) + .checked_div(old_changed_len) + .unwrap_or(new_changed_len) } } diff --git a/flake.lock b/flake.lock index c32629aedd5..7466ae52271 100644 --- a/flake.lock +++ b/flake.lock @@ -79,11 +79,11 @@ ] }, "locked": { - "lastModified": 1775013181, - "narHash": "sha256-zPrt6oNM1r/RO5bWYaZ3hthfG9vzkr6kQdoqDd5x4Qw=", + "lastModified": 1777346187, + "narHash": "sha256-oVxyGjpiIsrXhWTJVUOs38fZQkLjd0nZGOY9K7Kfot8=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "e8046c1d9ccadd497c2344d8fa49dab62f22f7be", + "rev": "146e7bf7569b8288f24d41d806b9f584f7cfd5b5", "type": "github" }, "original": { diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 15b4a8f0fc9..2dd2a0e6716 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "1.94.1" +channel = "1.95.0" profile = "minimal" components = [ "rustfmt", "clippy", "rust-analyzer", "rust-src" ] targets = [