提交 7fadce43 编写于 作者: M Matt Bierner

Move completion providers to use register method

上级 75a64cf2
......@@ -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
......@@ -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),
'@');
}
......@@ -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));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册