Skip to content

Commit a7800ce

Browse files
Merge branch 'main' into elena/force-workspace-in-codespace
2 parents 8fd9ebf + 168af11 commit a7800ce

File tree

17 files changed

+526
-515
lines changed

17 files changed

+526
-515
lines changed

extensions/ql-vscode/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## [UNRELEASED]
44

55
- Show data flow paths of a variant analysis in a new tab
6+
- Show labels of entities in exported CSV results [#2170](https://github.com/github/vscode-codeql/pull/2170)
67

78
## 1.8.0 - 9 March 2023
89

extensions/ql-vscode/src/common/commands.ts

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import type { CommandManager } from "../packages/commands";
22
import type { Uri } from "vscode";
3+
import type { DbTreeViewItem } from "../databases/ui/db-tree-view-item";
4+
import type { DatabaseItem } from "../local-databases";
35
import type { QueryHistoryInfo } from "../query-history/query-history-info";
46

57
// A command function matching the signature that VS Code calls when
@@ -9,6 +11,12 @@ export type SelectionCommandFunction<Item> = (
911
multiSelect: Item[],
1012
) => Promise<void>;
1113

14+
// A command function matching the signature that VS Code calls when
15+
// a command on a selection is invoked when canSelectMany is false.
16+
export type SingleSelectionCommandFunction<Item> = (
17+
singleItem: Item,
18+
) => Promise<void>;
19+
1220
/**
1321
* Contains type definitions for all commands used by the extension.
1422
*
@@ -53,6 +61,31 @@ export type QueryHistoryCommands = {
5361
"codeQLQueryHistory.copyRepoList": SelectionCommandFunction<QueryHistoryInfo>;
5462
};
5563

64+
// Commands used for the local databases panel
65+
export type LocalDatabasesCommands = {
66+
"codeQL.setCurrentDatabase": (uri: Uri) => Promise<void>;
67+
"codeQL.setDefaultTourDatabase": () => Promise<void>;
68+
"codeQL.upgradeCurrentDatabase": () => Promise<void>;
69+
"codeQL.clearCache": () => Promise<void>;
70+
71+
"codeQLDatabases.chooseDatabaseFolder": () => Promise<void>;
72+
"codeQLDatabases.chooseDatabaseArchive": () => Promise<void>;
73+
"codeQLDatabases.chooseDatabaseInternet": () => Promise<void>;
74+
"codeQLDatabases.chooseDatabaseGithub": () => Promise<void>;
75+
"codeQLDatabases.setCurrentDatabase": (
76+
databaseItem: DatabaseItem,
77+
) => Promise<void>;
78+
"codeQLDatabases.sortByName": () => Promise<void>;
79+
"codeQLDatabases.sortByDateAdded": () => Promise<void>;
80+
"codeQLDatabases.removeOrphanedDatabases": () => Promise<void>;
81+
82+
"codeQLDatabases.removeDatabase": SelectionCommandFunction<DatabaseItem>;
83+
"codeQLDatabases.upgradeDatabase": SelectionCommandFunction<DatabaseItem>;
84+
"codeQLDatabases.renameDatabase": SelectionCommandFunction<DatabaseItem>;
85+
"codeQLDatabases.openDatabaseFolder": SelectionCommandFunction<DatabaseItem>;
86+
"codeQLDatabases.addDatabaseSource": SelectionCommandFunction<DatabaseItem>;
87+
};
88+
5689
// Commands tied to variant analysis
5790
export type VariantAnalysisCommands = {
5891
"codeQL.openVariantAnalysisLogs": (
@@ -62,8 +95,23 @@ export type VariantAnalysisCommands = {
6295
"codeQL.runVariantAnalysisContextEditor": (uri?: Uri) => Promise<void>;
6396
};
6497

98+
export type DatabasePanelCommands = {
99+
"codeQLVariantAnalysisRepositories.openConfigFile": () => Promise<void>;
100+
"codeQLVariantAnalysisRepositories.addNewDatabase": () => Promise<void>;
101+
"codeQLVariantAnalysisRepositories.addNewList": () => Promise<void>;
102+
"codeQLVariantAnalysisRepositories.setupControllerRepository": () => Promise<void>;
103+
104+
"codeQLVariantAnalysisRepositories.setSelectedItem": SingleSelectionCommandFunction<DbTreeViewItem>;
105+
"codeQLVariantAnalysisRepositories.setSelectedItemContextMenu": SingleSelectionCommandFunction<DbTreeViewItem>;
106+
"codeQLVariantAnalysisRepositories.openOnGitHubContextMenu": SingleSelectionCommandFunction<DbTreeViewItem>;
107+
"codeQLVariantAnalysisRepositories.renameItemContextMenu": SingleSelectionCommandFunction<DbTreeViewItem>;
108+
"codeQLVariantAnalysisRepositories.removeItemContextMenu": SingleSelectionCommandFunction<DbTreeViewItem>;
109+
};
110+
65111
export type AllCommands = BaseCommands &
66112
QueryHistoryCommands &
67-
VariantAnalysisCommands;
113+
LocalDatabasesCommands &
114+
VariantAnalysisCommands &
115+
DatabasePanelCommands;
68116

69117
export type AppCommandManager = CommandManager<AllCommands>;

extensions/ql-vscode/src/databases/db-module.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import { DbConfigStore } from "./config/db-config-store";
66
import { DbManager } from "./db-manager";
77
import { DbPanel } from "./ui/db-panel";
88
import { DbSelectionDecorationProvider } from "./ui/db-selection-decoration-provider";
9+
import { DatabasePanelCommands } from "../common/commands";
910

1011
export class DbModule extends DisposableObject {
1112
public readonly dbManager: DbManager;
1213
private readonly dbConfigStore: DbConfigStore;
14+
private dbPanel: DbPanel | undefined;
1315

1416
private constructor(app: App) {
1517
super();
@@ -26,15 +28,24 @@ export class DbModule extends DisposableObject {
2628
return dbModule;
2729
}
2830

31+
public getCommands(): DatabasePanelCommands {
32+
if (!this.dbPanel) {
33+
throw new Error("Database panel not initialized");
34+
}
35+
36+
return {
37+
...this.dbPanel.getCommands(),
38+
};
39+
}
40+
2941
private async initialize(app: App): Promise<void> {
3042
void extLogger.log("Initializing database module");
3143

3244
await this.dbConfigStore.initialize();
3345

34-
const dbPanel = new DbPanel(this.dbManager, app.credentials);
35-
await dbPanel.initialize();
46+
this.dbPanel = new DbPanel(this.dbManager, app.credentials);
3647

37-
this.push(dbPanel);
48+
this.push(this.dbPanel);
3849
this.push(this.dbConfigStore);
3950

4051
const dbSelectionDecorationProvider = new DbSelectionDecorationProvider();

extensions/ql-vscode/src/databases/ui/db-panel.ts

Lines changed: 24 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
window,
88
workspace,
99
} from "vscode";
10-
import { commandRunner, UserCancellationException } from "../../commandRunner";
10+
import { UserCancellationException } from "../../commandRunner";
1111
import {
1212
getNwoFromGitHubUrl,
1313
isValidGitHubNwo,
@@ -32,6 +32,7 @@ import { getGitHubUrl } from "./db-tree-view-item-action";
3232
import { getControllerRepo } from "../../variant-analysis/run-remote-query";
3333
import { getErrorMessage } from "../../pure/helpers-pure";
3434
import { Credentials } from "../../common/authentication";
35+
import { DatabasePanelCommands } from "../../common/commands";
3536

3637
export interface RemoteDatabaseQuickPickItem extends QuickPickItem {
3738
kind: string;
@@ -72,58 +73,28 @@ export class DbPanel extends DisposableObject {
7273
this.push(this.treeView);
7374
}
7475

75-
public async initialize(): Promise<void> {
76-
this.push(
77-
commandRunner("codeQLVariantAnalysisRepositories.openConfigFile", () =>
78-
this.openConfigFile(),
79-
),
80-
);
81-
this.push(
82-
commandRunner("codeQLVariantAnalysisRepositories.addNewDatabase", () =>
83-
this.addNewRemoteDatabase(),
84-
),
85-
);
86-
this.push(
87-
commandRunner("codeQLVariantAnalysisRepositories.addNewList", () =>
88-
this.addNewList(),
89-
),
90-
);
91-
this.push(
92-
commandRunner(
93-
"codeQLVariantAnalysisRepositories.setSelectedItem",
94-
(treeViewItem: DbTreeViewItem) => this.setSelectedItem(treeViewItem),
95-
),
96-
);
97-
this.push(
98-
commandRunner(
99-
"codeQLVariantAnalysisRepositories.setSelectedItemContextMenu",
100-
(treeViewItem: DbTreeViewItem) => this.setSelectedItem(treeViewItem),
101-
),
102-
);
103-
this.push(
104-
commandRunner(
105-
"codeQLVariantAnalysisRepositories.openOnGitHubContextMenu",
106-
(treeViewItem: DbTreeViewItem) => this.openOnGitHub(treeViewItem),
107-
),
108-
);
109-
this.push(
110-
commandRunner(
111-
"codeQLVariantAnalysisRepositories.renameItemContextMenu",
112-
(treeViewItem: DbTreeViewItem) => this.renameItem(treeViewItem),
113-
),
114-
);
115-
this.push(
116-
commandRunner(
117-
"codeQLVariantAnalysisRepositories.removeItemContextMenu",
118-
(treeViewItem: DbTreeViewItem) => this.removeItem(treeViewItem),
119-
),
120-
);
121-
this.push(
122-
commandRunner(
123-
"codeQLVariantAnalysisRepositories.setupControllerRepository",
124-
() => this.setupControllerRepository(),
125-
),
126-
);
76+
public getCommands(): DatabasePanelCommands {
77+
return {
78+
"codeQLVariantAnalysisRepositories.openConfigFile":
79+
this.openConfigFile.bind(this),
80+
"codeQLVariantAnalysisRepositories.addNewDatabase":
81+
this.addNewRemoteDatabase.bind(this),
82+
"codeQLVariantAnalysisRepositories.addNewList":
83+
this.addNewList.bind(this),
84+
"codeQLVariantAnalysisRepositories.setupControllerRepository":
85+
this.setupControllerRepository.bind(this),
86+
87+
"codeQLVariantAnalysisRepositories.setSelectedItem":
88+
this.setSelectedItem.bind(this),
89+
"codeQLVariantAnalysisRepositories.setSelectedItemContextMenu":
90+
this.setSelectedItem.bind(this),
91+
"codeQLVariantAnalysisRepositories.openOnGitHubContextMenu":
92+
this.openOnGitHub.bind(this),
93+
"codeQLVariantAnalysisRepositories.renameItemContextMenu":
94+
this.renameItem.bind(this),
95+
"codeQLVariantAnalysisRepositories.removeItemContextMenu":
96+
this.removeItem.bind(this),
97+
};
12798
}
12899

129100
private async openConfigFile(): Promise<void> {

extensions/ql-vscode/src/extension.ts

Lines changed: 8 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import { CodeQLCliServer } from "./cli";
3535
import {
3636
CliConfigListener,
3737
DistributionConfigListener,
38-
isCanary,
3938
joinOrderWarningThreshold,
4039
MAX_QUERIES,
4140
QueryHistoryConfigListener,
@@ -110,10 +109,7 @@ import {
110109
handleInstallPackDependencies,
111110
} from "./packaging";
112111
import { HistoryItemLabelProvider } from "./query-history/history-item-label-provider";
113-
import {
114-
exportSelectedVariantAnalysisResults,
115-
exportVariantAnalysisResults,
116-
} from "./variant-analysis/export-results";
112+
import { exportSelectedVariantAnalysisResults } from "./variant-analysis/export-results";
117113
import { EvalLogViewer } from "./eval-log-viewer";
118114
import { SummaryLanguageSupport } from "./log-insights/summary-language-support";
119115
import { JoinOrderScannerProvider } from "./log-insights/join-order";
@@ -651,7 +647,6 @@ async function activateWithInstalledDistribution(
651647
getContextStoragePath(ctx),
652648
ctx.extensionPath,
653649
);
654-
databaseUI.init();
655650
ctx.subscriptions.push(databaseUI);
656651

657652
void extLogger.log("Initializing evaluator log viewer.");
@@ -1105,6 +1100,8 @@ async function activateWithInstalledDistribution(
11051100
...getCommands(),
11061101
...qhm.getCommands(),
11071102
...variantAnalysisManager.getCommands(),
1103+
...databaseUI.getCommands(),
1104+
...dbModule.getCommands(),
11081105
};
11091106

11101107
for (const [commandName, command] of Object.entries(allCommands)) {
@@ -1157,35 +1154,10 @@ async function activateWithInstalledDistribution(
11571154

11581155
ctx.subscriptions.push(
11591156
commandRunner("codeQL.exportSelectedVariantAnalysisResults", async () => {
1160-
await exportSelectedVariantAnalysisResults(qhm);
1157+
await exportSelectedVariantAnalysisResults(variantAnalysisManager, qhm);
11611158
}),
11621159
);
11631160

1164-
ctx.subscriptions.push(
1165-
commandRunnerWithProgress(
1166-
"codeQL.exportVariantAnalysisResults",
1167-
async (
1168-
progress: ProgressCallback,
1169-
token: CancellationToken,
1170-
variantAnalysisId: number,
1171-
filterSort?: RepositoriesFilterSortStateWithIds,
1172-
) => {
1173-
await exportVariantAnalysisResults(
1174-
variantAnalysisManager,
1175-
variantAnalysisId,
1176-
filterSort,
1177-
app.credentials,
1178-
progress,
1179-
token,
1180-
);
1181-
},
1182-
{
1183-
title: "Exporting variant analysis results",
1184-
cancellable: true,
1185-
},
1186-
),
1187-
);
1188-
11891161
ctx.subscriptions.push(
11901162
commandRunner(
11911163
"codeQL.loadVariantAnalysisRepoResults",
@@ -1261,7 +1233,7 @@ async function activateWithInstalledDistribution(
12611233
commandRunnerWithProgress(
12621234
"codeQL.chooseDatabaseFolder",
12631235
(progress: ProgressCallback, token: CancellationToken) =>
1264-
databaseUI.handleChooseDatabaseFolder(progress, token),
1236+
databaseUI.chooseDatabaseFolder(progress, token),
12651237
{
12661238
title: "Choose a Database from a Folder",
12671239
},
@@ -1271,7 +1243,7 @@ async function activateWithInstalledDistribution(
12711243
commandRunnerWithProgress(
12721244
"codeQL.chooseDatabaseArchive",
12731245
(progress: ProgressCallback, token: CancellationToken) =>
1274-
databaseUI.handleChooseDatabaseArchive(progress, token),
1246+
databaseUI.chooseDatabaseArchive(progress, token),
12751247
{
12761248
title: "Choose a Database from an Archive",
12771249
},
@@ -1281,12 +1253,7 @@ async function activateWithInstalledDistribution(
12811253
commandRunnerWithProgress(
12821254
"codeQL.chooseDatabaseGithub",
12831255
async (progress: ProgressCallback, token: CancellationToken) => {
1284-
const credentials = isCanary() ? app.credentials : undefined;
1285-
await databaseUI.handleChooseDatabaseGithub(
1286-
credentials,
1287-
progress,
1288-
token,
1289-
);
1256+
await databaseUI.chooseDatabaseGithub(progress, token);
12901257
},
12911258
{
12921259
title: "Adding database from GitHub",
@@ -1297,7 +1264,7 @@ async function activateWithInstalledDistribution(
12971264
commandRunnerWithProgress(
12981265
"codeQL.chooseDatabaseInternet",
12991266
(progress: ProgressCallback, token: CancellationToken) =>
1300-
databaseUI.handleChooseDatabaseInternet(progress, token),
1267+
databaseUI.chooseDatabaseInternet(progress, token),
13011268

13021269
{
13031270
title: "Adding database from URL",

0 commit comments

Comments
 (0)