Skip to content

Commit

Permalink
Support notebook completion doc strings in .ipynb files (#12089)
Browse files Browse the repository at this point in the history
* working completions, not cleaned up

* some cleanup done and news added

* remove news

* ts-lint confusion on import name

Co-authored-by: Ian Huff <ianhuff@alex-x230.northamerica.corp.microsoft.com>
  • Loading branch information
IanMatthewHuff and Ian Huff committed Jun 1, 2020
1 parent feb74dc commit 1a4acc7
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 7 deletions.
14 changes: 7 additions & 7 deletions src/client/activation/common/activatorBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,13 @@ export abstract class LanguageServerActivatorBase implements ILanguageServerActi
return languageServerFolderPath;
}

protected getLanguageClient(): vscodeLanguageClient.LanguageClient | undefined {
const proxy = this.manager.languageProxy;
if (proxy) {
return proxy.languageClient;
}
}

private get textDocumentSyncKind(): vscodeLanguageClient.TextDocumentSyncKind {
const languageClient = this.getLanguageClient();
if (languageClient?.initializeResult?.capabilities?.textDocumentSync) {
Expand All @@ -205,13 +212,6 @@ export abstract class LanguageServerActivatorBase implements ILanguageServerActi
return vscodeLanguageClient.TextDocumentSyncKind.Full;
}

private getLanguageClient(): vscodeLanguageClient.LanguageClient | undefined {
const proxy = this.manager.languageProxy;
if (proxy) {
return proxy.languageClient;
}
}

private async handleProvideRenameEdits(
document: TextDocument,
position: Position,
Expand Down
33 changes: 33 additions & 0 deletions src/client/activation/node/activator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
// Licensed under the MIT License.
import { inject, injectable } from 'inversify';

import { CancellationToken, CompletionItem, ProviderResult } from 'vscode';
import * as vscodeLanguageClient from 'vscode-languageclient';
// tslint:disable-next-line: import-name
import ProtocolCompletionItem from 'vscode-languageclient/lib/protocolCompletionItem';
import { IWorkspaceService } from '../../common/application/types';
import { traceDecorators } from '../../common/logger';
import { IFileSystem } from '../../common/platform/types';
Expand Down Expand Up @@ -34,4 +38,33 @@ export class NodeLanguageServerActivator extends LanguageServerActivatorBase {
public async ensureLanguageServerIsAvailable(resource: Resource): Promise<void> {
await this.ensureLanguageServerFileIsAvailable(resource, 'server.bundle.js');
}

public resolveCompletionItem(item: CompletionItem, token: CancellationToken): ProviderResult<CompletionItem> {
return this.handleResolveCompletionItem(item, token);
}

private async handleResolveCompletionItem(
item: CompletionItem,
token: CancellationToken
): Promise<CompletionItem | undefined> {
const languageClient = this.getLanguageClient();

if (languageClient) {
// Turn our item into a ProtocolCompletionItem before we convert it. This preserves the .data
// attribute that it has and is needed to match on the language server side.
const protoItem: ProtocolCompletionItem = new ProtocolCompletionItem(item.label);
Object.assign(protoItem, item);

const args = languageClient.code2ProtocolConverter.asCompletionItem(protoItem);
const result = await languageClient.sendRequest(
vscodeLanguageClient.CompletionResolveRequest.type,
args,
token
);

if (result) {
return languageClient.protocol2CodeConverter.asCompletionItem(result);
}
}
}
}

0 comments on commit 1a4acc7

Please sign in to comment.