@@ -36,6 +36,7 @@ import { QueryStatus } from './query-status';
3636import { slurpQueryHistory , splatQueryHistory } from './query-serialization' ;
3737import * as fs from 'fs-extra' ;
3838import { CliVersionConstraint } from './cli' ;
39+ import { HistoryItemLabelProvider } from './history-item-label-provider' ;
3940
4041/**
4142 * query-history.ts
@@ -121,7 +122,10 @@ export class HistoryTreeDataProvider extends DisposableObject {
121122
122123 private current : QueryHistoryInfo | undefined ;
123124
124- constructor ( extensionPath : string ) {
125+ constructor (
126+ extensionPath : string ,
127+ private readonly labelProvider : HistoryItemLabelProvider ,
128+ ) {
125129 super ( ) ;
126130 this . failedIconPath = path . join (
127131 extensionPath ,
@@ -138,13 +142,13 @@ export class HistoryTreeDataProvider extends DisposableObject {
138142 }
139143
140144 async getTreeItem ( element : QueryHistoryInfo ) : Promise < TreeItem > {
141- const treeItem = new TreeItem ( element . label ) ;
145+ const treeItem = new TreeItem ( this . labelProvider . getLabel ( element ) ) ;
142146
143147 treeItem . command = {
144148 title : 'Query History Item' ,
145149 command : 'codeQLQueryHistory.itemClicked' ,
146150 arguments : [ element ] ,
147- tooltip : element . failureReason || element . label
151+ tooltip : element . failureReason || this . labelProvider . getLabel ( element )
148152 } ;
149153
150154 // Populate the icon and the context value. We use the context value to
@@ -183,8 +187,8 @@ export class HistoryTreeDataProvider extends DisposableObject {
183187 ) : ProviderResult < QueryHistoryInfo [ ] > {
184188 return element ? [ ] : this . history . sort ( ( h1 , h2 ) => {
185189
186- const h1Label = h1 . label . toLowerCase ( ) ;
187- const h2Label = h2 . label . toLowerCase ( ) ;
190+ const h1Label = this . labelProvider . getLabel ( h1 ) . toLowerCase ( ) ;
191+ const h2Label = this . labelProvider . getLabel ( h2 ) . toLowerCase ( ) ;
188192
189193 const h1Date = h1 . t === 'local'
190194 ? h1 . initialInfo . start . getTime ( )
@@ -313,12 +317,13 @@ export class QueryHistoryManager extends DisposableObject {
313317 . _onWillOpenQueryItem . event ;
314318
315319 constructor (
316- private qs : QueryServerClient ,
317- private dbm : DatabaseManager ,
318- private queryStorageDir : string ,
320+ private readonly qs : QueryServerClient ,
321+ private readonly dbm : DatabaseManager ,
322+ private readonly queryStorageDir : string ,
319323 ctx : ExtensionContext ,
320- private queryHistoryConfigListener : QueryHistoryConfig ,
321- private doCompareCallback : (
324+ private readonly queryHistoryConfigListener : QueryHistoryConfig ,
325+ private readonly labelProvider : HistoryItemLabelProvider ,
326+ private readonly doCompareCallback : (
322327 from : CompletedLocalQueryInfo ,
323328 to : CompletedLocalQueryInfo
324329 ) => Promise < void >
@@ -332,7 +337,8 @@ export class QueryHistoryManager extends DisposableObject {
332337 this . queryMetadataStorageLocation = path . join ( ( ctx . storageUri || ctx . globalStorageUri ) . fsPath , WORKSPACE_QUERY_HISTORY_FILE ) ;
333338
334339 this . treeDataProvider = this . push ( new HistoryTreeDataProvider (
335- ctx . extensionPath
340+ ctx . extensionPath ,
341+ this . labelProvider
336342 ) ) ;
337343 this . treeView = this . push ( window . createTreeView ( 'codeQLQueryHistory' , {
338344 treeDataProvider : this . treeDataProvider ,
@@ -531,7 +537,7 @@ export class QueryHistoryManager extends DisposableObject {
531537
532538 async readQueryHistory ( ) : Promise < void > {
533539 void logger . log ( `Reading cached query history from '${ this . queryMetadataStorageLocation } '.` ) ;
534- const history = await slurpQueryHistory ( this . queryMetadataStorageLocation , this . queryHistoryConfigListener ) ;
540+ const history = await slurpQueryHistory ( this . queryMetadataStorageLocation ) ;
535541 this . treeDataProvider . allHistory = history ;
536542 this . treeDataProvider . allHistory . forEach ( ( item ) => {
537543 this . _onDidAddQueryItem . fire ( item ) ;
@@ -599,7 +605,7 @@ export class QueryHistoryManager extends DisposableObject {
599605 // Remote queries can be removed locally, but not remotely.
600606 // The user must cancel the query on GitHub Actions explicitly.
601607 this . treeDataProvider . remove ( item ) ;
602- void logger . log ( `Deleted ${ item . label } .` ) ;
608+ void logger . log ( `Deleted ${ this . labelProvider . getLabel ( item ) } .` ) ;
603609 if ( item . status === QueryStatus . InProgress ) {
604610 void logger . log ( 'The variant analysis is still running on GitHub Actions. To cancel there, you must go to the workflow run in your browser.' ) ;
605611 }
@@ -647,19 +653,21 @@ export class QueryHistoryManager extends DisposableObject {
647653 const { finalSingleItem, finalMultiSelect } = this . determineSelection ( singleItem , multiSelect ) ;
648654
649655 // TODO will support remote queries
650- if ( ! this . assertSingleQuery ( finalMultiSelect ) || finalSingleItem ?. t !== 'local' ) {
656+ if ( ! this . assertSingleQuery ( finalMultiSelect ) ) {
651657 return ;
652658 }
653659
654660 const response = await window . showInputBox ( {
655- prompt : 'Label:' ,
656- placeHolder : '(use default)' ,
657- value : finalSingleItem . label ,
661+ // prompt: 'Label:',
662+ placeHolder : `(use default: ${ this . queryHistoryConfigListener . format } )` ,
663+ value : finalSingleItem . userSpecifiedLabel ?? '' ,
664+ title : 'Set query label' ,
665+ prompt : 'Set the query history item label. See the description of the codeQL.queryHistory.format setting for more information.' ,
658666 } ) ;
659667 // undefined response means the user cancelled the dialog; don't change anything
660668 if ( response !== undefined ) {
661669 // Interpret empty string response as 'go back to using default'
662- finalSingleItem . initialInfo . userSpecifiedLabel = response === '' ? undefined : response ;
670+ finalSingleItem . userSpecifiedLabel = response === '' ? undefined : response ;
663671 await this . refreshTreeView ( ) ;
664672 }
665673 }
@@ -816,7 +824,7 @@ export class QueryHistoryManager extends DisposableObject {
816824 }
817825
818826 if ( finalSingleItem . evalLogSummaryLocation ) {
819- await this . tryOpenExternalFile ( finalSingleItem . evalLogSummaryLocation ) ;
827+ await this . tryOpenExternalFile ( finalSingleItem . evalLogSummaryLocation ) ;
820828 } else {
821829 this . warnNoEvalLogSummary ( ) ;
822830 }
@@ -880,7 +888,7 @@ export class QueryHistoryManager extends DisposableObject {
880888 query . resultsPaths . interpretedResultsPath
881889 ) ;
882890 } else {
883- const label = finalSingleItem . label ;
891+ const label = this . labelProvider . getLabel ( finalSingleItem ) ;
884892 void showAndLogInformationMessage (
885893 `Query ${ label } has no interpreted results.`
886894 ) ;
@@ -1069,7 +1077,7 @@ the file in the file explorer and dragging it into the workspace.`
10691077 otherQuery . initialInfo . databaseInfo . name === dbName
10701078 )
10711079 . map ( ( item ) => ( {
1072- label : item . label ,
1080+ label : this . labelProvider . getLabel ( item ) ,
10731081 description : ( item as CompletedLocalQueryInfo ) . initialInfo . databaseInfo . name ,
10741082 detail : ( item as CompletedLocalQueryInfo ) . completedQuery . statusString ,
10751083 query : item as CompletedLocalQueryInfo ,
0 commit comments