Merge pull request #3026 from github/koesie10/ask-for-display-language
Use language display name when asking for language
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
import { CodeQLCliServer } from "./cli";
|
||||
import { Uri, window } from "vscode";
|
||||
import { isQueryLanguage, QueryLanguage } from "../common/query-language";
|
||||
import {
|
||||
getLanguageDisplayName,
|
||||
isQueryLanguage,
|
||||
QueryLanguage,
|
||||
} from "../common/query-language";
|
||||
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
|
||||
import { extLogger } from "../common/logging/vscode";
|
||||
import { UserCancellationException } from "../common/vscode/progress";
|
||||
@@ -46,14 +50,22 @@ export async function askForLanguage(
|
||||
cliServer: CodeQLCliServer,
|
||||
throwOnEmpty = true,
|
||||
): Promise<QueryLanguage | undefined> {
|
||||
const language = await window.showQuickPick(
|
||||
await cliServer.getSupportedLanguages(),
|
||||
{
|
||||
placeHolder: "Select target language for your query",
|
||||
ignoreFocusOut: true,
|
||||
},
|
||||
);
|
||||
if (!language) {
|
||||
const supportedLanguages = await cliServer.getSupportedLanguages();
|
||||
|
||||
const items = supportedLanguages
|
||||
.filter((language) => isQueryLanguage(language))
|
||||
.map((language) => ({
|
||||
label: getLanguageDisplayName(language),
|
||||
description: language,
|
||||
language,
|
||||
}))
|
||||
.sort((a, b) => a.label.localeCompare(b.label));
|
||||
|
||||
const selectedItem = await window.showQuickPick(items, {
|
||||
placeHolder: "Select target language for your query",
|
||||
ignoreFocusOut: true,
|
||||
});
|
||||
if (!selectedItem) {
|
||||
// This only happens if the user cancels the quick pick.
|
||||
if (throwOnEmpty) {
|
||||
throw new UserCancellationException("Cancelled.");
|
||||
@@ -66,6 +78,8 @@ export async function askForLanguage(
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const language = selectedItem.language;
|
||||
|
||||
if (!isQueryLanguage(language)) {
|
||||
void showAndLogErrorMessage(
|
||||
extLogger,
|
||||
|
||||
@@ -32,6 +32,7 @@ import { AppCommandManager } from "../common/commands";
|
||||
import { allowHttp } from "../config";
|
||||
import { showAndLogInformationMessage } from "../common/logging";
|
||||
import { AppOctokit } from "../common/octokit";
|
||||
import { getLanguageDisplayName } from "../common/query-language";
|
||||
|
||||
/**
|
||||
* 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(
|
||||
return languages[0];
|
||||
}
|
||||
|
||||
return await window.showQuickPick(languages, {
|
||||
const items = languages
|
||||
.map((language) => ({
|
||||
label: getLanguageDisplayName(language),
|
||||
description: language,
|
||||
language,
|
||||
}))
|
||||
.sort((a, b) => a.label.localeCompare(b.label));
|
||||
|
||||
const selectedItem = await window.showQuickPick(items, {
|
||||
placeHolder: "Select the database language to download:",
|
||||
ignoreFocusOut: true,
|
||||
});
|
||||
if (!selectedItem) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return selectedItem.language;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -74,7 +74,7 @@ describe("SkeletonQueryWizard", () => {
|
||||
|
||||
beforeEach(async () => {
|
||||
mockCli = mockedObject<CodeQLCliServer>({
|
||||
resolveLanguages: jest
|
||||
getSupportedLanguages: jest
|
||||
.fn()
|
||||
.mockResolvedValue([
|
||||
"ruby",
|
||||
@@ -85,7 +85,6 @@ describe("SkeletonQueryWizard", () => {
|
||||
"csharp",
|
||||
"cpp",
|
||||
]),
|
||||
getSupportedLanguages: jest.fn(),
|
||||
});
|
||||
mockApp = createMockApp();
|
||||
|
||||
@@ -112,9 +111,12 @@ describe("SkeletonQueryWizard", () => {
|
||||
},
|
||||
] as WorkspaceFolder[]);
|
||||
|
||||
quickPickSpy = jest
|
||||
.spyOn(window, "showQuickPick")
|
||||
.mockResolvedValueOnce(mockedQuickPickItem(chosenLanguage));
|
||||
quickPickSpy = jest.spyOn(window, "showQuickPick").mockResolvedValueOnce(
|
||||
mockedQuickPickItem({
|
||||
label: chosenLanguage,
|
||||
language: chosenLanguage,
|
||||
}),
|
||||
);
|
||||
showInputBoxSpy = jest
|
||||
.spyOn(window, "showInputBox")
|
||||
.mockResolvedValue(storagePath);
|
||||
|
||||
@@ -79,9 +79,12 @@ describe("Variant Analysis Manager", () => {
|
||||
).fsPath;
|
||||
|
||||
beforeEach(async () => {
|
||||
jest
|
||||
.spyOn(window, "showQuickPick")
|
||||
.mockResolvedValueOnce(mockedQuickPickItem("javascript"));
|
||||
jest.spyOn(window, "showQuickPick").mockResolvedValueOnce(
|
||||
mockedQuickPickItem({
|
||||
label: "JavaScript",
|
||||
language: "javascript",
|
||||
}),
|
||||
);
|
||||
|
||||
cancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
|
||||
@@ -67,7 +67,12 @@ describe("Variant Analysis Submission Integration", () => {
|
||||
await showQlDocument("query.ql");
|
||||
|
||||
// Select target language for your query
|
||||
quickPickSpy.mockResolvedValueOnce(mockedQuickPickItem("javascript"));
|
||||
quickPickSpy.mockResolvedValueOnce(
|
||||
mockedQuickPickItem({
|
||||
label: "JavaScript",
|
||||
language: "javascript",
|
||||
}),
|
||||
);
|
||||
|
||||
await commandManager.execute("codeQL.runVariantAnalysis");
|
||||
|
||||
@@ -106,7 +111,12 @@ describe("Variant Analysis Submission Integration", () => {
|
||||
await showQlDocument("query.ql");
|
||||
|
||||
// Select target language for your query
|
||||
quickPickSpy.mockResolvedValueOnce(mockedQuickPickItem("javascript"));
|
||||
quickPickSpy.mockResolvedValueOnce(
|
||||
mockedQuickPickItem({
|
||||
label: "JavaScript",
|
||||
language: "javascript",
|
||||
}),
|
||||
);
|
||||
|
||||
await commandManager.execute("codeQL.runVariantAnalysis");
|
||||
|
||||
|
||||
@@ -73,7 +73,12 @@ describe("database-fetcher", () => {
|
||||
|
||||
it("should convert a GitHub nwo to a database url", async () => {
|
||||
mockRequest.mockResolvedValue(successfullMockApiResponse);
|
||||
quickPickSpy.mockResolvedValue(mockedQuickPickItem("javascript"));
|
||||
quickPickSpy.mockResolvedValue(
|
||||
mockedQuickPickItem({
|
||||
label: "JavaScript",
|
||||
language: "javascript",
|
||||
}),
|
||||
);
|
||||
const githubRepo = "github/codeql";
|
||||
const result = await convertGithubNwoToDatabaseUrl(
|
||||
githubRepo,
|
||||
@@ -94,7 +99,23 @@ describe("database-fetcher", () => {
|
||||
expect(owner).toBe("github");
|
||||
expect(quickPickSpy).toHaveBeenNthCalledWith(
|
||||
1,
|
||||
["csharp", "javascript", "ql"],
|
||||
[
|
||||
expect.objectContaining({
|
||||
label: "C#",
|
||||
description: "csharp",
|
||||
language: "csharp",
|
||||
}),
|
||||
expect.objectContaining({
|
||||
label: "JavaScript",
|
||||
description: "javascript",
|
||||
language: "javascript",
|
||||
}),
|
||||
expect.objectContaining({
|
||||
label: "ql",
|
||||
description: "ql",
|
||||
language: "ql",
|
||||
}),
|
||||
],
|
||||
expect.anything(),
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user