Skip to content

Commit e2017c7

Browse files
author
Dave Bartolomeo
committed
Support extensionPacks debug configuration
1 parent 055bfcd commit e2017c7

7 files changed

Lines changed: 55 additions & 21 deletions

File tree

extensions/ql-vscode/package.json

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,20 @@
101101
"string"
102102
],
103103
"description": "Additional folders to search for library packs. Defaults to searching all workspace folders."
104+
},
105+
"extensionPacks": {
106+
"type": [
107+
"array",
108+
"string"
109+
],
110+
"description": "Names of extension packs to include in the evaluation. These are resolved from the locations specified in `additionalPacks`."
104111
}
105112
}
106113
}
107114
},
108115
"variables": {
109-
"currentDatabase": "codeQL.getCurrentDatabase"
116+
"currentDatabase": "codeQL.getCurrentDatabase",
117+
"currentQuery": "codeQL.getCurrentQuery"
110118
}
111119
}
112120
],
@@ -482,6 +490,10 @@
482490
"command": "codeQL.getCurrentDatabase",
483491
"title": "CodeQL: Get Current Database"
484492
},
493+
{
494+
"command": "codeQL.getCurrentQuery",
495+
"title": "CodeQL: Get Current Query"
496+
},
485497
{
486498
"command": "codeQL.viewAst",
487499
"title": "CodeQL: View AST"
@@ -1104,6 +1116,10 @@
11041116
"command": "codeQL.getCurrentDatabase",
11051117
"when": "false"
11061118
},
1119+
{
1120+
"command": "codeQL.getCurrentQuery",
1121+
"when": "false"
1122+
},
11071123
{
11081124
"command": "codeQL.viewAst",
11091125
"when": "resourceScheme == codeql-zip-archive"

extensions/ql-vscode/src/debugger/debug-configuration.ts

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
WorkspaceFolder,
66
} from "vscode";
77
import { getOnDiskWorkspaceFolders, showAndLogErrorMessage } from "../helpers";
8+
import { LocalQueries } from "../local-queries";
89

910
interface QLDebugArgs {
1011
query: string;
@@ -26,6 +27,8 @@ export type QLResolvedDebugConfiguration = DebugConfiguration &
2627
export class QLDebugConfigurationProvider
2728
implements DebugConfigurationProvider
2829
{
30+
public constructor(private readonly localQueries: LocalQueries) {}
31+
2932
public resolveDebugConfiguration(
3033
_folder: WorkspaceFolder | undefined,
3134
debugConfiguration: DebugConfiguration,
@@ -62,25 +65,30 @@ export class QLDebugConfigurationProvider
6265
return null;
6366
}
6467

68+
// Fill in defaults here, instead of in `resolveDebugConfiguration`, to avoid the highly
69+
// unusual case where one of the computed default values looks like a variable substitution.
70+
const additionalPacks =
71+
qlConfiguration.additionalPacks === undefined
72+
? getOnDiskWorkspaceFolders()
73+
: typeof qlConfiguration.additionalPacks === "string"
74+
? [qlConfiguration.additionalPacks]
75+
: qlConfiguration.additionalPacks;
76+
77+
// Default to computing the extension packs based on the extension configuration and the search
78+
// path.
79+
const extensionPacks =
80+
qlConfiguration.extensionPacks === undefined
81+
? await this.localQueries.getDefaultExtensionPacks(additionalPacks)
82+
: typeof qlConfiguration.extensionPacks === "string"
83+
? [qlConfiguration.extensionPacks]
84+
: qlConfiguration.extensionPacks;
85+
6586
const resultConfiguration: QLResolvedDebugConfiguration = {
6687
...qlConfiguration,
6788
query: qlConfiguration.query,
6889
database: qlConfiguration.database,
69-
additionalPacks:
70-
// Fill in defaults here, instead of in `resolveDebugConfiguration`, to avoid the highly
71-
// unusual case where one of the workspace folder paths contains something that looks like a
72-
// variable substitution.
73-
qlConfiguration.additionalPacks === undefined
74-
? getOnDiskWorkspaceFolders()
75-
: typeof qlConfiguration.additionalPacks === "string"
76-
? [qlConfiguration.additionalPacks]
77-
: qlConfiguration.additionalPacks,
78-
extensionPacks:
79-
qlConfiguration.extensionPacks === undefined
80-
? []
81-
: typeof qlConfiguration.extensionPacks === "string"
82-
? [qlConfiguration.extensionPacks]
83-
: qlConfiguration.extensionPacks,
90+
additionalPacks,
91+
extensionPacks,
8492
};
8593

8694
return resultConfiguration;

extensions/ql-vscode/src/debugger/debug-protocol.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,5 @@ export interface LaunchRequestArguments
6666
query: string;
6767
database: string;
6868
additionalPacks: string[];
69+
extensionPacks: string[];
6970
}

extensions/ql-vscode/src/debugger/debug-session.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ export class QLDebugSession extends LoggingDebugSession implements Disposable {
235235
},
236236
true,
237237
args.additionalPacks,
238+
args.extensionPacks,
238239
this.queryStorageDir,
239240
undefined,
240241
undefined,

extensions/ql-vscode/src/debugger/debugger-factory.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
DebugSession,
1010
ProviderResult,
1111
} from "vscode";
12+
import { LocalQueries } from "../local-queries";
1213
import { DisposableObject } from "../pure/disposable-object";
1314
import { QueryRunner } from "../queryRunner";
1415
import { QLDebugConfigurationProvider } from "./debug-configuration";
@@ -23,13 +24,14 @@ export class QLDebugAdapterDescriptorFactory
2324
constructor(
2425
private readonly queryStorageDir: string,
2526
private readonly queryRunner: QueryRunner,
27+
localQueries: LocalQueries,
2628
) {
2729
super();
2830
this.push(debug.registerDebugAdapterDescriptorFactory("codeql", this));
2931
this.push(
3032
debug.registerDebugConfigurationProvider(
3133
"codeql",
32-
new QLDebugConfigurationProvider(),
34+
new QLDebugConfigurationProvider(localQueries),
3335
DebugConfigurationProviderTriggerKind.Dynamic,
3436
),
3537
);

extensions/ql-vscode/src/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -864,7 +864,7 @@ async function activateWithInstalledDistribution(
864864

865865
void extLogger.log("Initializing debugger factory.");
866866
const debuggerFactory = ctx.subscriptions.push(
867-
new QLDebugAdapterDescriptorFactory(queryStorageDir, qs),
867+
new QLDebugAdapterDescriptorFactory(queryStorageDir, qs, localQueries),
868868
);
869869
void debuggerFactory;
870870

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -456,9 +456,7 @@ export class LocalQueries extends DisposableObject {
456456
}
457457

458458
const additionalPacks = getOnDiskWorkspaceFolders();
459-
const extensionPacks = (await this.cliServer.useExtensionPacks())
460-
? Object.keys(await this.cliServer.resolveQlpacks(additionalPacks, true))
461-
: undefined;
459+
const extensionPacks = await this.getDefaultExtensionPacks(additionalPacks);
462460

463461
const coreQueryRun = this.queryRunner.createQueryRun(
464462
databaseItem.databaseUri.fsPath,
@@ -584,4 +582,12 @@ export class LocalQueries extends DisposableObject {
584582
): Promise<void> {
585583
await this.localQueryResultsView.showResults(query, forceReveal, false);
586584
}
585+
586+
public async getDefaultExtensionPacks(
587+
additionalPacks: string[],
588+
): Promise<string[]> {
589+
return (await this.cliServer.useExtensionPacks())
590+
? Object.keys(await this.cliServer.resolveQlpacks(additionalPacks, true))
591+
: [];
592+
}
587593
}

0 commit comments

Comments
 (0)