From 73635a9cd341fd1b65ccd1003562387f1a76ab58 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 13 Oct 2017 15:35:54 -0700 Subject: [PATCH] Add option to disable quick suggestions for js/ts paths Fixes #35877 --- extensions/typescript/package.json | 8 ++++- extensions/typescript/package.nls.json | 3 +- .../src/features/completionItemProvider.ts | 30 ++++++++++++------- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/extensions/typescript/package.json b/extensions/typescript/package.json index ad4545f9355..3062949aad7 100644 --- a/extensions/typescript/package.json +++ b/extensions/typescript/package.json @@ -393,6 +393,12 @@ ], "description": "%typescript.tsc.autoDetect%", "scope": "resource" + }, + "typescript.quickSuggestionsForPaths": { + "type": "boolean", + "default": true, + "description": "%typescript.quickSuggestionsForPaths%", + "scope": "resource" } } }, @@ -571,4 +577,4 @@ } ] } -} +} \ No newline at end of file diff --git a/extensions/typescript/package.nls.json b/extensions/typescript/package.nls.json index f23e78bf4e1..39725205f50 100644 --- a/extensions/typescript/package.nls.json +++ b/extensions/typescript/package.nls.json @@ -41,5 +41,6 @@ "javascript.nameSuggestions": "Enable/disable including unique names from the file in JavaScript suggestion lists.", "typescript.tsc.autoDetect": "Controls auto detection of tsc tasks. 'off' disables this feature. 'build' only creates single run compile tasks. 'watch' only creates compile and watch tasks. 'on' creates both build and watch tasks. Default is 'on'.", "typescript.problemMatchers.tsc.label": "TypeScript problems", - "typescript.problemMatchers.tscWatch.label": "TypeScript problems (watch mode)" + "typescript.problemMatchers.tscWatch.label": "TypeScript problems (watch mode)", + "typescript.quickSuggestionsForPaths": "Enable/disable quick suggestions when typing out an import path." } diff --git a/extensions/typescript/src/features/completionItemProvider.ts b/extensions/typescript/src/features/completionItemProvider.ts index 77fe1015a32..f4e46e19cee 100644 --- a/extensions/typescript/src/features/completionItemProvider.ts +++ b/extensions/typescript/src/features/completionItemProvider.ts @@ -122,34 +122,36 @@ class MyCompletionItem extends CompletionItem { interface Configuration { useCodeSnippetsOnMethodSuggest: boolean; nameSuggestions: boolean; + quickSuggestionsForPaths: boolean; } namespace Configuration { export const useCodeSnippetsOnMethodSuggest = 'useCodeSnippetsOnMethodSuggest'; export const nameSuggestions = 'nameSuggestions'; + export const quickSuggestionsForPaths = 'quickSuggestionsForPaths'; } export default class TypeScriptCompletionItemProvider implements CompletionItemProvider { - private config: Configuration; + private config: Configuration = { + useCodeSnippetsOnMethodSuggest: false, + nameSuggestions: true, + quickSuggestionsForPaths: true + }; constructor( private client: ITypescriptServiceClient, private typingsStatus: TypingsStatus - ) { - 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); + this.config.useCodeSnippetsOnMethodSuggest = typeScriptConfig.get(Configuration.useCodeSnippetsOnMethodSuggest, false); + this.config.quickSuggestionsForPaths = typeScriptConfig.get(Configuration.quickSuggestionsForPaths, true); + + this.config.nameSuggestions = workspace.getConfiguration('javascript').get(Configuration.nameSuggestions, true); } public provideCompletionItems( @@ -175,6 +177,10 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP } if (context.triggerCharacter === '"' || context.triggerCharacter === '\'') { + if (!this.config.quickSuggestionsForPaths) { + return Promise.resolve([]); + } + // make sure we are in something that looks like the start of an import const line = document.lineAt(position.line).text.slice(0, position.character); if (!line.match(/\b(from|import)\s*["']$/) && !line.match(/\b(import|require)\(['"]$/)) { @@ -183,6 +189,10 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP } if (context.triggerCharacter === '/') { + if (!this.config.quickSuggestionsForPaths) { + return Promise.resolve([]); + } + // make sure we are in something that looks like an import path const line = document.lineAt(position.line).text.slice(0, position.character); if (!line.match(/\bfrom\s*["'][^'"]*$/) && !line.match(/\b(import|require)\(['"][^'"]*$/)) {