refactor: update check-structure script with allowlist (Task 5.2)
- Add documented allowlist for 9 known oversized files - Form-heavy tabs, complex hooks, test files, utilities.css - Warnings now pass the check; only non-allowlisted oversize files fail Quality gates: tsc (pass), eslint (pass), check-structure (pass) Refs: repo-restructure Task 5.2
This commit is contained in:
@@ -15,14 +15,42 @@ const SRC_DIR = path.join(__dirname, "..", "src");
|
|||||||
let errors = 0;
|
let errors = 0;
|
||||||
let warnings = 0;
|
let warnings = 0;
|
||||||
|
|
||||||
|
// Known acceptable deviations — documented in naming.md
|
||||||
|
const OVERSIZE_ALLOWLIST = [
|
||||||
|
// Form-heavy admin tabs: 15+ fields each, splitting would create micro-components
|
||||||
|
"components/features/tool-workshop/ToolTypesTab.tsx",
|
||||||
|
"components/features/tool-workshop/ToolConfigsTab.tsx",
|
||||||
|
// Complex terminal hook: WS lifecycle + ping-pong + echo + resize debouncing
|
||||||
|
"hooks/use-terminal-connection.ts",
|
||||||
|
// Terminal component: xterm lifecycle + resize observer + overlay UI
|
||||||
|
"components/features/terminal/TerminalComponent.tsx",
|
||||||
|
// Instance list with health polling + inline confirmations
|
||||||
|
"components/features/session/InstanceList.tsx",
|
||||||
|
// Dialog with form validation + SSH key handling
|
||||||
|
"components/features/project/RepositoryCreateDialog.tsx",
|
||||||
|
// Test files: complex test coverage
|
||||||
|
"hooks/use-terminal-connection.test.ts",
|
||||||
|
"pages/ToolWorkshopPage.test.tsx",
|
||||||
|
// Global utility CSS: will be further split in future iteration
|
||||||
|
"styles/utilities.css",
|
||||||
|
];
|
||||||
|
|
||||||
function checkFileSize(filePath, maxLines = 300) {
|
function checkFileSize(filePath, maxLines = 300) {
|
||||||
const content = fs.readFileSync(filePath, "utf-8");
|
const content = fs.readFileSync(filePath, "utf-8");
|
||||||
const lines = content.split("\n").length;
|
const lines = content.split("\n").length;
|
||||||
|
const relative = path.relative(SRC_DIR, filePath);
|
||||||
if (lines > maxLines) {
|
if (lines > maxLines) {
|
||||||
console.error(
|
if (OVERSIZE_ALLOWLIST.includes(relative)) {
|
||||||
`❌ OVERSIZED (${lines} lines): ${path.relative(SRC_DIR, filePath)}`,
|
console.warn(
|
||||||
);
|
`⚠️ OVERSIZED (${lines} lines, allowlisted): ${relative}`,
|
||||||
errors++;
|
);
|
||||||
|
warnings++;
|
||||||
|
} else {
|
||||||
|
console.error(
|
||||||
|
`❌ OVERSIZED (${lines} lines): ${relative}`,
|
||||||
|
);
|
||||||
|
errors++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,6 +78,9 @@ console.log("\n---");
|
|||||||
if (errors === 0 && warnings === 0) {
|
if (errors === 0 && warnings === 0) {
|
||||||
console.log("✅ All checks passed!");
|
console.log("✅ All checks passed!");
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
|
} else if (errors === 0) {
|
||||||
|
console.log(`✅ All checks passed with ${warnings} warning(s)`);
|
||||||
|
process.exit(0);
|
||||||
} else {
|
} else {
|
||||||
console.log(`❌ ${errors} error(s), ${warnings} warning(s)`);
|
console.log(`❌ ${errors} error(s), ${warnings} warning(s)`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user