diff --git a/extensions/npm/package.json b/extensions/npm/package.json index c5b1a45a31e..843255c2141 100644 --- a/extensions/npm/package.json +++ b/extensions/npm/package.json @@ -31,6 +31,7 @@ "activationEvents": [ "onCommand:workbench.action.tasks.runTask", "onLanguage:json", + "workspaceContains:package.json", "onView:npm" ], "contributes": { @@ -47,7 +48,7 @@ { "id": "npm", "name": "%view.name%", - "when": "config.npm.enableScriptExplorer" + "when": "npm:showScriptExplorer || config.npm.enableScriptExplorer" } ] }, diff --git a/extensions/npm/src/main.ts b/extensions/npm/src/main.ts index 640c349334a..d32d245b0ed 100644 --- a/extensions/npm/src/main.ts +++ b/extensions/npm/src/main.ts @@ -7,7 +7,7 @@ import * as httpRequest from 'request-light'; import * as vscode from 'vscode'; import { addJSONProviders } from './features/jsonContributions'; import { NpmScriptsTreeDataProvider } from './npmView'; -import { invalidateTasksCache, NpmTaskProvider } from './tasks'; +import { invalidateTasksCache, NpmTaskProvider, hasPackageJson } from './tasks'; import { invalidateHoverScriptsCache, NpmScriptHoverProvider } from './scriptHover'; import { runSelectedScript } from './commands'; @@ -41,6 +41,10 @@ export async function activate(context: vscode.ExtensionContext): Promise context.subscriptions.push(d); context.subscriptions.push(vscode.commands.registerCommand('npm.runSelectedScript', runSelectedScript)); context.subscriptions.push(addJSONProviders(httpRequest.xhr)); + + if (await hasPackageJson()) { + vscode.commands.executeCommand('setContext', 'npm:showScriptExplorer', true); + } } function registerTaskProvider(context: vscode.ExtensionContext): vscode.Disposable | undefined { diff --git a/extensions/npm/src/tasks.ts b/extensions/npm/src/tasks.ts index bfe9d8cd698..f60f7531516 100644 --- a/extensions/npm/src/tasks.ts +++ b/extensions/npm/src/tasks.ts @@ -262,6 +262,22 @@ export function getPackageJsonUriFromTask(task: Task): Uri | null { return null; } +export async function hasPackageJson(): Promise { + let folders = workspace.workspaceFolders; + if (!folders) { + return false; + } + for (const folder of folders) { + if (folder.uri.scheme === 'file') { + let packageJson = path.join(folder.uri.fsPath, 'package.json'); + if (await exists(packageJson)) { + return true; + } + } + } + return false; +} + async function exists(file: string): Promise { return new Promise((resolve, _reject) => { fs.exists(file, (value) => {