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.
This commit is contained in:
Koen Vlaswinkel
2023-10-06 14:15:23 +02:00
parent cf0057ecd9
commit 08944a292c
3 changed files with 48 additions and 2 deletions

View File

@@ -711,6 +711,35 @@ const LLM_GENERATION = new Setting("llmGeneration", MODEL_SETTING);
const EXTENSIONS_DIRECTORY = new Setting("extensionsDirectory", MODEL_SETTING);
const SHOW_MULTIPLE_MODELS = new Setting("showMultipleModels", MODEL_SETTING);
export interface ModelConfig {
flowGeneration: boolean;
llmGeneration: boolean;
extensionsDirectory: string | undefined;
showMultipleModels: boolean;
}
export class ModelConfigListener extends ConfigListener implements ModelConfig {
protected handleDidChangeConfiguration(e: ConfigurationChangeEvent): void {
this.handleDidChangeConfigurationForRelevantSettings([MODEL_SETTING], e);
}
public get flowGeneration(): boolean {
return !!FLOW_GENERATION.getValue<boolean>();
}
public get llmGeneration(): boolean {
return !!LLM_GENERATION.getValue<boolean>();
}
public get extensionsDirectory(): string | undefined {
return EXTENSIONS_DIRECTORY.getValue<string>();
}
public get showMultipleModels(): boolean {
return !!SHOW_MULTIPLE_MODELS.getValue<boolean>();
}
}
export function showFlowGeneration(): boolean {
return !!FLOW_GENERATION.getValue<boolean>();
}

View File

@@ -5,6 +5,7 @@ import { MethodModelingViewProvider } from "./method-modeling-view-provider";
import { Method } from "../method";
import { ModelingStore } from "../modeling-store";
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
import { ModelConfigListener } from "../../config";
export class MethodModelingPanel extends DisposableObject {
private readonly provider: MethodModelingViewProvider;
@@ -16,10 +17,16 @@ export class MethodModelingPanel extends DisposableObject {
) {
super();
// This is here instead of in MethodModelingViewProvider because we need to
// dispose this when the extension gets disposed, not when the webview gets
// disposed.
const modelConfig = this.push(new ModelConfigListener());
this.provider = new MethodModelingViewProvider(
app,
modelingStore,
editorViewTracker,
modelConfig,
);
this.push(
window.registerWebviewViewProvider(

View File

@@ -12,7 +12,7 @@ import { DbModelingState, ModelingStore } from "../modeling-store";
import { AbstractWebviewViewProvider } from "../../common/vscode/abstract-webview-view-provider";
import { assertNever } from "../../common/helpers-pure";
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
import { showMultipleModels } from "../../config";
import { ModelConfigListener } from "../../config";
export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
ToMethodModelingMessage,
@@ -26,6 +26,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
app: App,
private readonly modelingStore: ModelingStore,
private readonly editorViewTracker: ModelEditorViewTracker,
private readonly modelConfig: ModelConfigListener,
) {
super(app, "method-modeling");
}
@@ -33,13 +34,14 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
protected override async onWebViewLoaded(): Promise<void> {
await Promise.all([this.setViewState(), this.setInitialState()]);
this.registerToModelingStoreEvents();
this.registerToModelConfigEvents();
}
private async setViewState(): Promise<void> {
await this.postMessage({
t: "setMethodModelingPanelViewState",
viewState: {
showMultipleModels: showMultipleModels(),
showMultipleModels: this.modelConfig.showMultipleModels,
},
});
}
@@ -198,4 +200,12 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
}),
);
}
private registerToModelConfigEvents(): void {
this.push(
this.modelConfig.onDidChangeConfiguration(() => {
void this.setViewState();
}),
);
}
}