Skip to content

Commit aa2ecee

Browse files
Merge branch 'main' into elena/yer-a-flag-query
2 parents 724dc45 + 5ab24c0 commit aa2ecee

23 files changed

+793
-227
lines changed

extensions/ql-vscode/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## [UNRELEASED]
44

5+
- Added ability to filter repositories for a variant analysis to only those that have results [#2343](https://github.com/github/vscode-codeql/pull/2343)
56
- Add new configuration option to allow downloading databases from http, non-secure servers. [#2332](https://github.com/github/vscode-codeql/pull/2332)
67

78
## 1.8.2 - 12 April 2023

extensions/ql-vscode/package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,12 @@
340340
"type": "boolean",
341341
"default": false,
342342
"description": "Allow database to be downloaded via HTTP. Warning: enabling this option will allow downloading from insecure servers."
343+
},
344+
"codeQL.createQuery.folder": {
345+
"type": "string",
346+
"default": "",
347+
"patternErrorMessage": "Please enter a valid folder",
348+
"markdownDescription": "The name of the folder where we want to create queries and query packs via the \"CodeQL: Create Query\" command. The folder should exist."
343349
}
344350
}
345351
},

extensions/ql-vscode/src/config.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,3 +619,19 @@ export const ALLOW_HTTP_SETTING = new Setting(
619619
export function allowHttp(): boolean {
620620
return ALLOW_HTTP_SETTING.getValue<boolean>() || false;
621621
}
622+
623+
/**
624+
* The name of the folder where we want to create skeleton wizard QL packs.
625+
**/
626+
const SKELETON_WIZARD_FOLDER = new Setting(
627+
"folder",
628+
new Setting("createQuery", ROOT_SETTING),
629+
);
630+
631+
export function getSkeletonWizardFolder(): string | undefined {
632+
return SKELETON_WIZARD_FOLDER.getValue<string>() || undefined;
633+
}
634+
635+
export async function setSkeletonWizardFolder(folder: string | undefined) {
636+
await SKELETON_WIZARD_FOLDER.updateValue(folder, ConfigurationTarget.Global);
637+
}

extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-view.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import { readQueryResults, runQuery } from "./external-api-usage-query";
3535
import { createDataExtensionYaml, loadDataExtensionYaml } from "./yaml";
3636
import { ExternalApiUsage } from "./external-api-usage";
3737
import { ModeledMethod } from "./modeled-method";
38-
import { ExtensionPackModelFile } from "./extension-pack-picker";
38+
import { ExtensionPackModelFile } from "./shared/extension-pack";
3939

4040
function getQlSubmoduleFolder(): WorkspaceFolder | undefined {
4141
const workspaceFolder = workspace.workspaceFolders?.find(
@@ -118,7 +118,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
118118
msg.externalApiUsages,
119119
msg.modeledMethods,
120120
);
121-
await this.loadExternalApiUsages();
121+
await Promise.all([this.setViewState(), this.loadExternalApiUsages()]);
122122

123123
break;
124124
case "generateExternalApi":
@@ -134,16 +134,22 @@ export class DataExtensionsEditorView extends AbstractWebview<
134134
super.onWebViewLoaded();
135135

136136
await Promise.all([
137-
this.postMessage({
138-
t: "setDataExtensionEditorInitialData",
139-
extensionPackName: this.modelFile.extensionPack.name,
140-
modelFilename: this.modelFile.filename,
141-
}),
137+
this.setViewState(),
142138
this.loadExternalApiUsages(),
143139
this.loadExistingModeledMethods(),
144140
]);
145141
}
146142

143+
private async setViewState(): Promise<void> {
144+
await this.postMessage({
145+
t: "setDataExtensionEditorViewState",
146+
viewState: {
147+
extensionPackModelFile: this.modelFile,
148+
modelFileExists: await pathExists(this.modelFile.filename),
149+
},
150+
});
151+
}
152+
147153
protected async jumpToUsage(
148154
location: ResolvableLocationValue,
149155
): Promise<void> {

extensions/ql-vscode/src/data-extensions-editor/extension-pack-picker.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { ProgressCallback } from "../progress";
1313
import { DatabaseItem } from "../local-databases";
1414
import { getQlPackPath, QLPACK_FILENAMES } from "../pure/ql";
1515
import { getErrorMessage } from "../pure/helpers-pure";
16+
import { ExtensionPack, ExtensionPackModelFile } from "./shared/extension-pack";
1617

1718
const maxStep = 3;
1819

@@ -22,22 +23,6 @@ const packNameRegex = new RegExp(
2223
);
2324
const packNameLength = 128;
2425

25-
export interface ExtensionPack {
26-
path: string;
27-
yamlPath: string;
28-
29-
name: string;
30-
version: string;
31-
32-
extensionTargets: Record<string, string>;
33-
dataExtensions: string[];
34-
}
35-
36-
export interface ExtensionPackModelFile {
37-
filename: string;
38-
extensionPack: ExtensionPack;
39-
}
40-
4126
export async function pickExtensionPackModelFile(
4227
cliServer: Pick<CodeQLCliServer, "resolveQlpacks" | "resolveExtensions">,
4328
databaseItem: Pick<DatabaseItem, "name" | "language">,
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export interface ExtensionPack {
2+
path: string;
3+
yamlPath: string;
4+
5+
name: string;
6+
version: string;
7+
8+
extensionTargets: Record<string, string>;
9+
dataExtensions: string[];
10+
}
11+
12+
export interface ExtensionPackModelFile {
13+
filename: string;
14+
extensionPack: ExtensionPack;
15+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { ExtensionPackModelFile } from "./extension-pack";
2+
3+
export interface DataExtensionEditorViewState {
4+
extensionPackModelFile: ExtensionPackModelFile;
5+
modelFileExists: boolean;
6+
}

extensions/ql-vscode/src/databaseFetcher.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,13 +317,15 @@ async function databaseArchiveFetcher(
317317
});
318318
await ensureZippedSourceLocation(dbPath);
319319

320+
const makeSelected = true;
321+
320322
const item = await databaseManager.openDatabase(
321323
progress,
322324
token,
323325
Uri.file(dbPath),
326+
makeSelected,
324327
nameOverride,
325328
);
326-
await databaseManager.setCurrentDatabaseItem(item);
327329
return item;
328330
} else {
329331
throw new Error("Database not found in archive.");

extensions/ql-vscode/src/local-databases-ui.ts

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -306,18 +306,21 @@ export class DatabaseUI extends DisposableObject {
306306
`${workspace.workspaceFolders[0].uri}/.tours/codeql-tutorial-database`,
307307
);
308308

309-
let databaseItem = this.databaseManager.findDatabaseItem(uri);
310-
const isTutorialDatabase = true;
309+
const databaseItem = this.databaseManager.findDatabaseItem(uri);
311310
if (databaseItem === undefined) {
312-
databaseItem = await this.databaseManager.openDatabase(
311+
const makeSelected = true;
312+
const nameOverride = "CodeQL Tutorial Database";
313+
const isTutorialDatabase = true;
314+
315+
await this.databaseManager.openDatabase(
313316
progress,
314317
token,
315318
uri,
316-
"CodeQL Tutorial Database",
319+
makeSelected,
320+
nameOverride,
317321
isTutorialDatabase,
318322
);
319323
}
320-
await this.databaseManager.setCurrentDatabaseItem(databaseItem);
321324
await this.handleTourDependencies();
322325
}
323326
} catch (e) {
@@ -630,7 +633,7 @@ export class DatabaseUI extends DisposableObject {
630633
this.queryServer?.cliServer,
631634
);
632635
} else {
633-
await this.setCurrentDatabase(progress, token, uri);
636+
await this.databaseManager.openDatabase(progress, token, uri);
634637
}
635638
} catch (e) {
636639
// rethrow and let this be handled by default error handling.
@@ -752,24 +755,6 @@ export class DatabaseUI extends DisposableObject {
752755
return this.databaseManager.currentDatabaseItem;
753756
}
754757

755-
private async setCurrentDatabase(
756-
progress: ProgressCallback,
757-
token: CancellationToken,
758-
uri: Uri,
759-
): Promise<DatabaseItem | undefined> {
760-
let databaseItem = this.databaseManager.findDatabaseItem(uri);
761-
if (databaseItem === undefined) {
762-
databaseItem = await this.databaseManager.openDatabase(
763-
progress,
764-
token,
765-
uri,
766-
);
767-
}
768-
await this.databaseManager.setCurrentDatabaseItem(databaseItem);
769-
770-
return databaseItem;
771-
}
772-
773758
/**
774759
* Ask the user for a database directory. Returns the chosen database, or `undefined` if the
775760
* operation was canceled.
@@ -789,7 +774,11 @@ export class DatabaseUI extends DisposableObject {
789774
if (byFolder) {
790775
const fixedUri = await this.fixDbUri(uri);
791776
// we are selecting a database folder
792-
return await this.setCurrentDatabase(progress, token, fixedUri);
777+
return await this.databaseManager.openDatabase(
778+
progress,
779+
token,
780+
fixedUri,
781+
);
793782
} else {
794783
// we are selecting a database archive. Must unzip into a workspace-controlled area
795784
// before importing.

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,7 @@ export class DatabaseManager extends DisposableObject {
621621
progress: ProgressCallback,
622622
token: vscode.CancellationToken,
623623
uri: vscode.Uri,
624+
makeSelected = false,
624625
displayName?: string,
625626
isTutorialDatabase?: boolean,
626627
): Promise<DatabaseItem> {
@@ -629,6 +630,7 @@ export class DatabaseManager extends DisposableObject {
629630
return await this.addExistingDatabaseItem(
630631
databaseItem,
631632
progress,
633+
makeSelected,
632634
token,
633635
isTutorialDatabase,
634636
);
@@ -643,6 +645,7 @@ export class DatabaseManager extends DisposableObject {
643645
public async addExistingDatabaseItem(
644646
databaseItem: DatabaseItem,
645647
progress: ProgressCallback,
648+
makeSelected = true,
646649
token: vscode.CancellationToken,
647650
isTutorialDatabase?: boolean,
648651
): Promise<DatabaseItem> {
@@ -652,6 +655,9 @@ export class DatabaseManager extends DisposableObject {
652655
}
653656

654657
await this.addDatabaseItem(progress, token, databaseItem);
658+
if (makeSelected) {
659+
await this.setCurrentDatabaseItem(databaseItem);
660+
}
655661
await this.addDatabaseSourceArchiveFolder(databaseItem);
656662

657663
if (isCodespacesTemplate() && !isTutorialDatabase) {

0 commit comments

Comments
 (0)