Skip to content

Commit 3d2d86b

Browse files
authored
Merge pull request github#3379 from github/koesie10/italic-model-pending
Show auto-model negative predictions in italics
2 parents 0533dad + 899b159 commit 3d2d86b

File tree

13 files changed

+136
-133
lines changed

13 files changed

+136
-133
lines changed

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,19 +111,27 @@ export function modeledMethodSupportsProvenance(
111111
);
112112
}
113113

114-
export function isModelAccepted(
114+
export function isModelPending(
115115
modeledMethod: ModeledMethod | undefined,
116116
modelingStatus: ModelingStatus,
117+
processedByAutoModel?: boolean,
117118
): boolean {
118-
if (!modeledMethod) {
119+
if (
120+
(!modeledMethod || modeledMethod.type === "none") &&
121+
processedByAutoModel
122+
) {
119123
return true;
120124
}
121125

126+
if (!modeledMethod) {
127+
return false;
128+
}
129+
122130
return (
123-
modelingStatus !== "unsaved" ||
124-
modeledMethod.type === "none" ||
125-
!modeledMethodSupportsProvenance(modeledMethod) ||
126-
modeledMethod.provenance !== "ai-generated"
131+
modelingStatus === "unsaved" &&
132+
modeledMethod.type !== "none" &&
133+
modeledMethodSupportsProvenance(modeledMethod) &&
134+
modeledMethod.provenance === "ai-generated"
127135
);
128136
}
129137

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,5 @@ export const ModelingNotAccepted = Template.bind({});
6666
ModelingNotAccepted.args = {
6767
method,
6868
modeledMethod: generatedModeledMethod,
69-
modelingStatus: "unsaved",
69+
modelPending: true,
7070
};

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ 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 { ModelingStatus } from "../../model-editor/shared/modeling-status";
1110

1211
const Container = styled.div`
1312
padding-top: 0.5rem;
@@ -27,7 +26,7 @@ export type MethodModelingInputsProps = {
2726
language: QueryLanguage;
2827
method: Method;
2928
modeledMethod: ModeledMethod | undefined;
30-
modelingStatus: ModelingStatus;
29+
modelPending: boolean;
3130
isModelingInProgress: boolean;
3231
onChange: (modeledMethod: ModeledMethod) => void;
3332
};
@@ -36,15 +35,15 @@ export const MethodModelingInputs = ({
3635
language,
3736
method,
3837
modeledMethod,
39-
modelingStatus,
38+
modelPending,
4039
isModelingInProgress,
4140
onChange,
4241
}: MethodModelingInputsProps): React.JSX.Element => {
4342
const inputProps = {
4443
language,
4544
method,
4645
modeledMethod,
47-
modelingStatus,
46+
modelPending,
4847
onChange,
4948
};
5049

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
22
import type { Method } from "../../model-editor/method";
33
import type { ModeledMethod } from "../../model-editor/modeled-method";
4+
import { isModelPending } from "../../model-editor/modeled-method";
45
import {
56
canAddNewModeledMethod,
67
canRemoveModeledMethod,
@@ -156,7 +157,10 @@ export const MultipleModeledMethodsPanel = ({
156157
language={language}
157158
method={method}
158159
modeledMethod={modeledMethods[selectedIndex]}
159-
modelingStatus={modelingStatus}
160+
modelPending={isModelPending(
161+
modeledMethods[selectedIndex],
162+
modelingStatus,
163+
)}
160164
isModelingInProgress={isModelingInProgress}
161165
onChange={handleChange}
162166
/>
@@ -165,7 +169,7 @@ export const MultipleModeledMethodsPanel = ({
165169
language={language}
166170
method={method}
167171
modeledMethod={undefined}
168-
modelingStatus={modelingStatus}
172+
modelPending={false}
169173
isModelingInProgress={isModelingInProgress}
170174
onChange={handleChange}
171175
/>

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ describe(MethodModelingInputs.name, () => {
1717
const language = QueryLanguage.Java;
1818
const method = createMethod();
1919
const modeledMethod = createSinkModeledMethod();
20-
const modelingStatus = "unmodeled";
20+
const modelPending = false;
2121
const isModelingInProgress = false;
2222
const onChange = jest.fn();
2323

@@ -26,7 +26,7 @@ describe(MethodModelingInputs.name, () => {
2626
language,
2727
method,
2828
modeledMethod,
29-
modelingStatus,
29+
modelPending,
3030
isModelingInProgress,
3131
onChange,
3232
});
@@ -53,7 +53,7 @@ describe(MethodModelingInputs.name, () => {
5353
language,
5454
method,
5555
modeledMethod,
56-
modelingStatus,
56+
modelPending,
5757
isModelingInProgress,
5858
onChange,
5959
});
@@ -76,7 +76,7 @@ describe(MethodModelingInputs.name, () => {
7676
language,
7777
method,
7878
modeledMethod,
79-
modelingStatus,
79+
modelPending,
8080
isModelingInProgress,
8181
onChange,
8282
});
@@ -91,7 +91,7 @@ describe(MethodModelingInputs.name, () => {
9191
language={language}
9292
method={method}
9393
modeledMethod={updatedModeledMethod}
94-
modelingStatus={modelingStatus}
94+
modelPending={modelPending}
9595
isModelingInProgress={isModelingInProgress}
9696
onChange={onChange}
9797
/>,
@@ -121,7 +121,7 @@ describe(MethodModelingInputs.name, () => {
121121
language,
122122
method,
123123
modeledMethod,
124-
modelingStatus,
124+
modelPending,
125125
isModelingInProgress: true,
126126
onChange,
127127
});
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { styled } from "styled-components";
22
import { Dropdown } from "../common/Dropdown";
33

4-
export const InputDropdown = styled(Dropdown)<{ $accepted: boolean }>`
5-
font-style: ${(props) => (props.$accepted ? "normal" : "italic")};
4+
export const InputDropdown = styled(Dropdown)<{ $pending: boolean }>`
5+
font-style: ${(props) => (props.$pending ? "italic" : "normal")};
66
`;

extensions/ql-vscode/src/view/model-editor/MethodRow.tsx

Lines changed: 83 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { vscode } from "../vscode-api";
1616

1717
import type { Method } from "../../model-editor/method";
1818
import type { ModeledMethod } from "../../model-editor/modeled-method";
19+
import { isModelPending } from "../../model-editor/modeled-method";
1920
import { ModelKindDropdown } from "./ModelKindDropdown";
2021
import { Mode } from "../../model-editor/shared/mode";
2122
import { MethodClassifications } from "./MethodClassifications";
@@ -112,6 +113,7 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
112113
modeledMethods: modeledMethodsProp,
113114
methodIsUnsaved,
114115
methodIsSelected,
116+
processedByAutoModel,
115117
viewState,
116118
revealedMethodSignature,
117119
inputAccessPathSuggestions,
@@ -255,88 +257,96 @@ const ModelableMethodRow = forwardRef<HTMLElement | undefined, MethodRowProps>(
255257
)}
256258
{!props.modelingInProgress && (
257259
<>
258-
{modeledMethods.map((modeledMethod, index) => (
259-
<DataGridRow key={index} focused={focusedIndex === index}>
260-
<DataGridCell>
261-
<ModelTypeDropdown
262-
language={viewState.language}
263-
method={method}
264-
modeledMethod={modeledMethod}
265-
modelingStatus={modelingStatus}
266-
onChange={modeledMethodChangedHandlers[index]}
267-
/>
268-
</DataGridCell>
269-
<DataGridCell>
270-
{inputAccessPathSuggestions === undefined ? (
271-
<ModelInputDropdown
260+
{modeledMethods.map((modeledMethod, index) => {
261+
const modelPending = isModelPending(
262+
modeledMethod,
263+
modelingStatus,
264+
processedByAutoModel,
265+
);
266+
267+
return (
268+
<DataGridRow key={index} focused={focusedIndex === index}>
269+
<DataGridCell>
270+
<ModelTypeDropdown
272271
language={viewState.language}
273272
method={method}
274273
modeledMethod={modeledMethod}
275-
modelingStatus={modelingStatus}
274+
modelPending={modelPending}
276275
onChange={modeledMethodChangedHandlers[index]}
277276
/>
278-
) : (
279-
<ModelInputSuggestBox
280-
modeledMethod={modeledMethod}
281-
suggestions={inputAccessPathSuggestions}
282-
typePathSuggestions={outputAccessPathSuggestions ?? []}
283-
onChange={modeledMethodChangedHandlers[index]}
284-
/>
285-
)}
286-
</DataGridCell>
287-
<DataGridCell>
288-
{outputAccessPathSuggestions === undefined ? (
289-
<ModelOutputDropdown
277+
</DataGridCell>
278+
<DataGridCell>
279+
{inputAccessPathSuggestions === undefined ? (
280+
<ModelInputDropdown
281+
language={viewState.language}
282+
method={method}
283+
modeledMethod={modeledMethod}
284+
modelPending={modelPending}
285+
onChange={modeledMethodChangedHandlers[index]}
286+
/>
287+
) : (
288+
<ModelInputSuggestBox
289+
modeledMethod={modeledMethod}
290+
suggestions={inputAccessPathSuggestions}
291+
typePathSuggestions={outputAccessPathSuggestions ?? []}
292+
onChange={modeledMethodChangedHandlers[index]}
293+
/>
294+
)}
295+
</DataGridCell>
296+
<DataGridCell>
297+
{outputAccessPathSuggestions === undefined ? (
298+
<ModelOutputDropdown
299+
language={viewState.language}
300+
method={method}
301+
modeledMethod={modeledMethod}
302+
modelPending={modelPending}
303+
onChange={modeledMethodChangedHandlers[index]}
304+
/>
305+
) : (
306+
<ModelOutputSuggestBox
307+
modeledMethod={modeledMethod}
308+
suggestions={outputAccessPathSuggestions}
309+
onChange={modeledMethodChangedHandlers[index]}
310+
/>
311+
)}
312+
</DataGridCell>
313+
<DataGridCell>
314+
<ModelKindDropdown
290315
language={viewState.language}
291-
method={method}
292316
modeledMethod={modeledMethod}
293-
modelingStatus={modelingStatus}
317+
modelPending={modelPending}
294318
onChange={modeledMethodChangedHandlers[index]}
295319
/>
296-
) : (
297-
<ModelOutputSuggestBox
298-
modeledMethod={modeledMethod}
299-
suggestions={outputAccessPathSuggestions}
300-
onChange={modeledMethodChangedHandlers[index]}
301-
/>
302-
)}
303-
</DataGridCell>
304-
<DataGridCell>
305-
<ModelKindDropdown
306-
language={viewState.language}
307-
modeledMethod={modeledMethod}
308-
modelingStatus={modelingStatus}
309-
onChange={modeledMethodChangedHandlers[index]}
310-
/>
311-
</DataGridCell>
312-
<DataGridCell>
313-
{index === 0 ? (
314-
<CodiconRow
315-
appearance="icon"
316-
aria-label="Add new model"
317-
onClick={(event: React.MouseEvent) => {
318-
event.stopPropagation();
319-
handleAddModelClick();
320-
}}
321-
disabled={addModelButtonDisabled}
322-
>
323-
<Codicon name="add" />
324-
</CodiconRow>
325-
) : (
326-
<CodiconRow
327-
appearance="icon"
328-
aria-label="Remove model"
329-
onClick={(event: React.MouseEvent) => {
330-
event.stopPropagation();
331-
removeModelClickedHandlers[index]();
332-
}}
333-
>
334-
<Codicon name="trash" />
335-
</CodiconRow>
336-
)}
337-
</DataGridCell>
338-
</DataGridRow>
339-
))}
320+
</DataGridCell>
321+
<DataGridCell>
322+
{index === 0 ? (
323+
<CodiconRow
324+
appearance="icon"
325+
aria-label="Add new model"
326+
onClick={(event: React.MouseEvent) => {
327+
event.stopPropagation();
328+
handleAddModelClick();
329+
}}
330+
disabled={addModelButtonDisabled}
331+
>
332+
<Codicon name="add" />
333+
</CodiconRow>
334+
) : (
335+
<CodiconRow
336+
appearance="icon"
337+
aria-label="Remove model"
338+
onClick={(event: React.MouseEvent) => {
339+
event.stopPropagation();
340+
removeModelClickedHandlers[index]();
341+
}}
342+
>
343+
<Codicon name="trash" />
344+
</CodiconRow>
345+
)}
346+
</DataGridCell>
347+
</DataGridRow>
348+
);
349+
})}
340350
{validationErrors.map((error, index) => (
341351
<DataGridCell gridColumn="span 5" key={index}>
342352
<ModeledMethodAlert

0 commit comments

Comments
 (0)