diff --git a/extensions/typescript/src/features/completionItemProvider.ts b/extensions/typescript/src/features/completionItemProvider.ts index 4b48085f3a6c9bc3fa2f5c9ac6e2c213132968db..65a725816fae11e2f6267ebfc11a3f727d936fb9 100644 --- a/extensions/typescript/src/features/completionItemProvider.ts +++ b/extensions/typescript/src/features/completionItemProvider.ts @@ -34,10 +34,12 @@ class MyCompletionItem extends CompletionItem { // We convert to 0-based indexing. this.textEdit = TextEdit.replace(new Range(span.start.line - 1, span.start.offset - 1, span.end.line - 1, span.end.offset - 1), entry.name); } else { + // Try getting longer, prefix based range for completions that span words + const wordRange = document.getWordRangeAtPosition(position); const text = document.getText(new Range(position.line, Math.max(0, position.character - entry.name.length), position.line, position.character)).toLowerCase(); const entryName = entry.name.toLowerCase(); for (let i = entryName.length; i >= 0; --i) { - if (text.endsWith(entryName.substr(0, i))) { + if (text.endsWith(entryName.substr(0, i)) && (!wordRange || wordRange.start.character > position.character - i)) { this.range = new Range(position.line, Math.max(0, position.character - i), position.line, position.character); break; }