lightsoutAlpha

file-size

Flags a file over the standards line cap.

Deterministic checkAdvises by default

Why this rule

Files stay under ~250 lines (~300 for .tsx — JSX and props interfaces earn the slack) — approaching the cap signals a split or graduation. React components and hooks have their own thresholds (see the react patterns doc when it applies).

The cap exempts an index file in any source dialect — index.tsx included — because a package's entry is its public API, which cannot take the remedy a size finding asks for.

Examples

The check flags the incorrect code and passes the correct code. Each example is a small repo, because this rule looks across files. It opens on the file that matters; the other files are the repo around it.

Incorrect

srccatalog
src/catalog/catalogEntries.ts
interface CatalogEntry {
sku: string;
label: string;
price: number;
}
// The whole catalog in one file: past the cap, and the signal that the concept
// has grown into a module with a boundary of its own.
export const catalogEntries: CatalogEntry[] = [
{ sku: 'sku-001', label: 'Catalog entry 001', price: 100 },
{ sku: 'sku-002', label: 'Catalog entry 002', price: 105 },
{ sku: 'sku-003', label: 'Catalog entry 003', price: 110 },
{ sku: 'sku-004', label: 'Catalog entry 004', price: 115 },
{ sku: 'sku-005', label: 'Catalog entry 005', price: 120 },
{ sku: 'sku-006', label: 'Catalog entry 006', price: 125 },
{ sku: 'sku-007', label: 'Catalog entry 007', price: 130 },
{ sku: 'sku-008', label: 'Catalog entry 008', price: 135 },
{ sku: 'sku-009', label: 'Catalog entry 009', price: 140 },
{ sku: 'sku-010', label: 'Catalog entry 010', price: 145 },
{ sku: 'sku-011', label: 'Catalog entry 011', price: 150 },
{ sku: 'sku-012', label: 'Catalog entry 012', price: 155 },
{ sku: 'sku-013', label: 'Catalog entry 013', price: 160 },
{ sku: 'sku-014', label: 'Catalog entry 014', price: 165 },
{ sku: 'sku-015', label: 'Catalog entry 015', price: 170 },
{ sku: 'sku-016', label: 'Catalog entry 016', price: 175 },
{ sku: 'sku-017', label: 'Catalog entry 017', price: 180 },
{ sku: 'sku-018', label: 'Catalog entry 018', price: 185 },
{ sku: 'sku-019', label: 'Catalog entry 019', price: 190 },
{ sku: 'sku-020', label: 'Catalog entry 020', price: 195 },
{ sku: 'sku-021', label: 'Catalog entry 021', price: 200 },
{ sku: 'sku-022', label: 'Catalog entry 022', price: 205 },
{ sku: 'sku-023', label: 'Catalog entry 023', price: 210 },
{ sku: 'sku-024', label: 'Catalog entry 024', price: 215 },
{ sku: 'sku-025', label: 'Catalog entry 025', price: 220 },
{ sku: 'sku-026', label: 'Catalog entry 026', price: 225 },
{ sku: 'sku-027', label: 'Catalog entry 027', price: 230 },
{ sku: 'sku-028', label: 'Catalog entry 028', price: 235 },
{ sku: 'sku-029', label: 'Catalog entry 029', price: 240 },
{ sku: 'sku-030', label: 'Catalog entry 030', price: 245 },
{ sku: 'sku-031', label: 'Catalog entry 031', price: 250 },
{ sku: 'sku-032', label: 'Catalog entry 032', price: 255 },
{ sku: 'sku-033', label: 'Catalog entry 033', price: 260 },
{ sku: 'sku-034', label: 'Catalog entry 034', price: 265 },
{ sku: 'sku-035', label: 'Catalog entry 035', price: 270 },
{ sku: 'sku-036', label: 'Catalog entry 036', price: 275 },
{ sku: 'sku-037', label: 'Catalog entry 037', price: 280 },
{ sku: 'sku-038', label: 'Catalog entry 038', price: 285 },
{ sku: 'sku-039', label: 'Catalog entry 039', price: 290 },
{ sku: 'sku-040', label: 'Catalog entry 040', price: 295 },
{ sku: 'sku-041', label: 'Catalog entry 041', price: 300 },
{ sku: 'sku-042', label: 'Catalog entry 042', price: 305 },
{ sku: 'sku-043', label: 'Catalog entry 043', price: 310 },
{ sku: 'sku-044', label: 'Catalog entry 044', price: 315 },
{ sku: 'sku-045', label: 'Catalog entry 045', price: 320 },
{ sku: 'sku-046', label: 'Catalog entry 046', price: 325 },
{ sku: 'sku-047', label: 'Catalog entry 047', price: 330 },
{ sku: 'sku-048', label: 'Catalog entry 048', price: 335 },
{ sku: 'sku-049', label: 'Catalog entry 049', price: 340 },
{ sku: 'sku-050', label: 'Catalog entry 050', price: 345 },
{ sku: 'sku-051', label: 'Catalog entry 051', price: 350 },
{ sku: 'sku-052', label: 'Catalog entry 052', price: 355 },
{ sku: 'sku-053', label: 'Catalog entry 053', price: 360 },
{ sku: 'sku-054', label: 'Catalog entry 054', price: 365 },
{ sku: 'sku-055', label: 'Catalog entry 055', price: 370 },
{ sku: 'sku-056', label: 'Catalog entry 056', price: 375 },
{ sku: 'sku-057', label: 'Catalog entry 057', price: 380 },
{ sku: 'sku-058', label: 'Catalog entry 058', price: 385 },
{ sku: 'sku-059', label: 'Catalog entry 059', price: 390 },
{ sku: 'sku-060', label: 'Catalog entry 060', price: 395 },
{ sku: 'sku-061', label: 'Catalog entry 061', price: 400 },
{ sku: 'sku-062', label: 'Catalog entry 062', price: 405 },
{ sku: 'sku-063', label: 'Catalog entry 063', price: 410 },
{ sku: 'sku-064', label: 'Catalog entry 064', price: 415 },
{ sku: 'sku-065', label: 'Catalog entry 065', price: 420 },
{ sku: 'sku-066', label: 'Catalog entry 066', price: 425 },
{ sku: 'sku-067', label: 'Catalog entry 067', price: 430 },
{ sku: 'sku-068', label: 'Catalog entry 068', price: 435 },
{ sku: 'sku-069', label: 'Catalog entry 069', price: 440 },
{ sku: 'sku-070', label: 'Catalog entry 070', price: 445 },
{ sku: 'sku-071', label: 'Catalog entry 071', price: 450 },
{ sku: 'sku-072', label: 'Catalog entry 072', price: 455 },
{ sku: 'sku-073', label: 'Catalog entry 073', price: 460 },
{ sku: 'sku-074', label: 'Catalog entry 074', price: 465 },
{ sku: 'sku-075', label: 'Catalog entry 075', price: 470 },
{ sku: 'sku-076', label: 'Catalog entry 076', price: 475 },
{ sku: 'sku-077', label: 'Catalog entry 077', price: 480 },
{ sku: 'sku-078', label: 'Catalog entry 078', price: 485 },
{ sku: 'sku-079', label: 'Catalog entry 079', price: 490 },
{ sku: 'sku-080', label: 'Catalog entry 080', price: 495 },
{ sku: 'sku-081', label: 'Catalog entry 081', price: 500 },
{ sku: 'sku-082', label: 'Catalog entry 082', price: 505 },
{ sku: 'sku-083', label: 'Catalog entry 083', price: 510 },
{ sku: 'sku-084', label: 'Catalog entry 084', price: 515 },
{ sku: 'sku-085', label: 'Catalog entry 085', price: 520 },
{ sku: 'sku-086', label: 'Catalog entry 086', price: 525 },
{ sku: 'sku-087', label: 'Catalog entry 087', price: 530 },
{ sku: 'sku-088', label: 'Catalog entry 088', price: 535 },
{ sku: 'sku-089', label: 'Catalog entry 089', price: 540 },
{ sku: 'sku-090', label: 'Catalog entry 090', price: 545 },
{ sku: 'sku-091', label: 'Catalog entry 091', price: 550 },
{ sku: 'sku-092', label: 'Catalog entry 092', price: 555 },
{ sku: 'sku-093', label: 'Catalog entry 093', price: 560 },
{ sku: 'sku-094', label: 'Catalog entry 094', price: 565 },
{ sku: 'sku-095', label: 'Catalog entry 095', price: 570 },
{ sku: 'sku-096', label: 'Catalog entry 096', price: 575 },
{ sku: 'sku-097', label: 'Catalog entry 097', price: 580 },
{ sku: 'sku-098', label: 'Catalog entry 098', price: 585 },
{ sku: 'sku-099', label: 'Catalog entry 099', price: 590 },
{ sku: 'sku-100', label: 'Catalog entry 100', price: 595 },
{ sku: 'sku-101', label: 'Catalog entry 101', price: 600 },
{ sku: 'sku-102', label: 'Catalog entry 102', price: 605 },
{ sku: 'sku-103', label: 'Catalog entry 103', price: 610 },
{ sku: 'sku-104', label: 'Catalog entry 104', price: 615 },
{ sku: 'sku-105', label: 'Catalog entry 105', price: 620 },
{ sku: 'sku-106', label: 'Catalog entry 106', price: 625 },
{ sku: 'sku-107', label: 'Catalog entry 107', price: 630 },
{ sku: 'sku-108', label: 'Catalog entry 108', price: 635 },
{ sku: 'sku-109', label: 'Catalog entry 109', price: 640 },
{ sku: 'sku-110', label: 'Catalog entry 110', price: 645 },
{ sku: 'sku-111', label: 'Catalog entry 111', price: 650 },
{ sku: 'sku-112', label: 'Catalog entry 112', price: 655 },
{ sku: 'sku-113', label: 'Catalog entry 113', price: 660 },
{ sku: 'sku-114', label: 'Catalog entry 114', price: 665 },
{ sku: 'sku-115', label: 'Catalog entry 115', price: 670 },
{ sku: 'sku-116', label: 'Catalog entry 116', price: 675 },
{ sku: 'sku-117', label: 'Catalog entry 117', price: 680 },
{ sku: 'sku-118', label: 'Catalog entry 118', price: 685 },
{ sku: 'sku-119', label: 'Catalog entry 119', price: 690 },
{ sku: 'sku-120', label: 'Catalog entry 120', price: 695 },
{ sku: 'sku-121', label: 'Catalog entry 121', price: 700 },
{ sku: 'sku-122', label: 'Catalog entry 122', price: 705 },
{ sku: 'sku-123', label: 'Catalog entry 123', price: 710 },
{ sku: 'sku-124', label: 'Catalog entry 124', price: 715 },
{ sku: 'sku-125', label: 'Catalog entry 125', price: 720 },
{ sku: 'sku-126', label: 'Catalog entry 126', price: 725 },
{ sku: 'sku-127', label: 'Catalog entry 127', price: 730 },
{ sku: 'sku-128', label: 'Catalog entry 128', price: 735 },
{ sku: 'sku-129', label: 'Catalog entry 129', price: 740 },
{ sku: 'sku-130', label: 'Catalog entry 130', price: 745 },
{ sku: 'sku-131', label: 'Catalog entry 131', price: 750 },
{ sku: 'sku-132', label: 'Catalog entry 132', price: 755 },
{ sku: 'sku-133', label: 'Catalog entry 133', price: 760 },
{ sku: 'sku-134', label: 'Catalog entry 134', price: 765 },
{ sku: 'sku-135', label: 'Catalog entry 135', price: 770 },
{ sku: 'sku-136', label: 'Catalog entry 136', price: 775 },
{ sku: 'sku-137', label: 'Catalog entry 137', price: 780 },
{ sku: 'sku-138', label: 'Catalog entry 138', price: 785 },
{ sku: 'sku-139', label: 'Catalog entry 139', price: 790 },
{ sku: 'sku-140', label: 'Catalog entry 140', price: 795 },
{ sku: 'sku-141', label: 'Catalog entry 141', price: 800 },
{ sku: 'sku-142', label: 'Catalog entry 142', price: 805 },
{ sku: 'sku-143', label: 'Catalog entry 143', price: 810 },
{ sku: 'sku-144', label: 'Catalog entry 144', price: 815 },
{ sku: 'sku-145', label: 'Catalog entry 145', price: 820 },
{ sku: 'sku-146', label: 'Catalog entry 146', price: 825 },
{ sku: 'sku-147', label: 'Catalog entry 147', price: 830 },
{ sku: 'sku-148', label: 'Catalog entry 148', price: 835 },
{ sku: 'sku-149', label: 'Catalog entry 149', price: 840 },
{ sku: 'sku-150', label: 'Catalog entry 150', price: 845 },
{ sku: 'sku-151', label: 'Catalog entry 151', price: 850 },
{ sku: 'sku-152', label: 'Catalog entry 152', price: 855 },
{ sku: 'sku-153', label: 'Catalog entry 153', price: 860 },
{ sku: 'sku-154', label: 'Catalog entry 154', price: 865 },
{ sku: 'sku-155', label: 'Catalog entry 155', price: 870 },
{ sku: 'sku-156', label: 'Catalog entry 156', price: 875 },
{ sku: 'sku-157', label: 'Catalog entry 157', price: 880 },
{ sku: 'sku-158', label: 'Catalog entry 158', price: 885 },
{ sku: 'sku-159', label: 'Catalog entry 159', price: 890 },
{ sku: 'sku-160', label: 'Catalog entry 160', price: 895 },
{ sku: 'sku-161', label: 'Catalog entry 161', price: 900 },
{ sku: 'sku-162', label: 'Catalog entry 162', price: 905 },
{ sku: 'sku-163', label: 'Catalog entry 163', price: 910 },
{ sku: 'sku-164', label: 'Catalog entry 164', price: 915 },
{ sku: 'sku-165', label: 'Catalog entry 165', price: 920 },
{ sku: 'sku-166', label: 'Catalog entry 166', price: 925 },
{ sku: 'sku-167', label: 'Catalog entry 167', price: 930 },
{ sku: 'sku-168', label: 'Catalog entry 168', price: 935 },
{ sku: 'sku-169', label: 'Catalog entry 169', price: 940 },
{ sku: 'sku-170', label: 'Catalog entry 170', price: 945 },
{ sku: 'sku-171', label: 'Catalog entry 171', price: 950 },
{ sku: 'sku-172', label: 'Catalog entry 172', price: 955 },
{ sku: 'sku-173', label: 'Catalog entry 173', price: 960 },
{ sku: 'sku-174', label: 'Catalog entry 174', price: 965 },
{ sku: 'sku-175', label: 'Catalog entry 175', price: 970 },
{ sku: 'sku-176', label: 'Catalog entry 176', price: 975 },
{ sku: 'sku-177', label: 'Catalog entry 177', price: 980 },
{ sku: 'sku-178', label: 'Catalog entry 178', price: 985 },
{ sku: 'sku-179', label: 'Catalog entry 179', price: 990 },
{ sku: 'sku-180', label: 'Catalog entry 180', price: 995 },
{ sku: 'sku-181', label: 'Catalog entry 181', price: 1000 },
{ sku: 'sku-182', label: 'Catalog entry 182', price: 1005 },
{ sku: 'sku-183', label: 'Catalog entry 183', price: 1010 },
{ sku: 'sku-184', label: 'Catalog entry 184', price: 1015 },
{ sku: 'sku-185', label: 'Catalog entry 185', price: 1020 },
{ sku: 'sku-186', label: 'Catalog entry 186', price: 1025 },
{ sku: 'sku-187', label: 'Catalog entry 187', price: 1030 },
{ sku: 'sku-188', label: 'Catalog entry 188', price: 1035 },
{ sku: 'sku-189', label: 'Catalog entry 189', price: 1040 },
{ sku: 'sku-190', label: 'Catalog entry 190', price: 1045 },
{ sku: 'sku-191', label: 'Catalog entry 191', price: 1050 },
{ sku: 'sku-192', label: 'Catalog entry 192', price: 1055 },
{ sku: 'sku-193', label: 'Catalog entry 193', price: 1060 },
{ sku: 'sku-194', label: 'Catalog entry 194', price: 1065 },
{ sku: 'sku-195', label: 'Catalog entry 195', price: 1070 },
{ sku: 'sku-196', label: 'Catalog entry 196', price: 1075 },
{ sku: 'sku-197', label: 'Catalog entry 197', price: 1080 },
{ sku: 'sku-198', label: 'Catalog entry 198', price: 1085 },
{ sku: 'sku-199', label: 'Catalog entry 199', price: 1090 },
{ sku: 'sku-200', label: 'Catalog entry 200', price: 1095 },
{ sku: 'sku-201', label: 'Catalog entry 201', price: 1100 },
{ sku: 'sku-202', label: 'Catalog entry 202', price: 1105 },
{ sku: 'sku-203', label: 'Catalog entry 203', price: 1110 },
{ sku: 'sku-204', label: 'Catalog entry 204', price: 1115 },
{ sku: 'sku-205', label: 'Catalog entry 205', price: 1120 },
{ sku: 'sku-206', label: 'Catalog entry 206', price: 1125 },
{ sku: 'sku-207', label: 'Catalog entry 207', price: 1130 },
{ sku: 'sku-208', label: 'Catalog entry 208', price: 1135 },
{ sku: 'sku-209', label: 'Catalog entry 209', price: 1140 },
{ sku: 'sku-210', label: 'Catalog entry 210', price: 1145 },
{ sku: 'sku-211', label: 'Catalog entry 211', price: 1150 },
{ sku: 'sku-212', label: 'Catalog entry 212', price: 1155 },
{ sku: 'sku-213', label: 'Catalog entry 213', price: 1160 },
{ sku: 'sku-214', label: 'Catalog entry 214', price: 1165 },
{ sku: 'sku-215', label: 'Catalog entry 215', price: 1170 },
{ sku: 'sku-216', label: 'Catalog entry 216', price: 1175 },
{ sku: 'sku-217', label: 'Catalog entry 217', price: 1180 },
{ sku: 'sku-218', label: 'Catalog entry 218', price: 1185 },
{ sku: 'sku-219', label: 'Catalog entry 219', price: 1190 },
{ sku: 'sku-220', label: 'Catalog entry 220', price: 1195 },
{ sku: 'sku-221', label: 'Catalog entry 221', price: 1200 },
{ sku: 'sku-222', label: 'Catalog entry 222', price: 1205 },
{ sku: 'sku-223', label: 'Catalog entry 223', price: 1210 },
{ sku: 'sku-224', label: 'Catalog entry 224', price: 1215 },
{ sku: 'sku-225', label: 'Catalog entry 225', price: 1220 },
{ sku: 'sku-226', label: 'Catalog entry 226', price: 1225 },
{ sku: 'sku-227', label: 'Catalog entry 227', price: 1230 },
{ sku: 'sku-228', label: 'Catalog entry 228', price: 1235 },
{ sku: 'sku-229', label: 'Catalog entry 229', price: 1240 },
{ sku: 'sku-230', label: 'Catalog entry 230', price: 1245 },
{ sku: 'sku-231', label: 'Catalog entry 231', price: 1250 },
{ sku: 'sku-232', label: 'Catalog entry 232', price: 1255 },
{ sku: 'sku-233', label: 'Catalog entry 233', price: 1260 },
{ sku: 'sku-234', label: 'Catalog entry 234', price: 1265 },
{ sku: 'sku-235', label: 'Catalog entry 235', price: 1270 },
{ sku: 'sku-236', label: 'Catalog entry 236', price: 1275 },
{ sku: 'sku-237', label: 'Catalog entry 237', price: 1280 },
{ sku: 'sku-238', label: 'Catalog entry 238', price: 1285 },
{ sku: 'sku-239', label: 'Catalog entry 239', price: 1290 },
{ sku: 'sku-240', label: 'Catalog entry 240', price: 1295 },
{ sku: 'sku-241', label: 'Catalog entry 241', price: 1300 },
{ sku: 'sku-242', label: 'Catalog entry 242', price: 1305 },
{ sku: 'sku-243', label: 'Catalog entry 243', price: 1310 },
{ sku: 'sku-244', label: 'Catalog entry 244', price: 1315 },
{ sku: 'sku-245', label: 'Catalog entry 245', price: 1320 },
{ sku: 'sku-246', label: 'Catalog entry 246', price: 1325 },
{ sku: 'sku-247', label: 'Catalog entry 247', price: 1330 },
{ sku: 'sku-248', label: 'Catalog entry 248', price: 1335 },
{ sku: 'sku-249', label: 'Catalog entry 249', price: 1340 },
{ sku: 'sku-250', label: 'Catalog entry 250', price: 1345 },
];

Correct

srccatalogentries
src/catalog/entries/getCatalogEntry001.ts
export const getCatalogEntry001 = (): string => 'Catalog entry 001';

Configure

  • Block"blocking"Stops a run when a file the run changed breaks the rule.
  • Advise"advisory"Reports it and hands it to the refactor agent. Never stops a run.
    Default
  • Off"off"Not checked. Use it when your own linter already enforces the rule.

Add this to your lightsout.config.json, then change the value.

lightsout.config.json
{
"standards-checks": {
"file-size": {
"severity": "advisory",
"settings": {
"file": 250,
"tsxFile": 300
}
}
}
}