Add option to exclude unique names from suggestion lists in JS files

Fixes #26595

**Problem**
TS includes all unique names in a file in the completion list for JavaScript files. This is often desirable, but may result in unexpected completions

**Fix**
Add a new option `javascript.nameSuggestions` to filter these suggestions out.
This commit is contained in:
Matt Bierner 2017-05-16 18:33:22 -07:00
parent 17004573e3
commit 4514ddd180
3 changed files with 21 additions and 4 deletions

View file

@ -307,6 +307,11 @@
"type": "boolean",
"default": false,
"description": "%javascript.implicitProjectConfig.checkJs%"
},
"javascript.nameSuggestions": {
"type": "boolean",
"default": true,
"description": "%javascript.nameSuggestions%"
}
}
},
@ -461,4 +466,4 @@
}
]
}
}
}

View file

@ -35,5 +35,6 @@
"typescript.selectTypeScriptVersion.title": "Select TypeScript Version",
"jsDocCompletion.enabled": "Enable/disable auto JSDoc comments",
"javascript.implicitProjectConfig.checkJs": "Enable/disable semantic checking of JavaScript files. Existing jsconfig.json or tsconfig.json files override this setting. Requires TypeScript >=2.3.1.",
"typescript.check.npmIsInstalled": "Check if NPM is installed for automatic typings acquisition"
"typescript.check.npmIsInstalled": "Check if NPM is installed for automatic typings acquisition",
"javascript.nameSuggestions": "Enable/disable including unique names from the file in JavaScript suggestion lists."
}

View file

@ -128,11 +128,13 @@ class MyCompletionItem extends CompletionItem {
}
interface Configuration {
useCodeSnippetsOnMethodSuggest?: boolean;
useCodeSnippetsOnMethodSuggest: boolean;
nameSuggestions: boolean;
}
namespace Configuration {
export const useCodeSnippetsOnMethodSuggest = 'useCodeSnippetsOnMethodSuggest';
export const nameSuggestions = 'nameSuggestions';
}
export default class TypeScriptCompletionItemProvider implements CompletionItemProvider {
@ -143,13 +145,19 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP
private client: ITypescriptServiceClient,
private typingsStatus: TypingsStatus
) {
this.config = { useCodeSnippetsOnMethodSuggest: false };
this.config = {
useCodeSnippetsOnMethodSuggest: false,
nameSuggestions: true
};
}
public updateConfiguration(): void {
// Use shared setting for js and ts
const typeScriptConfig = workspace.getConfiguration('typescript');
this.config.useCodeSnippetsOnMethodSuggest = typeScriptConfig.get(Configuration.useCodeSnippetsOnMethodSuggest, false);
const jsConfig = workspace.getConfiguration('javascript');
this.config.nameSuggestions = jsConfig.get(Configuration.nameSuggestions, true);
}
public provideCompletionItems(document: TextDocument, position: Position, token: CancellationToken): Promise<CompletionItem[]> {
@ -208,6 +216,9 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP
}
for (const element of body) {
if (element.kind === PConst.Kind.warning && !this.config.nameSuggestions) {
continue;
}
const item = new MyCompletionItem(position, document, element, enableDotCompletions, !this.config.useCodeSnippetsOnMethodSuggest);
completionItems.push(item);
}