diff --git a/extensions/ql-vscode/CHANGELOG.md b/extensions/ql-vscode/CHANGELOG.md index f2e05d22751..88667fd8e10 100644 --- a/extensions/ql-vscode/CHANGELOG.md +++ b/extensions/ql-vscode/CHANGELOG.md @@ -4,6 +4,7 @@ - Sorted result set filenames now include a hash of the result set name instead of the full name. [#2955](https://github.com/github/vscode-codeql/pull/2955) - The "Install Pack Dependencies" will now only list CodeQL packs located in the workspace. [#2960](https://github.com/github/vscode-codeql/pull/2960) +- Add a command to sort items in the databases view by language. [#2993](https://github.com/github/vscode-codeql/pull/2993) ## 1.9.2 - 12 October 2023 diff --git a/extensions/ql-vscode/package.json b/extensions/ql-vscode/package.json index 96ca0fb0ade..7ac22031dea 100644 --- a/extensions/ql-vscode/package.json +++ b/extensions/ql-vscode/package.json @@ -772,6 +772,10 @@ "command": "codeQLDatabases.sortByName", "title": "Sort by Name" }, + { + "command": "codeQLDatabases.sortByLanguage", + "title": "Sort by Language" + }, { "command": "codeQLDatabases.sortByDateAdded", "title": "Sort by Date Added" @@ -998,10 +1002,15 @@ "group": "1_databases@0" }, { - "command": "codeQLDatabases.sortByDateAdded", + "command": "codeQLDatabases.sortByLanguage", "when": "view == codeQLDatabases", "group": "1_databases@1" }, + { + "command": "codeQLDatabases.sortByDateAdded", + "when": "view == codeQLDatabases", + "group": "1_databases@2" + }, { "command": "codeQLQueries.createQuery", "when": "view == codeQLQueries", @@ -1499,6 +1508,10 @@ "command": "codeQLDatabases.sortByName", "when": "false" }, + { + "command": "codeQLDatabases.sortByLanguage", + "when": "false" + }, { "command": "codeQLDatabases.sortByDateAdded", "when": "false" diff --git a/extensions/ql-vscode/src/common/commands.ts b/extensions/ql-vscode/src/common/commands.ts index 9b2dd7d11d7..89c761e26ad 100644 --- a/extensions/ql-vscode/src/common/commands.ts +++ b/extensions/ql-vscode/src/common/commands.ts @@ -227,6 +227,7 @@ export type LocalDatabasesCommands = { "codeQLDatabases.chooseDatabaseInternet": () => Promise; "codeQLDatabases.chooseDatabaseGithub": () => Promise; "codeQLDatabases.sortByName": () => Promise; + "codeQLDatabases.sortByLanguage": () => Promise; "codeQLDatabases.sortByDateAdded": () => Promise; // Database panel context menu diff --git a/extensions/ql-vscode/src/databases/local-databases-ui.ts b/extensions/ql-vscode/src/databases/local-databases-ui.ts index 2e3437ae35b..655bc01e641 100644 --- a/extensions/ql-vscode/src/databases/local-databases-ui.ts +++ b/extensions/ql-vscode/src/databases/local-databases-ui.ts @@ -57,6 +57,8 @@ import { LanguageContextStore } from "../language-context-store"; enum SortOrder { NameAsc = "NameAsc", NameDesc = "NameDesc", + LanguageAsc = "LanguageAsc", + LanguageDesc = "LanguageDesc", DateAddedAsc = "DateAddedAsc", DateAddedDesc = "DateAddedDesc", } @@ -155,6 +157,10 @@ class DatabaseTreeDataProvider return db1.name.localeCompare(db2.name, env.language); case SortOrder.NameDesc: return db2.name.localeCompare(db1.name, env.language); + case SortOrder.LanguageAsc: + return db1.language.localeCompare(db2.language, env.language); + case SortOrder.LanguageDesc: + return db2.language.localeCompare(db1.language, env.language); case SortOrder.DateAddedAsc: return (db1.dateAdded || 0) - (db2.dateAdded || 0); case SortOrder.DateAddedDesc: @@ -264,6 +270,7 @@ export class DatabaseUI extends DisposableObject { "codeQLDatabases.setCurrentDatabase": this.handleMakeCurrentDatabase.bind(this), "codeQLDatabases.sortByName": this.handleSortByName.bind(this), + "codeQLDatabases.sortByLanguage": this.handleSortByLanguage.bind(this), "codeQLDatabases.sortByDateAdded": this.handleSortByDateAdded.bind(this), "codeQLDatabases.removeDatabase": createMultiSelectionCommand( this.handleRemoveDatabase.bind(this), @@ -547,6 +554,14 @@ export class DatabaseUI extends DisposableObject { } } + private async handleSortByLanguage() { + if (this.treeDataProvider.sortOrder === SortOrder.LanguageAsc) { + this.treeDataProvider.sortOrder = SortOrder.LanguageDesc; + } else { + this.treeDataProvider.sortOrder = SortOrder.LanguageAsc; + } + } + private async handleSortByDateAdded() { if (this.treeDataProvider.sortOrder === SortOrder.DateAddedAsc) { this.treeDataProvider.sortOrder = SortOrder.DateAddedDesc;