Merge pull request #3013 from github/koesie10/use-selected-language

Use selected language when creating query
This commit is contained in:
Koen Vlaswinkel
2023-10-24 15:02:05 +02:00
committed by GitHub
5 changed files with 41 additions and 3 deletions

View File

@@ -930,6 +930,7 @@ async function activateWithInstalledDistribution(
databaseUI, databaseUI,
localQueryResultsView, localQueryResultsView,
queryStorageDir, queryStorageDir,
languageContext,
); );
ctx.subscriptions.push(localQueries); ctx.subscriptions.push(localQueries);

View File

@@ -67,4 +67,12 @@ export class LanguageContextStore extends DisposableObject {
this.languageFilter === language this.languageFilter === language
); );
} }
public get selectedLanguage(): QueryLanguage | undefined {
if (this.languageFilter === "All") {
return undefined;
}
return this.languageFilter;
}
} }

View File

@@ -50,6 +50,7 @@ import { createMultiSelectionCommand } from "../common/vscode/selection-commands
import { findLanguage } from "../codeql-cli/query-language"; import { findLanguage } from "../codeql-cli/query-language";
import type { QueryTreeViewItem } from "../queries-panel/query-tree-view-item"; import type { QueryTreeViewItem } from "../queries-panel/query-tree-view-item";
import { tryGetQueryLanguage } from "../common/query-language"; import { tryGetQueryLanguage } from "../common/query-language";
import { LanguageContextStore } from "../language-context-store";
interface DatabaseQuickPickItem extends QuickPickItem { interface DatabaseQuickPickItem extends QuickPickItem {
databaseItem: DatabaseItem; databaseItem: DatabaseItem;
@@ -71,6 +72,7 @@ export class LocalQueries extends DisposableObject {
private readonly databaseUI: DatabaseUI, private readonly databaseUI: DatabaseUI,
private readonly localQueryResultsView: ResultsView, private readonly localQueryResultsView: ResultsView,
private readonly queryStorageDir: string, private readonly queryStorageDir: string,
private readonly languageContextStore: LanguageContextStore,
) { ) {
super(); super();
} }
@@ -323,6 +325,7 @@ export class LocalQueries extends DisposableObject {
const credentials = isCanary() ? this.app.credentials : undefined; const credentials = isCanary() ? this.app.credentials : undefined;
const contextStoragePath = const contextStoragePath =
this.app.workspaceStoragePath || this.app.globalStoragePath; this.app.workspaceStoragePath || this.app.globalStoragePath;
const language = this.languageContextStore.selectedLanguage;
const skeletonQueryWizard = new SkeletonQueryWizard( const skeletonQueryWizard = new SkeletonQueryWizard(
this.cliServer, this.cliServer,
progress, progress,
@@ -330,6 +333,7 @@ export class LocalQueries extends DisposableObject {
this.app.logger, this.app.logger,
this.databaseManager, this.databaseManager,
contextStoragePath, contextStoragePath,
language,
); );
await skeletonQueryWizard.execute(); await skeletonQueryWizard.execute();
}, },

View File

@@ -41,7 +41,6 @@ export const QUERY_LANGUAGE_TO_DATABASE_REPO: QueryLanguagesToDatabaseMap = {
}; };
export class SkeletonQueryWizard { export class SkeletonQueryWizard {
private language: QueryLanguage | undefined;
private fileName = "example.ql"; private fileName = "example.ql";
private qlPackStoragePath: string | undefined; private qlPackStoragePath: string | undefined;
@@ -52,6 +51,7 @@ export class SkeletonQueryWizard {
private readonly logger: BaseLogger, private readonly logger: BaseLogger,
private readonly databaseManager: DatabaseManager, private readonly databaseManager: DatabaseManager,
private readonly databaseStoragePath: string | undefined, private readonly databaseStoragePath: string | undefined,
private language: QueryLanguage | undefined = undefined,
) {} ) {}
private get folderName() { private get folderName() {
@@ -59,8 +59,11 @@ export class SkeletonQueryWizard {
} }
public async execute() { public async execute() {
// show quick pick to choose language if (!this.language) {
this.language = await this.chooseLanguage(); // show quick pick to choose language
this.language = await this.chooseLanguage();
}
if (!this.language) { if (!this.language) {
return; return;
} }

View File

@@ -21,6 +21,7 @@ import * as databaseFetcher from "../../../../src/databases/database-fetcher";
import { createMockDB } from "../../../factories/databases/databases"; import { createMockDB } from "../../../factories/databases/databases";
import { asError } from "../../../../src/common/helpers-pure"; import { asError } from "../../../../src/common/helpers-pure";
import { Setting } from "../../../../src/config"; import { Setting } from "../../../../src/config";
import { QueryLanguage } from "../../../../src/common/query-language";
describe("SkeletonQueryWizard", () => { describe("SkeletonQueryWizard", () => {
let mockCli: CodeQLCliServer; let mockCli: CodeQLCliServer;
@@ -134,6 +135,27 @@ describe("SkeletonQueryWizard", () => {
expect(quickPickSpy).toHaveBeenCalled(); expect(quickPickSpy).toHaveBeenCalled();
}); });
describe("with language", () => {
beforeEach(() => {
wizard = new SkeletonQueryWizard(
mockCli,
jest.fn(),
credentials,
extLogger,
mockDatabaseManager,
storagePath,
QueryLanguage.Swift,
);
});
it("should not prompt for language", async () => {
await wizard.execute();
expect(mockCli.getSupportedLanguages).not.toHaveBeenCalled();
expect(quickPickSpy).not.toHaveBeenCalled();
});
});
describe("if QL pack doesn't exist", () => { describe("if QL pack doesn't exist", () => {
beforeEach(() => { beforeEach(() => {
jest jest