Skip to content

Commit ff34079

Browse files
authored
Merge pull request #2892 from github/starcke/local-query-lang-dto
Add language to local query history items
2 parents 7cd99cb + 6d2859c commit ff34079

14 files changed

+109
-65
lines changed

extensions/ql-vscode/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## [UNRELEASED]
44

5+
- It is now possible to show the language of query history items using the `%l` specifier in the `codeQL.queryHistory.format` setting. Note that this only works for queries run after this upgrade, and older items will show `unknown` as a language. [#2892](https://github.com/github/vscode-codeql/pull/2892)
56
- Increase the required version of VS Code to 1.82.0. [#2877](https://github.com/github/vscode-codeql/pull/2877)
67
- Fix a bug where the query server was restarted twice after configuration changes. [#2884](https://github.com/github/vscode-codeql/pull/2884).
78

extensions/ql-vscode/src/common/interface-types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { Method, Usage } from "../model-editor/method";
2121
import { ModeledMethod } from "../model-editor/modeled-method";
2222
import { ModelEditorViewState } from "../model-editor/shared/view-state";
2323
import { Mode } from "../model-editor/shared/mode";
24+
import { QueryLanguage } from "./query-language";
2425

2526
/**
2627
* This module contains types and code that are shared between
@@ -51,6 +52,7 @@ export const RAW_RESULTS_LIMIT = 10000;
5152
export interface DatabaseInfo {
5253
name: string;
5354
databaseUri: string;
55+
language?: QueryLanguage;
5456
}
5557

5658
/** Arbitrary query metadata */

extensions/ql-vscode/src/local-queries/local-queries.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import { LocalQueryRun } from "./local-query-run";
4949
import { createMultiSelectionCommand } from "../common/vscode/selection-commands";
5050
import { findLanguage } from "../codeql-cli/query-language";
5151
import type { QueryTreeViewItem } from "../queries-panel/query-tree-view-item";
52+
import { tryGetQueryLanguage } from "../common/query-language";
5253

5354
interface DatabaseQuickPickItem extends QuickPickItem {
5455
databaseItem: DatabaseItem;
@@ -364,6 +365,7 @@ export class LocalQueries extends DisposableObject {
364365
const initialInfo = await createInitialQueryInfo(selectedQuery, {
365366
databaseUri: dbItem.databaseUri.toString(),
366367
name: dbItem.name,
368+
language: tryGetQueryLanguage(dbItem.language),
367369
});
368370

369371
// When cancellation is requested from the query history view, we just stop the debug session.

extensions/ql-vscode/src/query-history/history-item-label-provider.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { QueryHistoryConfig } from "../config";
44
import { LocalQueryInfo } from "../query-results";
55
import {
66
buildRepoLabel,
7+
getLanguage,
78
getRawQueryName,
89
QueryHistoryInfo,
910
} from "./query-history-info";
@@ -19,6 +20,7 @@ interface InterpolateReplacements {
1920
r: string; // Result count/Empty
2021
s: string; // Status
2122
f: string; // Query file name
23+
l: string; // Query language
2224
"%": "%"; // Percent sign
2325
}
2426

@@ -84,6 +86,7 @@ export class HistoryItemLabelProvider {
8486
r: `(${resultCount} results)`,
8587
s: statusString,
8688
f: item.getQueryFileName(),
89+
l: this.getLanguageLabel(item),
8790
"%": "%",
8891
};
8992
}
@@ -103,7 +106,13 @@ export class HistoryItemLabelProvider {
103106
r: resultCount,
104107
s: humanizeQueryStatus(item.status),
105108
f: basename(item.variantAnalysis.query.filePath),
109+
l: this.getLanguageLabel(item),
106110
"%": "%",
107111
};
108112
}
113+
114+
private getLanguageLabel(item: QueryHistoryInfo): string {
115+
const language = getLanguage(item);
116+
return language === undefined ? "unknown" : `${language}`;
117+
}
109118
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
hasRepoScanCompleted,
77
getActionsWorkflowRunUrl as getVariantAnalysisActionsWorkflowRunUrl,
88
} from "../variant-analysis/shared/variant-analysis";
9+
import { QueryLanguage } from "../common/query-language";
910

1011
export type QueryHistoryInfo = LocalQueryInfo | VariantAnalysisHistoryItem;
1112

@@ -49,6 +50,17 @@ export function getQueryText(item: QueryHistoryInfo): string {
4950
}
5051
}
5152

53+
export function getLanguage(item: QueryHistoryInfo): QueryLanguage | undefined {
54+
switch (item.t) {
55+
case "local":
56+
return item.initialInfo.databaseInfo.language;
57+
case "variant-analysis":
58+
return item.variantAnalysis.query.language;
59+
default:
60+
assertNever(item);
61+
}
62+
}
63+
5264
export function buildRepoLabel(item: VariantAnalysisHistoryItem): string {
5365
const totalScannedRepositoryCount =
5466
item.variantAnalysis.scannedRepos?.length ?? 0;

extensions/ql-vscode/src/query-history/store/query-history-domain-mapper.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { assertNever } from "../../common/helpers-pure";
22
import { QueryHistoryInfo } from "../query-history-info";
33
import { mapLocalQueryInfoToDto } from "./query-history-local-query-domain-mapper";
4-
import { QueryHistoryItemDto } from "./query-history-dto";
4+
import { QueryHistoryItemDto, QueryLanguageDto } from "./query-history-dto";
55
import { mapQueryHistoryVariantAnalysisToDto } from "./query-history-variant-analysis-domain-mapper";
6+
import { QueryLanguage } from "../../common/query-language";
67

78
export function mapQueryHistoryToDto(
89
queries: QueryHistoryInfo[],
@@ -17,3 +18,28 @@ export function mapQueryHistoryToDto(
1718
}
1819
});
1920
}
21+
22+
export function mapQueryLanguageToDto(
23+
language: QueryLanguage,
24+
): QueryLanguageDto {
25+
switch (language) {
26+
case QueryLanguage.CSharp:
27+
return QueryLanguageDto.CSharp;
28+
case QueryLanguage.Cpp:
29+
return QueryLanguageDto.Cpp;
30+
case QueryLanguage.Go:
31+
return QueryLanguageDto.Go;
32+
case QueryLanguage.Java:
33+
return QueryLanguageDto.Java;
34+
case QueryLanguage.Javascript:
35+
return QueryLanguageDto.Javascript;
36+
case QueryLanguage.Python:
37+
return QueryLanguageDto.Python;
38+
case QueryLanguage.Ruby:
39+
return QueryLanguageDto.Ruby;
40+
case QueryLanguage.Swift:
41+
return QueryLanguageDto.Swift;
42+
default:
43+
assertNever(language);
44+
}
45+
}

extensions/ql-vscode/src/query-history/store/query-history-dto-mapper.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { QueryHistoryInfo } from "../query-history-info";
2-
import { QueryHistoryItemDto } from "./query-history-dto";
2+
import { QueryHistoryItemDto, QueryLanguageDto } from "./query-history-dto";
33
import { mapQueryHistoryVariantAnalysisToDomainModel } from "./query-history-variant-analysis-dto-mapper";
44
import { mapLocalQueryItemToDomainModel } from "./query-history-local-query-dto-mapper";
5+
import { QueryLanguage } from "../../common/query-language";
6+
import { assertNever } from "../../common/helpers-pure";
57

68
export function mapQueryHistoryToDomainModel(
79
queries: QueryHistoryItemDto[],
@@ -20,3 +22,28 @@ export function mapQueryHistoryToDomainModel(
2022
);
2123
});
2224
}
25+
26+
export function mapQueryLanguageToDomainModel(
27+
language: QueryLanguageDto,
28+
): QueryLanguage {
29+
switch (language) {
30+
case QueryLanguageDto.CSharp:
31+
return QueryLanguage.CSharp;
32+
case QueryLanguageDto.Cpp:
33+
return QueryLanguage.Cpp;
34+
case QueryLanguageDto.Go:
35+
return QueryLanguage.Go;
36+
case QueryLanguageDto.Java:
37+
return QueryLanguage.Java;
38+
case QueryLanguageDto.Javascript:
39+
return QueryLanguage.Javascript;
40+
case QueryLanguageDto.Python:
41+
return QueryLanguage.Python;
42+
case QueryLanguageDto.Ruby:
43+
return QueryLanguage.Ruby;
44+
case QueryLanguageDto.Swift:
45+
return QueryLanguage.Swift;
46+
default:
47+
assertNever(language);
48+
}
49+
}

extensions/ql-vscode/src/query-history/store/query-history-dto.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,14 @@ export interface QueryHistoryDto {
1212
export type QueryHistoryItemDto =
1313
| QueryHistoryLocalQueryDto
1414
| QueryHistoryVariantAnalysisDto;
15+
16+
export enum QueryLanguageDto {
17+
CSharp = "csharp",
18+
Cpp = "cpp",
19+
Go = "go",
20+
Java = "java",
21+
Javascript = "javascript",
22+
Python = "python",
23+
Ruby = "ruby",
24+
Swift = "swift",
25+
}

extensions/ql-vscode/src/query-history/store/query-history-local-query-domain-mapper.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
SortDirection,
1818
SortedResultSetInfo,
1919
} from "../../common/interface-types";
20+
import { mapQueryLanguageToDto } from "./query-history-domain-mapper";
2021

2122
export function mapLocalQueryInfoToDto(
2223
query: LocalQueryInfo,
@@ -101,6 +102,10 @@ function mapInitialQueryInfoToDto(
101102
databaseInfo: {
102103
databaseUri: localQueryInitialInfo.databaseInfo.databaseUri,
103104
name: localQueryInitialInfo.databaseInfo.name,
105+
language:
106+
localQueryInitialInfo.databaseInfo.language === undefined
107+
? undefined
108+
: mapQueryLanguageToDto(localQueryInitialInfo.databaseInfo.language),
104109
},
105110
start: localQueryInitialInfo.start,
106111
id: localQueryInitialInfo.id,

extensions/ql-vscode/src/query-history/store/query-history-local-query-dto-mapper.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
SortDirection,
2121
SortedResultSetInfo,
2222
} from "../../common/interface-types";
23+
import { mapQueryLanguageToDomainModel } from "./query-history-dto-mapper";
2324

2425
export function mapLocalQueryItemToDomainModel(
2526
localQuery: QueryHistoryLocalQueryDto,
@@ -82,6 +83,10 @@ function mapInitialQueryInfoToDomainModel(
8283
databaseInfo: {
8384
databaseUri: initialInfo.databaseInfo.databaseUri,
8485
name: initialInfo.databaseInfo.name,
86+
language:
87+
initialInfo.databaseInfo.language === undefined
88+
? undefined
89+
: mapQueryLanguageToDomainModel(initialInfo.databaseInfo.language),
8590
},
8691
start: new Date(initialInfo.start),
8792
id: initialInfo.id,

0 commit comments

Comments
 (0)