Skip to content

Commit fc6455f

Browse files
committed
fix(completion): add TextEdit for fix #79
1 parent 91d56d7 commit fc6455f

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

src/providers/completion.ts

+20-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
import { CompletionList, CompletionItemKind, Files, CompletionItem } from 'vscode-languageserver';
3+
import { CompletionList, CompletionItemKind, Files, CompletionItem, TextEdit, Range } from 'vscode-languageserver';
44
import { TextDocument } from 'vscode-languageserver-textdocument';
55

66
import { IMixin, ISymbols } from '../types/symbols';
@@ -266,5 +266,24 @@ export async function doCompletion(
266266
completions.items = completions.items.concat(functions);
267267
}
268268

269+
completions.items = completions.items.map(el => {
270+
const word = getTextBeforePosition(document.getText(), offset);
271+
const insertText = el.insertText ?? el.label;
272+
const startDistance = (() => {
273+
let i = 0;
274+
let temp = insertText.slice(0, insertText.length - i);
275+
while (!word.endsWith(temp)) {
276+
temp = insertText.slice(0, insertText.length - ++i);
277+
}
278+
return insertText.length - i;
279+
})();
280+
el.textEdit = TextEdit.replace(
281+
Range.create(document.positionAt(offset - startDistance), document.positionAt(offset)),
282+
insertText
283+
);
284+
285+
return el;
286+
});
287+
269288
return completions;
270289
}

0 commit comments

Comments
 (0)