Skip to content

Commit a1877df

Browse files
committed
Passthrough is_snippet for non-structured snippets
Structured snippets precisely track which text edits need to be marked as snippet text edits, but the cases where structured snippets aren't used but snippets are still present are for simple single text-edit changes, so it's perfectly fine to mark all one of them as being a snippet text edit
1 parent a3a02d0 commit a1877df

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

crates/rust-analyzer/src/to_proto.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -887,12 +887,8 @@ fn outside_workspace_annotation_id() -> String {
887887
fn merge_text_and_snippet_edits(
888888
line_index: &LineIndex,
889889
edit: TextEdit,
890-
snippet_edit: Option<SnippetEdit>,
890+
snippet_edit: SnippetEdit,
891891
) -> Vec<SnippetTextEdit> {
892-
let Some(snippet_edit) = snippet_edit else {
893-
return edit.into_iter().map(|it| snippet_text_edit(&line_index, false, it)).collect();
894-
};
895-
896892
let mut edits: Vec<SnippetTextEdit> = vec![];
897893
let mut snippets = snippet_edit.into_edit_ranges().into_iter().peekable();
898894
let mut text_edits = edit.into_iter();
@@ -1009,13 +1005,18 @@ fn merge_text_and_snippet_edits(
10091005

10101006
pub(crate) fn snippet_text_document_edit(
10111007
snap: &GlobalStateSnapshot,
1008+
is_snippet: bool,
10121009
file_id: FileId,
10131010
edit: TextEdit,
10141011
snippet_edit: Option<SnippetEdit>,
10151012
) -> Cancellable<lsp_ext::SnippetTextDocumentEdit> {
10161013
let text_document = optional_versioned_text_document_identifier(snap, file_id);
10171014
let line_index = snap.file_line_index(file_id)?;
1018-
let mut edits = merge_text_and_snippet_edits(&line_index, edit, snippet_edit);
1015+
let mut edits = if let Some(snippet_edit) = snippet_edit {
1016+
merge_text_and_snippet_edits(&line_index, edit, snippet_edit)
1017+
} else {
1018+
edit.into_iter().map(|it| snippet_text_edit(&line_index, is_snippet, it)).collect()
1019+
};
10191020

10201021
if snap.analysis.is_library_file(file_id)? && snap.config.change_annotation_support() {
10211022
for edit in &mut edits {
@@ -1098,9 +1099,10 @@ pub(crate) fn snippet_workspace_edit(
10981099
for (file_id, (edit, snippet_edit)) in source_change.source_file_edits {
10991100
let edit = snippet_text_document_edit(
11001101
snap,
1102+
source_change.is_snippet,
11011103
file_id,
11021104
edit,
1103-
snippet_edit.filter(|_| source_change.is_snippet),
1105+
snippet_edit,
11041106
)?;
11051107
document_changes.push(lsp_ext::SnippetDocumentChangeOperation::Edit(edit));
11061108
}

0 commit comments

Comments
 (0)