fetch only npm tasks

This commit is contained in:
Erich Gamma 2018-03-27 23:50:23 +02:00
parent 526a88aeb0
commit 67949967f9
2 changed files with 24 additions and 14 deletions

View file

@ -28,20 +28,22 @@ class Validator implements ScriptValidator {
}
export function activate(context: vscode.ExtensionContext): void {
vscode.window.registerTreeDataProvider('npm', new NpmScriptsTreeDataProvider(context, new Validator()));
if (!vscode.workspace.workspaceFolders) {
return;
}
taskProvider = vscode.workspace.registerTaskProvider('npm', {
let provider: vscode.TaskProvider = {
provideTasks: () => {
return provideNpmScripts();
},
resolveTask(_task: vscode.Task): vscode.Task | undefined {
return undefined;
}
});
};
taskProvider = vscode.workspace.registerTaskProvider('npm', provider);
vscode.window.registerTreeDataProvider('npm', new NpmScriptsTreeDataProvider(context, provider, new Validator()));
if (!vscode.workspace.workspaceFolders) {
return;
}
configureHttpRequest();
vscode.workspace.onDidChangeConfiguration(() => configureHttpRequest());

View file

@ -6,7 +6,7 @@
import {
ExtensionContext, Task, TreeDataProvider, TreeItem, TreeItemCollapsibleState,
WorkspaceFolder, workspace, commands, window, EventEmitter, Event,
ThemeIcon, Uri, TextDocument
ThemeIcon, Uri, TextDocument, TaskProvider
} from 'vscode';
import { NpmTaskDefinition, ScriptValidator } from './tasks';
import * as path from 'path';
@ -74,13 +74,15 @@ class NpmScript extends TreeItem {
export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
private taskTree: Folder[] | PackageJSON[] | null = null;
private validator: ScriptValidator;
private taskProvider: TaskProvider;
private _onDidChangeTreeData: EventEmitter<TreeItem | null> = new EventEmitter<TreeItem | null>();
readonly onDidChangeTreeData: Event<TreeItem | null> = this._onDidChangeTreeData.event;
constructor(context: ExtensionContext, validator: ScriptValidator) {
constructor(context: ExtensionContext, taskProvider: TaskProvider, validator: ScriptValidator) {
const subscriptions = context.subscriptions;
this.validator = validator;
this.taskProvider = taskProvider;
subscriptions.push(commands.registerCommand('npm.runScript', this.runScript, this));
subscriptions.push(commands.registerCommand('npm.openScript', this.openScript, this));
subscriptions.push(commands.registerCommand('npm.refresh', this.refresh, this));
@ -123,9 +125,10 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
async getChildren(element?: TreeItem): Promise<TreeItem[]> {
if (!this.taskTree) {
let tasks = await workspace.fetchTasks();
let npmTasks = tasks.filter(each => each.definition.type === 'npm');
this.taskTree = this.buildTaskTree(npmTasks);
let tasks = await this.taskProvider.provideTasks();
if (tasks) {
this.taskTree = this.buildTaskTree(tasks);
}
}
if (element instanceof Folder) {
return element.packages;
@ -136,7 +139,12 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
if (element instanceof NpmScript) {
return [];
}
return this.taskTree;
if (!element) {
if (this.taskTree) {
return this.taskTree;
}
}
return [];
}
private isWorkspaceFolder(value: any): value is WorkspaceFolder {