diff --git a/extensions/ql-vscode/src/codeql-cli/cli.ts b/extensions/ql-vscode/src/codeql-cli/cli.ts index 1628a4330..c44137709 100644 --- a/extensions/ql-vscode/src/codeql-cli/cli.ts +++ b/extensions/ql-vscode/src/codeql-cli/cli.ts @@ -30,11 +30,11 @@ import { walkDirectory } from "../common/files"; import { QueryMetadata, SortDirection } from "../common/interface-types"; import { BaseLogger, Logger } from "../common/logging"; import { ProgressReporter } from "../common/logging/vscode"; -import { CompilationMessage } from "../query-server/legacy-messages"; import { sarifParser } from "../common/sarif-parser"; import { App } from "../common/app"; import { QueryLanguage } from "../common/query-language"; import { LINE_ENDINGS, splitStreamAtSeparators } from "../common/split-stream"; +import { Position } from "../query-server/new-messages"; /** * The version of the SARIF format that we are using. @@ -159,6 +159,24 @@ export type ResolvedQueries = string[]; */ export type ResolvedTests = string[]; +/** + * A compilation message for a test message (either an error or a warning) + */ +export interface CompilationMessage { + /** + * The text of the message + */ + message: string; + /** + * The source position associated with the message + */ + position: Position; + /** + * The severity of the message + */ + severity: number; +} + /** * Event fired by `codeql test run`. */ diff --git a/extensions/ql-vscode/src/compare/compare-view.ts b/extensions/ql-vscode/src/compare/compare-view.ts index 91ff90759..993d24ca3 100644 --- a/extensions/ql-vscode/src/compare/compare-view.ts +++ b/extensions/ql-vscode/src/compare/compare-view.ts @@ -125,12 +125,12 @@ export class CompareView extends AbstractWebview< // only run interpolation if the label is user-defined // otherwise we will wind up with duplicated rows name: this.labelProvider.getShortLabel(from), - status: from.completedQuery.statusString, + status: from.completedQuery.message, time: from.startTime, }, toQuery: { name: this.labelProvider.getShortLabel(to), - status: to.completedQuery.statusString, + status: to.completedQuery.message, time: to.startTime, }, }, diff --git a/extensions/ql-vscode/src/local-queries/local-query-run.ts b/extensions/ql-vscode/src/local-queries/local-query-run.ts index 3df131192..0d19c3dc7 100644 --- a/extensions/ql-vscode/src/local-queries/local-query-run.ts +++ b/extensions/ql-vscode/src/local-queries/local-query-run.ts @@ -178,15 +178,6 @@ export class LocalQueryRun { const successful = results.resultType === QueryResultType.SUCCESS; return { query, - result: { - evaluationTime: results.evaluationTime, - queryId: 0, - resultType: successful - ? QueryResultType.SUCCESS - : QueryResultType.OTHER_ERROR, - runId: 0, - message, - }, message, successful, }; diff --git a/extensions/ql-vscode/src/query-history/history-item-label-provider.ts b/extensions/ql-vscode/src/query-history/history-item-label-provider.ts index 95d43f6b4..002d351e0 100644 --- a/extensions/ql-vscode/src/query-history/history-item-label-provider.ts +++ b/extensions/ql-vscode/src/query-history/history-item-label-provider.ts @@ -77,14 +77,14 @@ export class HistoryItemLabelProvider { private getLocalInterpolateReplacements( item: LocalQueryInfo, ): InterpolateReplacements { - const { resultCount = 0, statusString = "in progress" } = + const { resultCount = 0, message = "in progress" } = item.completedQuery || {}; return { t: item.startTime, q: item.getQueryName(), d: item.databaseName, r: `(${resultCount} results)`, - s: statusString, + s: message, f: item.getQueryFileName(), l: this.getLanguageLabel(item), "%": "%", diff --git a/extensions/ql-vscode/src/query-history/query-history-manager.ts b/extensions/ql-vscode/src/query-history/query-history-manager.ts index 7dcaa38d0..77f3cf99a 100644 --- a/extensions/ql-vscode/src/query-history/query-history-manager.ts +++ b/extensions/ql-vscode/src/query-history/query-history-manager.ts @@ -1058,7 +1058,7 @@ export class QueryHistoryManager extends DisposableObject { .map((item) => ({ label: this.labelProvider.getLabel(item), description: item.databaseName, - detail: item.completedQuery.statusString, + detail: item.completedQuery.message, query: item, })); if (comparableQueryLabels.length < 1) { diff --git a/extensions/ql-vscode/src/query-history/store/query-history-local-query-domain-mapper.ts b/extensions/ql-vscode/src/query-history/store/query-history-local-query-domain-mapper.ts index f14db09dc..cba9cfbf4 100644 --- a/extensions/ql-vscode/src/query-history/store/query-history-local-query-domain-mapper.ts +++ b/extensions/ql-vscode/src/query-history/store/query-history-local-query-domain-mapper.ts @@ -46,14 +46,6 @@ function mapCompletedQueryToDto( return { query: mapQueryEvaluationInfoToDto(query.query), - result: { - runId: query.result.runId, - queryId: query.result.queryId, - resultType: query.result.resultType, - evaluationTime: query.result.evaluationTime, - message: query.result.message, - logFileLocation: query.result.logFileLocation, - }, logFileLocation: query.logFileLocation, successful: query.successful, message: query.message, diff --git a/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto-mapper.ts b/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto-mapper.ts index a5495b2cb..281f54498 100644 --- a/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto-mapper.ts +++ b/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto-mapper.ts @@ -56,17 +56,9 @@ function mapCompletedQueryInfoToDomainModel( return new CompletedQueryInfo( mapQueryEvaluationInfoToDomainModel(completedQuery.query), - { - runId: completedQuery.result.runId, - queryId: completedQuery.result.queryId, - resultType: completedQuery.result.resultType, - evaluationTime: completedQuery.result.evaluationTime, - message: completedQuery.result.message, - logFileLocation: completedQuery.result.logFileLocation, - }, completedQuery.logFileLocation, - completedQuery.successful ?? completedQuery.sucessful, - completedQuery.message, + completedQuery.successful ?? false, + completedQuery.message ?? "", sortState, completedQuery.resultCount, sortedResults, diff --git a/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto.ts b/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto.ts index 8e23f12c5..50c5e402d 100644 --- a/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto.ts +++ b/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto.ts @@ -52,7 +52,6 @@ export interface CompletedQueryInfoDto { // There once was a typo in the data model, which is why we need to support both sucessful?: boolean; - result: EvaluationResultDto; logFileLocation?: string; resultCount: number; sortedResultsInfo: Record; @@ -81,15 +80,6 @@ export enum SortDirectionDto { desc, } -interface EvaluationResultDto { - runId: number; - queryId: number; - resultType: number; - evaluationTime: number; - message?: string; - logFileLocation?: string; -} - export interface QueryEvaluationInfoDto { querySaveDir: string; dbItemPath: string; diff --git a/extensions/ql-vscode/src/query-results.ts b/extensions/ql-vscode/src/query-results.ts index 983a84653..b94486425 100644 --- a/extensions/ql-vscode/src/query-results.ts +++ b/extensions/ql-vscode/src/query-results.ts @@ -1,7 +1,6 @@ import { CancellationTokenSource, env } from "vscode"; import * as messages from "./query-server/messages-shared"; -import * as legacyMessages from "./query-server/legacy-messages"; import * as cli from "./codeql-cli/cli"; import { pathExists } from "fs-extra"; import { basename } from "path"; @@ -23,7 +22,6 @@ import { QueryWithResults, } from "./run-queries-shared"; import { sarifParser } from "./common/sarif-parser"; -import { formatLegacyMessage } from "./query-server/format-legacy-message"; /** * query-results.ts @@ -54,14 +52,9 @@ export interface InitialQueryInfo { export class CompletedQueryInfo implements QueryWithResults { constructor( public readonly query: QueryEvaluationInfo, - - /** - * The legacy result. This is only set when loading from the query history. - */ - public readonly result: legacyMessages.EvaluationResult, public readonly logFileLocation: string | undefined, - public readonly successful: boolean | undefined, - public readonly message: string | undefined, + public readonly successful: boolean, + public readonly message: string, /** * How we're currently sorting alerts. This is not mere interface * state due to truncation; on re-sort, we want to read in the file @@ -82,16 +75,6 @@ export class CompletedQueryInfo implements QueryWithResults { this.resultCount = value; } - get statusString(): string { - if (this.message) { - return this.message; - } else if (this.result) { - return formatLegacyMessage(this.result); - } else { - throw new Error("No status available"); - } - } - getResultsPath(selectedTable: string, useSorted = true): string { if (!useSorted) { return this.query.resultsPaths.resultsPath; @@ -291,7 +274,6 @@ export class LocalQueryInfo { completeThisQuery(info: QueryWithResults): void { this.completedQuery = new CompletedQueryInfo( info.query, - info.result, info.query.logPath, info.successful, info.message, diff --git a/extensions/ql-vscode/src/query-server/format-legacy-message.ts b/extensions/ql-vscode/src/query-server/format-legacy-message.ts deleted file mode 100644 index a7c365ad5..000000000 --- a/extensions/ql-vscode/src/query-server/format-legacy-message.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as legacyMessages from "./legacy-messages"; - -// Used for formatting the result of a legacy query which might still be in the -// user's query history. -export function formatLegacyMessage(result: legacyMessages.EvaluationResult) { - switch (result.resultType) { - case legacyMessages.QueryResultType.CANCELLATION: - return `cancelled after ${Math.round( - result.evaluationTime / 1000, - )} seconds`; - case legacyMessages.QueryResultType.OOM: - return "out of memory"; - case legacyMessages.QueryResultType.SUCCESS: - return `finished in ${Math.round(result.evaluationTime / 1000)} seconds`; - case legacyMessages.QueryResultType.TIMEOUT: - return `timed out after ${Math.round( - result.evaluationTime / 1000, - )} seconds`; - case legacyMessages.QueryResultType.OTHER_ERROR: - default: - return result.message ? `failed: ${result.message}` : "failed"; - } -} diff --git a/extensions/ql-vscode/src/query-server/legacy-messages.ts b/extensions/ql-vscode/src/query-server/legacy-messages.ts deleted file mode 100644 index df6cb99b3..000000000 --- a/extensions/ql-vscode/src/query-server/legacy-messages.ts +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Types for messages exchanged during jsonrpc communication with the - * the CodeQL query server. - * - * This file only contains types for messages that are still in use by - * the extension. Communication with the query server happens through - * messages in new-messages.ts. - * - * A note about the namespaces below, which look like they are - * essentially enums, namely Severity and QueryResultType. - * By design, for the sake of extensibility, clients - * receiving messages of this protocol are supposed to accept any - * number for any of these types. We commit to the given meaning of - * the numbers listed in constants in the namespaces, and we commit to - * the fact that any unknown QueryResultType value counts as an error. - */ - -import * as shared from "./messages-shared"; - -/** - * A compilation message (either an error or a warning) - */ -export interface CompilationMessage { - /** - * The text of the message - */ - message: string; - /** - * The source position associated with the message - */ - position: Position; - /** - * The severity of the message - */ - severity: Severity; -} - -export type Severity = number; -/** - * Severity of different messages. This namespace is intentionally not - * an enum, see "for the sake of extensibility" comment above. - */ -// eslint-disable-next-line @typescript-eslint/no-namespace -export namespace Severity { - /** - * The message is a compilation error. - */ - export const ERROR = 0; - /** - * The message is a compilation warning. - */ - export const WARNING = 1; -} - -/** - * The result of a single query - */ -export interface EvaluationResult { - /** - * The id of the run that this query was in - */ - runId: number; - /** - * The id of the query within the run - */ - queryId: number; - /** - * The type of the result. See QueryResultType for - * possible meanings. Any other result should be interpreted as an error. - */ - resultType: QueryResultType; - /** - * The wall clock time it took to evaluate the query. - * The time is from when we initially tried to evaluate the query - * to when we get the results. Hence with parallel evaluation the times may - * look odd. - */ - evaluationTime: number; - /** - * An error message if an error happened - */ - message?: string; - - /** - * Full path to file with all log messages emitted while this query was active, if one exists - */ - logFileLocation?: string; -} - -export type QueryResultType = number; -/** - * The result of running a query. This namespace is intentionally not - * an enum, see "for the sake of extensibility" comment above. - */ -// eslint-disable-next-line @typescript-eslint/no-namespace -export namespace QueryResultType { - /** - * The query ran successfully - */ - export const SUCCESS = 0; - /** - * The query failed due to an reason - * that isn't listed - */ - export const OTHER_ERROR = 1; - /** - * The query failed due to running out of - * memory - */ - export const OOM = 2; - /** - * The query failed due to exceeding the timeout - */ - export const TIMEOUT = 3; - /** - * The query failed because it was cancelled. - */ - export const CANCELLATION = 4; -} - -/** - * A position within a QL file. - */ -export type Position = shared.Position; diff --git a/extensions/ql-vscode/src/run-queries-shared.ts b/extensions/ql-vscode/src/run-queries-shared.ts index 7363fd5ab..54e99940f 100644 --- a/extensions/ql-vscode/src/run-queries-shared.ts +++ b/extensions/ql-vscode/src/run-queries-shared.ts @@ -1,5 +1,4 @@ import * as messages from "./query-server/messages-shared"; -import * as legacyMessages from "./query-server/legacy-messages"; import { DatabaseInfo, QueryMetadata } from "./common/interface-types"; import { join, parse, dirname, basename } from "path"; import { Range, TextEditor, Uri, window, workspace } from "vscode"; @@ -367,10 +366,9 @@ export class QueryEvaluationInfo extends QueryOutputDir { export interface QueryWithResults { readonly query: QueryEvaluationInfo; - readonly result: legacyMessages.EvaluationResult; readonly logFileLocation?: string; - readonly successful?: boolean; - readonly message?: string; + readonly successful: boolean; + readonly message: string; } /** diff --git a/extensions/ql-vscode/test/factories/query-history/local-query-history-item.ts b/extensions/ql-vscode/test/factories/query-history/local-query-history-item.ts index c815f320c..c3a018c3f 100644 --- a/extensions/ql-vscode/test/factories/query-history/local-query-history-item.ts +++ b/extensions/ql-vscode/test/factories/query-history/local-query-history-item.ts @@ -6,7 +6,6 @@ import { QueryWithResults, } from "../../../src/run-queries-shared"; import { CancellationTokenSource } from "vscode"; -import { QueryResultType } from "../../../src/query-server/legacy-messages"; import { QueryMetadata } from "../../../src/common/interface-types"; import { QueryLanguage } from "../../../src/common/query-language"; @@ -94,11 +93,8 @@ export function createMockQueryWithResults({ metadata, } as unknown as QueryEvaluationInfo, successful: didRunSuccessfully, - result: { - evaluationTime: 1, - queryId: 0, - runId: 0, - resultType: QueryResultType.SUCCESS, - }, + message: didRunSuccessfully + ? "finished in 0 seconds" + : "compilation failed: unknown error", }; } diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debug-controller.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debug-controller.ts index 75f955760..88f63d04e 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debug-controller.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debug-controller.ts @@ -9,7 +9,7 @@ import { } from "vscode"; import * as CodeQLProtocol from "../../../../src/debugger/debug-protocol"; import { DisposableObject } from "../../../../src/common/disposable-object"; -import { QueryResultType } from "../../../../src/query-server/legacy-messages"; +import { QueryResultType } from "../../../../src/query-server/new-messages"; import { CoreCompletedQuery } from "../../../../src/query-server/query-runner"; import { QueryOutputDir } from "../../../../src/run-queries-shared"; import { diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/store/query-history-store.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/store/query-history-store.test.ts index 8edb5da33..d02c9120e 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/store/query-history-store.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/store/query-history-store.test.ts @@ -16,7 +16,6 @@ import { import { DatabaseInfo } from "../../../../../src/common/interface-types"; import { CancellationTokenSource, Uri } from "vscode"; import { tmpDir } from "../../../../../src/tmp-dir"; -import { QueryResultType } from "../../../../../src/query-server/legacy-messages"; import { VariantAnalysisHistoryItem } from "../../../../../src/query-history/variant-analysis-history-item"; import { QueryHistoryInfo } from "../../../../../src/query-history/query-history-info"; import { createMockVariantAnalysisHistoryItem } from "../../../../factories/query-history/variant-analysis-history-item"; @@ -274,12 +273,6 @@ describe("write and read", () => { query: queryEvalInfo, successful: didRunSuccessfully, message: "foo", - result: { - evaluationTime: 1, - queryId: 0, - runId: 0, - resultType: QueryResultType.SUCCESS, - }, }; return result; diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-results.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-results.test.ts index 40aa0e88c..fa921459f 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-results.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-results.test.ts @@ -25,13 +25,8 @@ import { import { CodeQLCliServer, SourceInfo } from "../../../src/codeql-cli/cli"; import { CancellationTokenSource, Uri } from "vscode"; import { tmpDir } from "../../../src/tmp-dir"; -import { - EvaluationResult, - QueryResultType, -} from "../../../src/query-server/legacy-messages"; import { sleep } from "../../../src/common/time"; import { mockedObject } from "../utils/mocking.helpers"; -import { formatLegacyMessage } from "../../../src/query-server/format-legacy-message"; describe("query-results", () => { let queryPath: string; @@ -106,33 +101,6 @@ describe("query-results", () => { expect(completedQuery.getResultsPath("zxa")).toBe("bxa"); }); - it("should format the statusString", () => { - const evalResult: EvaluationResult = { - resultType: QueryResultType.OTHER_ERROR, - evaluationTime: 12340, - queryId: 3, - runId: 1, - }; - - evalResult.message = "Tremendously"; - expect(formatLegacyMessage(evalResult)).toBe("failed: Tremendously"); - - evalResult.resultType = QueryResultType.OTHER_ERROR; - expect(formatLegacyMessage(evalResult)).toBe("failed: Tremendously"); - - evalResult.resultType = QueryResultType.CANCELLATION; - evalResult.evaluationTime = 2345; - expect(formatLegacyMessage(evalResult)).toBe("cancelled after 2 seconds"); - - evalResult.resultType = QueryResultType.OOM; - expect(formatLegacyMessage(evalResult)).toBe("out of memory"); - - evalResult.resultType = QueryResultType.SUCCESS; - expect(formatLegacyMessage(evalResult)).toBe("finished in 2 seconds"); - - evalResult.resultType = QueryResultType.TIMEOUT; - expect(formatLegacyMessage(evalResult)).toBe("timed out after 2 seconds"); - }); it("should updateSortState", async () => { // setup const fqi = createMockFullQueryInfo( @@ -471,12 +439,6 @@ describe("query-results", () => { query: queryEvalInfo, successful: didRunSuccessfully, message: "foo", - result: { - evaluationTime: 1, - queryId: 0, - runId: 0, - resultType: QueryResultType.SUCCESS, - }, }; return result;