From dcccd9e1740119a07ef770355d53b148e756784c Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Fri, 3 Apr 2026 17:09:15 +0200 Subject: [PATCH] Fix location links being displayed for query results with empty `file:///` URI --- extensions/ql-vscode/CHANGELOG.md | 1 + extensions/ql-vscode/src/common/bqrs-utils.ts | 2 +- .../common/bqrs-raw-results-mapper.test.ts | 15 +++++++++++ .../contextual/file-range-from-uri.test.ts | 26 ++++++++++--------- 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/extensions/ql-vscode/CHANGELOG.md b/extensions/ql-vscode/CHANGELOG.md index ee40e8cf406..e7113283cc3 100644 --- a/extensions/ql-vscode/CHANGELOG.md +++ b/extensions/ql-vscode/CHANGELOG.md @@ -3,6 +3,7 @@ ## [UNRELEASED] - Remove support for CodeQL CLI versions older than 2.22.4. [#4344](https://github.com/github/vscode-codeql/pull/4344) +- Fix location links being displayed for query results with empty `file:///` URI [#4357](https://github.com/github/vscode-codeql/pull/4357) ## 1.17.7 - 5 December 2025 diff --git a/extensions/ql-vscode/src/common/bqrs-utils.ts b/extensions/ql-vscode/src/common/bqrs-utils.ts index 1c0ec8e2834..5b57510d8e5 100644 --- a/extensions/ql-vscode/src/common/bqrs-utils.ts +++ b/extensions/ql-vscode/src/common/bqrs-utils.ts @@ -7,7 +7,7 @@ import { isUrlValueResolvable } from "./raw-result-types"; * as a link. */ export function isEmptyPath(uriStr: string) { - return !uriStr || uriStr === "file:/"; + return !uriStr || uriStr === "file:/" || uriStr === "file:///"; } export function tryGetRemoteLocation( diff --git a/extensions/ql-vscode/test/unit-tests/common/bqrs-raw-results-mapper.test.ts b/extensions/ql-vscode/test/unit-tests/common/bqrs-raw-results-mapper.test.ts index 994aa4ecab1..07d91512adb 100644 --- a/extensions/ql-vscode/test/unit-tests/common/bqrs-raw-results-mapper.test.ts +++ b/extensions/ql-vscode/test/unit-tests/common/bqrs-raw-results-mapper.test.ts @@ -4,6 +4,7 @@ import { } from "../../../src/common/bqrs-raw-results-mapper"; import type { BqrsResultSetSchema, + BqrsWholeFileLocation, DecodedBqrsChunk, } from "../../../src/common/bqrs-cli-types"; import { ColumnKind } from "../../../src/common/raw-result-types"; @@ -319,4 +320,18 @@ describe("mapUrlValue", () => { }); } }); + + it("should return undefined for empty file uri", () => { + for (const fileUri of ["file:/", "file:///"]) { + const loc = { + uri: fileUri, + startLine: 0, + startColumn: 0, + endLine: 0, + endColumn: 0, + } as BqrsWholeFileLocation; + const urlValue = mapUrlValue(loc); + expect(urlValue).toBeUndefined(); + } + }); }); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/language-support/contextual/file-range-from-uri.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/language-support/contextual/file-range-from-uri.test.ts index da27234b142..a44d311ac22 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/language-support/contextual/file-range-from-uri.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/language-support/contextual/file-range-from-uri.test.ts @@ -46,18 +46,20 @@ describe("fileRangeFromURI", () => { }); it("should return undefined when value is an empty uri", () => { - expect( - fileRangeFromURI( - { - uri: "file:/", - startLine: 1, - startColumn: 2, - endLine: 3, - endColumn: 4, - } as BqrsLineColumnLocation, - createMockDatabaseItem(), - ), - ).toBeUndefined(); + for (const fileUri of ["file:/", "file:///"]) { + expect( + fileRangeFromURI( + { + uri: fileUri, + startLine: 1, + startColumn: 2, + endLine: 3, + endColumn: 4, + } as BqrsLineColumnLocation, + createMockDatabaseItem(), + ), + ).toBeUndefined(); + } }); it("should return a range for a WholeFileLocation", () => {