diff --git a/extensions/ql-vscode/CHANGELOG.md b/extensions/ql-vscode/CHANGELOG.md index ee4214086d8..c388f9a1911 100644 --- a/extensions/ql-vscode/CHANGELOG.md +++ b/extensions/ql-vscode/CHANGELOG.md @@ -2,6 +2,8 @@ ## [UNRELEASED] +- Add a new method modeling panel to classify methods as sources/sinks/summaries while in the context of the source code. [#3128](https://github.com/github/vscode-codeql/pull/3128) +- Adds the ability to add multiple classifications per method in the CodeQL Model Editor. [#3128](https://github.com/github/vscode-codeql/pull/3128) - Add a prompt to the "Quick query" command to encourage users in single-folder workspaces to use "Create query" instead. [#3082](https://github.com/github/vscode-codeql/pull/3082) - Remove support for CodeQL CLI versions older than 2.11.6. [#3087](https://github.com/github/vscode-codeql/pull/3087) - Preserve focus on results viewer when showing a location in a file. [#3088](https://github.com/github/vscode-codeql/pull/3088) diff --git a/extensions/ql-vscode/package.json b/extensions/ql-vscode/package.json index b69f6d73a3d..93ccb22781b 100644 --- a/extensions/ql-vscode/package.json +++ b/extensions/ql-vscode/package.json @@ -1840,8 +1840,7 @@ { "id": "codeQLMethodModeling", "type": "webview", - "name": "CodeQL Method Modeling", - "when": "config.codeQL.canary" + "name": "CodeQL Method Modeling" } ], "codeql-methods-usage": [ diff --git a/extensions/ql-vscode/src/config.ts b/extensions/ql-vscode/src/config.ts index 4f89e2917e4..fa848a9b73c 100644 --- a/extensions/ql-vscode/src/config.ts +++ b/extensions/ql-vscode/src/config.ts @@ -726,7 +726,6 @@ export interface ModelConfig { flowGeneration: boolean; llmGeneration: boolean; getExtensionsDirectory(languageId: string): string | undefined; - showMultipleModels: boolean; enableRuby: boolean; } @@ -765,10 +764,6 @@ export class ModelConfigListener extends ConfigListener implements ModelConfig { }); } - public get showMultipleModels(): boolean { - return isCanary(); - } - public get enableRuby(): boolean { return !!ENABLE_RUBY.getValue(); } diff --git a/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts b/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts index 73fc3a2981f..c06376f1078 100644 --- a/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts +++ b/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts @@ -48,7 +48,6 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider< t: "setMethodModelingPanelViewState", viewState: { language: this.language, - showMultipleModels: this.modelConfig.showMultipleModels, }, }); } diff --git a/extensions/ql-vscode/src/model-editor/model-editor-view.ts b/extensions/ql-vscode/src/model-editor/model-editor-view.ts index c23f27173a5..819490d7d8f 100644 --- a/extensions/ql-vscode/src/model-editor/model-editor-view.ts +++ b/extensions/ql-vscode/src/model-editor/model-editor-view.ts @@ -385,7 +385,6 @@ export class ModelEditorView extends AbstractWebview< language: this.language, showGenerateButton, showLlmButton, - showMultipleModels: this.modelConfig.showMultipleModels, mode: this.modelingStore.getMode(this.databaseItem), showModeSwitchButton, sourceArchiveAvailable, diff --git a/extensions/ql-vscode/src/model-editor/shared/modeled-methods-legacy.ts b/extensions/ql-vscode/src/model-editor/shared/modeled-methods-legacy.ts deleted file mode 100644 index 1604422c0cd..00000000000 --- a/extensions/ql-vscode/src/model-editor/shared/modeled-methods-legacy.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ModeledMethod } from "../modeled-method"; - -/** - * Converts a ModeledMethod[] to a single ModeledMethod for legacy usage. This function should always be used instead - * of the trivial conversion to track usages of this conversion. - * - * This method should only be called inside a `postMessage` call. If it's used anywhere else, consider whether the - * boundary is correct: the boundary should as close as possible to the extension host -> webview boundary. - * - * @param modeledMethods The ModeledMethod[] - */ -export function convertToLegacyModeledMethod( - modeledMethods: ModeledMethod[], -): ModeledMethod | undefined { - return modeledMethods[0]; -} diff --git a/extensions/ql-vscode/src/model-editor/shared/view-state.ts b/extensions/ql-vscode/src/model-editor/shared/view-state.ts index 0fc9ed0a754..f40ab320862 100644 --- a/extensions/ql-vscode/src/model-editor/shared/view-state.ts +++ b/extensions/ql-vscode/src/model-editor/shared/view-state.ts @@ -7,7 +7,6 @@ export interface ModelEditorViewState { language: QueryLanguage; showGenerateButton: boolean; showLlmButton: boolean; - showMultipleModels: boolean; mode: Mode; showModeSwitchButton: boolean; sourceArchiveAvailable: boolean; @@ -15,5 +14,4 @@ export interface ModelEditorViewState { export interface MethodModelingPanelViewState { language: QueryLanguage | undefined; - showMultipleModels: boolean; } diff --git a/extensions/ql-vscode/src/stories/method-modeling/MethodModeling.stories.tsx b/extensions/ql-vscode/src/stories/method-modeling/MethodModeling.stories.tsx index 1d93cbcec83..aa892367a92 100644 --- a/extensions/ql-vscode/src/stories/method-modeling/MethodModeling.stories.tsx +++ b/extensions/ql-vscode/src/stories/method-modeling/MethodModeling.stories.tsx @@ -47,26 +47,16 @@ MethodSaved.args = { modelingStatus: "saved", }; -export const MultipleModelingsUnmodeled = Template.bind({}); -MultipleModelingsUnmodeled.args = { - language, - method, - modeledMethods: [], - modelingStatus: "saved", - showMultipleModels: true, -}; - -export const MultipleModelingsModeledSingle = Template.bind({}); -MultipleModelingsModeledSingle.args = { +export const ModeledSingle = Template.bind({}); +ModeledSingle.args = { language, method, modeledMethods: [createSinkModeledMethod(method)], modelingStatus: "saved", - showMultipleModels: true, }; -export const MultipleModelingsModeledMultiple = Template.bind({}); -MultipleModelingsModeledMultiple.args = { +export const ModeledMultiple = Template.bind({}); +ModeledMultiple.args = { language, method, modeledMethods: [ @@ -79,11 +69,10 @@ MultipleModelingsModeledMultiple.args = { }), ], modelingStatus: "saved", - showMultipleModels: true, }; -export const MultipleModelingsValidationFailedNeutral = Template.bind({}); -MultipleModelingsValidationFailedNeutral.args = { +export const ValidationFailedNeutral = Template.bind({}); +ValidationFailedNeutral.args = { language, method, modeledMethods: [ @@ -91,11 +80,10 @@ MultipleModelingsValidationFailedNeutral.args = { createNeutralModeledMethod(method), ], modelingStatus: "unsaved", - showMultipleModels: true, }; -export const MultipleModelingsValidationFailedDuplicate = Template.bind({}); -MultipleModelingsValidationFailedDuplicate.args = { +export const ValidationFailedDuplicate = Template.bind({}); +ValidationFailedDuplicate.args = { language, method, modeledMethods: [ @@ -108,5 +96,4 @@ MultipleModelingsValidationFailedDuplicate.args = { createSinkModeledMethod(method), ], modelingStatus: "unsaved", - showMultipleModels: true, }; diff --git a/extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx b/extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx index 6baf84da273..b9b987fc845 100644 --- a/extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx +++ b/extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx @@ -216,7 +216,6 @@ LibraryRow.args = { viewState: createMockModelEditorViewState({ showGenerateButton: true, showLlmButton: true, - showMultipleModels: true, }), hideModeledMethods: false, }; diff --git a/extensions/ql-vscode/src/stories/model-editor/MethodRow.stories.tsx b/extensions/ql-vscode/src/stories/model-editor/MethodRow.stories.tsx index a10207494f9..947a8772170 100644 --- a/extensions/ql-vscode/src/stories/model-editor/MethodRow.stories.tsx +++ b/extensions/ql-vscode/src/stories/model-editor/MethodRow.stories.tsx @@ -6,10 +6,7 @@ import { Meta, StoryFn } from "@storybook/react"; import { MethodRow as MethodRowComponent } from "../../view/model-editor/MethodRow"; import { CallClassification, Method } from "../../model-editor/method"; import { ModeledMethod } from "../../model-editor/modeled-method"; -import { - MULTIPLE_MODELS_GRID_TEMPLATE_COLUMNS, - SINGLE_MODEL_GRID_TEMPLATE_COLUMNS, -} from "../../view/model-editor/ModeledMethodDataGrid"; +import { MULTIPLE_MODELS_GRID_TEMPLATE_COLUMNS } from "../../view/model-editor/ModeledMethodDataGrid"; import { DataGrid } from "../../view/common/DataGrid"; import { createMockModelEditorViewState } from "../../../test/factories/model-editor/view-state"; @@ -35,12 +32,8 @@ const Template: StoryFn = (args) => { [args], ); - const gridTemplateColumns = args.viewState?.showMultipleModels - ? MULTIPLE_MODELS_GRID_TEMPLATE_COLUMNS - : SINGLE_MODEL_GRID_TEMPLATE_COLUMNS; - return ( - + void; }; @@ -65,7 +64,6 @@ export const MethodModeling = ({ modeledMethods, method, isModelingInProgress, - showMultipleModels = false, onChange, }: MethodModelingProps): JSX.Element => { return ( @@ -79,11 +77,10 @@ export const MethodModeling = ({ - ); diff --git a/extensions/ql-vscode/src/view/method-modeling/ModeledMethodsPanel.tsx b/extensions/ql-vscode/src/view/method-modeling/ModeledMethodsPanel.tsx deleted file mode 100644 index 37698088bd7..00000000000 --- a/extensions/ql-vscode/src/view/method-modeling/ModeledMethodsPanel.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import * as React from "react"; -import { useCallback } from "react"; -import { ModeledMethod } from "../../model-editor/modeled-method"; -import { MethodModelingInputs } from "./MethodModelingInputs"; -import { Method } from "../../model-editor/method"; -import { styled } from "styled-components"; -import { MultipleModeledMethodsPanel } from "./MultipleModeledMethodsPanel"; -import { convertToLegacyModeledMethod } from "../../model-editor/shared/modeled-methods-legacy"; -import { QueryLanguage } from "../../common/query-language"; -import { ModelingStatus } from "../../model-editor/shared/modeling-status"; - -export type ModeledMethodsPanelProps = { - language: QueryLanguage; - method: Method; - modeledMethods: ModeledMethod[]; - modelingStatus: ModelingStatus; - isModelingInProgress: boolean; - showMultipleModels: boolean; - onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void; -}; - -const SingleMethodModelingInputs = styled(MethodModelingInputs)` - padding-bottom: 0.5rem; -`; - -export const ModeledMethodsPanel = ({ - language, - method, - modeledMethods, - modelingStatus, - isModelingInProgress, - showMultipleModels, - onChange, -}: ModeledMethodsPanelProps) => { - const handleSingleChange = useCallback( - (modeledMethod: ModeledMethod) => { - onChange(modeledMethod.signature, [modeledMethod]); - }, - [onChange], - ); - - if (!showMultipleModels) { - return ( - - ); - } - - return ( - - ); -}; diff --git a/extensions/ql-vscode/src/view/method-modeling/__tests__/ModeledMethodsPanel.spec.tsx b/extensions/ql-vscode/src/view/method-modeling/__tests__/ModeledMethodsPanel.spec.tsx deleted file mode 100644 index 63e329ea41e..00000000000 --- a/extensions/ql-vscode/src/view/method-modeling/__tests__/ModeledMethodsPanel.spec.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import * as React from "react"; -import { render as reactRender, screen } from "@testing-library/react"; -import { createMethod } from "../../../../test/factories/model-editor/method-factories"; -import { createSinkModeledMethod } from "../../../../test/factories/model-editor/modeled-method-factories"; -import { - ModeledMethodsPanel, - ModeledMethodsPanelProps, -} from "../ModeledMethodsPanel"; -import { QueryLanguage } from "../../../common/query-language"; - -describe(ModeledMethodsPanel.name, () => { - const render = (props: ModeledMethodsPanelProps) => - reactRender(); - - const language = QueryLanguage.Java; - const method = createMethod(); - const modeledMethods = [createSinkModeledMethod(), createSinkModeledMethod()]; - const modelingStatus = "unmodeled"; - const isModelingInProgress = false; - const onChange = jest.fn(); - - describe("when show multiple models is disabled", () => { - const showMultipleModels = false; - - it("renders the method modeling inputs", () => { - render({ - language, - method, - modeledMethods, - isModelingInProgress, - modelingStatus, - onChange, - showMultipleModels, - }); - - expect(screen.getAllByRole("combobox")).toHaveLength(4); - }); - - it("does not render the pagination", () => { - render({ - language, - method, - modeledMethods, - isModelingInProgress, - modelingStatus, - onChange, - showMultipleModels, - }); - - expect( - screen.queryByLabelText("Previous modeling"), - ).not.toBeInTheDocument(); - expect(screen.queryByLabelText("Next modeling")).not.toBeInTheDocument(); - }); - }); - - describe("when show multiple models is enabled", () => { - const showMultipleModels = true; - - it("renders the method modeling inputs once", () => { - render({ - language, - method, - modeledMethods, - isModelingInProgress, - modelingStatus, - onChange, - showMultipleModels, - }); - - expect(screen.getAllByRole("combobox")).toHaveLength(4); - }); - - it("renders the pagination", () => { - render({ - language, - method, - modeledMethods, - isModelingInProgress, - modelingStatus, - onChange, - showMultipleModels, - }); - - expect(screen.getByLabelText("Previous modeling")).toBeInTheDocument(); - expect(screen.getByLabelText("Next modeling")).toBeInTheDocument(); - expect(screen.getByText("1/2")).toBeInTheDocument(); - }); - }); -}); diff --git a/extensions/ql-vscode/src/view/model-editor/HiddenMethodsRow.tsx b/extensions/ql-vscode/src/view/model-editor/HiddenMethodsRow.tsx index 7c26c15d562..2d9facbdb0b 100644 --- a/extensions/ql-vscode/src/view/model-editor/HiddenMethodsRow.tsx +++ b/extensions/ql-vscode/src/view/model-editor/HiddenMethodsRow.tsx @@ -2,7 +2,6 @@ import * as React from "react"; import { styled } from "styled-components"; import { pluralize } from "../../common/word"; import { DataGridCell, DataGridRow } from "../common/DataGrid"; -import { ModelEditorViewState } from "../../model-editor/shared/view-state"; const HiddenMethodsCell = styled(DataGridCell)` text-align: center; @@ -11,23 +10,19 @@ const HiddenMethodsCell = styled(DataGridCell)` interface Props { numHiddenMethods: number; someMethodsAreVisible: boolean; - viewState: ModelEditorViewState; } export function HiddenMethodsRow({ numHiddenMethods, someMethodsAreVisible, - viewState, }: Props) { if (numHiddenMethods === 0) { return null; } - const gridColumn = viewState.showMultipleModels ? "span 6" : "span 5"; - return ( - + {someMethodsAreVisible && "And "} {pluralize(numHiddenMethods, "method", "methods")} modeled in other CodeQL packs diff --git a/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx b/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx index 296204d2fbd..4526a285f68 100644 --- a/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx +++ b/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx @@ -136,8 +136,8 @@ const ModelableMethodRow = forwardRef( }, [focusedIndex]); const modeledMethods = useMemo( - () => modeledMethodsToDisplay(modeledMethodsProp, method, viewState), - [modeledMethodsProp, method, viewState], + () => modeledMethodsToDisplay(modeledMethodsProp, method), + [modeledMethodsProp, method], ); const validationErrors = useMemo( @@ -219,13 +219,11 @@ const ModelableMethodRow = forwardRef( - {viewState.showMultipleModels && ( - - - - - - )} + + + + + )} {!props.modelingInProgress && ( @@ -267,28 +265,26 @@ const ModelableMethodRow = forwardRef( onChange={modeledMethodChangedHandlers[index]} /> - {viewState.showMultipleModels && ( - - {index === 0 ? ( - - - - ) : ( - - - - )} - - )} + + {index === 0 ? ( + + + + ) : ( + + + + )} + ))} {validationErrors.map((error, index) => ( @@ -336,9 +332,7 @@ const UnmodelableMethodRow = forwardRef< View - - Method already modeled - + Method already modeled ); }); @@ -354,15 +348,10 @@ function sendJumpToMethodMessage(method: Method) { function modeledMethodsToDisplay( modeledMethods: ModeledMethod[], method: Method, - viewState: ModelEditorViewState, ): ModeledMethod[] { if (modeledMethods.length === 0) { return [createEmptyModeledMethod("none", method)]; } - if (viewState.showMultipleModels) { - return modeledMethods; - } else { - return modeledMethods.slice(0, 1); - } + return modeledMethods; } diff --git a/extensions/ql-vscode/src/view/model-editor/ModeledMethodDataGrid.tsx b/extensions/ql-vscode/src/view/model-editor/ModeledMethodDataGrid.tsx index 6f392b12655..cd816ed727f 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModeledMethodDataGrid.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModeledMethodDataGrid.tsx @@ -9,8 +9,6 @@ import { ModelEditorViewState } from "../../model-editor/shared/view-state"; import { ScreenReaderOnly } from "../common/ScreenReaderOnly"; import { DataGrid, DataGridCell } from "../common/DataGrid"; -export const SINGLE_MODEL_GRID_TEMPLATE_COLUMNS = - "0.5fr 0.125fr 0.125fr 0.125fr 0.125fr"; export const MULTIPLE_MODELS_GRID_TEMPLATE_COLUMNS = "0.5fr 0.125fr 0.125fr 0.125fr 0.125fr max-content"; @@ -61,12 +59,8 @@ export const ModeledMethodDataGrid = ({ const someMethodsAreVisible = methodsWithModelability.length > 0; - const gridTemplateColumns = viewState.showMultipleModels - ? MULTIPLE_MODELS_GRID_TEMPLATE_COLUMNS - : SINGLE_MODEL_GRID_TEMPLATE_COLUMNS; - return ( - + {someMethodsAreVisible && ( <> API or method @@ -74,11 +68,9 @@ export const ModeledMethodDataGrid = ({ Input Output Kind - {viewState.showMultipleModels && ( - - Add or remove models - - )} + + Add or remove models + {methodsWithModelability.map(({ method, methodCanBeModeled }) => { const modeledMethods = modeledMethodsMap[method.signature] ?? []; return ( @@ -100,7 +92,6 @@ export const ModeledMethodDataGrid = ({ ); diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/HiddenMethodsRow.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/HiddenMethodsRow.spec.tsx index cf3a3f190b9..f8549cf60a4 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/HiddenMethodsRow.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/HiddenMethodsRow.spec.tsx @@ -1,18 +1,11 @@ import * as React from "react"; import { render, screen } from "@testing-library/react"; import { HiddenMethodsRow } from "../HiddenMethodsRow"; -import { createMockModelEditorViewState } from "../../../../test/factories/model-editor/view-state"; describe(HiddenMethodsRow.name, () => { - const viewState = createMockModelEditorViewState(); - it("does not render with 0 hidden methods", () => { const { container } = render( - , + , ); expect(container).toBeEmptyDOMElement(); @@ -20,11 +13,7 @@ describe(HiddenMethodsRow.name, () => { it("renders with 1 hidden methods and no visible methods", () => { render( - , + , ); expect( @@ -34,11 +23,7 @@ describe(HiddenMethodsRow.name, () => { it("renders with 1 hidden methods and visible methods", () => { render( - , + , ); expect( @@ -48,11 +33,7 @@ describe(HiddenMethodsRow.name, () => { it("renders with 3 hidden methods and no visible methods", () => { render( - , + , ); expect( @@ -62,11 +43,7 @@ describe(HiddenMethodsRow.name, () => { it("renders with 3 hidden methods and visible methods", () => { render( - , + , ); expect( diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/MethodRow.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/MethodRow.spec.tsx index c6821675e3c..cfbdd665132 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/MethodRow.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/MethodRow.spec.tsx @@ -195,10 +195,6 @@ describe(MethodRow.name, () => { { ...modeledMethod, type: "sink" }, { ...modeledMethod, type: "summary" }, ], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); const kindInputs = screen.getAllByRole("combobox", { name: "Model type" }); @@ -208,24 +204,6 @@ describe(MethodRow.name, () => { expect(kindInputs[2]).toHaveValue("summary"); }); - it("renders only first model when showMultipleModels feature flag is disabled", () => { - render({ - modeledMethods: [ - { ...modeledMethod, type: "source" }, - { ...modeledMethod, type: "sink" }, - { ...modeledMethod, type: "summary" }, - ], - viewState: { - ...viewState, - showMultipleModels: false, - }, - }); - - const kindInputs = screen.getAllByRole("combobox", { name: "Model type" }); - expect(kindInputs.length).toBe(1); - expect(kindInputs[0]).toHaveValue("source"); - }); - it("can update fields when there are multiple models", async () => { render({ modeledMethods: [ @@ -233,10 +211,6 @@ describe(MethodRow.name, () => { { ...modeledMethod, type: "sink", kind: "code-injection" }, { ...modeledMethod, type: "summary" }, ], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); onChange.mockReset(); @@ -268,26 +242,9 @@ describe(MethodRow.name, () => { expect(screen.getByText("Method already modeled")).toBeInTheDocument(); }); - it("doesn't show add/remove buttons when multiple methods feature flag is disabled", async () => { - render({ - modeledMethods: [modeledMethod], - viewState: { - ...viewState, - showMultipleModels: false, - }, - }); - - expect(screen.queryByLabelText("Add new model")).not.toBeInTheDocument(); - expect(screen.queryByLabelText("Remove model")).not.toBeInTheDocument(); - }); - it("shows disabled button add new model when there are no modeled methods", async () => { render({ modeledMethods: [], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); const addButton = screen.queryByLabelText("Add new model"); @@ -300,10 +257,6 @@ describe(MethodRow.name, () => { it("disabled button to add new model when there is one unmodeled method", async () => { render({ modeledMethods: [{ ...modeledMethod, type: "none" }], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); const addButton = screen.queryByLabelText("Add new model"); @@ -316,10 +269,6 @@ describe(MethodRow.name, () => { it("enabled button to add new model when there is one modeled method", async () => { render({ modeledMethods: [modeledMethod], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); const addButton = screen.queryByLabelText("Add new model"); @@ -335,10 +284,6 @@ describe(MethodRow.name, () => { { ...modeledMethod, type: "source" }, { ...modeledMethod, type: "none" }, ], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); const addButton = screen.queryByLabelText("Add new model"); @@ -358,10 +303,6 @@ describe(MethodRow.name, () => { { ...modeledMethod, type: "summary" }, { ...modeledMethod, type: "none" }, ], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); const addButtons = screen.queryAllByLabelText("Add new model"); @@ -378,10 +319,6 @@ describe(MethodRow.name, () => { it("can add a new model", async () => { render({ modeledMethods: [modeledMethod], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); onChange.mockReset(); @@ -409,10 +346,6 @@ describe(MethodRow.name, () => { { ...modeledMethod, type: "none" }, { ...modeledMethod, type: "summary" }, ], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); onChange.mockReset(); @@ -434,10 +367,6 @@ describe(MethodRow.name, () => { { ...modeledMethod, type: "none" }, { ...modeledMethod, type: "summary" }, ], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); onChange.mockReset(); @@ -457,10 +386,6 @@ describe(MethodRow.name, () => { { ...modeledMethod, type: "source" }, { ...modeledMethod, type: "sink" }, ], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); expect(screen.queryByRole("alert")).not.toBeInTheDocument(); @@ -472,10 +397,6 @@ describe(MethodRow.name, () => { { ...modeledMethod, type: "source" }, { ...modeledMethod, type: "source" }, ], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); expect(screen.getByRole("alert")).toBeInTheDocument(); @@ -494,10 +415,6 @@ describe(MethodRow.name, () => { { ...modeledMethod, type: "source" }, { ...modeledMethod, type: "neutral", kind: "source" }, ], - viewState: { - ...viewState, - showMultipleModels: true, - }, }); expect(screen.getAllByRole("alert").length).toBe(2); diff --git a/extensions/ql-vscode/test/factories/model-editor/view-state.ts b/extensions/ql-vscode/test/factories/model-editor/view-state.ts index 271066d32d1..fa6d3a6e128 100644 --- a/extensions/ql-vscode/test/factories/model-editor/view-state.ts +++ b/extensions/ql-vscode/test/factories/model-editor/view-state.ts @@ -11,7 +11,6 @@ export function createMockModelEditorViewState( mode: Mode.Application, showGenerateButton: false, showLlmButton: false, - showMultipleModels: false, showModeSwitchButton: true, extensionPack: createMockExtensionPack(), sourceArchiveAvailable: true,