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 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 a39f0498056..31ea96d558e 100644 --- a/extensions/ql-vscode/src/model-editor/model-editor-view.ts +++ b/extensions/ql-vscode/src/model-editor/model-editor-view.ts @@ -362,6 +362,9 @@ export class ModelEditorView extends AbstractWebview< const showLlmButton = this.databaseItem.language === "java" && this.modelConfig.llmGeneration; + const sourceArchiveAvailable = + this.databaseItem.hasSourceArchiveInExplorer(); + await this.postMessage({ t: "setModelEditorViewState", viewState: { @@ -370,6 +373,7 @@ export class ModelEditorView extends AbstractWebview< showLlmButton, showMultipleModels: this.modelConfig.showMultipleModels, mode: this.mode, + 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/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: [ { 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 = {}) =>