diff --git a/extensions/npm/package.json b/extensions/npm/package.json index 6df1a4835e7..0a0cd05411f 100644 --- a/extensions/npm/package.json +++ b/extensions/npm/package.json @@ -298,6 +298,12 @@ "tags": [ "usesOnlineServices" ] + }, + "npm.scriptHover": { + "type": "boolean", + "description": "%config.npm.scriptHover%", + "default": true, + "scope": "window" } } }, diff --git a/extensions/npm/package.nls.json b/extensions/npm/package.nls.json index b0a4f06c01f..44f1d00f0f4 100644 --- a/extensions/npm/package.nls.json +++ b/extensions/npm/package.nls.json @@ -15,6 +15,7 @@ "config.npm.scriptExplorerExclude": "An array of regular expressions that indicate which scripts should be excluded from the NPM Scripts view.", "config.npm.enableRunFromFolder": "Enable running npm scripts contained in a folder from the Explorer context menu.", "config.npm.fetchOnlinePackageInfo": "Fetch data from https://registry.npmjs.org and https://registry.bower.io to provide auto-completion and information on hover features on npm dependencies.", + "config.npm.scriptHover": "Display hover with 'Run' and 'Debug' commands for scripts.", "npm.parseError": "Npm task detection: failed to parse the file {0}", "taskdef.script": "The npm script to customize.", "taskdef.path": "The path to the folder of the package.json file that provides the script. Can be omitted.", diff --git a/extensions/npm/src/scriptHover.ts b/extensions/npm/src/scriptHover.ts index b8924bb25df..c96f3330d39 100644 --- a/extensions/npm/src/scriptHover.ts +++ b/extensions/npm/src/scriptHover.ts @@ -33,6 +33,7 @@ export function invalidateHoverScriptsCache(document?: TextDocument) { } export class NpmScriptHoverProvider implements HoverProvider { + private enabled: boolean; constructor(private context: ExtensionContext) { context.subscriptions.push(commands.registerCommand('npm.runScriptFromHover', this.runScriptFromHover, this)); @@ -40,9 +41,21 @@ export class NpmScriptHoverProvider implements HoverProvider { context.subscriptions.push(workspace.onDidChangeTextDocument((e) => { invalidateHoverScriptsCache(e.document); })); + + const isEnabled = () => workspace.getConfiguration('npm').get('scriptHover', true); + this.enabled = isEnabled(); + context.subscriptions.push(workspace.onDidChangeConfiguration((e) => { + if (e.affectsConfiguration('npm.scriptHover')) { + this.enabled = isEnabled(); + } + })); } public provideHover(document: TextDocument, position: Position, _token: CancellationToken): ProviderResult { + if (!this.enabled) { + return; + } + let hover: Hover | undefined = undefined; if (!cachedDocument || cachedDocument.fsPath !== document.uri.fsPath) {