Skip to content

Commit 08944a2

Browse files
committed
Update method modeling panel after changes to config
This updates the method modeling panel's view state when the `codeQL.model.showMultipleModels` setting changes. This will ensure that the setting updates without needing to restart VS Code since this view is much harder to restart than the model editor.
1 parent cf0057e commit 08944a2

File tree

3 files changed

+48
-2
lines changed

3 files changed

+48
-2
lines changed

extensions/ql-vscode/src/config.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,35 @@ const LLM_GENERATION = new Setting("llmGeneration", MODEL_SETTING);
711711
const EXTENSIONS_DIRECTORY = new Setting("extensionsDirectory", MODEL_SETTING);
712712
const SHOW_MULTIPLE_MODELS = new Setting("showMultipleModels", MODEL_SETTING);
713713

714+
export interface ModelConfig {
715+
flowGeneration: boolean;
716+
llmGeneration: boolean;
717+
extensionsDirectory: string | undefined;
718+
showMultipleModels: boolean;
719+
}
720+
721+
export class ModelConfigListener extends ConfigListener implements ModelConfig {
722+
protected handleDidChangeConfiguration(e: ConfigurationChangeEvent): void {
723+
this.handleDidChangeConfigurationForRelevantSettings([MODEL_SETTING], e);
724+
}
725+
726+
public get flowGeneration(): boolean {
727+
return !!FLOW_GENERATION.getValue<boolean>();
728+
}
729+
730+
public get llmGeneration(): boolean {
731+
return !!LLM_GENERATION.getValue<boolean>();
732+
}
733+
734+
public get extensionsDirectory(): string | undefined {
735+
return EXTENSIONS_DIRECTORY.getValue<string>();
736+
}
737+
738+
public get showMultipleModels(): boolean {
739+
return !!SHOW_MULTIPLE_MODELS.getValue<boolean>();
740+
}
741+
}
742+
714743
export function showFlowGeneration(): boolean {
715744
return !!FLOW_GENERATION.getValue<boolean>();
716745
}

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
}

0 commit comments

Comments
 (0)