From aa049f7146ceff515ba685c6267916b187c8353a Mon Sep 17 00:00:00 2001 From: Matei-Paul Trandafir Date: Sun, 5 Apr 2026 19:01:03 +0300 Subject: [PATCH 1/3] Fix the bug --- packages/cli/src/resolve-lint.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/cli/src/resolve-lint.ts b/packages/cli/src/resolve-lint.ts index 399559b5ef..f028c5a912 100644 --- a/packages/cli/src/resolve-lint.ts +++ b/packages/cli/src/resolve-lint.ts @@ -46,12 +46,16 @@ export async function lint(): Promise<{ const scriptDir = dirname(fileURLToPath(import.meta.url)); const localBinDir = join(scriptDir, '..', 'node_modules', '.bin'); const cwdBinDir = join(process.cwd(), 'node_modules', '.bin'); + const oxlintTsgolintPackagePath = dirname(dirname(oxlintTsgolintPath)) + const projectBinDir = join(oxlintTsgolintPackagePath, '..', '.bin'); oxlintTsgolintPath = [ join(localBinDir, 'tsgolint.exe'), join(localBinDir, 'tsgolint.cmd'), join(cwdBinDir, 'tsgolint.exe'), join(cwdBinDir, 'tsgolint.cmd'), + join(projectBinDir, 'tsgolint.exe'), + join(projectBinDir, 'tsgolint.cmd'), ].find((p) => existsSync(p)) ?? ''; // Bun stores packages in .bun/ cache dirs where the symlinked paths above won't match. if (!oxlintTsgolintPath) { From 8e7e259454bcc5e9be5123c8b805e3ba3f0d5b0c Mon Sep 17 00:00:00 2001 From: Matei-Paul Trandafir Date: Sun, 5 Apr 2026 19:12:42 +0300 Subject: [PATCH 2/3] Improve error message when tsgolint executable cannot be resolved --- packages/cli/src/resolve-lint.ts | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/cli/src/resolve-lint.ts b/packages/cli/src/resolve-lint.ts index f028c5a912..69424c785b 100644 --- a/packages/cli/src/resolve-lint.ts +++ b/packages/cli/src/resolve-lint.ts @@ -46,17 +46,17 @@ export async function lint(): Promise<{ const scriptDir = dirname(fileURLToPath(import.meta.url)); const localBinDir = join(scriptDir, '..', 'node_modules', '.bin'); const cwdBinDir = join(process.cwd(), 'node_modules', '.bin'); - const oxlintTsgolintPackagePath = dirname(dirname(oxlintTsgolintPath)) + const oxlintTsgolintPackagePath = dirname(dirname(oxlintTsgolintPath)); const projectBinDir = join(oxlintTsgolintPackagePath, '..', '.bin'); - oxlintTsgolintPath = - [ - join(localBinDir, 'tsgolint.exe'), - join(localBinDir, 'tsgolint.cmd'), - join(cwdBinDir, 'tsgolint.exe'), - join(cwdBinDir, 'tsgolint.cmd'), - join(projectBinDir, 'tsgolint.exe'), - join(projectBinDir, 'tsgolint.cmd'), - ].find((p) => existsSync(p)) ?? ''; + const pathCandidates = [ + join(localBinDir, 'tsgolint.exe'), + join(localBinDir, 'tsgolint.cmd'), + join(cwdBinDir, 'tsgolint.exe'), + join(cwdBinDir, 'tsgolint.cmd'), + join(projectBinDir, 'tsgolint.exe'), + join(projectBinDir, 'tsgolint.cmd'), + ]; + oxlintTsgolintPath = pathCandidates.find((p) => existsSync(p)) ?? ''; // Bun stores packages in .bun/ cache dirs where the symlinked paths above won't match. if (!oxlintTsgolintPath) { try { @@ -71,7 +71,10 @@ export async function lint(): Promise<{ } } if (!oxlintTsgolintPath) { - oxlintTsgolintPath = join(cwdBinDir, 'tsgolint.cmd'); + throw new Error( + 'Unable to resolve oxlint-tsgolint executable, tried:\n' + + pathCandidates.map((path) => `- ${path}`).join('\n'), + ); } const relativePath = relative(process.cwd(), oxlintTsgolintPath); // Only prepend .\ if it's actually a relative path (not an absolute path returned by relative()) From 12a0b38c8df94027f3d7a35f4730a2a262203964 Mon Sep 17 00:00:00 2001 From: Matei-Paul Trandafir Date: Sun, 5 Apr 2026 19:23:33 +0300 Subject: [PATCH 3/3] Improvements --- packages/cli/src/resolve-lint.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/cli/src/resolve-lint.ts b/packages/cli/src/resolve-lint.ts index 69424c785b..671b88c650 100644 --- a/packages/cli/src/resolve-lint.ts +++ b/packages/cli/src/resolve-lint.ts @@ -45,14 +45,11 @@ export async function lint(): Promise<{ // On Windows, try .exe first (bun creates .exe), then .cmd (npm/pnpm/yarn create .cmd) const scriptDir = dirname(fileURLToPath(import.meta.url)); const localBinDir = join(scriptDir, '..', 'node_modules', '.bin'); - const cwdBinDir = join(process.cwd(), 'node_modules', '.bin'); const oxlintTsgolintPackagePath = dirname(dirname(oxlintTsgolintPath)); const projectBinDir = join(oxlintTsgolintPackagePath, '..', '.bin'); const pathCandidates = [ join(localBinDir, 'tsgolint.exe'), join(localBinDir, 'tsgolint.cmd'), - join(cwdBinDir, 'tsgolint.exe'), - join(cwdBinDir, 'tsgolint.cmd'), join(projectBinDir, 'tsgolint.exe'), join(projectBinDir, 'tsgolint.cmd'), ];