Skip to content

Commit 1e6b7a6

Browse files
committed
Add support for filtering queries panel.
1 parent 552a4f6 commit 1e6b7a6

File tree

3 files changed

+39
-16
lines changed

3 files changed

+39
-16
lines changed

extensions/ql-vscode/src/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,7 @@ async function activateWithInstalledDistribution(
790790
);
791791
ctx.subscriptions.push(databaseUI);
792792

793-
QueriesModule.initialize(app, cliServer);
793+
QueriesModule.initialize(app, languageContext, cliServer);
794794

795795
void extLogger.log("Initializing evaluator log viewer.");
796796
const evalLogViewer = new EvalLogViewer();

extensions/ql-vscode/src/queries-panel/queries-module.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { DisposableObject } from "../common/disposable-object";
66
import { QueriesPanel } from "./queries-panel";
77
import { QueryDiscovery } from "./query-discovery";
88
import { QueryPackDiscovery } from "./query-pack-discovery";
9+
import { LanguageContextStore } from "../language-context-store";
910

1011
export class QueriesModule extends DisposableObject {
1112
private queriesPanel: QueriesPanel | undefined;
@@ -16,16 +17,21 @@ export class QueriesModule extends DisposableObject {
1617

1718
public static initialize(
1819
app: App,
20+
languageContext: LanguageContextStore,
1921
cliServer: CodeQLCliServer,
2022
): QueriesModule {
2123
const queriesModule = new QueriesModule(app);
2224
app.subscriptions.push(queriesModule);
2325

24-
queriesModule.initialize(app, cliServer);
26+
queriesModule.initialize(app, languageContext, cliServer);
2527
return queriesModule;
2628
}
2729

28-
private initialize(app: App, cliServer: CodeQLCliServer): void {
30+
private initialize(
31+
app: App,
32+
langauageContext: LanguageContextStore,
33+
cliServer: CodeQLCliServer,
34+
): void {
2935
// Currently, we only want to expose the new panel when we are in canary mode
3036
// and the user has enabled the "Show queries panel" flag.
3137
if (!isCanary() || !showQueriesPanel()) {
@@ -38,8 +44,9 @@ export class QueriesModule extends DisposableObject {
3844
void queryPackDiscovery.initialRefresh();
3945

4046
const queryDiscovery = new QueryDiscovery(
41-
app.environment,
47+
app,
4248
queryPackDiscovery,
49+
langauageContext,
4350
);
4451
this.push(queryDiscovery);
4552
void queryDiscovery.initialRefresh();

extensions/ql-vscode/src/queries-panel/query-discovery.ts

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { dirname, basename, normalize, relative } from "path";
22
import { Event } from "vscode";
3-
import { EnvironmentContext } from "../common/app";
3+
import { App } from "../common/app";
44
import {
55
FileTreeDirectory,
66
FileTreeLeaf,
@@ -11,6 +11,8 @@ import { FilePathDiscovery } from "../common/vscode/file-path-discovery";
1111
import { containsPath } from "../common/files";
1212
import { getOnDiskWorkspaceFoldersObjects } from "../common/vscode/workspace-folders";
1313
import { QueryLanguage } from "../common/query-language";
14+
import { LanguageContextStore } from "../language-context-store";
15+
import { AppEvent, AppEventEmitter } from "../common/events";
1416

1517
const QUERY_FILE_EXTENSION = ".ql";
1618

@@ -31,24 +33,36 @@ export class QueryDiscovery
3133
extends FilePathDiscovery<Query>
3234
implements QueryDiscoverer
3335
{
36+
public readonly onDidChangeQueries: AppEvent<void>;
37+
private readonly onDidChangeQueriesEmitter: AppEventEmitter<void>;
38+
3439
constructor(
35-
private readonly env: EnvironmentContext,
40+
private readonly app: App,
3641
private readonly queryPackDiscovery: QueryPackDiscoverer,
42+
private readonly languageContext: LanguageContextStore,
3743
) {
3844
super("Query Discovery", `**/*${QUERY_FILE_EXTENSION}`);
3945

46+
// Set up event emitters
47+
this.onDidChangeQueriesEmitter = this.push(app.createEventEmitter<void>());
48+
this.onDidChangeQueries = this.onDidChangeQueriesEmitter.event;
49+
50+
// Handlers
4051
this.push(
4152
this.queryPackDiscovery.onDidChangeQueryPacks(
4253
this.recomputeAllData.bind(this),
4354
),
4455
);
45-
}
46-
47-
/**
48-
* Event that fires when the set of queries in the workspace changes.
49-
*/
50-
public get onDidChangeQueries(): Event<void> {
51-
return this.onDidChangePathData;
56+
this.push(
57+
this.onDidChangePathData(() => {
58+
this.onDidChangeQueriesEmitter.fire();
59+
}),
60+
);
61+
this.push(
62+
this.languageContext.onLanguageContextChanged(() => {
63+
this.onDidChangeQueriesEmitter.fire();
64+
}),
65+
);
5266
}
5367

5468
/**
@@ -64,16 +78,18 @@ export class QueryDiscovery
6478

6579
const roots = [];
6680
for (const workspaceFolder of getOnDiskWorkspaceFoldersObjects()) {
67-
const queriesInRoot = pathData.filter((query) =>
68-
containsPath(workspaceFolder.uri.fsPath, query.path),
81+
const queriesInRoot = pathData.filter(
82+
(query) =>
83+
containsPath(workspaceFolder.uri.fsPath, query.path) &&
84+
this.languageContext.shouldInclude(query.language),
6985
);
7086
if (queriesInRoot.length === 0) {
7187
continue;
7288
}
7389
const root = new FileTreeDirectory<string>(
7490
workspaceFolder.uri.fsPath,
7591
workspaceFolder.name,
76-
this.env,
92+
this.app.environment,
7793
);
7894
for (const query of queriesInRoot) {
7995
const dirName = dirname(normalize(relative(root.path, query.path)));

0 commit comments

Comments
 (0)