diff --git a/docs/metrics/maintainability-baseline.json b/docs/metrics/maintainability-baseline.json index b4cf2516..5afe7f98 100644 --- a/docs/metrics/maintainability-baseline.json +++ b/docs/metrics/maintainability-baseline.json @@ -2,7 +2,7 @@ "sourceDirectory": "src", "largeFileThresholdLoc": 350, "typeScriptFileCount": 338, - "locInSrc": 66207, + "locInSrc": 65869, "processExitReferenceCount": 152, "synchronousFsApiReferenceCount": 842, "largeFileCountOver350Loc": 52 diff --git a/docs/project-roadmap.md b/docs/project-roadmap.md index 22d14fa5..aa518236 100644 --- a/docs/project-roadmap.md +++ b/docs/project-roadmap.md @@ -204,7 +204,7 @@ All criteria achieved: The check mode supports a maintainability regression gate that blocks increases in: - `process.exit` references - synchronous fs API references -- files over 350 LOC +- TypeScript files over 350 LOC --- diff --git a/package.json b/package.json index 69d4d772..e5dd6017 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "lint:fix": "eslint src/ --fix", "format": "prettier --write src/", "format:check": "prettier --check src/", - "validate": "bun run typecheck && bun run lint:fix && bun run format:check && bun run test:all", + "validate": "bun run typecheck && bun run lint:fix && bun run format:check && bun run maintainability:check && bun run test:all", "verify:bundle": "node scripts/verify-bundle.js", "maintainability:baseline": "node scripts/maintainability-baseline.js --out docs/metrics/maintainability-baseline.json", "maintainability:check": "node scripts/maintainability-baseline.js --check docs/metrics/maintainability-baseline.json", diff --git a/scripts/maintainability-baseline.js b/scripts/maintainability-baseline.js index 8258f945..00cd9f68 100644 --- a/scripts/maintainability-baseline.js +++ b/scripts/maintainability-baseline.js @@ -142,7 +142,12 @@ function countLines(content) { if (content.length === 0) { return 0; } - return content.split(/\r?\n/).length; + + const lineBreakMatches = content.match(/\r\n|\n|\r/g); + const lineBreakCount = lineBreakMatches ? lineBreakMatches.length : 0; + const endsWithLineBreak = content.endsWith('\n') || content.endsWith('\r'); + + return endsWithLineBreak ? lineBreakCount : lineBreakCount + 1; } function countMatches(content, pattern) {