Skip to content

Commit 1aeec93

Browse files
committed
Only use snippet_text_edit to make snippet SnippetTextEdits
The eventual LSP representation looks like it will diverge from RA's representation of `SnippetTextEdit`s, so this'll make it easier to transition to the LSP representation later.
1 parent e4a3cc3 commit 1aeec93

File tree

1 file changed

+21
-30
lines changed

1 file changed

+21
-30
lines changed

crates/rust-analyzer/src/lsp/to_proto.rs

+21-30
Original file line numberDiff line numberDiff line change
@@ -971,15 +971,11 @@ fn merge_text_and_snippet_edits(
971971
snippet_range
972972
};
973973

974-
let range = range(line_index, snippet_range);
975-
let new_text = format!("${snippet_index}");
976-
977-
edits.push(SnippetTextEdit {
978-
range,
979-
new_text,
980-
insert_text_format: Some(lsp_types::InsertTextFormat::SNIPPET),
981-
annotation_id: None,
982-
})
974+
edits.push(snippet_text_edit(
975+
line_index,
976+
true,
977+
Indel { insert: format!("${snippet_index}"), delete: snippet_range },
978+
))
983979
}
984980

985981
if snippets.peek().is_some_and(|(_, range)| {
@@ -1002,31 +998,30 @@ fn merge_text_and_snippet_edits(
1002998
)
1003999
});
10041000

1005-
let mut text_edit = text_edit(line_index, current_indel);
1001+
let mut new_text = current_indel.insert;
10061002

10071003
// escape out snippet text
1008-
stdx::replace(&mut text_edit.new_text, '\\', r"\\");
1009-
stdx::replace(&mut text_edit.new_text, '$', r"\$");
1004+
stdx::replace(&mut new_text, '\\', r"\\");
1005+
stdx::replace(&mut new_text, '$', r"\$");
10101006

10111007
// ...and apply!
10121008
for (index, range) in all_snippets.iter().rev() {
10131009
let start = (range.start() - new_range.start()).into();
10141010
let end = (range.end() - new_range.start()).into();
10151011

10161012
if range.is_empty() {
1017-
text_edit.new_text.insert_str(start, &format!("${index}"));
1013+
new_text.insert_str(start, &format!("${index}"));
10181014
} else {
1019-
text_edit.new_text.insert(end, '}');
1020-
text_edit.new_text.insert_str(start, &format!("${{{index}:"));
1015+
new_text.insert(end, '}');
1016+
new_text.insert_str(start, &format!("${{{index}:"));
10211017
}
10221018
}
10231019

1024-
edits.push(SnippetTextEdit {
1025-
range: text_edit.range,
1026-
new_text: text_edit.new_text,
1027-
insert_text_format: Some(lsp_types::InsertTextFormat::SNIPPET),
1028-
annotation_id: None,
1029-
})
1020+
edits.push(snippet_text_edit(
1021+
line_index,
1022+
true,
1023+
Indel { insert: new_text, delete: current_indel.delete },
1024+
))
10301025
} else {
10311026
// snippet edit was beyond the current one
10321027
// since it wasn't consumed, it's available for the next pass
@@ -1052,15 +1047,11 @@ fn merge_text_and_snippet_edits(
10521047
snippet_range
10531048
};
10541049

1055-
let range = range(line_index, snippet_range);
1056-
let new_text = format!("${snippet_index}");
1057-
1058-
SnippetTextEdit {
1059-
range,
1060-
new_text,
1061-
insert_text_format: Some(lsp_types::InsertTextFormat::SNIPPET),
1062-
annotation_id: None,
1063-
}
1050+
snippet_text_edit(
1051+
line_index,
1052+
true,
1053+
Indel { insert: format!("${snippet_index}"), delete: snippet_range },
1054+
)
10641055
}));
10651056

10661057
edits

0 commit comments

Comments
 (0)