Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- N/A
This commit is contained in:
Yara 🏳️‍⚧️ 2026-04-29 12:27:47 +02:00 committed by GitHub
parent 2985e058c3
commit 320888142f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
35 changed files with 72 additions and 90 deletions

View file

@ -1 +0,0 @@
words = ["breakpoint"]

View file

@ -162,7 +162,7 @@ fn migrate_thread_metadata(cx: &mut App) -> Task<anyhow::Result<()>> {
.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!(

View file

@ -103,7 +103,7 @@ impl JsDebugAdapter {
if let Some(env) = configuration.get("env").cloned()
&& let Ok(env) = serde_json::from_value::<HashMap<String, String>>(env)
{
envs.extend(env.into_iter());
envs.extend(env);
}
configuration

View file

@ -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::<Vec<_>>();
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!(

View file

@ -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;

View file

@ -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| {

View file

@ -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| {

View file

@ -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

View file

@ -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()

View file

@ -168,7 +168,7 @@ fn get_all_languages(extension_map: &HashMap<String, String>) -> 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<String, String>) -> 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<String, String>) -> 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);
}

View file

@ -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

View file

@ -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 {

View file

@ -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 {

View file

@ -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::<DisplayRow, LineHighlight>::new(),
|mut unique_rows, highlight| {

View file

@ -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()

View file

@ -612,10 +612,7 @@ impl Matches {
// We build a sorted Vec<Match>, 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) => {

View file

@ -29,7 +29,7 @@ impl Blame {
) -> Result<Self> {
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();

View file

@ -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.

View file

@ -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();

View file

@ -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(),

View file

@ -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]),
))
})

View file

@ -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;
}

View file

@ -2955,7 +2955,7 @@ impl ReferenceMultibuffer {
})
.collect::<Vec<_>>();
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(

View file

@ -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);
}

View file

@ -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)
})

View file

@ -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);
}

View file

@ -220,7 +220,7 @@ fn get_open_folders(workspace: &Workspace, cx: &App) -> Vec<OpenFolderEntry> {
})
.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
}

View file

@ -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::<GlobalSnippetWatcher>() {

View file

@ -147,14 +147,12 @@ fn populate_pane_items(
window: &mut Window,
cx: &mut Context<Pane>,
) {
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);

View file

@ -82,7 +82,7 @@ fn apply_helix_surround_edits<F>(
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| {

View file

@ -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,

View file

@ -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<Path> = root_abs_path.join(path.as_std_path()).into();
match metadata {
Ok(Some((metadata, canonical_path))) => {

View file

@ -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)
}
}

View file

@ -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": {

View file

@ -1,5 +1,5 @@
[toolchain]
channel = "1.94.1"
channel = "1.95.0"
profile = "minimal"
components = [ "rustfmt", "clippy", "rust-analyzer", "rust-src" ]
targets = [