Skip to content

Commit 3ceb10b

Browse files
committed
Support TextEdit in completion responses
This is the vscode side of OmniSharp/omnisharp-roslyn#1941. This is written in such a fashion as to be mergeable now, as it will fall back to InsertText if TextEdit is not present in the completion response. After some appropriate period of time, we can remove the InsertText component.
1 parent 797eecc commit 3ceb10b

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

src/features/completionProvider.ts

+13-6
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,26 @@ export default class OmnisharpCompletionProvider extends AbstractProvider implem
6060
}
6161

6262
private _convertToVscodeCompletionItem(omnisharpCompletion: protocol.OmnisharpCompletionItem): CompletionItem {
63-
let docs: MarkdownString | undefined = omnisharpCompletion.Documentation ? new MarkdownString(omnisharpCompletion.Documentation, false) : undefined;
63+
const docs: MarkdownString | undefined = omnisharpCompletion.Documentation ? new MarkdownString(omnisharpCompletion.Documentation, false) : undefined;
6464

65-
const mapTextEdit = function (edit: protocol.LinePositionSpanTextChange): TextEdit {
65+
const mapRange = function (edit: protocol.LinePositionSpanTextChange): Range {
6666
const newStart = new Position(edit.StartLine - 1, edit.StartColumn - 1);
6767
const newEnd = new Position(edit.EndLine - 1, edit.EndColumn - 1);
68-
const newRange = new Range(newStart, newEnd);
69-
return new TextEdit(newRange, edit.NewText);
68+
return new Range(newStart, newEnd);
69+
};
70+
71+
const mapTextEdit = function (edit: protocol.LinePositionSpanTextChange): TextEdit {
72+
return new TextEdit(mapRange(edit), edit.NewText);
7073
};
7174

7275
const additionalTextEdits = omnisharpCompletion.AdditionalTextEdits?.map(mapTextEdit);
7376

77+
const newText = omnisharpCompletion.TextEdit?.NewText ?? omnisharpCompletion.InsertText;
7478
const insertText = omnisharpCompletion.InsertTextFormat === InsertTextFormat.Snippet
75-
? new SnippetString(omnisharpCompletion.InsertText)
76-
: omnisharpCompletion.InsertText;
79+
? new SnippetString(newText)
80+
: newText;
81+
82+
const insertRange = omnisharpCompletion.TextEdit ? mapRange(omnisharpCompletion.TextEdit) : undefined;
7783

7884
return {
7985
label: omnisharpCompletion.Label,
@@ -84,6 +90,7 @@ export default class OmnisharpCompletionProvider extends AbstractProvider implem
8490
preselect: omnisharpCompletion.Preselect,
8591
filterText: omnisharpCompletion.FilterText,
8692
insertText: insertText,
93+
range: insertRange,
8794
tags: omnisharpCompletion.Tags,
8895
sortText: omnisharpCompletion.SortText,
8996
additionalTextEdits: additionalTextEdits,

src/omnisharp/protocol.ts

+1
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,7 @@ export interface OmnisharpCompletionItem {
523523
FilterText?: string;
524524
InsertText?: string;
525525
InsertTextFormat?: InsertTextFormat;
526+
TextEdit?: LinePositionSpanTextChange;
526527
CommitCharacters?: string[];
527528
AdditionalTextEdits?: LinePositionSpanTextChange[];
528529
Data: any;

0 commit comments

Comments
 (0)