|
1 | 1 | import { Event, EventEmitter, TreeDataProvider, TreeItem } from "vscode"; |
2 | | -import { QueryTreeViewItem } from "./query-tree-view-item"; |
| 2 | +import { |
| 3 | + QueryTreeViewItem, |
| 4 | + createQueryTreeFileItem, |
| 5 | + createQueryTreeFolderItem, |
| 6 | + createQueryTreeTextItem, |
| 7 | +} from "./query-tree-view-item"; |
3 | 8 | import { DisposableObject } from "../common/disposable-object"; |
4 | 9 | import { FileTreeNode } from "../common/file-tree-nodes"; |
5 | 10 |
|
6 | 11 | export interface QueryDiscoverer { |
7 | | - readonly buildQueryTree: () => Array<FileTreeNode<string>>; |
| 12 | + readonly buildQueryTree: () => Array<FileTreeNode<string>> | undefined; |
8 | 13 | readonly onDidChangeQueries: Event<void>; |
9 | 14 | } |
10 | 15 |
|
@@ -34,19 +39,37 @@ export class QueryTreeDataProvider |
34 | 39 | } |
35 | 40 |
|
36 | 41 | private createTree(): QueryTreeViewItem[] { |
37 | | - return this.queryDiscoverer |
38 | | - .buildQueryTree() |
39 | | - .map(this.convertFileTreeNode.bind(this)); |
| 42 | + const queryTree = this.queryDiscoverer.buildQueryTree(); |
| 43 | + if (queryTree === undefined) { |
| 44 | + return []; |
| 45 | + } else if (queryTree.length === 0) { |
| 46 | + return [this.noQueriesTreeViewItem()]; |
| 47 | + } else { |
| 48 | + return queryTree.map(this.convertFileTreeNode.bind(this)); |
| 49 | + } |
40 | 50 | } |
41 | 51 |
|
42 | 52 | private convertFileTreeNode( |
43 | 53 | fileTreeDirectory: FileTreeNode<string>, |
44 | 54 | ): QueryTreeViewItem { |
45 | | - return new QueryTreeViewItem( |
46 | | - fileTreeDirectory.name, |
47 | | - fileTreeDirectory.path, |
48 | | - fileTreeDirectory.data, |
49 | | - fileTreeDirectory.children.map(this.convertFileTreeNode.bind(this)), |
| 55 | + if (fileTreeDirectory.children.length === 0) { |
| 56 | + return createQueryTreeFileItem( |
| 57 | + fileTreeDirectory.name, |
| 58 | + fileTreeDirectory.path, |
| 59 | + fileTreeDirectory.data, |
| 60 | + ); |
| 61 | + } else { |
| 62 | + return createQueryTreeFolderItem( |
| 63 | + fileTreeDirectory.name, |
| 64 | + fileTreeDirectory.path, |
| 65 | + fileTreeDirectory.children.map(this.convertFileTreeNode.bind(this)), |
| 66 | + ); |
| 67 | + } |
| 68 | + } |
| 69 | + |
| 70 | + private noQueriesTreeViewItem(): QueryTreeViewItem { |
| 71 | + return createQueryTreeTextItem( |
| 72 | + "This workspace doesn't contain any CodeQL queries at the moment.", |
50 | 73 | ); |
51 | 74 | } |
52 | 75 |
|
|
0 commit comments