

















@@ -19,7 +19,8 @@ const CORE_SHARD = {
1919name: "core",
2020args: ["--tsconfig", "config/tsconfig/oxlint.core.json", "src", "ui", "packages"],
2121};
22-const CORE_SPLIT_TARGETS = ["src", "ui", "packages"];
22+const CORE_TS_CONFIG = "config/tsconfig/oxlint.core.json";
23+const CORE_SPLIT_TARGETS = ["ui", "packages"];
2324const EXTENSIONS_SHARD = {
2425name: "extensions",
2526args: ["--tsconfig", EXTENSION_TS_CONFIG, EXTENSIONS_DIR],
@@ -36,18 +37,28 @@ export function createOxlintShards({
3637 readDir = fs.readdirSync,
3738 splitCore = false,
3839} = {}) {
39-const coreShards = splitCore ? createCoreOxlintShards() : [CORE_SHARD];
40+const coreShards = splitCore ? createCoreOxlintShards({ cwd, readDir }) : [CORE_SHARD];
4041const extensionShards =
4142platform === "win32" ? createWindowsExtensionShards({ cwd, env, readDir }) : [EXTENSIONS_SHARD];
42434344return [...coreShards, ...extensionShards, SCRIPTS_SHARD];
4445}
454646-export function createCoreOxlintShards() {
47-return CORE_SPLIT_TARGETS.map((target) => ({
48-name: `core:${target}`,
49-args: ["--tsconfig", "config/tsconfig/oxlint.core.json", target],
47+export function createCoreOxlintShards({ cwd = process.cwd(), readDir = fs.readdirSync } = {}) {
48+const sourceShards = listSourceRootTargetGroups({ cwd, readDir }).map((targets) => ({
49+name: targets.length === 1 ? `core:${targets[0].replaceAll("/", ":")}` : "core:src:root",
50+args: ["--tsconfig", CORE_TS_CONFIG, ...targets],
5051}));
52+const sourceEntries = sourceShards.length > 0 ? sourceShards : [createCoreShard("src")];
53+54+return [...sourceEntries, ...CORE_SPLIT_TARGETS.map((target) => createCoreShard(target))];
55+}
56+57+function createCoreShard(target) {
58+return {
59+name: `core:${target}`,
60+args: ["--tsconfig", CORE_TS_CONFIG, target],
61+};
5162}
52635364export function createWindowsExtensionShards({
@@ -151,6 +162,26 @@ function listExtensionEntries({ cwd, readDir }) {
151162};
152163}
153164165+function listSourceRootTargetGroups({ cwd, readDir }) {
166+let entries;
167+try {
168+entries = readDir(path.join(cwd, "src"), { withFileTypes: true });
169+} catch {
170+return [];
171+}
172+173+const dirs = entries
174+.filter((entry) => entry.isDirectory())
175+.map((entry) => `src/${entry.name}`)
176+.toSorted((left, right) => left.localeCompare(right));
177+const rootFiles = entries
178+.filter((entry) => entry.isFile() && OXLINT_SOURCE_FILE_PATTERN.test(entry.name))
179+.map((entry) => `src/${entry.name}`)
180+.toSorted((left, right) => left.localeCompare(right));
181+182+return [...dirs.map((target) => [target]), ...(rootFiles.length > 0 ? [rootFiles] : [])];
183+}
184+154185export async function main(extraArgs = process.argv.slice(2), runtimeEnv = process.env) {
155186const runner = path.resolve("scripts", "run-oxlint.mjs");
156187const shardArgs = parseShardRunnerArgs(extraArgs);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。