Skip to content

Commit 32d981a

Browse files
committed
Merge remote-tracking branch 'origin/main' into koesie10/hide-generated-type-models
2 parents 2202446 + 1da465f commit 32d981a

File tree

18 files changed

+229
-328
lines changed

18 files changed

+229
-328
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: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,37 @@ 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;
2245

46+
type IsHiddenContext = {
47+
method: MethodDefinition;
48+
config: ModelConfig;
49+
};
50+
2351
export type ModelsAsDataLanguagePredicate<T> = {
2452
extensiblePredicate: string;
2553
supportedKinds?: string[];
@@ -30,6 +58,14 @@ export type ModelsAsDataLanguagePredicate<T> = {
3058
supportedEndpointTypes?: EndpointType[];
3159
generateMethodDefinition: GenerateMethodDefinition<T>;
3260
readModeledMethod: ReadModeledMethod;
61+
62+
/**
63+
* Controls whether this predicate is hidden for a certain method. This only applies to the UI.
64+
* If not specified, the predicate is visible for all methods.
65+
*
66+
* @param method The method to check if the predicate is hidden for.
67+
*/
68+
isHidden?: (context: IsHiddenContext) => boolean;
3369
};
3470

3571
export type GenerationContext = {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ export const ruby: ModelsAsDataLanguage = {
169169
methodParameters: "",
170170
};
171171
},
172+
isHidden: ({ config }) => !config.showTypeModels,
172173
},
173174
},
174175
modelGeneration: {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import type { DatabaseItem } from "../../databases/local-databases";
1515
import type { ModelingEvents } from "../modeling-events";
1616
import type { QueryLanguage } from "../../common/query-language";
1717
import { tryGetQueryLanguage } from "../../common/query-language";
18+
import { createModelConfig } from "../languages";
1819

1920
export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
2021
ToMethodModelingMessage,
@@ -46,6 +47,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
4647
t: "setMethodModelingPanelViewState",
4748
viewState: {
4849
language: this.language,
50+
modelConfig: createModelConfig(this.modelConfig),
4951
},
5052
});
5153
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ import { telemetryListener } from "../common/vscode/telemetry";
5555
import type { ModelingStore } from "./modeling-store";
5656
import type { ModelingEvents } from "./modeling-events";
5757
import type { ModelsAsDataLanguage } from "./languages";
58-
import { getModelsAsDataLanguage } from "./languages";
58+
import { createModelConfig, getModelsAsDataLanguage } from "./languages";
5959
import { runGenerateQueries } from "./generate";
6060
import { ResponseError } from "vscode-jsonrpc";
6161
import { LSPErrorCodes } from "vscode-languageclient";
@@ -465,6 +465,7 @@ export class ModelEditorView extends AbstractWebview<
465465
mode: this.modelingStore.getMode(this.databaseItem),
466466
showModeSwitchButton,
467467
sourceArchiveAvailable,
468+
modelConfig: createModelConfig(this.modelConfig),
468469
},
469470
});
470471
}

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

Lines changed: 3 additions & 0 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,8 +12,10 @@ export interface ModelEditorViewState {
1112
mode: Mode;
1213
showModeSwitchButton: boolean;
1314
sourceArchiveAvailable: boolean;
15+
modelConfig: ModelConfig;
1416
}
1517

1618
export interface MethodModelingPanelViewState {
1719
language: QueryLanguage | undefined;
20+
modelConfig: ModelConfig;
1821
}

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

Lines changed: 2 additions & 0 deletions
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,6 +35,7 @@ const Template: StoryFn<typeof MethodModelingInputsComponent> = (args) => {
3435
language={QueryLanguage.Java}
3536
modeledMethod={m}
3637
onChange={onChange}
38+
modelConfig={defaultModelConfig}
3739
/>
3840
);
3941
};

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

Lines changed: 4 additions & 0 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,6 +51,7 @@ const UnsavedTag = ({ modelingStatus }: { modelingStatus: ModelingStatus }) => (
5051

5152
export type MethodModelingProps = {
5253
language: QueryLanguage;
54+
modelConfig: ModelConfig;
5355
modelingStatus: ModelingStatus;
5456
method: Method;
5557
modeledMethods: ModeledMethod[];
@@ -60,6 +62,7 @@ export type MethodModelingProps = {
6062

6163
export const MethodModeling = ({
6264
language,
65+
modelConfig,
6366
modelingStatus,
6467
modeledMethods,
6568
method,
@@ -80,6 +83,7 @@ export const MethodModeling = ({
8083
</DependencyContainer>
8184
<MultipleModeledMethodsPanel
8285
language={language}
86+
modelConfig={modelConfig}
8387
method={method}
8488
modeledMethods={modeledMethods}
8589
isModelingInProgress={isModelingInProgress}

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

Lines changed: 4 additions & 1 deletion
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,6 +25,7 @@ const Name = styled.span`
2425

2526
export type MethodModelingInputsProps = {
2627
language: QueryLanguage;
28+
modelConfig: ModelConfig;
2729
method: Method;
2830
modeledMethod: ModeledMethod | undefined;
2931
modelPending: boolean;
@@ -33,6 +35,7 @@ export type MethodModelingInputsProps = {
3335

3436
export const MethodModelingInputs = ({
3537
language,
38+
modelConfig,
3639
method,
3740
modeledMethod,
3841
modelPending,
@@ -55,7 +58,7 @@ export const MethodModelingInputs = ({
5558
{isModelingInProgress ? (
5659
<InProgressDropdown />
5760
) : (
58-
<ModelTypeDropdown {...inputProps} />
61+
<ModelTypeDropdown modelConfig={modelConfig} {...inputProps} />
5962
)}
6063
</Input>
6164
</Container>

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

Lines changed: 2 additions & 0 deletions
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,6 +117,7 @@ export function MethodModelingView({
116117
return (
117118
<MethodModeling
118119
language={viewState?.language}
120+
modelConfig={viewState?.modelConfig ?? defaultModelConfig}
119121
modelingStatus={modelingStatus}
120122
method={method}
121123
modeledMethods={modeledMethods}

0 commit comments

Comments
 (0)