only show the view when there are package.json files

This commit is contained in:
Erich Gamma 2018-04-15 23:06:33 +02:00
parent 7fc78e7b0c
commit adfe96397b
3 changed files with 31 additions and 4 deletions

View file

@ -30,7 +30,8 @@
"activationEvents": [
"onCommand:workbench.action.tasks.runTask",
"onLanguage:json",
"onView:npm"
"onView:npm",
"workspaceContains:**/package.json"
],
"contributes": {
"views": {
@ -38,7 +39,7 @@
{
"id": "npm",
"name": "%view.name%",
"when": "config.npm.explorerVisible"
"when": "hasNpmScripts"
}
]
},

View file

@ -12,11 +12,11 @@ const localize = nls.loadMessageBundle();
import { addJSONProviders } from './features/jsonContributions';
import { NpmScriptsTreeDataProvider } from './npmView';
import { provideNpmScripts } from './tasks';
import { provideNpmScripts, hasNpmScripts } from './tasks';
let taskProvider: vscode.Disposable | undefined;
export function activate(context: vscode.ExtensionContext): void {
export async function activate(context: vscode.ExtensionContext): Promise<void> {
if (vscode.workspace.workspaceFolders) {
let provider: vscode.TaskProvider = {
@ -30,6 +30,10 @@ export function activate(context: vscode.ExtensionContext): void {
taskProvider = vscode.workspace.registerTaskProvider('npm', provider);
let treeDataProvider = vscode.window.registerTreeDataProvider('npm', new NpmScriptsTreeDataProvider(context, provider, localize));
context.subscriptions.push(treeDataProvider);
if (await hasNpmScripts()) {
vscode.commands.executeCommand('setContext', 'hasNpmScripts', true);
}
}
configureHttpRequest();

View file

@ -48,6 +48,28 @@ export function getPackageManager(folder: WorkspaceFolder): string {
return workspace.getConfiguration('npm', folder.uri).get<string>('packageManager', 'npm');
}
export async function hasNpmScripts(): Promise<boolean> {
let folders = workspace.workspaceFolders;
if (!folders) {
return false;
}
try {
for (let i = 0; i < folders.length; i++) {
let folder = folders[i];
if (isEnabled(folder)) {
let relativePattern = new RelativePattern(folder, '**/package.json');
let paths = await workspace.findFiles(relativePattern, '**/node_modules/**');
if (paths.length > 0) {
return true;
}
}
}
return false;
} catch (error) {
return Promise.reject(error);
}
}
export async function provideNpmScripts(localize: any): Promise<Task[]> {
let emptyTasks: Task[] = [];
let allTasks: Task[] = [];