Skip to content

Commit 06ef67f

Browse files
Benjamin Muskallaedoardopirovano
authored andcommitted
Add support for filename pattern in history view
1 parent 3d647f6 commit 06ef67f

File tree

3 files changed

+39
-7
lines changed

3 files changed

+39
-7
lines changed

extensions/ql-vscode/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@
206206
"codeQL.queryHistory.format": {
207207
"type": "string",
208208
"default": "%q on %d - %s, %r result count [%t]",
209-
"description": "Default string for how to label query history items. %t is the time of the query, %q is the query name, %d is the database name, %r is the number of results, and %s is a status string."
209+
"markdownDescription": "Default string for how to label query history items.\n* %t is the time of the query\n* %q is the human-readable query name\n*%f is the query file name\n* %d is the database name\n* %r is the number of results\n* %s is a status string"
210210
},
211211
"codeQL.runningTests.additionalTestArguments": {
212212
"scope": "window",

extensions/ql-vscode/src/query-results.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ export class CompletedQuery implements QueryWithResults {
6262
get queryName(): string {
6363
return getQueryName(this.query);
6464
}
65+
get queryFileName(): string {
66+
return getQueryFileName(this.query);
67+
}
6568

6669
get statusString(): string {
6770
switch (this.result.resultType) {
@@ -88,13 +91,14 @@ export class CompletedQuery implements QueryWithResults {
8891
}
8992

9093
interpolate(template: string): string {
91-
const { databaseName, queryName, time, resultCount, statusString } = this;
94+
const { databaseName, queryName, time, resultCount, statusString, queryFileName } = this;
9295
const replacements: { [k: string]: string } = {
9396
t: time,
9497
q: queryName,
9598
d: databaseName,
9699
r: resultCount.toString(),
97100
s: statusString,
101+
f: queryFileName,
98102
'%': '%',
99103
};
100104
return template.replace(/%(.)/g, (match, key) => {
@@ -152,17 +156,28 @@ export class CompletedQuery implements QueryWithResults {
152156
* Uses metadata if it exists, and defaults to the query file name.
153157
*/
154158
export function getQueryName(query: QueryInfo) {
159+
if (query.quickEvalPosition !== undefined) {
160+
return 'Quick evaluation of ' + getQueryFileName(query);
161+
} else if (query.metadata?.name) {
162+
return query.metadata.name;
163+
} else {
164+
return getQueryFileName(query);
165+
}
166+
}
167+
168+
/**
169+
* Gets the file name for an evaluated query.
170+
* Defaults to the query file name and may contain position information for quick eval queries.
171+
*/
172+
export function getQueryFileName(query: QueryInfo) {
155173
// Queries run through quick evaluation are not usually the entire query file.
156174
// Label them differently and include the line numbers.
157175
if (query.quickEvalPosition !== undefined) {
158176
const { line, endLine, fileName } = query.quickEvalPosition;
159177
const lineInfo = line === endLine ? `${line}` : `${line}-${endLine}`;
160-
return `Quick evaluation of ${path.basename(fileName)}:${lineInfo}`;
161-
} else if (query.metadata?.name) {
162-
return query.metadata.name;
163-
} else {
164-
return path.basename(query.program.queryPath);
178+
return `${path.basename(fileName)}:${lineInfo}`;
165179
}
180+
return path.basename(query.program.queryPath);
166181
}
167182

168183

extensions/ql-vscode/src/vscode-tests/no-workspace/query-results.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,23 @@ describe('CompletedQuery', () => {
5454
expect(completedQuery.queryName).to.eq('Quick evaluation of yz:1');
5555
});
5656

57+
it('should get the query file name', () => {
58+
const completedQuery = mockCompletedQuery();
59+
60+
// from the query path
61+
expect(completedQuery.queryFileName).to.eq('stu');
62+
63+
// from quick eval position
64+
(completedQuery.query as any).quickEvalPosition = {
65+
line: 1,
66+
endLine: 2,
67+
fileName: '/home/users/yz'
68+
};
69+
expect(completedQuery.queryFileName).to.eq('yz:1-2');
70+
(completedQuery.query as any).quickEvalPosition.endLine = 1;
71+
expect(completedQuery.queryFileName).to.eq('yz:1');
72+
});
73+
5774
it('should get the label', () => {
5875
const completedQuery = mockCompletedQuery();
5976
expect(completedQuery.getLabel()).to.eq('ghi');

0 commit comments

Comments
 (0)