Skip to content

Commit f0efebb

Browse files
authored
Merge pull request #3026 from github/koesie10/ask-for-display-language
Use language display name when asking for language
2 parents 5e0cade + a3735c2 commit f0efebb

File tree

6 files changed

+86
-22
lines changed

6 files changed

+86
-22
lines changed

extensions/ql-vscode/src/codeql-cli/query-language.ts

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { CodeQLCliServer } from "./cli";
22
import { Uri, window } from "vscode";
3-
import { isQueryLanguage, QueryLanguage } from "../common/query-language";
3+
import {
4+
getLanguageDisplayName,
5+
isQueryLanguage,
6+
QueryLanguage,
7+
} from "../common/query-language";
48
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
59
import { extLogger } from "../common/logging/vscode";
610
import { UserCancellationException } from "../common/vscode/progress";
@@ -46,14 +50,22 @@ export async function askForLanguage(
4650
cliServer: CodeQLCliServer,
4751
throwOnEmpty = true,
4852
): Promise<QueryLanguage | undefined> {
49-
const language = await window.showQuickPick(
50-
await cliServer.getSupportedLanguages(),
51-
{
52-
placeHolder: "Select target language for your query",
53-
ignoreFocusOut: true,
54-
},
55-
);
56-
if (!language) {
53+
const supportedLanguages = await cliServer.getSupportedLanguages();
54+
55+
const items = supportedLanguages
56+
.filter((language) => isQueryLanguage(language))
57+
.map((language) => ({
58+
label: getLanguageDisplayName(language),
59+
description: language,
60+
language,
61+
}))
62+
.sort((a, b) => a.label.localeCompare(b.label));
63+
64+
const selectedItem = await window.showQuickPick(items, {
65+
placeHolder: "Select target language for your query",
66+
ignoreFocusOut: true,
67+
});
68+
if (!selectedItem) {
5769
// This only happens if the user cancels the quick pick.
5870
if (throwOnEmpty) {
5971
throw new UserCancellationException("Cancelled.");
@@ -66,6 +78,8 @@ export async function askForLanguage(
6678
return undefined;
6779
}
6880

81+
const language = selectedItem.language;
82+
6983
if (!isQueryLanguage(language)) {
7084
void showAndLogErrorMessage(
7185
extLogger,

extensions/ql-vscode/src/databases/database-fetcher.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { AppCommandManager } from "../common/commands";
3232
import { allowHttp } from "../config";
3333
import { showAndLogInformationMessage } from "../common/logging";
3434
import { AppOctokit } from "../common/octokit";
35+
import { getLanguageDisplayName } from "../common/query-language";
3536

3637
/**
3738
* Prompts a user to fetch a database from a remote location. Database is assumed to be an archive file.
@@ -579,10 +580,23 @@ export async function promptForLanguage(
579580
return languages[0];
580581
}
581582

582-
return await window.showQuickPick(languages, {
583+
const items = languages
584+
.map((language) => ({
585+
label: getLanguageDisplayName(language),
586+
description: language,
587+
language,
588+
}))
589+
.sort((a, b) => a.label.localeCompare(b.label));
590+
591+
const selectedItem = await window.showQuickPick(items, {
583592
placeHolder: "Select the database language to download:",
584593
ignoreFocusOut: true,
585594
});
595+
if (!selectedItem) {
596+
return undefined;
597+
}
598+
599+
return selectedItem.language;
586600
}
587601

588602
/**

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ describe("SkeletonQueryWizard", () => {
7474

7575
beforeEach(async () => {
7676
mockCli = mockedObject<CodeQLCliServer>({
77-
resolveLanguages: jest
77+
getSupportedLanguages: jest
7878
.fn()
7979
.mockResolvedValue([
8080
"ruby",
@@ -85,7 +85,6 @@ describe("SkeletonQueryWizard", () => {
8585
"csharp",
8686
"cpp",
8787
]),
88-
getSupportedLanguages: jest.fn(),
8988
});
9089
mockApp = createMockApp();
9190

@@ -112,9 +111,12 @@ describe("SkeletonQueryWizard", () => {
112111
},
113112
] as WorkspaceFolder[]);
114113

115-
quickPickSpy = jest
116-
.spyOn(window, "showQuickPick")
117-
.mockResolvedValueOnce(mockedQuickPickItem(chosenLanguage));
114+
quickPickSpy = jest.spyOn(window, "showQuickPick").mockResolvedValueOnce(
115+
mockedQuickPickItem({
116+
label: chosenLanguage,
117+
language: chosenLanguage,
118+
}),
119+
);
118120
showInputBoxSpy = jest
119121
.spyOn(window, "showInputBox")
120122
.mockResolvedValue(storagePath);

extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-manager.test.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,12 @@ describe("Variant Analysis Manager", () => {
7979
).fsPath;
8080

8181
beforeEach(async () => {
82-
jest
83-
.spyOn(window, "showQuickPick")
84-
.mockResolvedValueOnce(mockedQuickPickItem("javascript"));
82+
jest.spyOn(window, "showQuickPick").mockResolvedValueOnce(
83+
mockedQuickPickItem({
84+
label: "JavaScript",
85+
language: "javascript",
86+
}),
87+
);
8588

8689
cancellationTokenSource = new CancellationTokenSource();
8790

extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-submission-integration.test.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,12 @@ describe("Variant Analysis Submission Integration", () => {
6767
await showQlDocument("query.ql");
6868

6969
// Select target language for your query
70-
quickPickSpy.mockResolvedValueOnce(mockedQuickPickItem("javascript"));
70+
quickPickSpy.mockResolvedValueOnce(
71+
mockedQuickPickItem({
72+
label: "JavaScript",
73+
language: "javascript",
74+
}),
75+
);
7176

7277
await commandManager.execute("codeQL.runVariantAnalysis");
7378

@@ -106,7 +111,12 @@ describe("Variant Analysis Submission Integration", () => {
106111
await showQlDocument("query.ql");
107112

108113
// Select target language for your query
109-
quickPickSpy.mockResolvedValueOnce(mockedQuickPickItem("javascript"));
114+
quickPickSpy.mockResolvedValueOnce(
115+
mockedQuickPickItem({
116+
label: "JavaScript",
117+
language: "javascript",
118+
}),
119+
);
110120

111121
await commandManager.execute("codeQL.runVariantAnalysis");
112122

extensions/ql-vscode/test/vscode-tests/no-workspace/databases/database-fetcher.test.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,12 @@ describe("database-fetcher", () => {
7373

7474
it("should convert a GitHub nwo to a database url", async () => {
7575
mockRequest.mockResolvedValue(successfullMockApiResponse);
76-
quickPickSpy.mockResolvedValue(mockedQuickPickItem("javascript"));
76+
quickPickSpy.mockResolvedValue(
77+
mockedQuickPickItem({
78+
label: "JavaScript",
79+
language: "javascript",
80+
}),
81+
);
7782
const githubRepo = "github/codeql";
7883
const result = await convertGithubNwoToDatabaseUrl(
7984
githubRepo,
@@ -94,7 +99,23 @@ describe("database-fetcher", () => {
9499
expect(owner).toBe("github");
95100
expect(quickPickSpy).toHaveBeenNthCalledWith(
96101
1,
97-
["csharp", "javascript", "ql"],
102+
[
103+
expect.objectContaining({
104+
label: "C#",
105+
description: "csharp",
106+
language: "csharp",
107+
}),
108+
expect.objectContaining({
109+
label: "JavaScript",
110+
description: "javascript",
111+
language: "javascript",
112+
}),
113+
expect.objectContaining({
114+
label: "ql",
115+
description: "ql",
116+
language: "ql",
117+
}),
118+
],
98119
expect.anything(),
99120
);
100121
});

0 commit comments

Comments
 (0)