Skip to content

Commit 7591c65

Browse files
committed
Add showTypeModels setting
1 parent c8ec1d6 commit 7591c65

File tree

18 files changed

+91
-43
lines changed

18 files changed

+91
-43
lines changed

extensions/ql-vscode/src/config.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,7 @@ export async function setAutogenerateQlPacks(choice: AutogenerateQLPacks) {
724724
const MODEL_SETTING = new Setting("model", ROOT_SETTING);
725725
const FLOW_GENERATION = new Setting("flowGeneration", MODEL_SETTING);
726726
const LLM_GENERATION = new Setting("llmGeneration", MODEL_SETTING);
727+
const SHOW_TYPE_MODELS = new Setting("showTypeModels", MODEL_SETTING);
727728
const LLM_GENERATION_BATCH_SIZE = new Setting(
728729
"llmGenerationBatchSize",
729730
MODEL_SETTING,
@@ -743,6 +744,7 @@ const ENABLE_ACCESS_PATH_SUGGESTIONS = new Setting(
743744
export interface ModelConfig {
744745
flowGeneration: boolean;
745746
llmGeneration: boolean;
747+
showTypeModels: boolean;
746748
getExtensionsDirectory(languageId: string): string | undefined;
747749
enablePython: boolean;
748750
enableAccessPathSuggestions: boolean;
@@ -761,6 +763,10 @@ export class ModelConfigListener extends ConfigListener implements ModelConfig {
761763
return !!LLM_GENERATION.getValue<boolean>();
762764
}
763765

766+
public get showTypeModels(): boolean {
767+
return !!SHOW_TYPE_MODELS.getValue<boolean>();
768+
}
769+
764770
/**
765771
* Limits the number of candidates we send to the model in each request to avoid long requests.
766772
* Note that the model may return fewer than this number of candidates.

extensions/ql-vscode/src/model-editor/languages/models-as-data.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,35 @@ import type {
1717
import type { BaseLogger } from "../../common/logging";
1818
import type { AccessPathSuggestionRow } from "../suggestions";
1919

20+
// This is a subset of the model config that doesn't import the vscode module.
21+
// It only includes settings that are actually used.
22+
export type ModelConfig = {
23+
showTypeModels: boolean;
24+
};
25+
26+
/**
27+
* This function creates a new model config object from the given model config object.
28+
* The new model config object is a deep copy of the given model config object.
29+
*
30+
* @param modelConfig The model config object to create a new model config object from.
31+
* In most cases, this is a `ModelConfigListener`.
32+
*/
33+
export function createModelConfig(modelConfig: ModelConfig): ModelConfig {
34+
return {
35+
showTypeModels: modelConfig.showTypeModels,
36+
};
37+
}
38+
39+
export const defaultModelConfig: ModelConfig = {
40+
showTypeModels: false,
41+
};
42+
2043
type GenerateMethodDefinition<T> = (method: T) => DataTuple[];
2144
type ReadModeledMethod = (row: DataTuple[]) => ModeledMethod;
45+
2246
type IsHiddenContext = {
2347
method: MethodDefinition;
24-
isCanary: boolean;
48+
config: ModelConfig;
2549
};
2650

2751
export type ModelsAsDataLanguagePredicate<T> = {

extensions/ql-vscode/src/model-editor/languages/ruby/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,7 @@ export const ruby: ModelsAsDataLanguage = {
169169
methodParameters: "",
170170
};
171171
},
172-
// Hide for all non-canary users
173-
isHidden: ({ isCanary }) => !isCanary,
172+
isHidden: ({ config }) => !config.showTypeModels,
174173
},
175174
},
176175
modelGeneration: {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import type { ModelingStore } from "../modeling-store";
1111
import { AbstractWebviewViewProvider } from "../../common/vscode/abstract-webview-view-provider";
1212
import { assertNever } from "../../common/helpers-pure";
1313
import type { ModelConfigListener } from "../../config";
14-
import { isCanary } from "../../config";
1514
import type { DatabaseItem } from "../../databases/local-databases";
1615
import type { ModelingEvents } from "../modeling-events";
1716
import type { QueryLanguage } from "../../common/query-language";
1817
import { tryGetQueryLanguage } from "../../common/query-language";
18+
import { createModelConfig } from "../languages";
1919

2020
export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
2121
ToMethodModelingMessage,
@@ -47,7 +47,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
4747
t: "setMethodModelingPanelViewState",
4848
viewState: {
4949
language: this.language,
50-
isCanary: isCanary(),
50+
modelConfig: createModelConfig(this.modelConfig),
5151
},
5252
});
5353
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ import type { Method } from "./method";
4040
import type { ModeledMethod } from "./modeled-method";
4141
import type { ExtensionPack } from "./shared/extension-pack";
4242
import type { ModelConfigListener } from "../config";
43-
import { isCanary } from "../config";
4443
import { Mode } from "./shared/mode";
4544
import { loadModeledMethods, saveModeledMethods } from "./modeled-method-fs";
4645
import { pickExtensionPack } from "./extension-pack-picker";
@@ -51,7 +50,7 @@ import { telemetryListener } from "../common/vscode/telemetry";
5150
import type { ModelingStore } from "./modeling-store";
5251
import type { ModelingEvents } from "./modeling-events";
5352
import type { ModelsAsDataLanguage } from "./languages";
54-
import { getModelsAsDataLanguage } from "./languages";
53+
import { createModelConfig, getModelsAsDataLanguage } from "./languages";
5554
import { runGenerateQueries } from "./generate";
5655
import { ResponseError } from "vscode-jsonrpc";
5756
import { LSPErrorCodes } from "vscode-languageclient";
@@ -457,7 +456,7 @@ export class ModelEditorView extends AbstractWebview<
457456
mode: this.modelingStore.getMode(this.databaseItem),
458457
showModeSwitchButton,
459458
sourceArchiveAvailable,
460-
isCanary: isCanary(),
459+
modelConfig: createModelConfig(this.modelConfig),
461460
},
462461
});
463462
}

extensions/ql-vscode/src/model-editor/shared/view-state.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { ExtensionPack } from "./extension-pack";
22
import type { Mode } from "./mode";
33
import type { QueryLanguage } from "../../common/query-language";
4+
import type { ModelConfig } from "../languages";
45

56
export interface ModelEditorViewState {
67
extensionPack: ExtensionPack;
@@ -11,10 +12,10 @@ export interface ModelEditorViewState {
1112
mode: Mode;
1213
showModeSwitchButton: boolean;
1314
sourceArchiveAvailable: boolean;
14-
isCanary: boolean;
15+
modelConfig: ModelConfig;
1516
}
1617

1718
export interface MethodModelingPanelViewState {
1819
language: QueryLanguage | undefined;
19-
isCanary: boolean;
20+
modelConfig: ModelConfig;
2021
}

extensions/ql-vscode/src/stories/method-modeling/MethodModelingInputs.stories.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { createSinkModeledMethod } from "../../../test/factories/model-editor/mo
66
import { useState } from "react";
77
import type { ModeledMethod } from "../../model-editor/modeled-method";
88
import { QueryLanguage } from "../../common/query-language";
9+
import { defaultModelConfig } from "../../model-editor/languages";
910

1011
export default {
1112
title: "Method Modeling/Method Modeling Inputs",
@@ -34,7 +35,7 @@ const Template: StoryFn<typeof MethodModelingInputsComponent> = (args) => {
3435
language={QueryLanguage.Java}
3536
modeledMethod={m}
3637
onChange={onChange}
37-
isCanary={true}
38+
modelConfig={defaultModelConfig}
3839
/>
3940
);
4041
};

extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { VSCodeTag } from "@vscode/webview-ui-toolkit/react";
88
import { ReviewInEditorButton } from "./ReviewInEditorButton";
99
import { MultipleModeledMethodsPanel } from "./MultipleModeledMethodsPanel";
1010
import type { QueryLanguage } from "../../common/query-language";
11+
import type { ModelConfig } from "../../model-editor/languages";
1112

1213
const Container = styled.div`
1314
padding-top: 0.5rem;
@@ -50,7 +51,7 @@ const UnsavedTag = ({ modelingStatus }: { modelingStatus: ModelingStatus }) => (
5051

5152
export type MethodModelingProps = {
5253
language: QueryLanguage;
53-
isCanary: boolean;
54+
modelConfig: ModelConfig;
5455
modelingStatus: ModelingStatus;
5556
method: Method;
5657
modeledMethods: ModeledMethod[];
@@ -61,7 +62,7 @@ export type MethodModelingProps = {
6162

6263
export const MethodModeling = ({
6364
language,
64-
isCanary,
65+
modelConfig,
6566
modelingStatus,
6667
modeledMethods,
6768
method,
@@ -82,7 +83,7 @@ export const MethodModeling = ({
8283
</DependencyContainer>
8384
<MultipleModeledMethodsPanel
8485
language={language}
85-
isCanary={isCanary}
86+
modelConfig={modelConfig}
8687
method={method}
8788
modeledMethods={modeledMethods}
8889
isModelingInProgress={isModelingInProgress}

extensions/ql-vscode/src/view/method-modeling/MethodModelingInputs.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { ModelOutputDropdown } from "../model-editor/ModelOutputDropdown";
77
import { ModelKindDropdown } from "../model-editor/ModelKindDropdown";
88
import { InProgressDropdown } from "../model-editor/InProgressDropdown";
99
import type { QueryLanguage } from "../../common/query-language";
10+
import type { ModelConfig } from "../../model-editor/languages";
1011

1112
const Container = styled.div`
1213
padding-top: 0.5rem;
@@ -24,7 +25,7 @@ const Name = styled.span`
2425

2526
export type MethodModelingInputsProps = {
2627
language: QueryLanguage;
27-
isCanary: boolean;
28+
modelConfig: ModelConfig;
2829
method: Method;
2930
modeledMethod: ModeledMethod | undefined;
3031
modelPending: boolean;
@@ -34,7 +35,7 @@ export type MethodModelingInputsProps = {
3435

3536
export const MethodModelingInputs = ({
3637
language,
37-
isCanary,
38+
modelConfig,
3839
method,
3940
modeledMethod,
4041
modelPending,
@@ -57,7 +58,7 @@ export const MethodModelingInputs = ({
5758
{isModelingInProgress ? (
5859
<InProgressDropdown />
5960
) : (
60-
<ModelTypeDropdown isCanary={isCanary} {...inputProps} />
61+
<ModelTypeDropdown modelConfig={modelConfig} {...inputProps} />
6162
)}
6263
</Input>
6364
</Container>

extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { NotInModelingMode } from "./NotInModelingMode";
1111
import { NoMethodSelected } from "./NoMethodSelected";
1212
import type { MethodModelingPanelViewState } from "../../model-editor/shared/view-state";
1313
import { MethodAlreadyModeled } from "./MethodAlreadyModeled";
14+
import { defaultModelConfig } from "../../model-editor/languages";
1415

1516
type Props = {
1617
initialViewState?: MethodModelingPanelViewState;
@@ -116,7 +117,7 @@ export function MethodModelingView({
116117
return (
117118
<MethodModeling
118119
language={viewState?.language}
119-
isCanary={viewState?.isCanary ?? false}
120+
modelConfig={viewState?.modelConfig ?? defaultModelConfig}
120121
modelingStatus={modelingStatus}
121122
method={method}
122123
modeledMethods={modeledMethods}

0 commit comments

Comments
 (0)