From ae7035dbbf9dad7321e1bdcb9074310c7fd3da9d Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 10 Sep 2018 14:29:09 -0700 Subject: [PATCH] Add setting to disable all path based sugestions in js/ts The new `javascript.suggest.paths` and `typescript.suggest.paths` settings replace `typescript.quickSuggestionsForPaths`. These settings should disable all path based suggestions from js/ts The old `quickSuggestionsForPath` setting is now marked deprecated and is not being migrated to these new settings as it has different semantics. It was originally designed just to disable quick suggestions for paths but it does not work properly when using TypeScript 2.9+ --- .../typescript-language-features/package.json | 13 +++++++++++++ .../package.nls.json | 2 ++ .../src/features/completions.ts | 17 ++++++----------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/extensions/typescript-language-features/package.json b/extensions/typescript-language-features/package.json index 7b7b5cbe077..d23b6e2b337 100644 --- a/extensions/typescript-language-features/package.json +++ b/extensions/typescript-language-features/package.json @@ -397,6 +397,19 @@ "type": "boolean", "default": true, "description": "%typescript.quickSuggestionsForPaths%", + "scope": "resource", + "deprecationMessage": "%typescript.quickSuggestionsForPaths.deprecationMessage%" + }, + "javascript.suggest.paths": { + "type": "boolean", + "default": true, + "description": "%configuration.suggest.paths%", + "scope": "resource" + }, + "typescript.suggest.paths": { + "type": "boolean", + "default": true, + "description": "%configuration.suggest.paths%", "scope": "resource" }, "typescript.autoImportSuggestions.enabled": { diff --git a/extensions/typescript-language-features/package.nls.json b/extensions/typescript-language-features/package.nls.json index 47d894921c6..44ebd482f9d 100644 --- a/extensions/typescript-language-features/package.nls.json +++ b/extensions/typescript-language-features/package.nls.json @@ -50,6 +50,8 @@ "typescript.problemMatchers.tsc.label": "TypeScript problems", "typescript.problemMatchers.tscWatch.label": "TypeScript problems (watch mode)", "typescript.quickSuggestionsForPaths": "Enable/disable quick suggestions when typing out an import path.", + "typescript.quickSuggestionsForPaths.deprecationMessage": "Please use the new `javascript.suggest.paths` and `typescript.suggest.paths` settings to enable/disable path suggestions.", + "configuration.suggest.paths": "Enable/disable suggestions for paths in import statements and require calls.", "typescript.locale": "Sets the locale used to report JavaScript and TypeScript errors. Requires using TypeScript 2.6.0 or newer in the workspace. Default of `null` uses VS Code's locale.", "javascript.implicitProjectConfig.experimentalDecorators": "Enable/disable `experimentalDecorators` for JavaScript files that are not part of a project. Existing jsconfig.json or tsconfig.json files override this setting. Requires using TypeScript 2.3.1 or newer in the workspace.", "configuration.suggest.autoImports": "Enable/disable auto import suggestions. Requires using TypeScript 2.6.1 or newer in the workspace.", diff --git a/extensions/typescript-language-features/src/features/completions.ts b/extensions/typescript-language-features/src/features/completions.ts index 9279733ac09..f30c961b83c 100644 --- a/extensions/typescript-language-features/src/features/completions.ts +++ b/extensions/typescript-language-features/src/features/completions.ts @@ -236,14 +236,14 @@ class ApplyCompletionCodeActionCommand implements Command { interface CompletionConfiguration { readonly useCodeSnippetsOnMethodSuggest: boolean; readonly nameSuggestions: boolean; - readonly quickSuggestionsForPaths: boolean; + readonly pathSuggestions: boolean; readonly autoImportSuggestions: boolean; } namespace CompletionConfiguration { export const useCodeSnippetsOnMethodSuggest = 'useCodeSnippetsOnMethodSuggest'; export const nameSuggestions = 'nameSuggestions'; - export const quickSuggestionsForPaths = 'quickSuggestionsForPaths'; + export const pathSuggestions = 'suggest.paths'; export const autoImportSuggestions_deprecated = 'autoImportSuggestions.enabled'; export const autoImportSuggestions = 'suggest.autoImports'; @@ -258,7 +258,7 @@ namespace CompletionConfiguration { return { useCodeSnippetsOnMethodSuggest: typeScriptConfig.get(CompletionConfiguration.useCodeSnippetsOnMethodSuggest, false), - quickSuggestionsForPaths: typeScriptConfig.get(CompletionConfiguration.quickSuggestionsForPaths, true), + pathSuggestions: config.get(CompletionConfiguration.pathSuggestions, true), autoImportSuggestions: config.get(CompletionConfiguration.autoImportSuggestions, typeScriptConfig.get(CompletionConfiguration.autoImportSuggestions_deprecated, true)), nameSuggestions: vscode.workspace.getConfiguration('javascript', resource).get(CompletionConfiguration.nameSuggestions, true) }; @@ -304,7 +304,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider const line = document.lineAt(position.line); const completionConfiguration = CompletionConfiguration.getConfigurationForResource(this.modeId, document.uri); - if (!this.shouldTrigger(context, completionConfiguration, line, position)) { + if (!this.shouldTrigger(context, line, position)) { return null; } @@ -466,7 +466,6 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider private shouldTrigger( context: vscode.CompletionContext, - config: CompletionConfiguration, line: vscode.TextLine, position: vscode.Position ): boolean { @@ -480,10 +479,6 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider } if (context.triggerCharacter === '/') { - if (!config.quickSuggestionsForPaths) { - return false; - } - // make sure we are in something that looks like an import path const pre = line.text.slice(0, position.character); if (!pre.match(/\b(from|import)\s*["'][^'"]*$/) && !pre.match(/\b(import|require)\(['"][^'"]*$/)) { @@ -609,8 +604,8 @@ function shouldExcludeCompletionEntry( ) { return ( (!completionConfiguration.nameSuggestions && element.kind === PConst.Kind.warning) - || (!completionConfiguration.quickSuggestionsForPaths && - (element.kind === PConst.Kind.directory || element.kind === PConst.Kind.script)) + || (!completionConfiguration.pathSuggestions && + (element.kind === PConst.Kind.directory || element.kind === PConst.Kind.script || element.kind === PConst.Kind.externalModuleName)) || (!completionConfiguration.autoImportSuggestions && element.hasAction) ); }