Hook query discovery results up to query panel
This commit is contained in:
@@ -26,7 +26,7 @@ export class QueriesModule extends DisposableObject {
|
||||
this.push(this.queryDiscovery);
|
||||
this.queryDiscovery.refresh();
|
||||
|
||||
this.queriesPanel = new QueriesPanel();
|
||||
this.queriesPanel = new QueriesPanel(this.queryDiscovery);
|
||||
this.push(this.queriesPanel);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,15 +2,16 @@ import * as vscode from "vscode";
|
||||
import { DisposableObject } from "../pure/disposable-object";
|
||||
import { QueryTreeDataProvider } from "./query-tree-data-provider";
|
||||
import { QueryTreeViewItem } from "./query-tree-view-item";
|
||||
import { QueryDiscovery } from "./query-discovery";
|
||||
|
||||
export class QueriesPanel extends DisposableObject {
|
||||
private readonly dataProvider: QueryTreeDataProvider;
|
||||
private readonly treeView: vscode.TreeView<QueryTreeViewItem>;
|
||||
|
||||
public constructor() {
|
||||
public constructor(queryDiscovery: QueryDiscovery) {
|
||||
super();
|
||||
|
||||
this.dataProvider = new QueryTreeDataProvider();
|
||||
this.dataProvider = new QueryTreeDataProvider(queryDiscovery);
|
||||
|
||||
this.treeView = vscode.window.createTreeView("codeQLQueries", {
|
||||
treeDataProvider: this.dataProvider,
|
||||
|
||||
@@ -1,37 +1,47 @@
|
||||
import * as vscode from "vscode";
|
||||
import { Event, EventEmitter, TreeDataProvider, TreeItem } from "vscode";
|
||||
import { QueryTreeViewItem } from "./query-tree-view-item";
|
||||
import { DisposableObject } from "../pure/disposable-object";
|
||||
import { QueryDiscovery } from "./query-discovery";
|
||||
import { FileTreeNode } from "../common/file-tree-nodes";
|
||||
|
||||
export class QueryTreeDataProvider
|
||||
extends DisposableObject
|
||||
implements vscode.TreeDataProvider<QueryTreeViewItem>
|
||||
implements TreeDataProvider<QueryTreeViewItem>
|
||||
{
|
||||
private queryTreeItems: QueryTreeViewItem[];
|
||||
|
||||
public constructor() {
|
||||
private readonly onDidChangeTreeDataEmitter = this.push(
|
||||
new EventEmitter<void>(),
|
||||
);
|
||||
|
||||
public constructor(private readonly queryDiscovery: QueryDiscovery) {
|
||||
super();
|
||||
|
||||
queryDiscovery.onDidChangeQueries(() => {
|
||||
this.queryTreeItems = this.createTree();
|
||||
this.onDidChangeTreeDataEmitter.fire();
|
||||
});
|
||||
|
||||
this.queryTreeItems = this.createTree();
|
||||
}
|
||||
|
||||
public get onDidChangeTreeData(): Event<void> {
|
||||
return this.onDidChangeTreeDataEmitter.event;
|
||||
}
|
||||
|
||||
private createTree(): QueryTreeViewItem[] {
|
||||
// Temporary mock data, just to populate the tree view.
|
||||
return [
|
||||
new QueryTreeViewItem("custom-pack", [
|
||||
new QueryTreeViewItem("custom-pack/example.ql", []),
|
||||
]),
|
||||
new QueryTreeViewItem("ql", [
|
||||
new QueryTreeViewItem("ql/javascript", [
|
||||
new QueryTreeViewItem("ql/javascript/example.ql", []),
|
||||
]),
|
||||
new QueryTreeViewItem("ql/go", [
|
||||
new QueryTreeViewItem("ql/go/security", [
|
||||
new QueryTreeViewItem("ql/go/security/query1.ql", []),
|
||||
new QueryTreeViewItem("ql/go/security/query2.ql", []),
|
||||
]),
|
||||
]),
|
||||
]),
|
||||
];
|
||||
return (this.queryDiscovery.queries || []).map(
|
||||
this.convertFileTreeNode.bind(this),
|
||||
);
|
||||
}
|
||||
|
||||
private convertFileTreeNode(
|
||||
fileTreeDirectory: FileTreeNode,
|
||||
): QueryTreeViewItem {
|
||||
return new QueryTreeViewItem(
|
||||
fileTreeDirectory.path,
|
||||
fileTreeDirectory.children.map(this.convertFileTreeNode.bind(this)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -39,7 +49,7 @@ export class QueryTreeDataProvider
|
||||
* @param item The item to represent.
|
||||
* @returns The UI presentation of the item.
|
||||
*/
|
||||
public getTreeItem(item: QueryTreeViewItem): vscode.TreeItem {
|
||||
public getTreeItem(item: QueryTreeViewItem): TreeItem {
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user