Skip to content

Commit edd2aa5

Browse files
Merge branch 'main' into robertbrignull/multiple-models-method-row
2 parents 0265353 + 623df4c commit edd2aa5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1284
-435
lines changed

CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
**/* @github/codeql-vscode-reviewers
22
**/variant-analysis/ @github/code-scanning-secexp-reviewers
33
**/databases/ @github/code-scanning-secexp-reviewers
4+
**/method-modeling/ @github/code-scanning-secexp-reviewers
45
**/model-editor/ @github/code-scanning-secexp-reviewers
56
**/queries-panel/ @github/code-scanning-secexp-reviewers

extensions/ql-vscode/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
## [UNRELEASED]
44

5+
- Fix a bug where the query to Find Definitions in database source files would not be cancelled appropriately. [#2885](https://github.com/github/vscode-codeql/pull/2885)
56
- It is now possible to show the language of query history items using the `%l` specifier in the `codeQL.queryHistory.format` setting. Note that this only works for queries run after this upgrade, and older items will show `unknown` as a language. [#2892](https://github.com/github/vscode-codeql/pull/2892)
67
- Increase the required version of VS Code to 1.82.0. [#2877](https://github.com/github/vscode-codeql/pull/2877)
78
- Fix a bug where the query server was restarted twice after configuration changes. [#2884](https://github.com/github/vscode-codeql/pull/2884).
9+
- Add support for the `telemetry.telemetryLevel` setting. For more information, see the [telemetry documentation](https://codeql.github.com/docs/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code). [#2824](https://github.com/github/vscode-codeql/pull/2824).
810

911
## 1.9.1 - 29 September 2023
1012

extensions/ql-vscode/package.json

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -446,13 +446,20 @@
446446
"type": "boolean",
447447
"default": false,
448448
"scope": "application",
449-
"markdownDescription": "Specifies whether to send CodeQL usage telemetry. This setting AND the global `#telemetry.enableTelemetry#` setting must be checked for telemetry to be sent to GitHub. For more information, see the [telemetry documentation](https://codeql.github.com/docs/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code)"
449+
"markdownDescription": "Specifies whether to send CodeQL usage telemetry. This setting AND the one of the global telemetry settings (`#telemetry.enableTelemetry#` or `#telemetry.telemetryLevel#`) must be enabled for telemetry to be sent to GitHub. For more information, see the [telemetry documentation](https://codeql.github.com/docs/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code)",
450+
"tags": [
451+
"telemetry",
452+
"usesOnlineServices"
453+
]
450454
},
451455
"codeQL.telemetry.logTelemetry": {
452456
"type": "boolean",
453457
"default": false,
454458
"scope": "application",
455-
"description": "Specifies whether or not to write telemetry events to the extension log."
459+
"description": "Specifies whether or not to write telemetry events to the extension log.",
460+
"tags": [
461+
"telemetry"
462+
]
456463
}
457464
}
458465
}
@@ -1996,7 +2003,7 @@
19962003
"id": "codeQLMethodModeling",
19972004
"type": "webview",
19982005
"name": "CodeQL Method Modeling",
1999-
"when": "config.codeQL.canary && config.codeQL.model.methodModelingView && codeql.modelEditorOpen && !codeql.modelEditorActive"
2006+
"when": "config.codeQL.canary"
20002007
}
20012008
],
20022009
"codeql-methods-usage": [

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ export type PackagingCommands = {
323323

324324
export type ModelEditorCommands = {
325325
"codeQL.openModelEditor": () => Promise<void>;
326+
"codeQL.openModelEditorFromModelingPanel": () => Promise<void>;
326327
"codeQLModelEditor.jumpToUsageLocation": (
327328
method: Method,
328329
usage: Usage,

extensions/ql-vscode/src/common/disposable-object.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,16 @@ export type DisposeHandler = (disposable: Disposable) => void;
99
/**
1010
* Base class to make it easier to implement a `Disposable` that owns other disposable object.
1111
*/
12-
export abstract class DisposableObject implements Disposable {
12+
export class DisposableObject implements Disposable {
1313
private disposables: Disposable[] = [];
1414
private tracked?: Set<Disposable> = undefined;
1515

16+
constructor(...dispoables: Disposable[]) {
17+
for (const d of dispoables) {
18+
this.push(d);
19+
}
20+
}
21+
1622
/**
1723
* Adds `obj` to a list of objects to dispose when `this` is disposed. Objects added by `push` are
1824
* disposed in reverse order of being added.

extensions/ql-vscode/src/common/interface-types.ts

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ import { ErrorLike } from "../common/errors";
1919
import { DataFlowPaths } from "../variant-analysis/shared/data-flow-paths";
2020
import { Method, Usage } from "../model-editor/method";
2121
import { ModeledMethod } from "../model-editor/modeled-method";
22-
import { ModelEditorViewState } from "../model-editor/shared/view-state";
22+
import {
23+
MethodModelingPanelViewState,
24+
ModelEditorViewState,
25+
} from "../model-editor/shared/view-state";
2326
import { Mode } from "../model-editor/shared/mode";
2427
import { QueryLanguage } from "./query-language";
2528

@@ -543,8 +546,7 @@ interface RefreshMethods {
543546

544547
interface SaveModeledMethods {
545548
t: "saveModeledMethods";
546-
methods: Method[];
547-
modeledMethods: Record<string, ModeledMethod>;
549+
methodSignatures?: string[];
548550
}
549551

550552
interface GenerateMethodMessage {
@@ -577,9 +579,14 @@ interface SetModeledMethodMessage {
577579
method: ModeledMethod;
578580
}
579581

582+
interface SetInModelingModeMessage {
583+
t: "setInModelingMode";
584+
inModelingMode: boolean;
585+
}
586+
580587
interface RevealMethodMessage {
581588
t: "revealMethod";
582-
method: Method;
589+
methodSignature: string;
583590
}
584591

585592
export type ToModelEditorMessage =
@@ -610,10 +617,20 @@ interface RevealInEditorMessage {
610617
method: Method;
611618
}
612619

620+
interface StartModelingMessage {
621+
t: "startModeling";
622+
}
623+
613624
export type FromMethodModelingMessage =
614625
| CommonFromViewMessages
615626
| SetModeledMethodMessage
616-
| RevealInEditorMessage;
627+
| RevealInEditorMessage
628+
| StartModelingMessage;
629+
630+
interface SetMethodModelingPanelViewStateMessage {
631+
t: "setMethodModelingPanelViewState";
632+
viewState: MethodModelingPanelViewState;
633+
}
617634

618635
interface SetMethodMessage {
619636
t: "setMethod";
@@ -633,7 +650,9 @@ interface SetSelectedMethodMessage {
633650
}
634651

635652
export type ToMethodModelingMessage =
653+
| SetMethodModelingPanelViewStateMessage
636654
| SetMethodMessage
637655
| SetModeledMethodMessage
638656
| SetMethodModifiedMessage
639-
| SetSelectedMethodMessage;
657+
| SetSelectedMethodMessage
658+
| SetInModelingModeMessage;

extensions/ql-vscode/src/common/query-language.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,7 @@ export const PACKS_BY_QUERY_LANGUAGE = {
4040
],
4141
[QueryLanguage.Go]: ["codeql/go-queries"],
4242
[QueryLanguage.Java]: ["codeql/java-queries"],
43-
[QueryLanguage.Javascript]: [
44-
"codeql/javascript-queries",
45-
"codeql/javascript-experimental-atm-queries",
46-
],
43+
[QueryLanguage.Javascript]: ["codeql/javascript-queries"],
4744
[QueryLanguage.Python]: ["codeql/python-queries"],
4845
[QueryLanguage.Ruby]: ["codeql/ruby-queries"],
4946
};

extensions/ql-vscode/src/common/vscode/abstract-webview-view-provider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export abstract class AbstractWebviewViewProvider<
1313
private disposables: Disposable[] = [];
1414

1515
constructor(
16-
private readonly app: App,
16+
protected readonly app: App,
1717
private readonly webviewKind: WebviewKind,
1818
) {}
1919

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { CancellationToken, Disposable } from "vscode";
2+
import { DisposableObject } from "../disposable-object";
3+
4+
/**
5+
* A cancellation token that cancels when any of its constituent
6+
* cancellation tokens are cancelled.
7+
*/
8+
export class MultiCancellationToken implements CancellationToken {
9+
private readonly tokens: CancellationToken[];
10+
11+
constructor(...tokens: CancellationToken[]) {
12+
this.tokens = tokens;
13+
}
14+
15+
get isCancellationRequested(): boolean {
16+
return this.tokens.some((t) => t.isCancellationRequested);
17+
}
18+
19+
onCancellationRequested<T>(listener: (e: T) => any): Disposable {
20+
return new DisposableObject(
21+
...this.tokens.map((t) => t.onCancellationRequested(listener)),
22+
);
23+
}
24+
}

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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import {
33
Extension,
44
ExtensionContext,
55
ConfigurationChangeEvent,
6+
env,
67
} from "vscode";
78
import TelemetryReporter from "vscode-extension-telemetry";
89
import {
910
ConfigListener,
1011
CANARY_FEATURES,
1112
ENABLE_TELEMETRY,
12-
GLOBAL_ENABLE_TELEMETRY,
1313
LOG_TELEMETRY,
1414
isIntegrationTestMode,
1515
isCanary,
@@ -59,8 +59,6 @@ export class ExtensionTelemetryListener
5959
extends ConfigListener
6060
implements AppTelemetry
6161
{
62-
static relevantSettings = [ENABLE_TELEMETRY, CANARY_FEATURES];
63-
6462
private reporter?: TelemetryReporter;
6563

6664
private cliVersionStr = NOT_SET_CLI_VERSION;
@@ -72,6 +70,10 @@ export class ExtensionTelemetryListener
7270
private readonly ctx: ExtensionContext,
7371
) {
7472
super();
73+
74+
env.onDidChangeTelemetryEnabled(async () => {
75+
await this.initialize();
76+
});
7577
}
7678

7779
/**
@@ -91,18 +93,15 @@ export class ExtensionTelemetryListener
9193
async handleDidChangeConfiguration(
9294
e: ConfigurationChangeEvent,
9395
): Promise<void> {
94-
if (
95-
e.affectsConfiguration("codeQL.telemetry.enableTelemetry") ||
96-
e.affectsConfiguration("telemetry.enableTelemetry")
97-
) {
96+
if (e.affectsConfiguration(ENABLE_TELEMETRY.qualifiedName)) {
9897
await this.initialize();
9998
}
10099

101100
// Re-request telemetry so that users can see the dialog again.
102101
// Re-request if codeQL.canary is being set to `true` and telemetry
103102
// is not currently enabled.
104103
if (
105-
e.affectsConfiguration("codeQL.canary") &&
104+
e.affectsConfiguration(CANARY_FEATURES.qualifiedName) &&
106105
CANARY_FEATURES.getValue() &&
107106
!ENABLE_TELEMETRY.getValue()
108107
) {
@@ -212,7 +211,7 @@ export class ExtensionTelemetryListener
212211
properties.stack = error.stack;
213212
}
214213

215-
this.reporter.sendTelemetryEvent("error", properties, {});
214+
this.reporter.sendTelemetryErrorEvent("error", properties, {});
216215
}
217216

218217
/**
@@ -224,7 +223,7 @@ export class ExtensionTelemetryListener
224223
// if global telemetry is disabled, avoid showing the dialog or making any changes
225224
let result = undefined;
226225
if (
227-
GLOBAL_ENABLE_TELEMETRY.getValue() &&
226+
env.isTelemetryEnabled &&
228227
// Avoid showing the dialog if we are in integration test mode.
229228
!isIntegrationTestMode()
230229
) {

0 commit comments

Comments
 (0)