MCPcopy
hub / github.com/microsoft/vscode-languageserver-node / CompletionItemFeature

Class CompletionItemFeature

client/src/client.ts:1291–1353  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1289}
1290
1291class CompletionItemFeature extends TextDocumentFeature<CompletionRegistrationOptions> {
1292
1293 constructor(client: BaseLanguageClient) {
1294 super(client, CompletionRequest.type);
1295 }
1296
1297 public fillClientCapabilities(capabilites: ClientCapabilities): void {
1298 let completion = ensure(ensure(capabilites, 'textDocument')!, 'completion')!;
1299 completion.dynamicRegistration = true;
1300 completion.contextSupport = true;
1301 completion.completionItem = { snippetSupport: true, commitCharactersSupport: true, documentationFormat: [MarkupKind.Markdown, MarkupKind.PlainText] };
1302 completion.completionItemKind = { valueSet: SupportedCompletionItemKinds };
1303 }
1304
1305 public initialize(capabilities: ServerCapabilities, documentSelector: DocumentSelector): void {
1306 if (!capabilities.completionProvider || !documentSelector) {
1307 return;
1308 }
1309 this.register(this.messages, {
1310 id: UUID.generateUuid(),
1311 registerOptions: Object.assign({}, { documentSelector: documentSelector }, capabilities.completionProvider)
1312 });
1313 }
1314
1315 protected registerLanguageProvider(options: CompletionRegistrationOptions): Disposable {
1316 let triggerCharacters = options.triggerCharacters || [];
1317 let client = this._client;
1318 let provideCompletionItems: ProvideCompletionItemsSignature = (document, position, context, token) => {
1319 return client.sendRequest(CompletionRequest.type, client.code2ProtocolConverter.asCompletionParams(document, position, context), token).then(
1320 client.protocol2CodeConverter.asCompletionResult,
1321 (error) => {
1322 client.logFailedRequest(CompletionRequest.type, error);
1323 return Promise.resolve([]);
1324 }
1325 );
1326 };
1327 let resolveCompletionItem: ResolveCompletionItemSignature = (item, token) => {
1328 return client.sendRequest(CompletionResolveRequest.type, client.code2ProtocolConverter.asCompletionItem(item), token).then(
1329 client.protocol2CodeConverter.asCompletionItem,
1330 (error) => {
1331 client.logFailedRequest(CompletionResolveRequest.type, error);
1332 return Promise.resolve(item);
1333 }
1334 );
1335 };
1336
1337 let middleware = this._client.clientOptions.middleware!;
1338 return Languages.registerCompletionItemProvider(options.documentSelector!, {
1339 provideCompletionItems: (document: TextDocument, position: VPosition, token: CancellationToken, context: VCompletionContext): ProviderResult<VCompletionList | VCompletionItem[]> => {
1340 return middleware.provideCompletionItem
1341 ? middleware.provideCompletionItem(document, position, context, token, provideCompletionItems)
1342 : provideCompletionItems(document, position, context, token);
1343 },
1344 resolveCompletionItem: options.resolveProvider
1345 ? (item: VCompletionItem, token: CancellationToken): ProviderResult<VCompletionItem> => {
1346 return middleware.resolveCompletionItem
1347 ? middleware.resolveCompletionItem(item, token, resolveCompletionItem)
1348 : resolveCompletionItem(item, token);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected