Skip to content

Commit 9362447

Browse files
committed
Add support for filtering history panel.
1 parent ff34079 commit 9362447

File tree

3 files changed

+65
-48
lines changed

3 files changed

+65
-48
lines changed

extensions/ql-vscode/src/extension.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -871,6 +871,7 @@ async function activateWithInstalledDistribution(
871871
ctx,
872872
queryHistoryConfigurationListener,
873873
labelProvider,
874+
languageContext,
874875
async (
875876
from: CompletedLocalQueryInfo,
876877
to: CompletedLocalQueryInfo,

extensions/ql-vscode/src/query-history/history-tree-data-provider.ts

Lines changed: 55 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ import {
1010
} from "vscode";
1111
import { DisposableObject } from "../common/disposable-object";
1212
import { assertNever } from "../common/helpers-pure";
13-
import { QueryHistoryInfo } from "./query-history-info";
13+
import { getLanguage, QueryHistoryInfo } from "./query-history-info";
1414
import { QueryStatus } from "./query-status";
1515
import { HistoryItemLabelProvider } from "./history-item-label-provider";
16+
import { LanguageContextStore } from "../language-context-store";
1617

1718
export enum SortOrder {
1819
NameAsc = "NameAsc",
@@ -50,7 +51,10 @@ export class HistoryTreeDataProvider
5051

5152
private current: QueryHistoryInfo | undefined;
5253

53-
constructor(private readonly labelProvider: HistoryItemLabelProvider) {
54+
constructor(
55+
private readonly labelProvider: HistoryItemLabelProvider,
56+
private readonly languageContext: LanguageContextStore,
57+
) {
5458
super();
5559
}
5660

@@ -127,51 +131,55 @@ export class HistoryTreeDataProvider
127131
getChildren(element?: QueryHistoryInfo): ProviderResult<QueryHistoryInfo[]> {
128132
return element
129133
? []
130-
: this.history.sort((h1, h2) => {
131-
const h1Label = this.labelProvider.getLabel(h1).toLowerCase();
132-
const h2Label = this.labelProvider.getLabel(h2).toLowerCase();
133-
134-
const h1Date = this.getItemDate(h1);
135-
136-
const h2Date = this.getItemDate(h2);
137-
138-
const resultCount1 =
139-
h1.t === "local"
140-
? h1.completedQuery?.resultCount ?? -1
141-
: h1.resultCount ?? -1;
142-
const resultCount2 =
143-
h2.t === "local"
144-
? h2.completedQuery?.resultCount ?? -1
145-
: h2.resultCount ?? -1;
146-
147-
switch (this.sortOrder) {
148-
case SortOrder.NameAsc:
149-
return h1Label.localeCompare(h2Label, env.language);
150-
151-
case SortOrder.NameDesc:
152-
return h2Label.localeCompare(h1Label, env.language);
153-
154-
case SortOrder.DateAsc:
155-
return h1Date - h2Date;
156-
157-
case SortOrder.DateDesc:
158-
return h2Date - h1Date;
159-
160-
case SortOrder.CountAsc:
161-
// If the result counts are equal, sort by name.
162-
return resultCount1 - resultCount2 === 0
163-
? h1Label.localeCompare(h2Label, env.language)
164-
: resultCount1 - resultCount2;
165-
166-
case SortOrder.CountDesc:
167-
// If the result counts are equal, sort by name.
168-
return resultCount2 - resultCount1 === 0
169-
? h2Label.localeCompare(h1Label, env.language)
170-
: resultCount2 - resultCount1;
171-
default:
172-
assertNever(this.sortOrder);
173-
}
174-
});
134+
: this.history
135+
.filter((h) => {
136+
return this.languageContext.shouldInclude(getLanguage(h));
137+
})
138+
.sort((h1, h2) => {
139+
const h1Label = this.labelProvider.getLabel(h1).toLowerCase();
140+
const h2Label = this.labelProvider.getLabel(h2).toLowerCase();
141+
142+
const h1Date = this.getItemDate(h1);
143+
144+
const h2Date = this.getItemDate(h2);
145+
146+
const resultCount1 =
147+
h1.t === "local"
148+
? h1.completedQuery?.resultCount ?? -1
149+
: h1.resultCount ?? -1;
150+
const resultCount2 =
151+
h2.t === "local"
152+
? h2.completedQuery?.resultCount ?? -1
153+
: h2.resultCount ?? -1;
154+
155+
switch (this.sortOrder) {
156+
case SortOrder.NameAsc:
157+
return h1Label.localeCompare(h2Label, env.language);
158+
159+
case SortOrder.NameDesc:
160+
return h2Label.localeCompare(h1Label, env.language);
161+
162+
case SortOrder.DateAsc:
163+
return h1Date - h2Date;
164+
165+
case SortOrder.DateDesc:
166+
return h2Date - h1Date;
167+
168+
case SortOrder.CountAsc:
169+
// If the result counts are equal, sort by name.
170+
return resultCount1 - resultCount2 === 0
171+
? h1Label.localeCompare(h2Label, env.language)
172+
: resultCount1 - resultCount2;
173+
174+
case SortOrder.CountDesc:
175+
// If the result counts are equal, sort by name.
176+
return resultCount2 - resultCount1 === 0
177+
? h2Label.localeCompare(h1Label, env.language)
178+
: resultCount2 - resultCount1;
179+
default:
180+
assertNever(this.sortOrder);
181+
}
182+
});
175183
}
176184

177185
getParent(_element: QueryHistoryInfo): ProviderResult<QueryHistoryInfo> {

extensions/ql-vscode/src/query-history/query-history-manager.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import {
6262
showAndLogInformationMessage,
6363
showAndLogWarningMessage,
6464
} from "../common/logging";
65+
import { LanguageContextStore } from "../language-context-store";
6566

6667
/**
6768
* query-history-manager.ts
@@ -141,6 +142,7 @@ export class QueryHistoryManager extends DisposableObject {
141142
ctx: ExtensionContext,
142143
private readonly queryHistoryConfigListener: QueryHistoryConfig,
143144
private readonly labelProvider: HistoryItemLabelProvider,
145+
private readonly languageContext: LanguageContextStore,
144146
private readonly doCompareCallback: (
145147
from: CompletedLocalQueryInfo,
146148
to: CompletedLocalQueryInfo,
@@ -158,7 +160,7 @@ export class QueryHistoryManager extends DisposableObject {
158160
);
159161

160162
this.treeDataProvider = this.push(
161-
new HistoryTreeDataProvider(this.labelProvider),
163+
new HistoryTreeDataProvider(this.labelProvider, this.languageContext),
162164
);
163165
this.treeView = this.push(
164166
window.createTreeView("codeQLQueryHistory", {
@@ -230,6 +232,12 @@ export class QueryHistoryManager extends DisposableObject {
230232

231233
this.registerQueryHistoryScrubber(queryHistoryConfigListener, this, ctx);
232234
this.registerToVariantAnalysisEvents();
235+
236+
this.push(
237+
this.languageContext.onLanguageContextChanged(async () => {
238+
this.treeDataProvider.refresh();
239+
}),
240+
);
233241
}
234242

235243
public getCommands(): QueryHistoryCommands {

0 commit comments

Comments
 (0)