Skip to content

Commit 620dafb

Browse files
committed
fix
1 parent 007fc3b commit 620dafb

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed

packages/react-doctor/src/utils/discover-project.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,7 @@ const findDependencyInfoFromMonorepoRoot = (directory: string): DependencyInfo =
194194

195195
return {
196196
reactVersion: rootInfo.reactVersion ?? workspaceInfo.reactVersion,
197-
framework:
198-
rootInfo.framework !== "unknown" ? rootInfo.framework : workspaceInfo.framework,
197+
framework: rootInfo.framework !== "unknown" ? rootInfo.framework : workspaceInfo.framework,
199198
};
200199
};
201200

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { spawnSync } from "node:child_process";
2+
import fs from "node:fs";
3+
import path from "node:path";
4+
import { GIT_LS_FILES_MAX_BUFFER_BYTES, SOURCE_FILE_PATTERN } from "../constants.js";
5+
6+
const findFilesWithDisableDirectives = (rootDirectory: string): string[] => {
7+
const result = spawnSync("git", ["grep", "-l", "--untracked", "-E", "(eslint|oxlint)-disable"], {
8+
cwd: rootDirectory,
9+
encoding: "utf-8",
10+
maxBuffer: GIT_LS_FILES_MAX_BUFFER_BYTES,
11+
});
12+
13+
if (result.error || result.status === null) return [];
14+
15+
return result.stdout
16+
.split("\n")
17+
.filter((filePath) => filePath.length > 0 && SOURCE_FILE_PATTERN.test(filePath));
18+
};
19+
20+
const neutralizeContent = (content: string): string =>
21+
content
22+
.replaceAll("eslint-disable", "eslint_disable")
23+
.replaceAll("oxlint-disable", "oxlint_disable");
24+
25+
export const neutralizeDisableDirectives = (rootDirectory: string): (() => void) => {
26+
const filePaths = findFilesWithDisableDirectives(rootDirectory);
27+
const originalContents = new Map<string, string>();
28+
29+
for (const relativePath of filePaths) {
30+
const absolutePath = path.join(rootDirectory, relativePath);
31+
32+
let originalContent: string;
33+
try {
34+
originalContent = fs.readFileSync(absolutePath, "utf-8");
35+
} catch {
36+
continue;
37+
}
38+
39+
const neutralizedContent = neutralizeContent(originalContent);
40+
if (neutralizedContent !== originalContent) {
41+
originalContents.set(absolutePath, originalContent);
42+
fs.writeFileSync(absolutePath, neutralizedContent);
43+
}
44+
}
45+
46+
return () => {
47+
for (const [absolutePath, originalContent] of originalContents) {
48+
fs.writeFileSync(absolutePath, originalContent);
49+
}
50+
};
51+
};

packages/react-doctor/src/utils/run-oxlint.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { fileURLToPath } from "node:url";
77
import { ERROR_PREVIEW_LENGTH_CHARS, JSX_FILE_PATTERN } from "../constants.js";
88
import { createOxlintConfig } from "../oxlint-config.js";
99
import type { CleanedDiagnostic, Diagnostic, Framework, OxlintOutput } from "../types.js";
10+
import { neutralizeDisableDirectives } from "./neutralize-disable-directives.js";
1011

1112
const esmRequire = createRequire(import.meta.url);
1213

@@ -260,6 +261,7 @@ export const runOxlint = async (
260261
const configPath = path.join(os.tmpdir(), `react-doctor-oxlintrc-${process.pid}.json`);
261262
const pluginPath = resolvePluginPath();
262263
const config = createOxlintConfig({ pluginPath, framework, hasReactCompiler });
264+
const restoreDisableDirectives = neutralizeDisableDirectives(rootDirectory);
263265

264266
try {
265267
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
@@ -332,6 +334,7 @@ export const runOxlint = async (
332334
};
333335
});
334336
} finally {
337+
restoreDisableDirectives();
335338
if (fs.existsSync(configPath)) {
336339
fs.unlinkSync(configPath);
337340
}

0 commit comments

Comments
 (0)