Skip to content

Commit d1838ba

Browse files
Convert to match style from DB panel
1 parent 6be9e53 commit d1838ba

5 files changed

Lines changed: 74 additions & 75 deletions

File tree

extensions/ql-vscode/src/local-queries/local-queries.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,7 @@ import { SkeletonQueryWizard } from "../skeleton-query-wizard";
4848
import { LocalQueryRun } from "./local-query-run";
4949
import { createMultiSelectionCommand } from "../common/vscode/selection-commands";
5050
import { findLanguage } from "../codeql-cli/query-language";
51-
import {
52-
QueryTreeQueryItem,
53-
QueryTreeViewItem,
54-
} from "../queries-panel/query-tree-view-item";
51+
import { QueryTreeViewItem } from "../queries-panel/query-tree-view-item";
5552

5653
interface DatabaseQuickPickItem extends QuickPickItem {
5754
databaseItem: DatabaseItem;
@@ -133,20 +130,21 @@ export class LocalQueries extends DisposableObject {
133130
private async runQueryFromQueriesPanel(
134131
queryTreeViewItem: QueryTreeViewItem,
135132
): Promise<void> {
136-
if (queryTreeViewItem instanceof QueryTreeQueryItem) {
133+
if (queryTreeViewItem.path !== undefined) {
137134
await this.runQuery(Uri.file(queryTreeViewItem.path));
138135
}
139136
}
140137

141138
private async runQueriesFromQueriesPanel(
142139
queryTreeViewItem: QueryTreeViewItem,
143140
): Promise<void> {
144-
if (queryTreeViewItem instanceof QueryTreeQueryItem) {
145-
const uris = queryTreeViewItem.children.map((child) =>
146-
Uri.file(child.path),
147-
);
148-
await this.runQueries(uris);
141+
const uris = [];
142+
for (const child of queryTreeViewItem.children) {
143+
if (child.path !== undefined) {
144+
uris.push(Uri.file(child.path));
145+
}
149146
}
147+
await this.runQueries(uris);
150148
}
151149

152150
private async runQuery(uri: Uri | undefined): Promise<void> {

extensions/ql-vscode/src/queries-panel/query-tree-data-provider.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { Event, EventEmitter, TreeDataProvider, TreeItem } from "vscode";
22
import {
3-
QueryTreeQueryItem,
4-
QueryTreeTextItem,
53
QueryTreeViewItem,
4+
createQueryTreeLeafItem,
5+
createQueryTreeNodeItem,
6+
createQueryTreeTextItem,
67
} from "./query-tree-view-item";
78
import { DisposableObject } from "../common/disposable-object";
89
import { FileTreeNode } from "../common/file-tree-nodes";
@@ -50,17 +51,24 @@ export class QueryTreeDataProvider
5051

5152
private convertFileTreeNode(
5253
fileTreeDirectory: FileTreeNode<string>,
53-
): QueryTreeQueryItem {
54-
return new QueryTreeQueryItem(
55-
fileTreeDirectory.name,
56-
fileTreeDirectory.path,
57-
fileTreeDirectory.data,
58-
fileTreeDirectory.children.map(this.convertFileTreeNode.bind(this)),
59-
);
54+
): QueryTreeViewItem {
55+
if (fileTreeDirectory.children.length === 0) {
56+
return createQueryTreeLeafItem(
57+
fileTreeDirectory.name,
58+
fileTreeDirectory.path,
59+
fileTreeDirectory.data,
60+
);
61+
} else {
62+
return createQueryTreeNodeItem(
63+
fileTreeDirectory.name,
64+
fileTreeDirectory.path,
65+
fileTreeDirectory.children.map(this.convertFileTreeNode.bind(this)),
66+
);
67+
}
6068
}
6169

6270
private noQueriesTreeViewItem(): QueryTreeViewItem {
63-
return new QueryTreeTextItem(
71+
return createQueryTreeTextItem(
6472
"This workspace doesn't contain any CodeQL queries at the moment.",
6573
);
6674
}
@@ -83,10 +91,8 @@ export class QueryTreeDataProvider
8391
if (!item) {
8492
// We're at the root.
8593
return this.queryTreeItems;
86-
} else if (item instanceof QueryTreeQueryItem) {
87-
return item.children;
8894
} else {
89-
return [];
95+
return item.children;
9096
}
9197
}
9298
}
Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,45 @@
11
import * as vscode from "vscode";
22

3-
export abstract class QueryTreeViewItem extends vscode.TreeItem {
4-
protected constructor(name: string) {
5-
super(name);
6-
}
7-
}
8-
9-
export class QueryTreeQueryItem extends QueryTreeViewItem {
3+
export class QueryTreeViewItem extends vscode.TreeItem {
104
constructor(
115
name: string,
12-
public readonly path: string,
13-
language: string | undefined,
14-
public readonly children: QueryTreeQueryItem[],
6+
public readonly path: string | undefined,
7+
public readonly children: QueryTreeViewItem[],
158
) {
169
super(name);
17-
this.tooltip = path;
18-
if (this.children.length === 0) {
19-
this.description = language;
20-
this.collapsibleState = vscode.TreeItemCollapsibleState.None;
21-
this.contextValue = "queryFile";
22-
this.command = {
23-
title: "Open",
24-
command: "vscode.open",
25-
arguments: [vscode.Uri.file(path)],
26-
};
27-
} else {
28-
this.collapsibleState = vscode.TreeItemCollapsibleState.Collapsed;
29-
this.contextValue = "queryFolder";
30-
}
3110
}
3211
}
3312

34-
export class QueryTreeTextItem extends QueryTreeViewItem {
35-
constructor(text: string) {
36-
super(text);
37-
}
13+
export function createQueryTreeNodeItem(
14+
name: string,
15+
path: string,
16+
children: QueryTreeViewItem[],
17+
): QueryTreeViewItem {
18+
const item = new QueryTreeViewItem(name, path, children);
19+
item.tooltip = path;
20+
item.collapsibleState = vscode.TreeItemCollapsibleState.Collapsed;
21+
item.contextValue = "queryFolder";
22+
return item;
23+
}
24+
25+
export function createQueryTreeLeafItem(
26+
name: string,
27+
path: string,
28+
language: string | undefined,
29+
): QueryTreeViewItem {
30+
const item = new QueryTreeViewItem(name, path, []);
31+
item.tooltip = path;
32+
item.description = language;
33+
item.collapsibleState = vscode.TreeItemCollapsibleState.None;
34+
item.contextValue = "queryFile";
35+
item.command = {
36+
title: "Open",
37+
command: "vscode.open",
38+
arguments: [vscode.Uri.file(path)],
39+
};
40+
return item;
41+
}
42+
43+
export function createQueryTreeTextItem(text: string): QueryTreeViewItem {
44+
return new QueryTreeViewItem(text, undefined, []);
3845
}

extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,7 @@ import {
7676
showAndLogInformationMessage,
7777
showAndLogWarningMessage,
7878
} from "../common/logging";
79-
import {
80-
QueryTreeQueryItem,
81-
QueryTreeViewItem,
82-
} from "../queries-panel/query-tree-view-item";
79+
import { QueryTreeViewItem } from "../queries-panel/query-tree-view-item";
8380

8481
const maxRetryCount = 3;
8582

@@ -194,7 +191,7 @@ export class VariantAnalysisManager
194191
private async runVariantAnalysisFromQueriesPanel(
195192
queryTreeViewItem: QueryTreeViewItem,
196193
): Promise<void> {
197-
if (queryTreeViewItem instanceof QueryTreeQueryItem) {
194+
if (queryTreeViewItem.path !== undefined) {
198195
await this.runVariantAnalysisFromCommand(
199196
Uri.file(queryTreeViewItem.path),
200197
);

extensions/ql-vscode/test/vscode-tests/minimal-workspace/queries-panel/query-tree-data-provider.test.ts

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import {
55
} from "../../../../src/common/file-tree-nodes";
66
import { QueryTreeDataProvider } from "../../../../src/queries-panel/query-tree-data-provider";
77
import {
8-
QueryTreeQueryItem,
9-
QueryTreeTextItem,
8+
createQueryTreeLeafItem,
9+
createQueryTreeNodeItem,
10+
createQueryTreeTextItem,
1011
} from "../../../../src/queries-panel/query-tree-view-item";
1112

1213
describe("QueryTreeDataProvider", () => {
@@ -27,7 +28,7 @@ describe("QueryTreeDataProvider", () => {
2728
});
2829

2930
expect(dataProvider.getChildren()).toEqual([
30-
new QueryTreeTextItem(
31+
createQueryTreeTextItem(
3132
"This workspace doesn't contain any CodeQL queries at the moment.",
3233
),
3334
]);
@@ -58,24 +59,14 @@ describe("QueryTreeDataProvider", () => {
5859
});
5960

6061
expect(dataProvider.getChildren()).toEqual([
61-
new QueryTreeQueryItem("dir1", "dir1", undefined, [
62-
new QueryTreeQueryItem("dir2", "dir1/dir2", undefined, [
63-
new QueryTreeQueryItem(
64-
"file1",
65-
"dir1/dir2/file1",
66-
"javascript",
67-
[],
68-
),
69-
new QueryTreeQueryItem(
70-
"file2",
71-
"dir1/dir2/file2",
72-
"javascript",
73-
[],
74-
),
62+
createQueryTreeNodeItem("dir1", "dir1", [
63+
createQueryTreeNodeItem("dir2", "dir1/dir2", [
64+
createQueryTreeLeafItem("file1", "dir1/dir2/file1", "javascript"),
65+
createQueryTreeLeafItem("file2", "dir1/dir2/file2", "javascript"),
7566
]),
7667
]),
77-
new QueryTreeQueryItem("dir3", "dir3", undefined, [
78-
new QueryTreeQueryItem("file3", "dir3/file3", "javascript", []),
68+
createQueryTreeNodeItem("dir3", "dir3", [
69+
createQueryTreeLeafItem("file3", "dir3/file3", "javascript"),
7970
]),
8071
]);
8172
});

0 commit comments

Comments
 (0)