| 1289 | } |
| 1290 | |
| 1291 | class 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); |
nothing calls this directly
no outgoing calls
no test coverage detected