Skip to content

Commit 93a2e2c

Browse files
committed
Fixing snippets in new LSP completion
We need to set insertTextFormat in the LSP completion items to Snippet when appropriate otherwise snippets get treated as plain text, resulting in things like <h1 style='$1' getting inserted
1 parent 82b097e commit 93a2e2c

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

src/razor/src/completion/completionHandler.ts

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
CompletionParams,
1111
CompletionTriggerKind,
1212
InsertReplaceEdit,
13+
InsertTextFormat,
1314
InsertTextMode,
1415
MarkupContent,
1516
Position,
@@ -344,6 +345,7 @@ export class CompletionHandler {
344345
documentation: CompletionHandler.toMarkupContent(completionItem.documentation),
345346
filterText: completionItem.filterText,
346347
insertText: CompletionHandler.toLspInsertText(completionItem.insertText),
348+
insertTextFormat: CompletionHandler.toLspInsertTextFormat(completionItem.insertText),
347349
insertTextMode: CompletionHandler.toInsertTextMode(completionItem.keepWhitespace),
348350
kind: completionItem.kind ? completionItem.kind + 1 : completionItem.kind, // VSCode and LSP are off by one
349351
label: CompletionHandler.toLspCompletionItemLabel(completionItem.label),
@@ -390,6 +392,19 @@ export class CompletionHandler {
390392
return snippetString?.value ?? <string | undefined>insertText;
391393
}
392394

395+
private static toLspInsertTextFormat(insertText?: string | vscode.SnippetString): InsertTextFormat {
396+
return insertText instanceof vscode.SnippetString ? InsertTextFormat.Snippet : InsertTextFormat.PlainText;
397+
}
398+
399+
private static toInsertTextMode(keepWhitespace?: boolean): InsertTextMode | undefined {
400+
if (keepWhitespace === undefined) {
401+
return undefined;
402+
}
403+
404+
const insertTextMode: InsertTextMode = keepWhitespace ? InsertTextMode.asIs : InsertTextMode.adjustIndentation;
405+
return insertTextMode;
406+
}
407+
393408
private static toLspTextEdit(
394409
newText?: string,
395410
range?: vscode.Range | { inserting: vscode.Range; replacing: vscode.Range }
@@ -448,13 +463,4 @@ export class CompletionHandler {
448463

449464
return lspPosition;
450465
}
451-
452-
private static toInsertTextMode(keepWhitespace?: boolean): InsertTextMode | undefined {
453-
if (keepWhitespace === undefined) {
454-
return undefined;
455-
}
456-
457-
const insertTextMode: InsertTextMode = keepWhitespace ? InsertTextMode.asIs : InsertTextMode.adjustIndentation;
458-
return insertTextMode;
459-
}
460466
}

0 commit comments

Comments
 (0)