From 6e21706c15d7ff1100d47c4cf071d8c936a8849c Mon Sep 17 00:00:00 2001 From: Shati Patel <42641846+shati-patel@users.noreply.github.com> Date: Thu, 27 Jul 2023 16:49:41 +0100 Subject: [PATCH 1/3] Implement "Hide modeled APIs" checkbox and make it the default (#2651) --- .../DataExtensionsEditor.tsx | 14 +++++++++++++- .../src/view/data-extensions-editor/LibraryRow.tsx | 3 +++ .../src/view/data-extensions-editor/MethodRow.tsx | 6 +++++- .../ModeledMethodDataGrid.tsx | 3 +++ .../data-extensions-editor/ModeledMethodsList.tsx | 3 +++ 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx b/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx index eaeab65b1..37fd5605a 100644 --- a/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx +++ b/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx @@ -91,6 +91,8 @@ export function DataExtensionsEditor({ new Set(), ); + const [hideModeledApis, setHideModeledApis] = useState(true); + const [modeledMethods, setModeledMethods] = useState< Record >(initialModeledMethods); @@ -252,6 +254,10 @@ export function DataExtensionsEditor({ }); }, [viewState?.mode]); + const onHideModeledApis = useCallback(() => { + setHideModeledApis((oldHideModeledApis) => !oldHideModeledApis); + }, []); + if (viewState === undefined || externalApiUsages.length === 0) { return Loading...; } @@ -292,7 +298,12 @@ export function DataExtensionsEditor({ - Hide modeled APIs + + Hide modeled APIs + @@ -320,6 +331,7 @@ export function DataExtensionsEditor({ modeledMethods={modeledMethods} modifiedSignatures={modifiedSignatures} viewState={viewState} + hideModeledApis={hideModeledApis} onChange={onChange} onSaveModelClick={onSaveModelClick} onGenerateFromLlmClick={onGenerateFromLlmClick} diff --git a/extensions/ql-vscode/src/view/data-extensions-editor/LibraryRow.tsx b/extensions/ql-vscode/src/view/data-extensions-editor/LibraryRow.tsx index a4706924b..c9393e19d 100644 --- a/extensions/ql-vscode/src/view/data-extensions-editor/LibraryRow.tsx +++ b/extensions/ql-vscode/src/view/data-extensions-editor/LibraryRow.tsx @@ -73,6 +73,7 @@ type Props = { modeledMethods: Record; modifiedSignatures: Set; viewState: DataExtensionEditorViewState; + hideModeledApis: boolean; onChange: ( modelName: string, externalApiUsage: ExternalApiUsage, @@ -97,6 +98,7 @@ export const LibraryRow = ({ modeledMethods, modifiedSignatures, viewState, + hideModeledApis, onChange, onSaveModelClick, onGenerateFromLlmClick, @@ -208,6 +210,7 @@ export const LibraryRow = ({ modeledMethods={modeledMethods} modifiedSignatures={modifiedSignatures} mode={viewState.mode} + hideModeledApis={hideModeledApis} onChange={onChangeWithModelName} /> diff --git a/extensions/ql-vscode/src/view/data-extensions-editor/MethodRow.tsx b/extensions/ql-vscode/src/view/data-extensions-editor/MethodRow.tsx index 5e75fe4e1..ca20eb7e2 100644 --- a/extensions/ql-vscode/src/view/data-extensions-editor/MethodRow.tsx +++ b/extensions/ql-vscode/src/view/data-extensions-editor/MethodRow.tsx @@ -56,6 +56,7 @@ type Props = { modeledMethod: ModeledMethod | undefined; methodIsUnsaved: boolean; mode: Mode; + hideModeledApis: boolean; onChange: ( externalApiUsage: ExternalApiUsage, modeledMethod: ModeledMethod, @@ -63,7 +64,8 @@ type Props = { }; export const MethodRow = (props: Props) => { - const { externalApiUsage, modeledMethod, methodIsUnsaved } = props; + const { externalApiUsage, modeledMethod, methodIsUnsaved, hideModeledApis } = + props; const methodCanBeModeled = !externalApiUsage.supported || @@ -72,6 +74,8 @@ export const MethodRow = (props: Props) => { if (methodCanBeModeled) { return ; + } else if (hideModeledApis) { + return null; } else { return ; } diff --git a/extensions/ql-vscode/src/view/data-extensions-editor/ModeledMethodDataGrid.tsx b/extensions/ql-vscode/src/view/data-extensions-editor/ModeledMethodDataGrid.tsx index 36b1ebc61..7b3645bc2 100644 --- a/extensions/ql-vscode/src/view/data-extensions-editor/ModeledMethodDataGrid.tsx +++ b/extensions/ql-vscode/src/view/data-extensions-editor/ModeledMethodDataGrid.tsx @@ -16,6 +16,7 @@ type Props = { modeledMethods: Record; modifiedSignatures: Set; mode: Mode; + hideModeledApis: boolean; onChange: ( externalApiUsage: ExternalApiUsage, modeledMethod: ModeledMethod, @@ -27,6 +28,7 @@ export const ModeledMethodDataGrid = ({ modeledMethods, modifiedSignatures, mode, + hideModeledApis, onChange, }: Props) => { const sortedExternalApiUsages = useMemo( @@ -60,6 +62,7 @@ export const ModeledMethodDataGrid = ({ modeledMethod={modeledMethods[externalApiUsage.signature]} methodIsUnsaved={modifiedSignatures.has(externalApiUsage.signature)} mode={mode} + hideModeledApis={hideModeledApis} onChange={onChange} /> ))} diff --git a/extensions/ql-vscode/src/view/data-extensions-editor/ModeledMethodsList.tsx b/extensions/ql-vscode/src/view/data-extensions-editor/ModeledMethodsList.tsx index 3eb33175c..780fc5a36 100644 --- a/extensions/ql-vscode/src/view/data-extensions-editor/ModeledMethodsList.tsx +++ b/extensions/ql-vscode/src/view/data-extensions-editor/ModeledMethodsList.tsx @@ -15,6 +15,7 @@ type Props = { modeledMethods: Record; modifiedSignatures: Set; viewState: DataExtensionEditorViewState; + hideModeledApis: boolean; onChange: ( modelName: string, externalApiUsage: ExternalApiUsage, @@ -41,6 +42,7 @@ export const ModeledMethodsList = ({ modeledMethods, modifiedSignatures, viewState, + hideModeledApis, onChange, onSaveModelClick, onGenerateFromLlmClick, @@ -83,6 +85,7 @@ export const ModeledMethodsList = ({ modeledMethods={modeledMethods} modifiedSignatures={modifiedSignatures} viewState={viewState} + hideModeledApis={hideModeledApis} onChange={onChange} onSaveModelClick={onSaveModelClick} onGenerateFromLlmClick={onGenerateFromLlmClick} From 5f65498e0a61b16251408823c8a935c91e349f4a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Jul 2023 16:04:05 +0000 Subject: [PATCH 2/3] Bump CLI version from v2.14.0 to v2.14.1 for integration tests (#2650) Co-authored-by: github-actions[bot] --- extensions/ql-vscode/supported_cli_versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/ql-vscode/supported_cli_versions.json b/extensions/ql-vscode/supported_cli_versions.json index cd1bc8dba..cc3f016a7 100644 --- a/extensions/ql-vscode/supported_cli_versions.json +++ b/extensions/ql-vscode/supported_cli_versions.json @@ -1,5 +1,5 @@ [ - "v2.14.0", + "v2.14.1", "v2.13.5", "v2.12.7", "v2.11.6", From 72fa1c5583df64949f0ec47c4e6c26de12c55d38 Mon Sep 17 00:00:00 2001 From: Chuan-kai Lin Date: Thu, 27 Jul 2023 09:10:04 -0700 Subject: [PATCH 3/3] legacy-query.test.ts: skip if CLI supports new query server --- .../cli-integration/legacy-query.test.ts | 29 +++++++++++++++++++ .../cli-integration/new-query.test.ts | 3 ++ 2 files changed, 32 insertions(+) diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/legacy-query.test.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/legacy-query.test.ts index ea73efcef..a962ca88a 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/legacy-query.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/legacy-query.test.ts @@ -111,11 +111,20 @@ describeWithCodeQL()("using the legacy query server", () => { let qs: qsClient.QueryServerClient; let cliServer: cli.CodeQLCliServer; + let supportNewQueryServer = false; + beforeAll(async () => { const extension = await getActivatedExtension(); cliServer = extension.cliServer; cliServer.quiet = true; + if (await cliServer.cliConstraints.supportsNewQueryServerForTests()) { + console.log( + "Skipping legacy-query tests: the CLI supports the new query server", + ); + supportNewQueryServer = true; + } + qs = new QueryServerClient( createMockApp({}), { @@ -145,10 +154,18 @@ describeWithCodeQL()("using the legacy query server", () => { const parsedResults = new Checkpoint(); it("should register the database if necessary", async () => { + if (supportNewQueryServer) { + return; + } + await qs.sendRequest(messages.registerDatabases, { databases: [db] }); }); it(`should be able to compile query ${queryName}`, async () => { + if (supportNewQueryServer) { + return; + } + expect(existsSync(queryTestCase.queryPath)).toBe(true); try { const qlProgram: messages.QlProgram = { @@ -188,6 +205,10 @@ describeWithCodeQL()("using the legacy query server", () => { }); it(`should be able to run query ${queryName}`, async () => { + if (supportNewQueryServer) { + return; + } + try { await compilationSucceeded.done(); const callbackId = qs.registerCallback((_res) => { @@ -217,6 +238,10 @@ describeWithCodeQL()("using the legacy query server", () => { const actualResultSets: ResultSets = {}; it(`should be able to parse results of query ${queryName}`, async () => { + if (supportNewQueryServer) { + return; + } + await evaluationSucceeded.done(); const info = await cliServer.bqrsInfo(RESULTS_PATH); @@ -231,6 +256,10 @@ describeWithCodeQL()("using the legacy query server", () => { }); it(`should have correct results for query ${queryName}`, async () => { + if (supportNewQueryServer) { + return; + } + await parsedResults.done(); expect(actualResultSets).not.toEqual({}); expect(Object.keys(actualResultSets!).sort()).toEqual( diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/new-query.test.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/new-query.test.ts index 30f2e6beb..1447f5b7b 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/new-query.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/new-query.test.ts @@ -114,6 +114,9 @@ describeWithCodeQL()("using the new query server", () => { cliServer.quiet = true; if (!(await cliServer.cliConstraints.supportsNewQueryServerForTests())) { + console.log( + "Skipping new-query tests: the CLI supports only the legacy query server", + ); supportNewQueryServer = false; } qs = new QueryServerClient(