diff --git a/extensions/typescript-language-features/src/features/completionItemProvider.ts b/extensions/typescript-language-features/src/features/completionItemProvider.ts index 2a83e062425a3aa6052edd97b3aca8bc8f1c6a78..8ffb91f056b2f0f5043de51aa971e66cd953ad98 100644 --- a/extensions/typescript-language-features/src/features/completionItemProvider.ts +++ b/extensions/typescript-language-features/src/features/completionItemProvider.ts @@ -244,7 +244,7 @@ namespace CompletionConfiguration { } } -export default class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider { +class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider { public static readonly triggerCharacters = ['.', '"', '\'', '/', '@', '<']; @@ -581,3 +581,16 @@ export default class TypeScriptCompletionItemProvider implements vscode.Completi return snippet; } } + + +export function register( + selector: vscode.DocumentSelector, + client: ITypeScriptServiceClient, + typingsStatus: TypingsStatus, + fileConfigurationManager: FileConfigurationManager, + commandManager: CommandManager, +) { + return vscode.languages.registerCompletionItemProvider(selector, + new TypeScriptCompletionItemProvider(client, typingsStatus, fileConfigurationManager, commandManager), + ...TypeScriptCompletionItemProvider.triggerCharacters); +} \ No newline at end of file diff --git a/extensions/typescript-language-features/src/features/directiveCommentCompletionProvider.ts b/extensions/typescript-language-features/src/features/directiveCommentCompletionProvider.ts index 928c5005ffa537d47fa80b166de58e4f61723363..6c6fb41b601a1c99fba1082147decd89757ff6ff 100644 --- a/extensions/typescript-language-features/src/features/directiveCommentCompletionProvider.ts +++ b/extensions/typescript-language-features/src/features/directiveCommentCompletionProvider.ts @@ -3,11 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Position, CompletionItemProvider, CompletionItemKind, TextDocument, CancellationToken, CompletionItem, Range } from 'vscode'; - +import * as vscode from 'vscode'; +import * as nls from 'vscode-nls'; import { ITypeScriptServiceClient } from '../typescriptService'; -import * as nls from 'vscode-nls'; const localize = nls.loadMessageBundle(); interface Directive { @@ -34,16 +33,16 @@ const directives: Directive[] = [ } ]; -export default class DirectiveCommentCompletionProvider implements CompletionItemProvider { +class DirectiveCommentCompletionProvider implements vscode.CompletionItemProvider { constructor( private readonly client: ITypeScriptServiceClient, ) { } public provideCompletionItems( - document: TextDocument, - position: Position, - _token: CancellationToken - ): CompletionItem[] { + document: vscode.TextDocument, + position: vscode.Position, + _token: vscode.CancellationToken + ): vscode.CompletionItem[] { if (!this.client.apiVersion.has230Features()) { return []; } @@ -58,9 +57,9 @@ export default class DirectiveCommentCompletionProvider implements CompletionIte const match = prefix.match(/^\s*\/\/+\s?(@[a-zA-Z\-]*)?$/); if (match) { return directives.map(directive => { - const item = new CompletionItem(directive.value, CompletionItemKind.Snippet); + const item = new vscode.CompletionItem(directive.value, vscode.CompletionItemKind.Snippet); item.detail = directive.description; - item.range = new Range(position.line, Math.max(0, position.character - (match[1] ? match[1].length : 0)), position.line, position.character); + item.range = new vscode.Range(position.line, Math.max(0, position.character - (match[1] ? match[1].length : 0)), position.line, position.character); return item; }); } @@ -68,9 +67,18 @@ export default class DirectiveCommentCompletionProvider implements CompletionIte } public resolveCompletionItem( - item: CompletionItem, - _token: CancellationToken + item: vscode.CompletionItem, + _token: vscode.CancellationToken ) { return item; } -} \ No newline at end of file +} + +export function register( + selector: vscode.DocumentSelector, + client: ITypeScriptServiceClient, +) { + return vscode.languages.registerCompletionItemProvider(selector, + new DirectiveCommentCompletionProvider(client), + '@'); +} diff --git a/extensions/typescript-language-features/src/languageProvider.ts b/extensions/typescript-language-features/src/languageProvider.ts index d4a21cae13e12e2d16ae3ad1ed15f6f4eeeb5b91..300d8931981840293622e4fd65586eefbf193126 100644 --- a/extensions/typescript-language-features/src/languageProvider.ts +++ b/extensions/typescript-language-features/src/languageProvider.ts @@ -104,13 +104,6 @@ export default class LanguageProvider { const selector = this.documentSelector; const config = vscode.workspace.getConfiguration(this.id); - const TypeScriptCompletionItemProvider = (await import('./features/completionItemProvider')).default; - this.disposables.push(vscode.languages.registerCompletionItemProvider(selector, - new TypeScriptCompletionItemProvider(client, typingsStatus, this.fileConfigurationManager, commandManager), - ...TypeScriptCompletionItemProvider.triggerCharacters)); - - this.disposables.push(vscode.languages.registerCompletionItemProvider(selector, new (await import('./features/directiveCommentCompletionProvider')).default(client), '@')); - const { TypeScriptFormattingProvider, FormattingProviderManager } = await import('./features/formattingProvider'); const formattingProvider = new TypeScriptFormattingProvider(client, this.fileConfigurationManager); formattingProvider.updateConfiguration(config); @@ -123,6 +116,8 @@ export default class LanguageProvider { const cachedResponse = new CachedNavTreeResponse(); + this.disposables.push((await import('./features/completionItemProvider')).register(selector, client, typingsStatus, this.fileConfigurationManager, commandManager)); + this.disposables.push((await import('./features/directiveCommentCompletionProvider')).register(selector, client)); this.disposables.push((await import('./features/jsDocCompletionProvider')).register(selector, client, commandManager)); this.disposables.push((await import('./features/hoverProvider')).register(selector, client)); this.disposables.push((await import('./features/definitionProvider')).register(selector, client));