@@ -51,6 +51,7 @@ import {
5151 createMultiSelectionCommand ,
5252 createSingleSelectionCommand ,
5353} from "../common/vscode/selection-commands" ;
54+ import { QueryLanguage } from "../common/query-language" ;
5455
5556enum SortOrder {
5657 NameAsc = "NameAsc" ,
@@ -59,6 +60,8 @@ enum SortOrder {
5960 DateAddedDesc = "DateAddedDesc" ,
6061}
6162
63+ type LanguageFilter = QueryLanguage | "All" ;
64+
6265/**
6366 * Tree data provider for the databases view.
6467 */
@@ -67,6 +70,7 @@ class DatabaseTreeDataProvider
6770 implements TreeDataProvider < DatabaseItem >
6871{
6972 private _sortOrder = SortOrder . NameAsc ;
73+ private _languageFilter = "All" as LanguageFilter ;
7074
7175 private readonly _onDidChangeTreeData = this . push (
7276 new EventEmitter < DatabaseItem | undefined > ( ) ,
@@ -131,7 +135,17 @@ class DatabaseTreeDataProvider
131135
132136 public getChildren ( element ?: DatabaseItem ) : ProviderResult < DatabaseItem [ ] > {
133137 if ( element === undefined ) {
134- return this . databaseManager . databaseItems . slice ( 0 ) . sort ( ( db1 , db2 ) => {
138+ // Filter items by language
139+ const displayItems = this . databaseManager . databaseItems . filter ( ( item ) => {
140+ if ( this . languageFilter === "All" ) {
141+ return true ;
142+ } else {
143+ return item . language === this . languageFilter ;
144+ }
145+ } ) ;
146+
147+ // Sort items
148+ return displayItems . slice ( 0 ) . sort ( ( db1 , db2 ) => {
135149 switch ( this . sortOrder ) {
136150 case SortOrder . NameAsc :
137151 return db1 . name . localeCompare ( db2 . name , env . language ) ;
@@ -164,6 +178,15 @@ class DatabaseTreeDataProvider
164178 this . _sortOrder = newSortOrder ;
165179 this . _onDidChangeTreeData . fire ( undefined ) ;
166180 }
181+
182+ public get languageFilter ( ) {
183+ return this . _languageFilter ;
184+ }
185+
186+ public set languageFilter ( newLanguageFilter : LanguageFilter ) {
187+ this . _languageFilter = newLanguageFilter ;
188+ this . _onDidChangeTreeData . fire ( undefined ) ;
189+ }
167190}
168191
169192/** Gets the first element in the given list, if any, or undefined if the list is empty or undefined. */
@@ -245,6 +268,40 @@ export class DatabaseUI extends DisposableObject {
245268 this . handleMakeCurrentDatabase . bind ( this ) ,
246269 "codeQLDatabases.sortByName" : this . handleSortByName . bind ( this ) ,
247270 "codeQLDatabases.sortByDateAdded" : this . handleSortByDateAdded . bind ( this ) ,
271+ "codeQLDatabases.displayAllLanguages" :
272+ this . handleChangeLanguageFilter . bind ( this , "All" ) ,
273+ "codeQLDatabases.displayCpp" : this . handleChangeLanguageFilter . bind (
274+ this ,
275+ QueryLanguage . Cpp ,
276+ ) ,
277+ "codeQLDatabases.displayCsharp" : this . handleChangeLanguageFilter . bind (
278+ this ,
279+ QueryLanguage . CSharp ,
280+ ) ,
281+ "codeQLDatabases.displayGo" : this . handleChangeLanguageFilter . bind (
282+ this ,
283+ QueryLanguage . Go ,
284+ ) ,
285+ "codeQLDatabases.displayJava" : this . handleChangeLanguageFilter . bind (
286+ this ,
287+ QueryLanguage . Java ,
288+ ) ,
289+ "codeQLDatabases.displayJavascript" : this . handleChangeLanguageFilter . bind (
290+ this ,
291+ QueryLanguage . Javascript ,
292+ ) ,
293+ "codeQLDatabases.displayPython" : this . handleChangeLanguageFilter . bind (
294+ this ,
295+ QueryLanguage . Python ,
296+ ) ,
297+ "codeQLDatabases.displayRuby" : this . handleChangeLanguageFilter . bind (
298+ this ,
299+ QueryLanguage . Ruby ,
300+ ) ,
301+ "codeQLDatabases.displaySwift" : this . handleChangeLanguageFilter . bind (
302+ this ,
303+ QueryLanguage . Swift ,
304+ ) ,
248305 "codeQLDatabases.removeDatabase" : createMultiSelectionCommand (
249306 this . handleRemoveDatabase . bind ( this ) ,
250307 ) ,
@@ -535,6 +592,10 @@ export class DatabaseUI extends DisposableObject {
535592 }
536593 }
537594
595+ private async handleChangeLanguageFilter ( languageFilter : LanguageFilter ) {
596+ this . treeDataProvider . languageFilter = languageFilter ;
597+ }
598+
538599 private async handleUpgradeCurrentDatabase ( ) : Promise < void > {
539600 return withProgress (
540601 async ( progress , token ) => {
0 commit comments