Skip to content

Commit a861346

Browse files
author
Dave Bartolomeo
authored
Merge branch 'main' into dbartol/passthru
2 parents d4cbfbb + 86b2157 commit a861346

Some content is hidden

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

42 files changed

+1205
-371
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
@@ -6,6 +6,8 @@
66
- 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)
77
- Increase the required version of VS Code to 1.82.0. [#2877](https://github.com/github/vscode-codeql/pull/2877)
88
- 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).
10+
- Fix syntax highlighting directly after import statements with instantiation arguments. [#2792](https://github.com/github/vscode-codeql/pull/2792)
911

1012
## 1.9.1 - 29 September 2023
1113

extensions/ql-vscode/package.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -450,13 +450,20 @@
450450
"type": "boolean",
451451
"default": false,
452452
"scope": "application",
453-
"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)"
453+
"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)",
454+
"tags": [
455+
"telemetry",
456+
"usesOnlineServices"
457+
]
454458
},
455459
"codeQL.telemetry.logTelemetry": {
456460
"type": "boolean",
457461
"default": false,
458462
"scope": "application",
459-
"description": "Specifies whether or not to write telemetry events to the extension log."
463+
"description": "Specifies whether or not to write telemetry events to the extension log.",
464+
"tags": [
465+
"telemetry"
466+
]
460467
}
461468
}
462469
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -546,8 +546,7 @@ interface RefreshMethods {
546546

547547
interface SaveModeledMethods {
548548
t: "saveModeledMethods";
549-
methods: Method[];
550-
modeledMethods: Record<string, ModeledMethod>;
549+
methodSignatures?: string[];
551550
}
552551

553552
interface GenerateMethodMessage {
@@ -587,7 +586,7 @@ interface SetInModelingModeMessage {
587586

588587
interface RevealMethodMessage {
589588
t: "revealMethod";
590-
method: Method;
589+
methodSignature: string;
591590
}
592591

593592
export type ToModelEditorMessage =

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
) {

extensions/ql-vscode/src/config.ts

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -72,27 +72,15 @@ export const VSCODE_SAVE_BEFORE_START_SETTING = new Setting(
7272

7373
const ROOT_SETTING = new Setting("codeQL");
7474

75-
// Global configuration
75+
// Telemetry configuration
7676
const TELEMETRY_SETTING = new Setting("telemetry", ROOT_SETTING);
77-
const AST_VIEWER_SETTING = new Setting("astViewer", ROOT_SETTING);
78-
const CONTEXTUAL_QUERIES_SETTINGS = new Setting(
79-
"contextualQueries",
80-
ROOT_SETTING,
81-
);
82-
const GLOBAL_TELEMETRY_SETTING = new Setting("telemetry");
83-
const LOG_INSIGHTS_SETTING = new Setting("logInsights", ROOT_SETTING);
8477

8578
export const LOG_TELEMETRY = new Setting("logTelemetry", TELEMETRY_SETTING);
8679
export const ENABLE_TELEMETRY = new Setting(
8780
"enableTelemetry",
8881
TELEMETRY_SETTING,
8982
);
9083

91-
export const GLOBAL_ENABLE_TELEMETRY = new Setting(
92-
"enableTelemetry",
93-
GLOBAL_TELEMETRY_SETTING,
94-
);
95-
9684
// Distribution configuration
9785
const DISTRIBUTION_SETTING = new Setting("cli", ROOT_SETTING);
9886
export const CUSTOM_CODEQL_PATH_SETTING = new Setting(
@@ -475,6 +463,7 @@ export function allowCanaryQueryServer() {
475463
return value === undefined ? true : !!value;
476464
}
477465

466+
const LOG_INSIGHTS_SETTING = new Setting("logInsights", ROOT_SETTING);
478467
export const JOIN_ORDER_WARNING_THRESHOLD = new Setting(
479468
"joinOrderWarningThreshold",
480469
LOG_INSIGHTS_SETTING,
@@ -484,6 +473,7 @@ export function joinOrderWarningThreshold(): number {
484473
return JOIN_ORDER_WARNING_THRESHOLD.getValue<number>();
485474
}
486475

476+
const AST_VIEWER_SETTING = new Setting("astViewer", ROOT_SETTING);
487477
/**
488478
* Hidden setting: Avoids caching in the AST viewer if the user is also a canary user.
489479
*/
@@ -492,6 +482,10 @@ export const NO_CACHE_AST_VIEWER = new Setting(
492482
AST_VIEWER_SETTING,
493483
);
494484

485+
const CONTEXTUAL_QUERIES_SETTINGS = new Setting(
486+
"contextualQueries",
487+
ROOT_SETTING,
488+
);
495489
/**
496490
* Hidden setting: Avoids caching in jump to def and find refs contextual queries if the user is also a canary user.
497491
*/
@@ -711,20 +705,33 @@ const LLM_GENERATION = new Setting("llmGeneration", MODEL_SETTING);
711705
const EXTENSIONS_DIRECTORY = new Setting("extensionsDirectory", MODEL_SETTING);
712706
const SHOW_MULTIPLE_MODELS = new Setting("showMultipleModels", MODEL_SETTING);
713707

714-
export function showFlowGeneration(): boolean {
715-
return !!FLOW_GENERATION.getValue<boolean>();
708+
export interface ModelConfig {
709+
flowGeneration: boolean;
710+
llmGeneration: boolean;
711+
getExtensionsDirectory(languageId: string): string | undefined;
712+
showMultipleModels: boolean;
716713
}
717714

718-
export function showLlmGeneration(): boolean {
719-
return !!LLM_GENERATION.getValue<boolean>();
720-
}
715+
export class ModelConfigListener extends ConfigListener implements ModelConfig {
716+
protected handleDidChangeConfiguration(e: ConfigurationChangeEvent): void {
717+
this.handleDidChangeConfigurationForRelevantSettings([MODEL_SETTING], e);
718+
}
721719

722-
export function getExtensionsDirectory(languageId: string): string | undefined {
723-
return EXTENSIONS_DIRECTORY.getValue<string>({
724-
languageId,
725-
});
726-
}
720+
public get flowGeneration(): boolean {
721+
return !!FLOW_GENERATION.getValue<boolean>();
722+
}
723+
724+
public get llmGeneration(): boolean {
725+
return !!LLM_GENERATION.getValue<boolean>();
726+
}
727727

728-
export function showMultipleModels(): boolean {
729-
return !!SHOW_MULTIPLE_MODELS.getValue<boolean>();
728+
public getExtensionsDirectory(languageId: string): string | undefined {
729+
return EXTENSIONS_DIRECTORY.getValue<string>({
730+
languageId,
731+
});
732+
}
733+
734+
public get showMultipleModels(): boolean {
735+
return !!SHOW_MULTIPLE_MODELS.getValue<boolean>();
736+
}
730737
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { getQlPackPath, QLPACK_FILENAMES } from "../common/ql";
1111
import { getErrorMessage } from "../common/helpers-pure";
1212
import { ExtensionPack } from "./shared/extension-pack";
1313
import { NotificationLogger, showAndLogErrorMessage } from "../common/logging";
14-
import { getExtensionsDirectory } from "../config";
14+
import { ModelConfig } from "../config";
1515
import {
1616
autoNameExtensionPack,
1717
ExtensionPackName,
@@ -28,6 +28,7 @@ const extensionPackValidate = ajv.compile(extensionPackMetadataSchemaJson);
2828
export async function pickExtensionPack(
2929
cliServer: Pick<CodeQLCliServer, "resolveQlpacks">,
3030
databaseItem: Pick<DatabaseItem, "name" | "language">,
31+
modelConfig: ModelConfig,
3132
logger: NotificationLogger,
3233
progress: ProgressCallback,
3334
maxStep: number,
@@ -56,7 +57,9 @@ export async function pickExtensionPack(
5657
});
5758

5859
// Get the `codeQL.model.extensionsDirectory` setting for the language
59-
const userExtensionsDirectory = getExtensionsDirectory(databaseItem.language);
60+
const userExtensionsDirectory = modelConfig.getExtensionsDirectory(
61+
databaseItem.language,
62+
);
6063

6164
// If the setting is not set, automatically pick a suitable directory
6265
const extensionsDirectory = userExtensionsDirectory

extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-panel.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { MethodModelingViewProvider } from "./method-modeling-view-provider";
55
import { Method } from "../method";
66
import { ModelingStore } from "../modeling-store";
77
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
8+
import { ModelConfigListener } from "../../config";
89

910
export class MethodModelingPanel extends DisposableObject {
1011
private readonly provider: MethodModelingViewProvider;
@@ -16,10 +17,16 @@ export class MethodModelingPanel extends DisposableObject {
1617
) {
1718
super();
1819

20+
// This is here instead of in MethodModelingViewProvider because we need to
21+
// dispose this when the extension gets disposed, not when the webview gets
22+
// disposed.
23+
const modelConfig = this.push(new ModelConfigListener());
24+
1925
this.provider = new MethodModelingViewProvider(
2026
app,
2127
modelingStore,
2228
editorViewTracker,
29+
modelConfig,
2330
);
2431
this.push(
2532
window.registerWebviewViewProvider(

extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { DbModelingState, ModelingStore } from "../modeling-store";
1212
import { AbstractWebviewViewProvider } from "../../common/vscode/abstract-webview-view-provider";
1313
import { assertNever } from "../../common/helpers-pure";
1414
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
15-
import { showMultipleModels } from "../../config";
15+
import { ModelConfigListener } from "../../config";
1616

1717
export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
1818
ToMethodModelingMessage,
@@ -26,20 +26,22 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
2626
app: App,
2727
private readonly modelingStore: ModelingStore,
2828
private readonly editorViewTracker: ModelEditorViewTracker,
29+
private readonly modelConfig: ModelConfigListener,
2930
) {
3031
super(app, "method-modeling");
3132
}
3233

3334
protected override async onWebViewLoaded(): Promise<void> {
3435
await Promise.all([this.setViewState(), this.setInitialState()]);
3536
this.registerToModelingStoreEvents();
37+
this.registerToModelConfigEvents();
3638
}
3739

3840
private async setViewState(): Promise<void> {
3941
await this.postMessage({
4042
t: "setMethodModelingPanelViewState",
4143
viewState: {
42-
showMultipleModels: showMultipleModels(),
44+
showMultipleModels: this.modelConfig.showMultipleModels,
4345
},
4446
});
4547
}
@@ -198,4 +200,12 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
198200
}),
199201
);
200202
}
203+
204+
private registerToModelConfigEvents(): void {
205+
this.push(
206+
this.modelConfig.onDidChangeConfiguration(() => {
207+
void this.setViewState();
208+
}),
209+
);
210+
}
201211
}

extensions/ql-vscode/src/model-editor/methods-usage/methods-usage-data-provider.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,10 @@ export class MethodsUsageDataProvider
102102
const modeledMethod = this.modeledMethods[method.signature];
103103
const modifiedMethod = this.modifiedMethodSignatures.has(method.signature);
104104

105-
const status = getModelingStatus(modeledMethod, modifiedMethod);
105+
const status = getModelingStatus(
106+
modeledMethod ? [modeledMethod] : [],
107+
modifiedMethod,
108+
);
106109
switch (status) {
107110
case "unmodeled":
108111
return new ThemeIcon("error", new ThemeColor("errorForeground"));

0 commit comments

Comments
 (0)