mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-23 19:59:37 +00:00
Only use isNewIdentifierLocation to disable commit characers instead of all suggestions
Fixes #54267
This commit is contained in:
@@ -16,11 +16,15 @@ import * as typeConverters from '../utils/typeConverters';
|
||||
import TypingsStatus from '../utils/typingsStatus';
|
||||
import FileConfigurationManager from './fileConfigurationManager';
|
||||
|
||||
|
||||
|
||||
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
|
||||
interface CommitCharactersSettings {
|
||||
readonly enable: boolean;
|
||||
readonly enableDotCompletions: boolean;
|
||||
readonly enableCallCompletions: boolean;
|
||||
}
|
||||
|
||||
class MyCompletionItem extends vscode.CompletionItem {
|
||||
public readonly useCodeSnippet: boolean;
|
||||
|
||||
@@ -29,8 +33,8 @@ class MyCompletionItem extends vscode.CompletionItem {
|
||||
public readonly document: vscode.TextDocument,
|
||||
line: string,
|
||||
public readonly tsEntry: Proto.CompletionEntry,
|
||||
enableDotCompletions: boolean,
|
||||
useCodeSnippetsOnMethodSuggest: boolean
|
||||
useCodeSnippetsOnMethodSuggest: boolean,
|
||||
commitCharactersSettings: CommitCharactersSettings
|
||||
) {
|
||||
super(tsEntry.name);
|
||||
|
||||
@@ -49,7 +53,7 @@ class MyCompletionItem extends vscode.CompletionItem {
|
||||
|
||||
this.kind = MyCompletionItem.convertKind(tsEntry.kind);
|
||||
this.position = position;
|
||||
this.commitCharacters = MyCompletionItem.getCommitCharacters(enableDotCompletions, !useCodeSnippetsOnMethodSuggest, tsEntry.kind);
|
||||
this.commitCharacters = MyCompletionItem.getCommitCharacters(commitCharactersSettings, tsEntry.kind);
|
||||
this.useCodeSnippet = useCodeSnippetsOnMethodSuggest && (this.kind === vscode.CompletionItemKind.Function || this.kind === vscode.CompletionItemKind.Method);
|
||||
if (tsEntry.replacementSpan) {
|
||||
this.range = typeConverters.Range.fromTextSpan(tsEntry.replacementSpan);
|
||||
@@ -144,8 +148,7 @@ class MyCompletionItem extends vscode.CompletionItem {
|
||||
}
|
||||
|
||||
private static getCommitCharacters(
|
||||
enableDotCompletions: boolean,
|
||||
enableCallCompletions: boolean,
|
||||
settings: CommitCharactersSettings,
|
||||
kind: string
|
||||
): string[] | undefined {
|
||||
const commitCharacters: string[] = [];
|
||||
@@ -157,7 +160,7 @@ class MyCompletionItem extends vscode.CompletionItem {
|
||||
case PConst.Kind.indexSignature:
|
||||
case PConst.Kind.enum:
|
||||
case PConst.Kind.interface:
|
||||
if (enableDotCompletions) {
|
||||
if (settings.enableDotCompletions) {
|
||||
commitCharacters.push('.');
|
||||
}
|
||||
break;
|
||||
@@ -172,10 +175,10 @@ class MyCompletionItem extends vscode.CompletionItem {
|
||||
case PConst.Kind.class:
|
||||
case PConst.Kind.function:
|
||||
case PConst.Kind.memberFunction:
|
||||
if (enableDotCompletions) {
|
||||
if (settings.enableDotCompletions) {
|
||||
commitCharacters.push('.', ',');
|
||||
}
|
||||
if (enableCallCompletions) {
|
||||
if (settings.enableCallCompletions) {
|
||||
commitCharacters.push('(');
|
||||
}
|
||||
break;
|
||||
@@ -306,13 +309,16 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
|
||||
triggerCharacter: context.triggerCharacter as Proto.CompletionsTriggerCharacter
|
||||
};
|
||||
|
||||
|
||||
let enableCommitCharacters = true;
|
||||
let msg: ReadonlyArray<Proto.CompletionEntry> | undefined = undefined;
|
||||
try {
|
||||
if (this.client.apiVersion.gte(API.v300)) {
|
||||
const { body } = await this.client.execute('completionInfo', args, token);
|
||||
if (!body || body.isNewIdentifierLocation) {
|
||||
if (!body) {
|
||||
return null;
|
||||
}
|
||||
enableCommitCharacters = !body.isNewIdentifierLocation;
|
||||
msg = body.entries;
|
||||
} else {
|
||||
const { body } = await this.client.execute('completions', args, token);
|
||||
@@ -328,7 +334,11 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
|
||||
const enableDotCompletions = this.shouldEnableDotCompletions(document, position);
|
||||
return msg
|
||||
.filter(entry => !shouldExcludeCompletionEntry(entry, completionConfiguration))
|
||||
.map(entry => new MyCompletionItem(position, document, line.text, entry, enableDotCompletions, completionConfiguration.useCodeSnippetsOnMethodSuggest));
|
||||
.map(entry => new MyCompletionItem(position, document, line.text, entry, completionConfiguration.useCodeSnippetsOnMethodSuggest, {
|
||||
enable: enableCommitCharacters,
|
||||
enableDotCompletions,
|
||||
enableCallCompletions: !completionConfiguration.useCodeSnippetsOnMethodSuggest
|
||||
}));
|
||||
}
|
||||
|
||||
public async resolveCompletionItem(
|
||||
|
||||
Reference in New Issue
Block a user