Skip to content

Commit 28994b7

Browse files
authored
Merge pull request #3059 from github/charisk/accepted-models
Differentiate between suggestions and accepted models
2 parents 64a0733 + 6de96b4 commit 28994b7

17 files changed

+150
-15
lines changed

extensions/ql-vscode/src/model-editor/modeled-method.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { MethodSignature } from "./method";
2+
import { ModelingStatus } from "./shared/modeling-status";
23

34
export type ModeledMethodType =
45
| "none"
@@ -109,3 +110,19 @@ export function modeledMethodSupportsProvenance(
109110
modeledMethod.type === "neutral"
110111
);
111112
}
113+
114+
export function isModelAccepted(
115+
modeledMethod: ModeledMethod | undefined,
116+
modelingStatus: ModelingStatus,
117+
): boolean {
118+
if (!modeledMethod) {
119+
return true;
120+
}
121+
122+
return (
123+
modelingStatus !== "unsaved" ||
124+
modeledMethod.type === "none" ||
125+
!modeledMethodSupportsProvenance(modeledMethod) ||
126+
modeledMethod.provenance !== "ai-generated"
127+
);
128+
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,17 @@ MultipleModelingsUnmodeled.args = {
5252
language,
5353
method,
5454
modeledMethods: [],
55-
showMultipleModels: true,
5655
modelingStatus: "saved",
56+
showMultipleModels: true,
5757
};
5858

5959
export const MultipleModelingsModeledSingle = Template.bind({});
6060
MultipleModelingsModeledSingle.args = {
6161
language,
6262
method,
6363
modeledMethods: [createSinkModeledMethod(method)],
64-
showMultipleModels: true,
6564
modelingStatus: "saved",
65+
showMultipleModels: true,
6666
};
6767

6868
export const MultipleModelingsModeledMultiple = Template.bind({});
@@ -78,8 +78,8 @@ MultipleModelingsModeledMultiple.args = {
7878
kind: "remote",
7979
}),
8080
],
81-
showMultipleModels: true,
8281
modelingStatus: "saved",
82+
showMultipleModels: true,
8383
};
8484

8585
export const MultipleModelingsValidationFailedNeutral = Template.bind({});
@@ -90,8 +90,8 @@ MultipleModelingsValidationFailedNeutral.args = {
9090
createSinkModeledMethod(method),
9191
createNeutralModeledMethod(method),
9292
],
93-
showMultipleModels: true,
9493
modelingStatus: "unsaved",
94+
showMultipleModels: true,
9595
};
9696

9797
export const MultipleModelingsValidationFailedDuplicate = Template.bind({});
@@ -107,6 +107,6 @@ MultipleModelingsValidationFailedDuplicate.args = {
107107
}),
108108
createSinkModeledMethod(method),
109109
],
110-
showMultipleModels: true,
111110
modelingStatus: "unsaved",
111+
showMultipleModels: true,
112112
};

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,13 @@ ModelingInProgress.args = {
6060
modeledMethod,
6161
isModelingInProgress: true,
6262
};
63+
64+
const generatedModeledMethod = createSinkModeledMethod({
65+
provenance: "ai-generated",
66+
});
67+
export const ModelingNotAccepted = Template.bind({});
68+
ModelingNotAccepted.args = {
69+
method,
70+
modeledMethod: generatedModeledMethod,
71+
modelingStatus: "unsaved",
72+
};

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ export const MethodModeling = ({
8585
modeledMethods={modeledMethods}
8686
showMultipleModels={showMultipleModels}
8787
isModelingInProgress={isModelingInProgress}
88+
modelingStatus={modelingStatus}
8889
onChange={onChange}
8990
/>
9091
<ReviewInEditorButton method={method} />

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { ModelOutputDropdown } from "../model-editor/ModelOutputDropdown";
88
import { ModelKindDropdown } from "../model-editor/ModelKindDropdown";
99
import { InProgressDropdown } from "../model-editor/InProgressDropdown";
1010
import { QueryLanguage } from "../../common/query-language";
11+
import { ModelingStatus } from "../../model-editor/shared/modeling-status";
1112

1213
const Container = styled.div`
1314
padding-top: 0.5rem;
@@ -27,6 +28,7 @@ export type MethodModelingInputsProps = {
2728
language: QueryLanguage;
2829
method: Method;
2930
modeledMethod: ModeledMethod | undefined;
31+
modelingStatus: ModelingStatus;
3032
isModelingInProgress: boolean;
3133
onChange: (modeledMethod: ModeledMethod) => void;
3234
};
@@ -35,13 +37,15 @@ export const MethodModelingInputs = ({
3537
language,
3638
method,
3739
modeledMethod,
40+
modelingStatus,
3841
isModelingInProgress,
3942
onChange,
4043
}: MethodModelingInputsProps): JSX.Element => {
4144
const inputProps = {
4245
language,
4346
method,
4447
modeledMethod,
48+
modelingStatus,
4549
onChange,
4650
};
4751

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import { styled } from "styled-components";
77
import { MultipleModeledMethodsPanel } from "./MultipleModeledMethodsPanel";
88
import { convertToLegacyModeledMethod } from "../../model-editor/shared/modeled-methods-legacy";
99
import { QueryLanguage } from "../../common/query-language";
10+
import { ModelingStatus } from "../../model-editor/shared/modeling-status";
1011

1112
export type ModeledMethodsPanelProps = {
1213
language: QueryLanguage;
1314
method: Method;
1415
modeledMethods: ModeledMethod[];
16+
modelingStatus: ModelingStatus;
1517
isModelingInProgress: boolean;
1618
showMultipleModels: boolean;
1719
onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
@@ -25,6 +27,7 @@ export const ModeledMethodsPanel = ({
2527
language,
2628
method,
2729
modeledMethods,
30+
modelingStatus,
2831
isModelingInProgress,
2932
showMultipleModels,
3033
onChange,
@@ -42,6 +45,7 @@ export const ModeledMethodsPanel = ({
4245
language={language}
4346
method={method}
4447
modeledMethod={convertToLegacyModeledMethod(modeledMethods)}
48+
modelingStatus={modelingStatus}
4549
isModelingInProgress={isModelingInProgress}
4650
onChange={handleSingleChange}
4751
/>
@@ -53,6 +57,7 @@ export const ModeledMethodsPanel = ({
5357
language={language}
5458
method={method}
5559
modeledMethods={modeledMethods}
60+
modelingStatus={modelingStatus}
5661
isModelingInProgress={isModelingInProgress}
5762
onChange={onChange}
5863
/>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ import { ModeledMethodAlert } from "./ModeledMethodAlert";
1515
import { QueryLanguage } from "../../common/query-language";
1616
import { createEmptyModeledMethod } from "../../model-editor/modeled-method-empty";
1717
import { sendTelemetry } from "../common/telemetry";
18+
import { ModelingStatus } from "../../model-editor/shared/modeling-status";
1819

1920
export type MultipleModeledMethodsPanelProps = {
2021
language: QueryLanguage;
2122
method: Method;
2223
modeledMethods: ModeledMethod[];
24+
modelingStatus: ModelingStatus;
2325
isModelingInProgress: boolean;
2426
onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void;
2527
};
@@ -60,6 +62,7 @@ export const MultipleModeledMethodsPanel = ({
6062
language,
6163
method,
6264
modeledMethods,
65+
modelingStatus,
6366
isModelingInProgress,
6467
onChange,
6568
}: MultipleModeledMethodsPanelProps) => {
@@ -154,6 +157,7 @@ export const MultipleModeledMethodsPanel = ({
154157
language={language}
155158
method={method}
156159
modeledMethod={modeledMethods[selectedIndex]}
160+
modelingStatus={modelingStatus}
157161
isModelingInProgress={isModelingInProgress}
158162
onChange={handleChange}
159163
/>
@@ -162,6 +166,7 @@ export const MultipleModeledMethodsPanel = ({
162166
language={language}
163167
method={method}
164168
modeledMethod={undefined}
169+
modelingStatus={modelingStatus}
165170
isModelingInProgress={isModelingInProgress}
166171
onChange={handleChange}
167172
/>

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ describe(MethodModelingInputs.name, () => {
2020
const language = QueryLanguage.Java;
2121
const method = createMethod();
2222
const modeledMethod = createSinkModeledMethod();
23+
const modelingStatus = "unmodeled";
2324
const isModelingInProgress = false;
2425
const onChange = jest.fn();
2526

@@ -28,6 +29,7 @@ describe(MethodModelingInputs.name, () => {
2829
language,
2930
method,
3031
modeledMethod,
32+
modelingStatus,
3133
isModelingInProgress,
3234
onChange,
3335
});
@@ -54,6 +56,7 @@ describe(MethodModelingInputs.name, () => {
5456
language,
5557
method,
5658
modeledMethod,
59+
modelingStatus,
5760
isModelingInProgress,
5861
onChange,
5962
});
@@ -76,6 +79,7 @@ describe(MethodModelingInputs.name, () => {
7679
language,
7780
method,
7881
modeledMethod,
82+
modelingStatus,
7983
isModelingInProgress,
8084
onChange,
8185
});
@@ -90,6 +94,7 @@ describe(MethodModelingInputs.name, () => {
9094
language={language}
9195
method={method}
9296
modeledMethod={updatedModeledMethod}
97+
modelingStatus={modelingStatus}
9398
isModelingInProgress={isModelingInProgress}
9499
onChange={onChange}
95100
/>,
@@ -119,6 +124,7 @@ describe(MethodModelingInputs.name, () => {
119124
language,
120125
method,
121126
modeledMethod,
127+
modelingStatus,
122128
isModelingInProgress: true,
123129
onChange,
124130
});

extensions/ql-vscode/src/view/method-modeling/__tests__/ModeledMethodsPanel.spec.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ describe(ModeledMethodsPanel.name, () => {
1515
const language = QueryLanguage.Java;
1616
const method = createMethod();
1717
const modeledMethods = [createSinkModeledMethod(), createSinkModeledMethod()];
18+
const modelingStatus = "unmodeled";
1819
const isModelingInProgress = false;
1920
const onChange = jest.fn();
2021

@@ -27,6 +28,7 @@ describe(ModeledMethodsPanel.name, () => {
2728
method,
2829
modeledMethods,
2930
isModelingInProgress,
31+
modelingStatus,
3032
onChange,
3133
showMultipleModels,
3234
});
@@ -40,6 +42,7 @@ describe(ModeledMethodsPanel.name, () => {
4042
method,
4143
modeledMethods,
4244
isModelingInProgress,
45+
modelingStatus,
4346
onChange,
4447
showMultipleModels,
4548
});
@@ -60,6 +63,7 @@ describe(ModeledMethodsPanel.name, () => {
6063
method,
6164
modeledMethods,
6265
isModelingInProgress,
66+
modelingStatus,
6367
onChange,
6468
showMultipleModels,
6569
});
@@ -73,6 +77,7 @@ describe(ModeledMethodsPanel.name, () => {
7377
method,
7478
modeledMethods,
7579
isModelingInProgress,
80+
modelingStatus,
7681
onChange,
7782
showMultipleModels,
7883
});

0 commit comments

Comments
 (0)