Show message when no scripts were found

This commit is contained in:
Erich Gamma 2018-04-30 19:23:17 +02:00
parent b42cc7f929
commit 6ed74d7736
2 changed files with 19 additions and 3 deletions

View file

@ -90,8 +90,15 @@ class NpmScript extends TreeItem {
} }
} }
class NoScripts extends TreeItem {
constructor() {
super(localize('noScripts', 'No scripts found'), TreeItemCollapsibleState.None);
this.contextValue = 'noscripts';
}
}
export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> { export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
private taskTree: Folder[] | PackageJSON[] | null = null; private taskTree: Folder[] | PackageJSON[] | NoScripts[] | null = null;
private extensionContext: ExtensionContext; private extensionContext: ExtensionContext;
private _onDidChangeTreeData: EventEmitter<TreeItem | null> = new EventEmitter<TreeItem | null>(); private _onDidChangeTreeData: EventEmitter<TreeItem | null> = new EventEmitter<TreeItem | null>();
readonly onDidChangeTreeData: Event<TreeItem | null> = this._onDidChangeTreeData.event; readonly onDidChangeTreeData: Event<TreeItem | null> = this._onDidChangeTreeData.event;
@ -263,6 +270,9 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
if (element instanceof NpmScript) { if (element instanceof NpmScript) {
return element.package; return element.package;
} }
if (element instanceof NoScripts) {
return null;
}
return null; return null;
} }
@ -271,6 +281,9 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
let tasks = await workspace.fetchTasks({ type: 'npm' }); let tasks = await workspace.fetchTasks({ type: 'npm' });
if (tasks) { if (tasks) {
this.taskTree = this.buildTaskTree(tasks); this.taskTree = this.buildTaskTree(tasks);
if (this.taskTree.length === 0) {
this.taskTree = [new NoScripts()];
}
} }
} }
if (element instanceof Folder) { if (element instanceof Folder) {
@ -282,6 +295,9 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
if (element instanceof NpmScript) { if (element instanceof NpmScript) {
return []; return [];
} }
if (element instanceof NoScripts) {
return [];
}
if (!element) { if (!element) {
if (this.taskTree) { if (this.taskTree) {
return this.taskTree; return this.taskTree;
@ -290,7 +306,7 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
return []; return [];
} }
private buildTaskTree(tasks: Task[]): Folder[] | PackageJSON[] { private buildTaskTree(tasks: Task[]): Folder[] | PackageJSON[] | NoScripts[] {
let folders: Map<String, Folder> = new Map(); let folders: Map<String, Folder> = new Map();
let packages: Map<String, PackageJSON> = new Map(); let packages: Map<String, PackageJSON> = new Map();

View file

@ -245,7 +245,7 @@ async function findAllScripts(buffer: string): Promise<StringMap> {
let visitor: JSONVisitor = { let visitor: JSONVisitor = {
onError(_error: ParseErrorCode, _offset: number, _length: number) { onError(_error: ParseErrorCode, _offset: number, _length: number) {
// TODO inform user about the parse error // TODO: inform user about the parse error
}, },
onObjectEnd() { onObjectEnd() {
if (inScripts) { if (inScripts) {