private onCompletion()

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));
  }