Merge pull request #2892 from github/starcke/local-query-lang-dto

Add language to local query history items
This commit is contained in:
Anders Starcke Henriksen
2023-10-03 13:53:32 +02:00
committed by GitHub
14 changed files with 109 additions and 65 deletions

View File

@@ -2,6 +2,7 @@
## [UNRELEASED] ## [UNRELEASED]
- 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)
- Increase the required version of VS Code to 1.82.0. [#2877](https://github.com/github/vscode-codeql/pull/2877) - Increase the required version of VS Code to 1.82.0. [#2877](https://github.com/github/vscode-codeql/pull/2877)
- Fix a bug where the query server was restarted twice after configuration changes. [#2884](https://github.com/github/vscode-codeql/pull/2884). - Fix a bug where the query server was restarted twice after configuration changes. [#2884](https://github.com/github/vscode-codeql/pull/2884).

View File

@@ -21,6 +21,7 @@ import { Method, Usage } from "../model-editor/method";
import { ModeledMethod } from "../model-editor/modeled-method"; import { ModeledMethod } from "../model-editor/modeled-method";
import { ModelEditorViewState } from "../model-editor/shared/view-state"; import { ModelEditorViewState } from "../model-editor/shared/view-state";
import { Mode } from "../model-editor/shared/mode"; import { Mode } from "../model-editor/shared/mode";
import { QueryLanguage } from "./query-language";
/** /**
* This module contains types and code that are shared between * This module contains types and code that are shared between
@@ -51,6 +52,7 @@ export const RAW_RESULTS_LIMIT = 10000;
export interface DatabaseInfo { export interface DatabaseInfo {
name: string; name: string;
databaseUri: string; databaseUri: string;
language?: QueryLanguage;
} }
/** Arbitrary query metadata */ /** Arbitrary query metadata */

View File

@@ -49,6 +49,7 @@ import { LocalQueryRun } from "./local-query-run";
import { createMultiSelectionCommand } from "../common/vscode/selection-commands"; import { createMultiSelectionCommand } from "../common/vscode/selection-commands";
import { findLanguage } from "../codeql-cli/query-language"; import { findLanguage } from "../codeql-cli/query-language";
import type { QueryTreeViewItem } from "../queries-panel/query-tree-view-item"; import type { QueryTreeViewItem } from "../queries-panel/query-tree-view-item";
import { tryGetQueryLanguage } from "../common/query-language";
interface DatabaseQuickPickItem extends QuickPickItem { interface DatabaseQuickPickItem extends QuickPickItem {
databaseItem: DatabaseItem; databaseItem: DatabaseItem;
@@ -364,6 +365,7 @@ export class LocalQueries extends DisposableObject {
const initialInfo = await createInitialQueryInfo(selectedQuery, { const initialInfo = await createInitialQueryInfo(selectedQuery, {
databaseUri: dbItem.databaseUri.toString(), databaseUri: dbItem.databaseUri.toString(),
name: dbItem.name, name: dbItem.name,
language: tryGetQueryLanguage(dbItem.language),
}); });
// When cancellation is requested from the query history view, we just stop the debug session. // When cancellation is requested from the query history view, we just stop the debug session.

View File

@@ -4,6 +4,7 @@ import { QueryHistoryConfig } from "../config";
import { LocalQueryInfo } from "../query-results"; import { LocalQueryInfo } from "../query-results";
import { import {
buildRepoLabel, buildRepoLabel,
getLanguage,
getRawQueryName, getRawQueryName,
QueryHistoryInfo, QueryHistoryInfo,
} from "./query-history-info"; } from "./query-history-info";
@@ -19,6 +20,7 @@ interface InterpolateReplacements {
r: string; // Result count/Empty r: string; // Result count/Empty
s: string; // Status s: string; // Status
f: string; // Query file name f: string; // Query file name
l: string; // Query language
"%": "%"; // Percent sign "%": "%"; // Percent sign
} }
@@ -84,6 +86,7 @@ export class HistoryItemLabelProvider {
r: `(${resultCount} results)`, r: `(${resultCount} results)`,
s: statusString, s: statusString,
f: item.getQueryFileName(), f: item.getQueryFileName(),
l: this.getLanguageLabel(item),
"%": "%", "%": "%",
}; };
} }
@@ -103,7 +106,13 @@ export class HistoryItemLabelProvider {
r: resultCount, r: resultCount,
s: humanizeQueryStatus(item.status), s: humanizeQueryStatus(item.status),
f: basename(item.variantAnalysis.query.filePath), f: basename(item.variantAnalysis.query.filePath),
l: this.getLanguageLabel(item),
"%": "%", "%": "%",
}; };
} }
private getLanguageLabel(item: QueryHistoryInfo): string {
const language = getLanguage(item);
return language === undefined ? "unknown" : `${language}`;
}
} }

View File

@@ -6,6 +6,7 @@ import {
hasRepoScanCompleted, hasRepoScanCompleted,
getActionsWorkflowRunUrl as getVariantAnalysisActionsWorkflowRunUrl, getActionsWorkflowRunUrl as getVariantAnalysisActionsWorkflowRunUrl,
} from "../variant-analysis/shared/variant-analysis"; } from "../variant-analysis/shared/variant-analysis";
import { QueryLanguage } from "../common/query-language";
export type QueryHistoryInfo = LocalQueryInfo | VariantAnalysisHistoryItem; export type QueryHistoryInfo = LocalQueryInfo | VariantAnalysisHistoryItem;
@@ -49,6 +50,17 @@ export function getQueryText(item: QueryHistoryInfo): string {
} }
} }
export function getLanguage(item: QueryHistoryInfo): QueryLanguage | undefined {
switch (item.t) {
case "local":
return item.initialInfo.databaseInfo.language;
case "variant-analysis":
return item.variantAnalysis.query.language;
default:
assertNever(item);
}
}
export function buildRepoLabel(item: VariantAnalysisHistoryItem): string { export function buildRepoLabel(item: VariantAnalysisHistoryItem): string {
const totalScannedRepositoryCount = const totalScannedRepositoryCount =
item.variantAnalysis.scannedRepos?.length ?? 0; item.variantAnalysis.scannedRepos?.length ?? 0;

View File

@@ -1,8 +1,9 @@
import { assertNever } from "../../common/helpers-pure"; import { assertNever } from "../../common/helpers-pure";
import { QueryHistoryInfo } from "../query-history-info"; import { QueryHistoryInfo } from "../query-history-info";
import { mapLocalQueryInfoToDto } from "./query-history-local-query-domain-mapper"; import { mapLocalQueryInfoToDto } from "./query-history-local-query-domain-mapper";
import { QueryHistoryItemDto } from "./query-history-dto"; import { QueryHistoryItemDto, QueryLanguageDto } from "./query-history-dto";
import { mapQueryHistoryVariantAnalysisToDto } from "./query-history-variant-analysis-domain-mapper"; import { mapQueryHistoryVariantAnalysisToDto } from "./query-history-variant-analysis-domain-mapper";
import { QueryLanguage } from "../../common/query-language";
export function mapQueryHistoryToDto( export function mapQueryHistoryToDto(
queries: QueryHistoryInfo[], queries: QueryHistoryInfo[],
@@ -17,3 +18,28 @@ export function mapQueryHistoryToDto(
} }
}); });
} }
export function mapQueryLanguageToDto(
language: QueryLanguage,
): QueryLanguageDto {
switch (language) {
case QueryLanguage.CSharp:
return QueryLanguageDto.CSharp;
case QueryLanguage.Cpp:
return QueryLanguageDto.Cpp;
case QueryLanguage.Go:
return QueryLanguageDto.Go;
case QueryLanguage.Java:
return QueryLanguageDto.Java;
case QueryLanguage.Javascript:
return QueryLanguageDto.Javascript;
case QueryLanguage.Python:
return QueryLanguageDto.Python;
case QueryLanguage.Ruby:
return QueryLanguageDto.Ruby;
case QueryLanguage.Swift:
return QueryLanguageDto.Swift;
default:
assertNever(language);
}
}

View File

@@ -1,7 +1,9 @@
import { QueryHistoryInfo } from "../query-history-info"; import { QueryHistoryInfo } from "../query-history-info";
import { QueryHistoryItemDto } from "./query-history-dto"; import { QueryHistoryItemDto, QueryLanguageDto } from "./query-history-dto";
import { mapQueryHistoryVariantAnalysisToDomainModel } from "./query-history-variant-analysis-dto-mapper"; import { mapQueryHistoryVariantAnalysisToDomainModel } from "./query-history-variant-analysis-dto-mapper";
import { mapLocalQueryItemToDomainModel } from "./query-history-local-query-dto-mapper"; import { mapLocalQueryItemToDomainModel } from "./query-history-local-query-dto-mapper";
import { QueryLanguage } from "../../common/query-language";
import { assertNever } from "../../common/helpers-pure";
export function mapQueryHistoryToDomainModel( export function mapQueryHistoryToDomainModel(
queries: QueryHistoryItemDto[], queries: QueryHistoryItemDto[],
@@ -20,3 +22,28 @@ export function mapQueryHistoryToDomainModel(
); );
}); });
} }
export function mapQueryLanguageToDomainModel(
language: QueryLanguageDto,
): QueryLanguage {
switch (language) {
case QueryLanguageDto.CSharp:
return QueryLanguage.CSharp;
case QueryLanguageDto.Cpp:
return QueryLanguage.Cpp;
case QueryLanguageDto.Go:
return QueryLanguage.Go;
case QueryLanguageDto.Java:
return QueryLanguage.Java;
case QueryLanguageDto.Javascript:
return QueryLanguage.Javascript;
case QueryLanguageDto.Python:
return QueryLanguage.Python;
case QueryLanguageDto.Ruby:
return QueryLanguage.Ruby;
case QueryLanguageDto.Swift:
return QueryLanguage.Swift;
default:
assertNever(language);
}
}

View File

@@ -12,3 +12,14 @@ export interface QueryHistoryDto {
export type QueryHistoryItemDto = export type QueryHistoryItemDto =
| QueryHistoryLocalQueryDto | QueryHistoryLocalQueryDto
| QueryHistoryVariantAnalysisDto; | QueryHistoryVariantAnalysisDto;
export enum QueryLanguageDto {
CSharp = "csharp",
Cpp = "cpp",
Go = "go",
Java = "java",
Javascript = "javascript",
Python = "python",
Ruby = "ruby",
Swift = "swift",
}

View File

@@ -17,6 +17,7 @@ import {
SortDirection, SortDirection,
SortedResultSetInfo, SortedResultSetInfo,
} from "../../common/interface-types"; } from "../../common/interface-types";
import { mapQueryLanguageToDto } from "./query-history-domain-mapper";
export function mapLocalQueryInfoToDto( export function mapLocalQueryInfoToDto(
query: LocalQueryInfo, query: LocalQueryInfo,
@@ -101,6 +102,10 @@ function mapInitialQueryInfoToDto(
databaseInfo: { databaseInfo: {
databaseUri: localQueryInitialInfo.databaseInfo.databaseUri, databaseUri: localQueryInitialInfo.databaseInfo.databaseUri,
name: localQueryInitialInfo.databaseInfo.name, name: localQueryInitialInfo.databaseInfo.name,
language:
localQueryInitialInfo.databaseInfo.language === undefined
? undefined
: mapQueryLanguageToDto(localQueryInitialInfo.databaseInfo.language),
}, },
start: localQueryInitialInfo.start, start: localQueryInitialInfo.start,
id: localQueryInitialInfo.id, id: localQueryInitialInfo.id,

View File

@@ -20,6 +20,7 @@ import {
SortDirection, SortDirection,
SortedResultSetInfo, SortedResultSetInfo,
} from "../../common/interface-types"; } from "../../common/interface-types";
import { mapQueryLanguageToDomainModel } from "./query-history-dto-mapper";
export function mapLocalQueryItemToDomainModel( export function mapLocalQueryItemToDomainModel(
localQuery: QueryHistoryLocalQueryDto, localQuery: QueryHistoryLocalQueryDto,
@@ -82,6 +83,10 @@ function mapInitialQueryInfoToDomainModel(
databaseInfo: { databaseInfo: {
databaseUri: initialInfo.databaseInfo.databaseUri, databaseUri: initialInfo.databaseInfo.databaseUri,
name: initialInfo.databaseInfo.name, name: initialInfo.databaseInfo.name,
language:
initialInfo.databaseInfo.language === undefined
? undefined
: mapQueryLanguageToDomainModel(initialInfo.databaseInfo.language),
}, },
start: new Date(initialInfo.start), start: new Date(initialInfo.start),
id: initialInfo.id, id: initialInfo.id,

View File

@@ -1,6 +1,8 @@
// Contains models and consts for the data we want to store in the query history store. // Contains models and consts for the data we want to store in the query history store.
// Changes to these models should be done carefully and account for backwards compatibility of data. // Changes to these models should be done carefully and account for backwards compatibility of data.
import { QueryLanguageDto } from "./query-history-dto";
export interface QueryHistoryLocalQueryDto { export interface QueryHistoryLocalQueryDto {
initialInfo: InitialQueryInfoDto; initialInfo: InitialQueryInfoDto;
t: "local"; t: "local";
@@ -27,6 +29,7 @@ export interface InitialQueryInfoDto {
interface DatabaseInfoDto { interface DatabaseInfoDto {
name: string; name: string;
databaseUri: string; databaseUri: string;
language?: QueryLanguageDto;
} }
interface PositionDto { interface PositionDto {

View File

@@ -1,6 +1,5 @@
import { import {
QueryHistoryVariantAnalysisDto, QueryHistoryVariantAnalysisDto,
QueryLanguageDto,
QueryStatusDto, QueryStatusDto,
VariantAnalysisDto, VariantAnalysisDto,
VariantAnalysisFailureReasonDto, VariantAnalysisFailureReasonDto,
@@ -22,9 +21,9 @@ import {
VariantAnalysisStatus, VariantAnalysisStatus,
} from "../../variant-analysis/shared/variant-analysis"; } from "../../variant-analysis/shared/variant-analysis";
import { assertNever } from "../../common/helpers-pure"; import { assertNever } from "../../common/helpers-pure";
import { QueryLanguage } from "../../common/query-language";
import { QueryStatus } from "../query-status"; import { QueryStatus } from "../query-status";
import { VariantAnalysisHistoryItem } from "../variant-analysis-history-item"; import { VariantAnalysisHistoryItem } from "../variant-analysis-history-item";
import { mapQueryLanguageToDto } from "./query-history-domain-mapper";
export function mapQueryHistoryVariantAnalysisToDto( export function mapQueryHistoryVariantAnalysisToDto(
item: VariantAnalysisHistoryItem, item: VariantAnalysisHistoryItem,
@@ -199,29 +198,6 @@ function mapVariantAnalysisStatusToDto(
} }
} }
function mapQueryLanguageToDto(language: QueryLanguage): QueryLanguageDto {
switch (language) {
case QueryLanguage.CSharp:
return QueryLanguageDto.CSharp;
case QueryLanguage.Cpp:
return QueryLanguageDto.Cpp;
case QueryLanguage.Go:
return QueryLanguageDto.Go;
case QueryLanguage.Java:
return QueryLanguageDto.Java;
case QueryLanguage.Javascript:
return QueryLanguageDto.Javascript;
case QueryLanguage.Python:
return QueryLanguageDto.Python;
case QueryLanguage.Ruby:
return QueryLanguageDto.Ruby;
case QueryLanguage.Swift:
return QueryLanguageDto.Swift;
default:
assertNever(language);
}
}
function mapQueryStatusToDto(status: QueryStatus): QueryStatusDto { function mapQueryStatusToDto(status: QueryStatus): QueryStatusDto {
switch (status) { switch (status) {
case QueryStatus.InProgress: case QueryStatus.InProgress:

View File

@@ -1,6 +1,5 @@
import { import {
QueryHistoryVariantAnalysisDto, QueryHistoryVariantAnalysisDto,
QueryLanguageDto,
QueryStatusDto, QueryStatusDto,
VariantAnalysisDto, VariantAnalysisDto,
VariantAnalysisFailureReasonDto, VariantAnalysisFailureReasonDto,
@@ -22,9 +21,9 @@ import {
VariantAnalysisStatus, VariantAnalysisStatus,
} from "../../variant-analysis/shared/variant-analysis"; } from "../../variant-analysis/shared/variant-analysis";
import { assertNever } from "../../common/helpers-pure"; import { assertNever } from "../../common/helpers-pure";
import { QueryLanguage } from "../../common/query-language";
import { QueryStatus } from "../query-status"; import { QueryStatus } from "../query-status";
import { VariantAnalysisHistoryItem } from "../variant-analysis-history-item"; import { VariantAnalysisHistoryItem } from "../variant-analysis-history-item";
import { mapQueryLanguageToDomainModel } from "./query-history-dto-mapper";
export function mapQueryHistoryVariantAnalysisToDomainModel( export function mapQueryHistoryVariantAnalysisToDomainModel(
item: QueryHistoryVariantAnalysisDto, item: QueryHistoryVariantAnalysisDto,
@@ -215,31 +214,6 @@ function mapVariantAnalysisStatusToDomainModel(
} }
} }
function mapQueryLanguageToDomainModel(
language: QueryLanguageDto,
): QueryLanguage {
switch (language) {
case QueryLanguageDto.CSharp:
return QueryLanguage.CSharp;
case QueryLanguageDto.Cpp:
return QueryLanguage.Cpp;
case QueryLanguageDto.Go:
return QueryLanguage.Go;
case QueryLanguageDto.Java:
return QueryLanguage.Java;
case QueryLanguageDto.Javascript:
return QueryLanguage.Javascript;
case QueryLanguageDto.Python:
return QueryLanguage.Python;
case QueryLanguageDto.Ruby:
return QueryLanguage.Ruby;
case QueryLanguageDto.Swift:
return QueryLanguage.Swift;
default:
assertNever(language);
}
}
function mapQueryStatusToDomainModel(status: QueryStatusDto): QueryStatus { function mapQueryStatusToDomainModel(status: QueryStatusDto): QueryStatus {
switch (status) { switch (status) {
case QueryStatusDto.InProgress: case QueryStatusDto.InProgress:

View File

@@ -1,6 +1,8 @@
// Contains models and consts for the data we want to store in the query history store. // Contains models and consts for the data we want to store in the query history store.
// Changes to these models should be done carefully and account for backwards compatibility of data. // Changes to these models should be done carefully and account for backwards compatibility of data.
import { QueryLanguageDto } from "./query-history-dto";
export interface QueryHistoryVariantAnalysisDto { export interface QueryHistoryVariantAnalysisDto {
readonly t: "variant-analysis"; readonly t: "variant-analysis";
failureReason?: string; failureReason?: string;
@@ -97,17 +99,6 @@ export enum VariantAnalysisStatusDto {
Canceled = "canceled", Canceled = "canceled",
} }
export enum QueryLanguageDto {
CSharp = "csharp",
Cpp = "cpp",
Go = "go",
Java = "java",
Javascript = "javascript",
Python = "python",
Ruby = "ruby",
Swift = "swift",
}
export enum QueryStatusDto { export enum QueryStatusDto {
InProgress = "InProgress", InProgress = "InProgress",
Completed = "Completed", Completed = "Completed",