Skip to content

Commit 48b0ec4

Browse files
committed
added config option whether the explorer should be enabled.
1 parent bb1119e commit 48b0ec4

5 files changed

Lines changed: 42 additions & 13 deletions

File tree

extensions/npm/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ For more information about auto detection of Tasks pls see the [documentation](h
1414
- `npm.runSilent` run npm script with the `--silent` option, the default is `false`.
1515
- `npm.packageManager` the package manager used to run the scripts: `npm` or `yarn`, the default is `npm`.
1616
- `npm.exclude` glob patterns for folders that should be excluded from automatic script detection. The pattern is matched against the **absolute path** of the package.json. For example, to exclude all test folders use '**/test/**'.
17+
- `npm.enableScriptExplorer` enable an explorer view for npm scripts when the workspace contains a 'package.json' file.

extensions/npm/package.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@
9696
}
9797
]
9898
},
99-
10099
"configuration": {
101100
"id": "npm",
102101
"type": "object",
@@ -138,6 +137,12 @@
138137
},
139138
"description": "%config.npm.exclude%",
140139
"scope": "resource"
140+
},
141+
"npm.enableScriptExplorer": {
142+
"type": "boolean",
143+
"default": false,
144+
"scope": "resource",
145+
"description": "%config.npm.enableScriptExplorer%"
141146
}
142147
}
143148
},
@@ -170,4 +175,4 @@
170175
}
171176
]
172177
}
173-
}
178+
}

extensions/npm/package.nls.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"config.npm.runSilent": "Run npm commands with the `--silent` option.",
66
"config.npm.packageManager": "The package manager used to run scripts.",
77
"config.npm.exclude": "Configure glob patterns for folders that should be excluded from automatic script detection.",
8+
"config.npm.enableScriptExplorer": "Enable an explorer view for npm scripts, when the workspace contains a 'package.json' file.",
89
"npm.parseError": "Npm task detection: failed to parse the file {0}",
910
"taskdef.script": "The npm script to customize.",
1011
"taskdef.path": "The path to the folder of the package.json file that provides the script. Can be ommitted.",

extensions/npm/src/main.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,18 @@ const localize = nls.loadMessageBundle();
1212

1313
import { addJSONProviders } from './features/jsonContributions';
1414
import { NpmScriptsTreeDataProvider } from './npmView';
15-
import { provideNpmScripts, hasNpmScripts } from './tasks';
15+
import { provideNpmScripts, hasNpmScripts, explorerIsEnabled } from './tasks';
1616

1717
let taskProvider: vscode.Disposable | undefined;
1818

1919
export async function activate(context: vscode.ExtensionContext): Promise<void> {
20+
taskProvider = registerTaskProvider(context);
21+
configureHttpRequest();
22+
vscode.workspace.onDidChangeConfiguration(() => configureHttpRequest());
23+
context.subscriptions.push(addJSONProviders(httpRequest.xhr));
24+
}
2025

26+
function registerTaskProvider(context: vscode.ExtensionContext): vscode.Disposable | undefined {
2127
if (vscode.workspace.workspaceFolders) {
2228
let provider: vscode.TaskProvider = {
2329
provideTasks: () => {
@@ -27,19 +33,21 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
2733
return undefined;
2834
}
2935
};
30-
taskProvider = vscode.workspace.registerTaskProvider('npm', provider);
36+
let disposable = vscode.workspace.registerTaskProvider('npm', provider);
37+
registerExplorer(context, provider);
38+
return disposable;
39+
}
40+
return undefined;
41+
}
42+
43+
async function registerExplorer(context: vscode.ExtensionContext, provider: vscode.TaskProvider) {
44+
if (explorerIsEnabled()) {
3145
let treeDataProvider = vscode.window.registerTreeDataProvider('npm', new NpmScriptsTreeDataProvider(context, provider, localize));
3246
context.subscriptions.push(treeDataProvider);
33-
3447
if (await hasNpmScripts()) {
3548
vscode.commands.executeCommand('setContext', 'hasNpmScripts', true);
3649
}
3750
}
38-
39-
configureHttpRequest();
40-
vscode.workspace.onDidChangeConfiguration(() => configureHttpRequest());
41-
42-
context.subscriptions.push(addJSONProviders(httpRequest.xhr));
4351
}
4452

4553
function configureHttpRequest() {

extensions/npm/src/tasks.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,20 @@ export function getPackageManager(folder: WorkspaceFolder): string {
4848
return workspace.getConfiguration('npm', folder.uri).get<string>('packageManager', 'npm');
4949
}
5050

51+
export function explorerIsEnabled(): boolean {
52+
let folders = workspace.workspaceFolders;
53+
if (!folders) {
54+
return false;
55+
}
56+
for (let i = 0; i < folders.length; i++) {
57+
let folder = folders[i];
58+
if (workspace.getConfiguration('npm', folder.uri).get<boolean>('enableScriptExplorer') === true) {
59+
return true;
60+
}
61+
}
62+
return false;
63+
}
64+
5165
export async function hasNpmScripts(): Promise<boolean> {
5266
let folders = workspace.workspaceFolders;
5367
if (!folders) {
@@ -56,7 +70,7 @@ export async function hasNpmScripts(): Promise<boolean> {
5670
try {
5771
for (let i = 0; i < folders.length; i++) {
5872
let folder = folders[i];
59-
if (isEnabled(folder)) {
73+
if (isAutoDetectionEnabled(folder)) {
6074
let relativePattern = new RelativePattern(folder, '**/package.json');
6175
let paths = await workspace.findFiles(relativePattern, '**/node_modules/**');
6276
if (paths.length > 0) {
@@ -81,7 +95,7 @@ export async function provideNpmScripts(localize: any): Promise<Task[]> {
8195
try {
8296
for (let i = 0; i < folders.length; i++) {
8397
let folder = folders[i];
84-
if (isEnabled(folder)) {
98+
if (isAutoDetectionEnabled(folder)) {
8599
let relativePattern = new RelativePattern(folder, '**/package.json');
86100
let paths = await workspace.findFiles(relativePattern, '**/node_modules/**');
87101
for (let j = 0; j < paths.length; j++) {
@@ -98,7 +112,7 @@ export async function provideNpmScripts(localize: any): Promise<Task[]> {
98112
}
99113
}
100114

101-
function isEnabled(folder: WorkspaceFolder): boolean {
115+
function isAutoDetectionEnabled(folder: WorkspaceFolder): boolean {
102116
return workspace.getConfiguration('npm', folder.uri).get<AutoDetect>('autoDetect') === 'on';
103117
}
104118

0 commit comments

Comments
 (0)