提交 ffb8d045 编写于 作者: M Matt Bierner

Add support for TS trigger characters

Fixes #25034
上级 eab96df4
......@@ -242,6 +242,9 @@ namespace CompletionConfiguration {
}
export default class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider {
public static readonly triggerCharacters = ['.', '"', '\'', '/', '@'];
constructor(
private readonly client: ITypeScriptServiceClient,
private readonly typingsStatus: TypingsStatus,
......@@ -279,10 +282,11 @@ export default class TypeScriptCompletionItemProvider implements vscode.Completi
return [];
}
const args: Proto.CompletionsRequestArgs = {
const args: Proto.CompletionsRequestArgs & { triggerCharacter?: string } = {
...typeConverters.Position.toFileLocationRequestArgs(file, position),
includeExternalModuleExports: completionConfiguration.autoImportSuggestions,
includeInsertTextCompletions: true
includeInsertTextCompletions: true,
triggerCharacter: context.triggerCharacter
};
let msg: Proto.CompletionEntry[] | undefined = undefined;
......@@ -437,7 +441,7 @@ export default class TypeScriptCompletionItemProvider implements vscode.Completi
line: vscode.TextLine,
position: vscode.Position
): boolean {
if (context.triggerCharacter === '"' || context.triggerCharacter === '\'') {
if ((context.triggerCharacter === '"' || context.triggerCharacter === '\'') && !this.client.apiVersion.has290Features()) {
if (!config.quickSuggestionsForPaths) {
return false;
}
......
......@@ -92,9 +92,10 @@ export default class LanguageProvider {
const selector = this.documentSelector;
const config = workspace.getConfiguration(this.id);
const TypeScriptCompletionItemProvider = (await import('./features/completionItemProvider')).default;
this.disposables.push(languages.registerCompletionItemProvider(selector,
new (await import('./features/completionItemProvider')).default(client, typingsStatus, commandManager),
'.', '"', '\'', '/', '@'));
new TypeScriptCompletionItemProvider(client, typingsStatus, commandManager),
...TypeScriptCompletionItemProvider.triggerCharacters));
this.disposables.push(languages.registerCompletionItemProvider(selector, new (await import('./features/directiveCommentCompletionProvider')).default(client), '@'));
......
......@@ -101,4 +101,9 @@ export default class API {
public has280Features(): boolean {
return semver.gte(this.version, '2.8.0');
}
@memoize
public has290Features(): boolean {
return semver.gte(this.version, '2.9.0');
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册