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) ); }