From 5b55cf86878e5cc1dcc1ab9267368bffda491157 Mon Sep 17 00:00:00 2001 From: James Kiefer Date: Thu, 31 Jul 2025 06:34:05 -0600 Subject: [PATCH] fix: resolve ancestral symlinks (#641) --- src/testTree.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/testTree.ts b/src/testTree.ts index c03147b..e8f0acc 100644 --- a/src/testTree.ts +++ b/src/testTree.ts @@ -1,6 +1,6 @@ import type { RunnerTask, RunnerTestFile } from 'vitest' import type { VitestFolderAPI } from './api' -import { lstatSync, readlinkSync } from 'node:fs' +import { realpathSync } from 'node:fs' import { resolve } from 'node:path' import { basename, dirname, normalize } from 'pathe' import * as vscode from 'vscode' @@ -83,14 +83,12 @@ export class TestTree extends vscode.Disposable { } getSymlinkFolder(uri: vscode.Uri) { - const stats = lstatSync(uri.fsPath) - if (stats.isSymbolicLink()) { - const actualPath = readlinkSync(uri.fsPath) - const dir = dirname(uri.fsPath) - const id = resolve(dir, actualPath) - return vscode.Uri.file(id) + const realPath = realpathSync(uri.fsPath) + if (realPath === uri.fsPath) { + return uri } - return uri + + return vscode.Uri.file(realPath) } // in cases where there is only a single workspace, we don't show it as a folder @@ -191,8 +189,14 @@ export class TestTree extends vscode.Disposable { return cached } + const parent = dirname(normalizedFolder) + // If the parent is the same as the folder, we are at the root + if (parent === normalizedFolder) { + throw new Error(`Fatal Error: Attempted to get parent of root folder "${normalizedFolder}".`) + } + const folderUri = vscode.Uri.file(normalizedFolder) - const parentItem = this.getOrCreateFolderTestItem(api, dirname(normalizedFolder)) + const parentItem = this.getOrCreateFolderTestItem(api, parent) const folderItem = this._createFolderItem(folderUri, parentItem) folderItem.tags = [api.tag] parentItem.children.add(folderItem) -- 2.51.2