11import * as vscode from 'vscode' ;
22import { ExtensionContext , window as Window } from 'vscode' ;
3- import { EvaluationInfo , QueryInfo } from './queries' ;
4- import * as helpers from './helpers' ;
5- import * as messages from './messages' ;
3+ import { CompletedQuery } from './query-results' ;
4+ import { QueryWithResults } from './run-queries' ;
65/**
76 * query-history.ts
87 * ------------
@@ -12,72 +11,32 @@ import * as messages from './messages';
1211 * `TreeDataProvider` subclass below.
1312 */
1413
15- /**
16- * One item in the user-displayed list of queries that have been run.
17- */
18- export class QueryHistoryItem {
19- queryName : string ;
20- time : string ;
21- databaseName : string ;
22- info : EvaluationInfo ;
23-
24- constructor ( info : EvaluationInfo ) {
25- this . queryName = helpers . getQueryName ( info ) ;
26- this . databaseName = info . database . name ;
27- this . info = info ;
28- this . time = new Date ( ) . toLocaleString ( ) ;
29- }
30-
31- get statusString ( ) : string {
32- switch ( this . info . result . resultType ) {
33- case messages . QueryResultType . CANCELLATION :
34- return `cancelled after ${ this . info . result . evaluationTime / 1000 } seconds` ;
35- case messages . QueryResultType . OOM :
36- return `out of memory` ;
37- case messages . QueryResultType . SUCCESS :
38- return `finished in ${ this . info . result . evaluationTime / 1000 } seconds` ;
39- case messages . QueryResultType . TIMEOUT :
40- return `timed out after ${ this . info . result . evaluationTime / 1000 } seconds` ;
41- case messages . QueryResultType . OTHER_ERROR :
42- default :
43- return `failed` ;
44- }
45- }
46-
47- toString ( ) : string {
48- const { databaseName, queryName, time } = this ;
49- return `[${ time } ] ${ queryName } on ${ databaseName } - ${ this . statusString } ` ;
50- }
51- }
52-
5314/**
5415 * Tree data provider for the query history view.
5516 */
56- class HistoryTreeDataProvider implements vscode . TreeDataProvider < QueryHistoryItem > {
17+ class HistoryTreeDataProvider implements vscode . TreeDataProvider < CompletedQuery > {
5718
5819 /**
5920 * XXX: This idiom for how to get a `.fire()`-able event emitter was
6021 * cargo culted from another vscode extension. It seems rather
6122 * involved and I hope there's something better that can be done
6223 * instead.
6324 */
64- private _onDidChangeTreeData : vscode . EventEmitter < QueryHistoryItem | undefined > = new vscode . EventEmitter < QueryHistoryItem | undefined > ( ) ;
65- readonly onDidChangeTreeData : vscode . Event < QueryHistoryItem | undefined > = this . _onDidChangeTreeData . event ;
25+ private _onDidChangeTreeData : vscode . EventEmitter < CompletedQuery | undefined > = new vscode . EventEmitter < CompletedQuery | undefined > ( ) ;
26+ readonly onDidChangeTreeData : vscode . Event < CompletedQuery | undefined > = this . _onDidChangeTreeData . event ;
6627
67- private ctx : ExtensionContext ;
68- private history : QueryHistoryItem [ ] = [ ] ;
28+ private history : CompletedQuery [ ] = [ ] ;
6929
7030 /**
7131 * When not undefined, must be reference-equal to an item in `this.databases`.
7232 */
73- private current : QueryHistoryItem | undefined ;
33+ private current : CompletedQuery | undefined ;
7434
75- constructor ( ctx : ExtensionContext ) {
76- this . ctx = ctx ;
35+ constructor ( ) {
7736 this . history = [ ] ;
7837 }
7938
80- getTreeItem ( element : QueryHistoryItem ) : vscode . TreeItem {
39+ getTreeItem ( element : CompletedQuery ) : vscode . TreeItem {
8140 const it = new vscode . TreeItem ( element . toString ( ) ) ;
8241
8342 it . command = {
@@ -89,7 +48,7 @@ class HistoryTreeDataProvider implements vscode.TreeDataProvider<QueryHistoryIte
8948 return it ;
9049 }
9150
92- getChildren ( element ?: QueryHistoryItem ) : vscode . ProviderResult < QueryHistoryItem [ ] > {
51+ getChildren ( element ?: CompletedQuery ) : vscode . ProviderResult < CompletedQuery [ ] > {
9352 if ( element == undefined ) {
9453 return this . history ;
9554 }
@@ -98,25 +57,25 @@ class HistoryTreeDataProvider implements vscode.TreeDataProvider<QueryHistoryIte
9857 }
9958 }
10059
101- getParent ( element : QueryHistoryItem ) : vscode . ProviderResult < QueryHistoryItem > {
60+ getParent ( element : CompletedQuery ) : vscode . ProviderResult < CompletedQuery > {
10261 return null ;
10362 }
10463
105- getCurrent ( ) : QueryHistoryItem | undefined {
64+ getCurrent ( ) : CompletedQuery | undefined {
10665 return this . current ;
10766 }
10867
109- push ( item : QueryHistoryItem ) : void {
68+ push ( item : CompletedQuery ) : void {
11069 this . current = item ;
11170 this . history . push ( item ) ;
11271 this . _onDidChangeTreeData . fire ( ) ;
11372 }
11473
115- setCurrentItem ( item : QueryHistoryItem ) {
74+ setCurrentItem ( item : CompletedQuery ) {
11675 this . current = item ;
11776 }
11877
119- remove ( item : QueryHistoryItem ) {
78+ remove ( item : CompletedQuery ) {
12079 if ( this . current === item )
12180 this . current = undefined ;
12281 const index = this . history . findIndex ( i => i === item ) ;
@@ -141,23 +100,24 @@ const DOUBLE_CLICK_TIME = 500;
141100export class QueryHistoryManager {
142101 treeDataProvider : HistoryTreeDataProvider ;
143102 ctx : ExtensionContext ;
144- treeView : vscode . TreeView < QueryHistoryItem > ;
145- selectedCallback : ( ( item : QueryHistoryItem ) => void ) | undefined ;
146- lastItemClick : { time : Date , item : QueryHistoryItem } | undefined ;
103+ treeView : vscode . TreeView < CompletedQuery > ;
104+ selectedCallback : ( ( item : CompletedQuery ) => void ) | undefined ;
105+ lastItemClick : { time : Date , item : CompletedQuery } | undefined ;
106+
147107
148- async invokeCallbackOn ( queryHistoryItem : QueryHistoryItem ) {
108+ async invokeCallbackOn ( queryHistoryItem : CompletedQuery ) {
149109 if ( this . selectedCallback !== undefined ) {
150110 const sc = this . selectedCallback ;
151111 await sc ( queryHistoryItem ) ;
152112 }
153113 }
154114
155- async handleOpenQuery ( queryHistoryItem : QueryHistoryItem ) {
156- const textDocument = await vscode . workspace . openTextDocument ( vscode . Uri . file ( queryHistoryItem . info . query . program . queryPath ) ) ;
115+ async handleOpenQuery ( queryHistoryItem : CompletedQuery ) {
116+ const textDocument = await vscode . workspace . openTextDocument ( vscode . Uri . file ( queryHistoryItem . query . program . queryPath ) ) ;
157117 await vscode . window . showTextDocument ( textDocument , vscode . ViewColumn . One ) ;
158118 }
159119
160- async handleRemoveHistoryItem ( queryHistoryItem : QueryHistoryItem ) {
120+ async handleRemoveHistoryItem ( queryHistoryItem : CompletedQuery ) {
161121 this . treeDataProvider . remove ( queryHistoryItem ) ;
162122 const current = this . treeDataProvider . getCurrent ( ) ;
163123 if ( current !== undefined ) {
@@ -166,7 +126,7 @@ export class QueryHistoryManager {
166126 }
167127 }
168128
169- async handleItemClicked ( queryHistoryItem : QueryHistoryItem ) {
129+ async handleItemClicked ( queryHistoryItem : CompletedQuery ) {
170130 this . treeDataProvider . setCurrentItem ( queryHistoryItem ) ;
171131
172132 const now = new Date ( ) ;
@@ -185,10 +145,10 @@ export class QueryHistoryManager {
185145 }
186146 }
187147
188- constructor ( ctx : ExtensionContext , selectedCallback ?: ( item : QueryHistoryItem ) => Promise < void > ) {
148+ constructor ( ctx : ExtensionContext , selectedCallback ?: ( item : CompletedQuery ) => Promise < void > ) {
189149 this . ctx = ctx ;
190150 this . selectedCallback = selectedCallback ;
191- const treeDataProvider = this . treeDataProvider = new HistoryTreeDataProvider ( ctx ) ;
151+ const treeDataProvider = this . treeDataProvider = new HistoryTreeDataProvider ( ) ;
192152 this . treeView = Window . createTreeView ( 'codeQLQueryHistory' , { treeDataProvider } ) ;
193153 this . treeView . onDidChangeSelection ( async ev => {
194154 if ( ev . selection . length == 0 ) {
@@ -204,8 +164,10 @@ export class QueryHistoryManager {
204164 } ) ) ;
205165 }
206166
207- push ( item : QueryHistoryItem ) {
167+ addQuery ( info : QueryWithResults ) : CompletedQuery {
168+ const item = new CompletedQuery ( info ) ;
208169 this . treeDataProvider . push ( item ) ;
209170 this . treeView . reveal ( item , { select : true } ) ;
171+ return item ;
210172 }
211173}
0 commit comments