From 231fe61ab5787ac1cc50052a3099ad861bd2960a Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Fri, 12 Nov 2021 17:14:05 +0100 Subject: [PATCH] Add setting to exclude scripts from NPM scripts view Fixes #71635 --- extensions/npm/package.json | 9 +++++++++ extensions/npm/package.nls.json | 1 + extensions/npm/src/npmMain.ts | 2 +- extensions/npm/src/npmView.ts | 7 +++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/extensions/npm/package.json b/extensions/npm/package.json index ce506759aa4..e3baafd8bfe 100644 --- a/extensions/npm/package.json +++ b/extensions/npm/package.json @@ -281,6 +281,15 @@ "scope": "window", "default": "open" }, + "npm.scriptExplorerExclude": { + "type": "array", + "items": { + "type": "string" + }, + "markdownDescription": "%config.npm.scriptExplorerExclude%", + "scope": "resource", + "default": [] + }, "npm.fetchOnlinePackageInfo": { "type": "boolean", "description": "%config.npm.fetchOnlinePackageInfo%", diff --git a/extensions/npm/package.nls.json b/extensions/npm/package.nls.json index b3ff9a4d229..b0a4f06c01f 100644 --- a/extensions/npm/package.nls.json +++ b/extensions/npm/package.nls.json @@ -12,6 +12,7 @@ "config.npm.exclude": "Configure glob patterns for folders that should be excluded from automatic script detection.", "config.npm.enableScriptExplorer": "Enable an explorer view for npm scripts when there is no top-level 'package.json' file.", "config.npm.scriptExplorerAction": "The default click action used in the npm scripts explorer: `open` or `run`, the default is `open`.", + "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.", "npm.parseError": "Npm task detection: failed to parse the file {0}", diff --git a/extensions/npm/src/npmMain.ts b/extensions/npm/src/npmMain.ts index 6969b7d63a6..3788c94ea45 100644 --- a/extensions/npm/src/npmMain.ts +++ b/extensions/npm/src/npmMain.ts @@ -38,7 +38,7 @@ export async function activate(context: vscode.ExtensionContext): Promise treeDataProvider = registerExplorer(context); context.subscriptions.push(vscode.workspace.onDidChangeConfiguration((e) => { - if (e.affectsConfiguration('npm.exclude') || e.affectsConfiguration('npm.autoDetect')) { + if (e.affectsConfiguration('npm.exclude') || e.affectsConfiguration('npm.autoDetect') || e.affectsConfiguration('npm.scriptExplorerExclude')) { invalidateTasksCache(); if (treeDataProvider) { treeDataProvider.refresh(); diff --git a/extensions/npm/src/npmView.ts b/extensions/npm/src/npmView.ts index 7f06a994f70..47b43c8f74e 100644 --- a/extensions/npm/src/npmView.ts +++ b/extensions/npm/src/npmView.ts @@ -291,7 +291,14 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider { let folder = null; let packageJson = null; + const regularExpressionsSetting = workspace.getConfiguration('npm').get('scriptExplorerExclude', []); + const regularExpressions = regularExpressionsSetting?.map(value => RegExp(value)); + tasks.forEach(each => { + if (regularExpressions.some((regularExpression) => (each.task.definition).script.match(regularExpression))) { + return; + } + if (isWorkspaceFolder(each.task.scope) && !this.isInstallTask(each.task)) { folder = folders.get(each.task.scope.name); if (!folder) {