Add support for filtering queries panel.
This commit is contained in:
@@ -790,7 +790,7 @@ async function activateWithInstalledDistribution(
|
||||
);
|
||||
ctx.subscriptions.push(databaseUI);
|
||||
|
||||
QueriesModule.initialize(app, cliServer);
|
||||
QueriesModule.initialize(app, languageContext, cliServer);
|
||||
|
||||
void extLogger.log("Initializing evaluator log viewer.");
|
||||
const evalLogViewer = new EvalLogViewer();
|
||||
|
||||
@@ -6,6 +6,7 @@ import { DisposableObject } from "../common/disposable-object";
|
||||
import { QueriesPanel } from "./queries-panel";
|
||||
import { QueryDiscovery } from "./query-discovery";
|
||||
import { QueryPackDiscovery } from "./query-pack-discovery";
|
||||
import { LanguageContextStore } from "../language-context-store";
|
||||
|
||||
export class QueriesModule extends DisposableObject {
|
||||
private queriesPanel: QueriesPanel | undefined;
|
||||
@@ -16,16 +17,21 @@ export class QueriesModule extends DisposableObject {
|
||||
|
||||
public static initialize(
|
||||
app: App,
|
||||
languageContext: LanguageContextStore,
|
||||
cliServer: CodeQLCliServer,
|
||||
): QueriesModule {
|
||||
const queriesModule = new QueriesModule(app);
|
||||
app.subscriptions.push(queriesModule);
|
||||
|
||||
queriesModule.initialize(app, cliServer);
|
||||
queriesModule.initialize(app, languageContext, cliServer);
|
||||
return queriesModule;
|
||||
}
|
||||
|
||||
private initialize(app: App, cliServer: CodeQLCliServer): void {
|
||||
private initialize(
|
||||
app: App,
|
||||
langauageContext: LanguageContextStore,
|
||||
cliServer: CodeQLCliServer,
|
||||
): void {
|
||||
// Currently, we only want to expose the new panel when we are in canary mode
|
||||
// and the user has enabled the "Show queries panel" flag.
|
||||
if (!isCanary() || !showQueriesPanel()) {
|
||||
@@ -38,8 +44,9 @@ export class QueriesModule extends DisposableObject {
|
||||
void queryPackDiscovery.initialRefresh();
|
||||
|
||||
const queryDiscovery = new QueryDiscovery(
|
||||
app.environment,
|
||||
app,
|
||||
queryPackDiscovery,
|
||||
langauageContext,
|
||||
);
|
||||
this.push(queryDiscovery);
|
||||
void queryDiscovery.initialRefresh();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { dirname, basename, normalize, relative } from "path";
|
||||
import { Event } from "vscode";
|
||||
import { EnvironmentContext } from "../common/app";
|
||||
import { App } from "../common/app";
|
||||
import {
|
||||
FileTreeDirectory,
|
||||
FileTreeLeaf,
|
||||
@@ -11,6 +11,8 @@ import { FilePathDiscovery } from "../common/vscode/file-path-discovery";
|
||||
import { containsPath } from "../common/files";
|
||||
import { getOnDiskWorkspaceFoldersObjects } from "../common/vscode/workspace-folders";
|
||||
import { QueryLanguage } from "../common/query-language";
|
||||
import { LanguageContextStore } from "../language-context-store";
|
||||
import { AppEvent, AppEventEmitter } from "../common/events";
|
||||
|
||||
const QUERY_FILE_EXTENSION = ".ql";
|
||||
|
||||
@@ -31,24 +33,36 @@ export class QueryDiscovery
|
||||
extends FilePathDiscovery<Query>
|
||||
implements QueryDiscoverer
|
||||
{
|
||||
public readonly onDidChangeQueries: AppEvent<void>;
|
||||
private readonly onDidChangeQueriesEmitter: AppEventEmitter<void>;
|
||||
|
||||
constructor(
|
||||
private readonly env: EnvironmentContext,
|
||||
private readonly app: App,
|
||||
private readonly queryPackDiscovery: QueryPackDiscoverer,
|
||||
private readonly languageContext: LanguageContextStore,
|
||||
) {
|
||||
super("Query Discovery", `**/*${QUERY_FILE_EXTENSION}`);
|
||||
|
||||
// Set up event emitters
|
||||
this.onDidChangeQueriesEmitter = this.push(app.createEventEmitter<void>());
|
||||
this.onDidChangeQueries = this.onDidChangeQueriesEmitter.event;
|
||||
|
||||
// Handlers
|
||||
this.push(
|
||||
this.queryPackDiscovery.onDidChangeQueryPacks(
|
||||
this.recomputeAllData.bind(this),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Event that fires when the set of queries in the workspace changes.
|
||||
*/
|
||||
public get onDidChangeQueries(): Event<void> {
|
||||
return this.onDidChangePathData;
|
||||
this.push(
|
||||
this.onDidChangePathData(() => {
|
||||
this.onDidChangeQueriesEmitter.fire();
|
||||
}),
|
||||
);
|
||||
this.push(
|
||||
this.languageContext.onLanguageContextChanged(() => {
|
||||
this.onDidChangeQueriesEmitter.fire();
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -64,8 +78,10 @@ export class QueryDiscovery
|
||||
|
||||
const roots = [];
|
||||
for (const workspaceFolder of getOnDiskWorkspaceFoldersObjects()) {
|
||||
const queriesInRoot = pathData.filter((query) =>
|
||||
containsPath(workspaceFolder.uri.fsPath, query.path),
|
||||
const queriesInRoot = pathData.filter(
|
||||
(query) =>
|
||||
containsPath(workspaceFolder.uri.fsPath, query.path) &&
|
||||
this.languageContext.shouldInclude(query.language),
|
||||
);
|
||||
if (queriesInRoot.length === 0) {
|
||||
continue;
|
||||
@@ -73,7 +89,7 @@ export class QueryDiscovery
|
||||
const root = new FileTreeDirectory<string>(
|
||||
workspaceFolder.uri.fsPath,
|
||||
workspaceFolder.name,
|
||||
this.env,
|
||||
this.app.environment,
|
||||
);
|
||||
for (const query of queriesInRoot) {
|
||||
const dirName = dirname(normalize(relative(root.path, query.path)));
|
||||
|
||||
Reference in New Issue
Block a user