Use language display name when asking for language

This commit is contained in:
Koen Vlaswinkel
2023-10-27 11:17:12 +02:00
parent 407825e1cf
commit 5ca084be91
4 changed files with 48 additions and 19 deletions

View File

@@ -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,

View File

@@ -65,7 +65,7 @@ describe("SkeletonQueryWizard", () => {
beforeEach(async () => {
mockCli = mockedObject<CodeQLCliServer>({
resolveLanguages: jest
getSupportedLanguages: jest
.fn()
.mockResolvedValue([
"ruby",
@@ -76,7 +76,6 @@ describe("SkeletonQueryWizard", () => {
"csharp",
"cpp",
]),
getSupportedLanguages: jest.fn(),
});
mockDatabaseManager = mockedObject<DatabaseManager>({
@@ -102,9 +101,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);

View File

@@ -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();

View File

@@ -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");