diff --git a/server/src/completion.ts b/server/src/completion.ts index bee77bb19a..4c32b63184 100644 --- a/server/src/completion.ts +++ b/server/src/completion.ts @@ -106,8 +106,8 @@ function ngCompletionKindToLspCompletionItemKind(kind: CompletionKind): lsp.Comp * @param scriptInfo */ export function tsCompletionEntryToLspCompletionItem( - entry: ts.CompletionEntry, position: lsp.Position, scriptInfo: ts.server.ScriptInfo, - insertReplaceSupport: boolean): lsp.CompletionItem { + entry: ts.CompletionEntry, position: lsp.Position, + scriptInfo: ts.server.ScriptInfo): lsp.CompletionItem { const item = lsp.CompletionItem.create(entry.name); // Even though `entry.kind` is typed as ts.ScriptElementKind, it's // really Angular's CompletionKind. This is because ts.ScriptElementKind does @@ -121,7 +121,7 @@ export function tsCompletionEntryToLspCompletionItem( // from 'entry.name'. For example, a method name could be 'greet', but the // insertText is 'greet()'. const insertText = entry.insertText || entry.name; - item.textEdit = createTextEdit(scriptInfo, entry, position, insertText, insertReplaceSupport); + item.textEdit = createTextEdit(scriptInfo, entry, position, insertText); // If the user enables the config `includeAutomaticOptionalChainCompletions`, the `insertText` // range will include the dot. the `insertText` should be assigned to the `filterText` to filter @@ -141,18 +141,27 @@ export function tsCompletionEntryToLspCompletionItem( function createTextEdit( scriptInfo: ts.server.ScriptInfo, entry: ts.CompletionEntry, position: lsp.Position, - insertText: string, insertReplaceSupport: boolean) { + insertText: string) { if (entry.replacementSpan === undefined) { return lsp.TextEdit.insert(position, insertText); - } else if (insertReplaceSupport) { - const replacementRange = tsTextSpanToLspRange(scriptInfo, entry.replacementSpan); - const tsPosition = lspPositionToTsPosition(scriptInfo, position); - const insertLength = tsPosition - entry.replacementSpan.start; - const insertionRange = - tsTextSpanToLspRange(scriptInfo, {...entry.replacementSpan, length: insertLength}); - return lsp.InsertReplaceEdit.create(insertText, insertionRange, replacementRange); } else { + /** + * The Angular Language Service does not return `InsertReplaceEdit`. + * There is no need to allow the developer to choose how to insert the completion. + * + * For example, `