about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorDropDemBits <r3usrlnd@gmail.com>2024-09-02 20:45:57 -0400
committerDropDemBits <r3usrlnd@gmail.com>2024-09-02 20:45:57 -0400
commitf08299f9f8014ed9fb0f13f76afaebdb7cb9d2ab (patch)
tree8ffba49c8051762a838b1699a8e2e881f089279f /src
parent8104457a1197353f1ed276117a4603076f26e42f (diff)
downloadrust-f08299f9f8014ed9fb0f13f76afaebdb7cb9d2ab.tar.gz
rust-f08299f9f8014ed9fb0f13f76afaebdb7cb9d2ab.zip
fix insert ranges not being excluded from disjointness
Diffstat (limited to 'src')
-rw-r--r--src/tools/rust-analyzer/crates/syntax/src/syntax_editor/edit_algo.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/tools/rust-analyzer/crates/syntax/src/syntax_editor/edit_algo.rs b/src/tools/rust-analyzer/crates/syntax/src/syntax_editor/edit_algo.rs
index 4f0b30ed6ad..4d6cb01c01c 100644
--- a/src/tools/rust-analyzer/crates/syntax/src/syntax_editor/edit_algo.rs
+++ b/src/tools/rust-analyzer/crates/syntax/src/syntax_editor/edit_algo.rs
@@ -1,10 +1,10 @@
 use std::{collections::VecDeque, ops::RangeInclusive};
 
 use rowan::TextRange;
-use rustc_hash::{FxHashMap, FxHashSet};
+use rustc_hash::FxHashMap;
 
 use crate::{
-    syntax_editor::{mapping::MissingMapping, Change, ChangeKind, Position, PositionRepr},
+    syntax_editor::{mapping::MissingMapping, Change, ChangeKind, PositionRepr},
     SyntaxElement, SyntaxNode, SyntaxNodePtr,
 };
 
@@ -41,12 +41,17 @@ pub(super) fn apply_edits(editor: SyntaxEditor) -> SyntaxEdit {
             .then(a.change_kind().cmp(&b.change_kind()))
     });
 
-    let disjoint_replaces_ranges = changes.iter().zip(changes.iter().skip(1)).all(|(l, r)| {
-        l.change_kind() == ChangeKind::Replace
-            && r.change_kind() == ChangeKind::Replace
-            && (l.target_parent() != r.target_parent()
+    let disjoint_replaces_ranges = changes
+        .iter()
+        .zip(changes.iter().skip(1))
+        .filter(|(l, r)| {
+            // We only care about checking for disjoint replace ranges
+            l.change_kind() == ChangeKind::Replace && r.change_kind() == ChangeKind::Replace
+        })
+        .all(|(l, r)| {
+            (l.target_parent() != r.target_parent()
                 || l.target_range().intersect(r.target_range()).is_none())
-    });
+        });
 
     if stdx::never!(
         !disjoint_replaces_ranges,