Hook query discovery results up to query panel

This commit is contained in:
Robert
2023-05-19 12:45:20 +01:00
parent 0a534ae360
commit a8f8990793
3 changed files with 35 additions and 24 deletions

View File

@@ -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);
}

View File

@@ -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,

View File

@@ -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;
}