From be4e341d4e3bd2517a50bcb68167eec9c7870a08 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Tue, 10 Oct 2023 15:39:21 +0000 Subject: [PATCH 1/4] Rename 'open database' button and only show if source available --- .../ql-vscode/src/model-editor/model-editor-view.ts | 7 +++++++ .../ql-vscode/src/model-editor/shared/view-state.ts | 1 + .../ql-vscode/src/view/model-editor/ModelEditor.tsx | 10 ++++++---- .../view/model-editor/__tests__/LibraryRow.spec.tsx | 1 + .../src/view/model-editor/__tests__/MethodRow.spec.tsx | 1 + .../__tests__/ModeledMethodDataGrid.spec.tsx | 1 + .../model-editor/__tests__/ModeledMethodsList.spec.tsx | 1 + 7 files changed, 18 insertions(+), 4 deletions(-) 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 a39f0498056..1f21f984b90 100644 --- a/extensions/ql-vscode/src/model-editor/model-editor-view.ts +++ b/extensions/ql-vscode/src/model-editor/model-editor-view.ts @@ -5,6 +5,7 @@ import { Uri, ViewColumn, window, + workspace, } from "vscode"; import { AbstractWebview, @@ -362,6 +363,11 @@ export class ModelEditorView extends AbstractWebview< const showLlmButton = this.databaseItem.language === "java" && this.modelConfig.llmGeneration; + const sourceArchiveAvailable = workspace.workspaceFolders?.some( + (f) => + f.uri.fsPath === this.databaseItem.getSourceArchiveExplorerUri().fsPath, + ); + await this.postMessage({ t: "setModelEditorViewState", viewState: { @@ -370,6 +376,7 @@ export class ModelEditorView extends AbstractWebview< showLlmButton, showMultipleModels: this.modelConfig.showMultipleModels, mode: this.mode, + sourceArchiveAvailable: !!sourceArchiveAvailable, }, }); } 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 f7250916b61..acaf8cd172b 100644 --- a/extensions/ql-vscode/src/model-editor/shared/view-state.ts +++ b/extensions/ql-vscode/src/model-editor/shared/view-state.ts @@ -7,6 +7,7 @@ export interface ModelEditorViewState { showLlmButton: boolean; showMultipleModels: boolean; mode: Mode; + sourceArchiveAvailable: boolean; } export interface MethodModelingPanelViewState { diff --git a/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx b/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx index 413b00a5cbd..5da079fe294 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx @@ -282,10 +282,12 @@ export function ModelEditor({ <>{viewState.extensionPack.name} - - - Open database - + {viewState.sourceArchiveAvailable && ( + + + Open source + + )} Open extension pack diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/LibraryRow.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/LibraryRow.spec.tsx index 77f14c5fd8e..57c8d05e99e 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/LibraryRow.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/LibraryRow.spec.tsx @@ -22,6 +22,7 @@ describe(LibraryRow.name, () => { showLlmButton: false, showMultipleModels: false, extensionPack: createMockExtensionPack(), + sourceArchiveAvailable: true, }; const render = (props: Partial = {}) => 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 4f34ab1e7a2..36ac71aa01f 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 @@ -39,6 +39,7 @@ describe(MethodRow.name, () => { showLlmButton: false, showMultipleModels: false, extensionPack: createMockExtensionPack(), + sourceArchiveAvailable: true, }; const render = (props: Partial = {}) => diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodDataGrid.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodDataGrid.spec.tsx index 8320036a2d9..cacb548349f 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodDataGrid.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodDataGrid.spec.tsx @@ -49,6 +49,7 @@ describe(ModeledMethodDataGrid.name, () => { showLlmButton: false, showMultipleModels: false, extensionPack: createMockExtensionPack(), + sourceArchiveAvailable: true, }; const render = (props: Partial = {}) => diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodsList.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodsList.spec.tsx index 07c18b57b7d..a22ba545f52 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodsList.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodsList.spec.tsx @@ -50,6 +50,7 @@ describe(ModeledMethodsList.name, () => { showLlmButton: false, showMultipleModels: false, extensionPack: createMockExtensionPack(), + sourceArchiveAvailable: true, }; const render = (props: Partial = {}) => From 318f41a2db862913235ff568d3dd502982cd7a83 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Tue, 10 Oct 2023 15:42:39 +0000 Subject: [PATCH 2/4] Update CHANGELOG --- extensions/ql-vscode/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/extensions/ql-vscode/CHANGELOG.md b/extensions/ql-vscode/CHANGELOG.md index 48554b65078..778c5fbe013 100644 --- a/extensions/ql-vscode/CHANGELOG.md +++ b/extensions/ql-vscode/CHANGELOG.md @@ -9,6 +9,7 @@ - Add support for the `telemetry.telemetryLevel` setting. For more information, see the [telemetry documentation](https://codeql.github.com/docs/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code). [#2824](https://github.com/github/vscode-codeql/pull/2824). - Fix syntax highlighting directly after import statements with instantiation arguments. [#2792](https://github.com/github/vscode-codeql/pull/2792) - The `debug.saveBeforeStart` setting is now respected when running variant analyses. [#2950](https://github.com/github/vscode-codeql/pull/2950) +- The 'open database' button of the model editor was renamed to 'open source'. Also, it's now only available if the source archive is available as a workspace folder. [#2945](https://github.com/github/vscode-codeql/pull/2945) ## 1.9.1 - 29 September 2023 From e67402a9cdf00bd40640d2d81ca9de0dce5cac55 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Tue, 10 Oct 2023 16:16:20 +0000 Subject: [PATCH 3/4] Fix linting issues --- .../ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx | 1 + .../ql-vscode/src/stories/model-editor/MethodRow.stories.tsx | 1 + .../ql-vscode/src/stories/model-editor/ModelEditor.stories.tsx | 1 + 3 files changed, 3 insertions(+) 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 349312d4ee8..d19e0f70b7a 100644 --- a/extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx +++ b/extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx @@ -226,6 +226,7 @@ LibraryRow.args = { showLlmButton: true, showMultipleModels: true, mode: Mode.Application, + sourceArchiveAvailable: 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 9ea43028a21..20a9600cacd 100644 --- a/extensions/ql-vscode/src/stories/model-editor/MethodRow.stories.tsx +++ b/extensions/ql-vscode/src/stories/model-editor/MethodRow.stories.tsx @@ -75,6 +75,7 @@ const viewState: ModelEditorViewState = { showLlmButton: true, showMultipleModels: true, mode: Mode.Application, + sourceArchiveAvailable: true, }; export const Unmodeled = Template.bind({}); diff --git a/extensions/ql-vscode/src/stories/model-editor/ModelEditor.stories.tsx b/extensions/ql-vscode/src/stories/model-editor/ModelEditor.stories.tsx index 396d09a88eb..92988cb66b4 100644 --- a/extensions/ql-vscode/src/stories/model-editor/ModelEditor.stories.tsx +++ b/extensions/ql-vscode/src/stories/model-editor/ModelEditor.stories.tsx @@ -32,6 +32,7 @@ ModelEditor.args = { showLlmButton: true, showMultipleModels: true, mode: Mode.Application, + sourceArchiveAvailable: true, }, initialMethods: [ { From 97cf13ce1a928cce7b03e9fae9811b045cb11ca0 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Wed, 11 Oct 2023 13:08:15 +0000 Subject: [PATCH 4/4] Use belongsToSourceArchiveExplorerUri instead of getSourceArchiveExplorerUri --- .../src/databases/local-databases/database-item-impl.ts | 9 +++++++++ .../src/databases/local-databases/database-item.ts | 5 +++++ .../ql-vscode/src/model-editor/model-editor-view.ts | 9 +++------ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/extensions/ql-vscode/src/databases/local-databases/database-item-impl.ts b/extensions/ql-vscode/src/databases/local-databases/database-item-impl.ts index 43d597ef288..c802f65ea84 100644 --- a/extensions/ql-vscode/src/databases/local-databases/database-item-impl.ts +++ b/extensions/ql-vscode/src/databases/local-databases/database-item-impl.ts @@ -167,6 +167,15 @@ export class DatabaseItemImpl implements DatabaseItem { return encodeArchiveBasePath(sourceArchive.fsPath); } + /** + * Returns true if the database's source archive is in the workspace. + */ + public hasSourceArchiveInExplorer(): boolean { + return (vscode.workspace.workspaceFolders || []).some((folder) => + this.belongsToSourceArchiveExplorerUri(folder.uri), + ); + } + public verifyZippedSources(): string | undefined { const sourceArchive = this.sourceArchive; if (sourceArchive === undefined) { diff --git a/extensions/ql-vscode/src/databases/local-databases/database-item.ts b/extensions/ql-vscode/src/databases/local-databases/database-item.ts index 1794d8e753d..ad64f52d43b 100644 --- a/extensions/ql-vscode/src/databases/local-databases/database-item.ts +++ b/extensions/ql-vscode/src/databases/local-databases/database-item.ts @@ -56,6 +56,11 @@ export interface DatabaseItem { */ getSourceArchiveExplorerUri(): vscode.Uri; + /** + * Returns true if the database's source archive is in the workspace. + */ + hasSourceArchiveInExplorer(): boolean; + /** * Holds if `uri` belongs to this database's source archive. */ 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 1f21f984b90..31ea96d558e 100644 --- a/extensions/ql-vscode/src/model-editor/model-editor-view.ts +++ b/extensions/ql-vscode/src/model-editor/model-editor-view.ts @@ -5,7 +5,6 @@ import { Uri, ViewColumn, window, - workspace, } from "vscode"; import { AbstractWebview, @@ -363,10 +362,8 @@ export class ModelEditorView extends AbstractWebview< const showLlmButton = this.databaseItem.language === "java" && this.modelConfig.llmGeneration; - const sourceArchiveAvailable = workspace.workspaceFolders?.some( - (f) => - f.uri.fsPath === this.databaseItem.getSourceArchiveExplorerUri().fsPath, - ); + const sourceArchiveAvailable = + this.databaseItem.hasSourceArchiveInExplorer(); await this.postMessage({ t: "setModelEditorViewState", @@ -376,7 +373,7 @@ export class ModelEditorView extends AbstractWebview< showLlmButton, showMultipleModels: this.modelConfig.showMultipleModels, mode: this.mode, - sourceArchiveAvailable: !!sourceArchiveAvailable, + sourceArchiveAvailable, }, }); }