in server/src/session.ts [1015:1046]
private onCompletion(params: lsp.CompletionParams): lsp.CompletionItem[]|null {
const lsInfo = this.getLSAndScriptInfo(params.textDocument);
if (lsInfo === null) {
return null;
}
const {languageService, scriptInfo} = lsInfo;
const offset = lspPositionToTsPosition(scriptInfo, params.position);
let options: ts.GetCompletionsAtPositionOptions = {};
const includeCompletionsWithSnippetText =
this.includeCompletionsWithSnippetText && this.snippetSupport;
if (this.includeAutomaticOptionalChainCompletions || includeCompletionsWithSnippetText) {
options = {
includeAutomaticOptionalChainCompletions: this.includeAutomaticOptionalChainCompletions,
includeCompletionsWithSnippetText: includeCompletionsWithSnippetText,
includeCompletionsWithInsertText:
this.includeAutomaticOptionalChainCompletions || includeCompletionsWithSnippetText,
};
}
const completions =
languageService.getCompletionsAtPosition(scriptInfo.fileName, offset, options);
if (!completions) {
return null;
}
const clientSupportsInsertReplaceCompletion =
this.clientCapabilities.textDocument?.completion?.completionItem?.insertReplaceSupport ??
false;
return completions.entries.map(
(e) => tsCompletionEntryToLspCompletionItem(
e, params.position, scriptInfo, clientSupportsInsertReplaceCompletion, this.ivy));
}