Skip to content

Commit 8b5329f

Browse files
committed
Use selected language when creating query
This will change the "Create new query" command to use the selected language when creating a new query. If no language is selected, it will still prompt the user to pick a language.
1 parent 0a75a0e commit 8b5329f

File tree

5 files changed

+41
-3
lines changed

5 files changed

+41
-3
lines changed

extensions/ql-vscode/src/extension.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,7 @@ async function activateWithInstalledDistribution(
930930
databaseUI,
931931
localQueryResultsView,
932932
queryStorageDir,
933+
languageContext,
933934
);
934935
ctx.subscriptions.push(localQueries);
935936

extensions/ql-vscode/src/language-context-store.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,12 @@ export class LanguageContextStore extends DisposableObject {
6767
this.languageFilter === language
6868
);
6969
}
70+
71+
public get selectedLanguage(): QueryLanguage | undefined {
72+
if (this.languageFilter === "All") {
73+
return undefined;
74+
}
75+
76+
return this.languageFilter;
77+
}
7078
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import { createMultiSelectionCommand } from "../common/vscode/selection-commands
5050
import { findLanguage } from "../codeql-cli/query-language";
5151
import type { QueryTreeViewItem } from "../queries-panel/query-tree-view-item";
5252
import { tryGetQueryLanguage } from "../common/query-language";
53+
import { LanguageContextStore } from "../language-context-store";
5354

5455
interface DatabaseQuickPickItem extends QuickPickItem {
5556
databaseItem: DatabaseItem;
@@ -71,6 +72,7 @@ export class LocalQueries extends DisposableObject {
7172
private readonly databaseUI: DatabaseUI,
7273
private readonly localQueryResultsView: ResultsView,
7374
private readonly queryStorageDir: string,
75+
private readonly languageContextStore: LanguageContextStore,
7476
) {
7577
super();
7678
}
@@ -323,13 +325,15 @@ export class LocalQueries extends DisposableObject {
323325
const credentials = isCanary() ? this.app.credentials : undefined;
324326
const contextStoragePath =
325327
this.app.workspaceStoragePath || this.app.globalStoragePath;
328+
const language = this.languageContextStore.selectedLanguage;
326329
const skeletonQueryWizard = new SkeletonQueryWizard(
327330
this.cliServer,
328331
progress,
329332
credentials,
330333
this.app.logger,
331334
this.databaseManager,
332335
contextStoragePath,
336+
language,
333337
);
334338
await skeletonQueryWizard.execute();
335339
},

extensions/ql-vscode/src/local-queries/skeleton-query-wizard.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ export const QUERY_LANGUAGE_TO_DATABASE_REPO: QueryLanguagesToDatabaseMap = {
4141
};
4242

4343
export class SkeletonQueryWizard {
44-
private language: QueryLanguage | undefined;
4544
private fileName = "example.ql";
4645
private qlPackStoragePath: string | undefined;
4746

@@ -52,15 +51,19 @@ export class SkeletonQueryWizard {
5251
private readonly logger: BaseLogger,
5352
private readonly databaseManager: DatabaseManager,
5453
private readonly databaseStoragePath: string | undefined,
54+
private language: QueryLanguage | undefined = undefined,
5555
) {}
5656

5757
private get folderName() {
5858
return `codeql-custom-queries-${this.language}`;
5959
}
6060

6161
public async execute() {
62-
// show quick pick to choose language
63-
this.language = await this.chooseLanguage();
62+
if (!this.language) {
63+
// show quick pick to choose language
64+
this.language = await this.chooseLanguage();
65+
}
66+
6467
if (!this.language) {
6568
return;
6669
}

extensions/ql-vscode/test/vscode-tests/cli-integration/local-queries/skeleton-query-wizard.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import * as databaseFetcher from "../../../../src/databases/database-fetcher";
2121
import { createMockDB } from "../../../factories/databases/databases";
2222
import { asError } from "../../../../src/common/helpers-pure";
2323
import { Setting } from "../../../../src/config";
24+
import { QueryLanguage } from "../../../../src/common/query-language";
2425

2526
describe("SkeletonQueryWizard", () => {
2627
let mockCli: CodeQLCliServer;
@@ -134,6 +135,27 @@ describe("SkeletonQueryWizard", () => {
134135
expect(quickPickSpy).toHaveBeenCalled();
135136
});
136137

138+
describe("with language", () => {
139+
beforeEach(() => {
140+
wizard = new SkeletonQueryWizard(
141+
mockCli,
142+
jest.fn(),
143+
credentials,
144+
extLogger,
145+
mockDatabaseManager,
146+
storagePath,
147+
QueryLanguage.Swift,
148+
);
149+
});
150+
151+
it("should not prompt for language", async () => {
152+
await wizard.execute();
153+
154+
expect(mockCli.getSupportedLanguages).not.toHaveBeenCalled();
155+
expect(quickPickSpy).not.toHaveBeenCalled();
156+
});
157+
});
158+
137159
describe("if QL pack doesn't exist", () => {
138160
beforeEach(() => {
139161
jest

0 commit comments

Comments
 (0)