Skip to content

Commit ff405a6

Browse files
committed
Merge remote-tracking branch 'origin/main' into koesie10/use-query-in-extension
2 parents 0a304f6 + d861772 commit ff405a6

32 files changed

+4666
-951
lines changed

extensions/ql-vscode/package-lock.json

Lines changed: 3964 additions & 515 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

extensions/ql-vscode/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1497,7 +1497,7 @@
14971497
"@storybook/addon-essentials": "^6.5.17-alpha.0",
14981498
"@storybook/addon-interactions": "^6.5.17-alpha.0",
14991499
"@storybook/addon-links": "^6.5.17-alpha.0",
1500-
"@storybook/builder-webpack5": "^6.5.17-alpha.0",
1500+
"@storybook/builder-webpack5": "^7.0.4",
15011501
"@storybook/manager-webpack5": "^6.5.17-alpha.0",
15021502
"@storybook/react": "^6.5.17-alpha.0",
15031503
"@storybook/testing-library": "^0.0.13",
@@ -1531,7 +1531,7 @@
15311531
"@types/through2": "^2.0.36",
15321532
"@types/tmp": "^0.1.0",
15331533
"@types/unzipper": "~0.10.1",
1534-
"@types/vscode": "^1.59.0",
1534+
"@types/vscode": "^1.67.0",
15351535
"@types/webpack": "^5.28.0",
15361536
"@types/webpack-env": "^1.18.0",
15371537
"@types/xml2js": "~0.4.4",

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import {
1414
import { ProgressUpdate } from "../progress";
1515
import { QueryRunner } from "../queryRunner";
1616
import {
17+
showAndLogErrorMessage,
1718
showAndLogExceptionWithTelemetry,
18-
showAndLogWarningMessage,
1919
} from "../helpers";
2020
import { extLogger } from "../common";
2121
import { readFile, writeFile } from "fs-extra";
@@ -166,7 +166,9 @@ export class DataExtensionsEditorView extends AbstractWebview<
166166
const existingModeledMethods = loadDataExtensionYaml(data);
167167

168168
if (!existingModeledMethods) {
169-
void showAndLogWarningMessage("Failed to parse data extension YAML.");
169+
void showAndLogErrorMessage(
170+
`Failed to parse data extension YAML ${this.modelFilename}.`,
171+
);
170172
return;
171173
}
172174

@@ -175,7 +177,11 @@ export class DataExtensionsEditorView extends AbstractWebview<
175177
modeledMethods: existingModeledMethods,
176178
});
177179
} catch (e: unknown) {
178-
void extLogger.log(`Unable to read data extension YAML: ${e}`);
180+
void showAndLogErrorMessage(
181+
`Unable to read data extension YAML ${
182+
this.modelFilename
183+
}: ${getErrorMessage(e)}`,
184+
);
179185
}
180186
}
181187

@@ -207,7 +213,6 @@ export class DataExtensionsEditorView extends AbstractWebview<
207213
const bqrsChunk = await readQueryResults({
208214
cliServer: this.cliServer,
209215
bqrsPath: queryResult.outputDir.bqrsPath,
210-
logger: extLogger,
211216
});
212217
if (!bqrsChunk) {
213218
await this.clearProgress();
@@ -232,7 +237,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
232237
void showAndLogExceptionWithTelemetry(
233238
redactableError(
234239
asError(err),
235-
)`Failed to load external APi usages: ${getErrorMessage(err)}`,
240+
)`Failed to load external API usages: ${getErrorMessage(err)}`,
236241
);
237242
}
238243
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
"type": "object",
3+
"properties": {
4+
"extensions": {
5+
"type": "array",
6+
"items": {
7+
"type": "object",
8+
"required": ["addsTo", "data"],
9+
"properties": {
10+
"addsTo": {
11+
"type": "object",
12+
"required": ["pack", "extensible"],
13+
"properties": {
14+
"pack": {
15+
"type": "string"
16+
},
17+
"extensible": {
18+
"type": "string"
19+
}
20+
}
21+
},
22+
"data": {
23+
"type": "array",
24+
"items": {
25+
"type": "array",
26+
"items": {
27+
"oneOf": [
28+
{
29+
"type": "string"
30+
},
31+
{
32+
"type": "boolean"
33+
},
34+
{
35+
"type": "number"
36+
}
37+
]
38+
}
39+
}
40+
}
41+
}
42+
}
43+
}
44+
}
45+
}

extensions/ql-vscode/src/data-extensions-editor/external-api-usage-query.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
getOnDiskWorkspaceFolders,
77
showAndLogExceptionWithTelemetry,
88
} from "../helpers";
9-
import { Logger, TeeLogger } from "../common";
9+
import { TeeLogger } from "../common";
1010
import { CancellationToken } from "vscode";
1111
import { CodeQLCliServer } from "../cli";
1212
import { DatabaseItem } from "../local-databases";
@@ -108,18 +108,16 @@ export async function runQuery({
108108
export type GetResultsOptions = {
109109
cliServer: Pick<CodeQLCliServer, "bqrsInfo" | "bqrsDecode">;
110110
bqrsPath: string;
111-
logger: Logger;
112111
};
113112

114113
export async function readQueryResults({
115114
cliServer,
116115
bqrsPath,
117-
logger,
118116
}: GetResultsOptions) {
119117
const bqrsInfo = await cliServer.bqrsInfo(bqrsPath);
120118
if (bqrsInfo["result-sets"].length !== 1) {
121-
void logger.log(
122-
`Expected exactly one result set, got ${bqrsInfo["result-sets"].length}`,
119+
void showAndLogExceptionWithTelemetry(
120+
redactableError`Expected exactly one result set, got ${bqrsInfo["result-sets"].length}`,
123121
);
124122
return undefined;
125123
}

extensions/ql-vscode/src/data-extensions-editor/generate-flow-model.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,16 @@ import { CodeQLCliServer } from "../cli";
66
import { TeeLogger } from "../common";
77
import { extensiblePredicateDefinitions } from "./yaml";
88
import { ProgressCallback } from "../progress";
9-
import { getOnDiskWorkspaceFolders } from "../helpers";
9+
import {
10+
getOnDiskWorkspaceFolders,
11+
showAndLogExceptionWithTelemetry,
12+
} from "../helpers";
1013
import {
1114
ModeledMethodType,
1215
ModeledMethodWithSignature,
1316
} from "./modeled-method";
17+
import { redactableError } from "../pure/errors";
18+
import { QueryResultType } from "../pure/new-messages";
1419

1520
type FlowModelOptions = {
1621
cliServer: CodeQLCliServer;
@@ -67,13 +72,21 @@ async function getModeledMethodsFromFlow(
6772
token,
6873
new TeeLogger(queryRunner.logger, queryRun.outputDir.logPath),
6974
);
75+
if (queryResult.resultType !== QueryResultType.SUCCESS) {
76+
void showAndLogExceptionWithTelemetry(
77+
redactableError`Failed to run ${queryName} query: ${
78+
queryResult.message ?? "No message"
79+
}`,
80+
);
81+
return [];
82+
}
7083

7184
const bqrsPath = queryResult.outputDir.bqrsPath;
7285

7386
const bqrsInfo = await cliServer.bqrsInfo(bqrsPath);
7487
if (bqrsInfo["result-sets"].length !== 1) {
75-
throw new Error(
76-
`Expected exactly one result set, got ${bqrsInfo["result-sets"].length}`,
88+
void showAndLogExceptionWithTelemetry(
89+
redactableError`Expected exactly one result set, got ${bqrsInfo["result-sets"].length} for ${queryName}`,
7790
);
7891
}
7992

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

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1+
import Ajv from "ajv";
2+
13
import { ExternalApiUsage } from "./external-api-usage";
24
import {
35
ModeledMethod,
46
ModeledMethodType,
57
ModeledMethodWithSignature,
68
} from "./modeled-method";
79

10+
import * as dataSchemaJson from "./data-schema.json";
11+
12+
const ajv = new Ajv({ allErrors: true });
13+
const dataSchemaValidate = ajv.compile(dataSchemaJson);
14+
815
type ExternalApiUsageByType = {
916
externalApiUsage: ExternalApiUsage;
1017
modeledMethod: ModeledMethod;
@@ -191,8 +198,14 @@ ${extensions.join("\n")}`;
191198
export function loadDataExtensionYaml(
192199
data: any,
193200
): Record<string, ModeledMethod> | undefined {
194-
if (typeof data !== "object") {
195-
return undefined;
201+
dataSchemaValidate(data);
202+
203+
if (dataSchemaValidate.errors) {
204+
throw new Error(
205+
`Invalid data extension YAML: ${dataSchemaValidate.errors
206+
.map((error) => `${error.instancePath} ${error.message}`)
207+
.join(", ")}`,
208+
);
196209
}
197210

198211
const extensions = data.extensions;
@@ -204,19 +217,8 @@ export function loadDataExtensionYaml(
204217

205218
for (const extension of extensions) {
206219
const addsTo = extension.addsTo;
207-
if (typeof addsTo !== "object") {
208-
continue;
209-
}
210-
211220
const extensible = addsTo.extensible;
212-
if (typeof extensible !== "string") {
213-
continue;
214-
}
215-
216221
const data = extension.data;
217-
if (!Array.isArray(data)) {
218-
continue;
219-
}
220222

221223
const definition = Object.values(extensiblePredicateDefinitions).find(
222224
(definition) => definition.extensiblePredicate === extensible,

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ import { DatabasePanelCommands } from "../../common/commands";
3434
import { App } from "../../common/app";
3535

3636
export interface RemoteDatabaseQuickPickItem extends QuickPickItem {
37-
kind: string;
37+
remoteDatabaseKind: string;
3838
}
3939

4040
export interface AddListQuickPickItem extends QuickPickItem {
41-
kind: DbListKind;
41+
databaseKind: DbListKind;
4242
}
4343

4444
export class DbPanel extends DisposableObject {
@@ -113,19 +113,19 @@ export class DbPanel extends DisposableObject {
113113
) {
114114
await this.addNewRemoteRepo(highlightedItem.parentListName);
115115
} else {
116-
const quickPickItems = [
116+
const quickPickItems: RemoteDatabaseQuickPickItem[] = [
117117
{
118118
label: "$(repo) From a GitHub repository",
119119
detail: "Add a variant analysis repository from GitHub",
120120
alwaysShow: true,
121-
kind: "repo",
121+
remoteDatabaseKind: "repo",
122122
},
123123
{
124124
label: "$(organization) All repositories of a GitHub org or owner",
125125
detail:
126126
"Add a variant analysis list of repositories from a GitHub organization/owner",
127127
alwaysShow: true,
128-
kind: "owner",
128+
remoteDatabaseKind: "owner",
129129
},
130130
];
131131
const databaseKind =
@@ -142,9 +142,9 @@ export class DbPanel extends DisposableObject {
142142
// We set 'true' to make this a silent exception.
143143
throw new UserCancellationException("No repository selected", true);
144144
}
145-
if (databaseKind.kind === "repo") {
145+
if (databaseKind.remoteDatabaseKind === "repo") {
146146
await this.addNewRemoteRepo();
147-
} else if (databaseKind.kind === "owner") {
147+
} else if (databaseKind.remoteDatabaseKind === "owner") {
148148
await this.addNewRemoteOwner();
149149
}
150150
}

extensions/ql-vscode/src/query-history/query-history-manager.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,7 @@ import {
3939
QueryStatus,
4040
variantAnalysisStatusToQueryStatus,
4141
} from "../query-status";
42-
import {
43-
readQueryHistoryFromFile,
44-
writeQueryHistoryToFile,
45-
} from "./store/query-history-store";
42+
import { readQueryHistoryFromFile, writeQueryHistoryToFile } from "./store";
4643
import { pathExists } from "fs-extra";
4744
import { CliVersionConstraint } from "../cli";
4845
import { HistoryItemLabelProvider } from "./history-item-label-provider";

0 commit comments

Comments
 (0)