Only use isNewIdentifierLocation to disable commit characers instead of all suggestions

Fixes #54267
This commit is contained in:
Matt Bierner
2018-07-13 09:17:00 -07:00
parent b64ff63750
commit b179deefe5

View File

@@ -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(