@@ -51,7 +51,8 @@ import {
5151 createMultiSelectionCommand ,
5252 createSingleSelectionCommand ,
5353} from "../common/vscode/selection-commands" ;
54- import { QueryLanguage } from "../common/query-language" ;
54+ import { QueryLanguage , tryGetQueryLanguage } from "../common/query-language" ;
55+ import { LanguageContextStore } from "../language-context-store" ;
5556
5657enum SortOrder {
5758 NameAsc = "NameAsc" ,
@@ -60,8 +61,6 @@ enum SortOrder {
6061 DateAddedDesc = "DateAddedDesc" ,
6162}
6263
63- type LanguageFilter = QueryLanguage | "All" ;
64-
6564/**
6665 * Tree data provider for the databases view.
6766 */
@@ -70,14 +69,16 @@ class DatabaseTreeDataProvider
7069 implements TreeDataProvider < DatabaseItem >
7170{
7271 private _sortOrder = SortOrder . NameAsc ;
73- private _languageFilter = "All" as LanguageFilter ;
7472
7573 private readonly _onDidChangeTreeData = this . push (
7674 new EventEmitter < DatabaseItem | undefined > ( ) ,
7775 ) ;
7876 private currentDatabaseItem : DatabaseItem | undefined ;
7977
80- constructor ( private databaseManager : DatabaseManager ) {
78+ constructor (
79+ private databaseManager : DatabaseManager ,
80+ private languageContext : LanguageContextStore ,
81+ ) {
8182 super ( ) ;
8283
8384 this . currentDatabaseItem = databaseManager . currentDatabaseItem ;
@@ -92,6 +93,11 @@ class DatabaseTreeDataProvider
9293 this . handleDidChangeCurrentDatabaseItem . bind ( this ) ,
9394 ) ,
9495 ) ;
96+ this . push (
97+ this . languageContext . onLanguageContextChanged ( async ( ) => {
98+ this . _onDidChangeTreeData . fire ( undefined ) ;
99+ } ) ,
100+ ) ;
95101 }
96102
97103 public get onDidChangeTreeData ( ) : Event < DatabaseItem | undefined > {
@@ -137,11 +143,9 @@ class DatabaseTreeDataProvider
137143 if ( element === undefined ) {
138144 // Filter items by language
139145 const displayItems = this . databaseManager . databaseItems . filter ( ( item ) => {
140- if ( this . languageFilter === "All" ) {
141- return true ;
142- } else {
143- return item . language === this . languageFilter ;
144- }
146+ return this . languageContext . shouldInclude (
147+ tryGetQueryLanguage ( item . language ) ,
148+ ) ;
145149 } ) ;
146150
147151 // Sort items
@@ -178,15 +182,6 @@ class DatabaseTreeDataProvider
178182 this . _sortOrder = newSortOrder ;
179183 this . _onDidChangeTreeData . fire ( undefined ) ;
180184 }
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- }
190185}
191186
192187/** Gets the first element in the given list, if any, or undefined if the list is empty or undefined. */
@@ -223,14 +218,15 @@ export class DatabaseUI extends DisposableObject {
223218 public constructor (
224219 private app : App ,
225220 private databaseManager : DatabaseManager ,
221+ private languageContext : LanguageContextStore ,
226222 private readonly queryServer : QueryRunner | undefined ,
227223 private readonly storagePath : string ,
228224 readonly extensionPath : string ,
229225 ) {
230226 super ( ) ;
231227
232228 this . treeDataProvider = this . push (
233- new DatabaseTreeDataProvider ( databaseManager ) ,
229+ new DatabaseTreeDataProvider ( databaseManager , languageContext ) ,
234230 ) ;
235231 this . push (
236232 window . createTreeView ( "codeQLDatabases" , {
@@ -269,7 +265,7 @@ export class DatabaseUI extends DisposableObject {
269265 "codeQLDatabases.sortByName" : this . handleSortByName . bind ( this ) ,
270266 "codeQLDatabases.sortByDateAdded" : this . handleSortByDateAdded . bind ( this ) ,
271267 "codeQLDatabases.displayAllLanguages" :
272- this . handleChangeLanguageFilter . bind ( this , "All" ) ,
268+ this . handleClearLanguageFilter . bind ( this ) ,
273269 "codeQLDatabases.displayCpp" : this . handleChangeLanguageFilter . bind (
274270 this ,
275271 QueryLanguage . Cpp ,
@@ -303,7 +299,7 @@ export class DatabaseUI extends DisposableObject {
303299 QueryLanguage . Swift ,
304300 ) ,
305301 "codeQLDatabases.displayAllLanguagesSelected" :
306- this . handleChangeLanguageFilter . bind ( this , "All" ) ,
302+ this . handleClearLanguageFilter . bind ( this ) ,
307303 "codeQLDatabases.displayCppSelected" :
308304 this . handleChangeLanguageFilter . bind ( this , QueryLanguage . Cpp ) ,
309305 "codeQLDatabases.displayCsharpSelected" :
@@ -612,13 +608,12 @@ export class DatabaseUI extends DisposableObject {
612608 }
613609 }
614610
615- private async handleChangeLanguageFilter ( languageFilter : LanguageFilter ) {
616- this . treeDataProvider . languageFilter = languageFilter ;
617- await this . app . commands . execute (
618- "setContext" ,
619- "codeQLDatabases.languageFilter" ,
620- languageFilter ,
621- ) ;
611+ private async handleClearLanguageFilter ( ) {
612+ await this . languageContext . clearLanguageContext ( ) ;
613+ }
614+
615+ private async handleChangeLanguageFilter ( languageFilter : QueryLanguage ) {
616+ await this . languageContext . setLanguageContext ( languageFilter ) ;
622617 }
623618
624619 private async handleUpgradeCurrentDatabase ( ) : Promise < void > {
0 commit comments