From 08dfd1a211bfae4eea045fe98ea042ab69b81399 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Wed, 31 Jan 2024 13:59:23 +0100 Subject: [PATCH] Add more information for consistency check errors --- .../src/model-editor/consistency-check.ts | 20 +++++++++++++------ .../model-editor/consistency-check.test.ts | 5 ++++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/extensions/ql-vscode/src/model-editor/consistency-check.ts b/extensions/ql-vscode/src/model-editor/consistency-check.ts index d96bf334b..238865463 100644 --- a/extensions/ql-vscode/src/model-editor/consistency-check.ts +++ b/extensions/ql-vscode/src/model-editor/consistency-check.ts @@ -3,7 +3,10 @@ import type { ModeledMethod } from "./modeled-method"; import type { BaseLogger } from "../common/logging"; interface Notifier { - missingMethod(signature: string): void; + missingMethod( + signature: string, + modeledMethods: readonly ModeledMethod[], + ): void; inconsistentSupported(signature: string, expectedSupported: boolean): void; } @@ -21,14 +24,14 @@ export function checkConsistency( ); for (const signature in modeledMethods) { + const modeledMethodsForSignature = modeledMethods[signature]; + const method = methodsBySignature[signature]; if (!method) { - notifier.missingMethod(signature); + notifier.missingMethod(signature, modeledMethodsForSignature); continue; } - const modeledMethodsForSignature = modeledMethods[signature]; - checkMethodConsistency(method, modeledMethodsForSignature, notifier); } } @@ -51,9 +54,14 @@ function checkMethodConsistency( export class DefaultNotifier implements Notifier { constructor(private readonly logger: BaseLogger) {} - missingMethod(signature: string) { + missingMethod(signature: string, modeledMethods: readonly ModeledMethod[]) { + const modelTypes = modeledMethods + .map((m) => m.type) + .filter((t) => t !== "none") + .join(", "); + void this.logger.log( - `Model editor query consistency check: Missing method ${signature} for method that is modeled.`, + `Model editor query consistency check: Missing method ${signature} for method that is modeled as ${modelTypes}`, ); } diff --git a/extensions/ql-vscode/test/unit-tests/model-editor/consistency-check.test.ts b/extensions/ql-vscode/test/unit-tests/model-editor/consistency-check.test.ts index 6d55ff0f3..bbfe84320 100644 --- a/extensions/ql-vscode/test/unit-tests/model-editor/consistency-check.test.ts +++ b/extensions/ql-vscode/test/unit-tests/model-editor/consistency-check.test.ts @@ -14,17 +14,20 @@ describe("checkConsistency", () => { }); it("should call missingMethod when method is missing", () => { + const modeledMethods = [createSourceModeledMethod()]; + checkConsistency( [], { "Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SeparatedList`1(System.Collections.Generic.IEnumerable)": - [createSourceModeledMethod()], + modeledMethods, }, notifier, ); expect(notifier.missingMethod).toHaveBeenCalledWith( "Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SeparatedList`1(System.Collections.Generic.IEnumerable)", + modeledMethods, ); expect(notifier.inconsistentSupported).not.toHaveBeenCalled(); });