@trebired/code-discipline 0.1.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +18 -9
  2. package/README.md +142 -146
  3. package/dist/checks/fix-folderization.d.ts +17 -0
  4. package/dist/checks/fix-folderization.d.ts.map +1 -0
  5. package/dist/checks/fix-folderization.js +223 -0
  6. package/dist/checks/fix-folderization.js.map +1 -0
  7. package/dist/checks/index.d.ts +21 -2
  8. package/dist/checks/index.d.ts.map +1 -1
  9. package/dist/checks/index.js +104 -12
  10. package/dist/checks/index.js.map +1 -1
  11. package/dist/checks/rules/folderize-compound-files.d.ts.map +1 -1
  12. package/dist/checks/rules/folderize-compound-files.js +15 -33
  13. package/dist/checks/rules/folderize-compound-files.js.map +1 -1
  14. package/dist/checks/rules/folderize-plan.d.ts +16 -0
  15. package/dist/checks/rules/folderize-plan.d.ts.map +1 -0
  16. package/dist/checks/rules/folderize-plan.js +80 -0
  17. package/dist/checks/rules/folderize-plan.js.map +1 -0
  18. package/dist/checks/rules/max-file-lines.d.ts.map +1 -1
  19. package/dist/checks/rules/max-file-lines.js +2 -1
  20. package/dist/checks/rules/max-file-lines.js.map +1 -1
  21. package/dist/checks/types.d.ts +31 -20
  22. package/dist/checks/types.d.ts.map +1 -1
  23. package/dist/cli/run-cli.d.ts.map +1 -1
  24. package/dist/cli/run-cli.js +40 -16
  25. package/dist/cli/run-cli.js.map +1 -1
  26. package/dist/config/normalize-check-options.d.ts.map +1 -1
  27. package/dist/config/normalize-check-options.js +8 -1
  28. package/dist/config/normalize-check-options.js.map +1 -1
  29. package/dist/config/normalize-rule-options.d.ts +21 -7
  30. package/dist/config/normalize-rule-options.d.ts.map +1 -1
  31. package/dist/config/normalize-rule-options.js +43 -18
  32. package/dist/config/normalize-rule-options.js.map +1 -1
  33. package/dist/config/normalize-sync-imports-options.d.ts.map +1 -1
  34. package/dist/config/normalize-sync-imports-options.js +18 -6
  35. package/dist/config/normalize-sync-imports-options.js.map +1 -1
  36. package/dist/imports/aliases.d.ts +2 -1
  37. package/dist/imports/aliases.d.ts.map +1 -1
  38. package/dist/imports/aliases.js +18 -14
  39. package/dist/imports/aliases.js.map +1 -1
  40. package/dist/imports/check-sync-imports.d.ts +6 -0
  41. package/dist/imports/check-sync-imports.d.ts.map +1 -0
  42. package/dist/imports/check-sync-imports.js +55 -0
  43. package/dist/imports/check-sync-imports.js.map +1 -0
  44. package/dist/imports/module-specifiers.d.ts +20 -0
  45. package/dist/imports/module-specifiers.d.ts.map +1 -0
  46. package/dist/imports/module-specifiers.js +69 -0
  47. package/dist/imports/module-specifiers.js.map +1 -0
  48. package/dist/imports/rewrite.d.ts +3 -2
  49. package/dist/imports/rewrite.d.ts.map +1 -1
  50. package/dist/imports/rewrite.js +27 -90
  51. package/dist/imports/rewrite.js.map +1 -1
  52. package/dist/imports/sync-imports.d.ts.map +1 -1
  53. package/dist/imports/sync-imports.js +50 -5
  54. package/dist/imports/sync-imports.js.map +1 -1
  55. package/dist/imports/types.d.ts +18 -24
  56. package/dist/imports/types.d.ts.map +1 -1
  57. package/dist/index.d.ts +7 -7
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +4 -4
  60. package/dist/index.js.map +1 -1
  61. package/dist/shared/constants.d.ts +4 -6
  62. package/dist/shared/constants.d.ts.map +1 -1
  63. package/dist/shared/constants.js +4 -6
  64. package/dist/shared/constants.js.map +1 -1
  65. package/dist/shared/errors.d.ts +8 -2
  66. package/dist/shared/errors.d.ts.map +1 -1
  67. package/dist/shared/errors.js +13 -1
  68. package/dist/shared/errors.js.map +1 -1
  69. package/dist/shared/logging-types.d.ts +7 -1
  70. package/dist/shared/logging-types.d.ts.map +1 -1
  71. package/dist/shared/logging.d.ts +2 -3
  72. package/dist/shared/logging.d.ts.map +1 -1
  73. package/dist/shared/logging.js +20 -2
  74. package/dist/shared/logging.js.map +1 -1
  75. package/package.json +3 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-folderization.js","sourceRoot":"","sources":["../../src/checks/fix-folderization.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,23 @@
1
- import type { CheckCodeDisciplineOptions, CheckCodeDisciplineResult } from "./types.js";
1
+ import type { CheckCodeDisciplineOptions, CheckCodeDisciplineResult, FixCodeDisciplineOptions, FixCodeDisciplineResult, NormalizedCheckCodeDisciplineOptions } from "./types.js";
2
+ declare function buildNormalizedSyncOptions(options: NormalizedCheckCodeDisciplineOptions): {
3
+ projectRoot: string;
4
+ sourceRoot: string;
5
+ sourceRootRelative: string;
6
+ sourceExtensions: string[];
7
+ excludeDirs: string[];
8
+ tsconfigPath: string;
9
+ enabled: boolean;
10
+ stop: boolean;
11
+ fix: boolean;
12
+ alias: {
13
+ prefix: string;
14
+ strategy: import("../index.js").AliasStrategyFn | "random" | "relative-path-hash" | "relative-path-slug";
15
+ randomLength: number;
16
+ };
17
+ allowRelative: string[] | import("../index.js").AllowRelativeFn;
18
+ logging: import("../index.js").LoggingOptions;
19
+ };
2
20
  declare function checkCodeDiscipline(options: CheckCodeDisciplineOptions): Promise<CheckCodeDisciplineResult>;
3
- export { checkCodeDiscipline };
21
+ declare function fixCodeDiscipline(options: FixCodeDisciplineOptions): Promise<FixCodeDisciplineResult>;
22
+ export { buildNormalizedSyncOptions, checkCodeDiscipline, fixCodeDiscipline };
4
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/checks/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAIxF,iBAAe,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAiB1G;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/checks/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,0BAA0B,EAC1B,yBAAyB,EAEzB,wBAAwB,EACxB,uBAAuB,EACvB,oCAAoC,EACrC,MAAM,YAAY,CAAC;AAEpB,iBAAS,0BAA0B,CAAC,OAAO,EAAE,oCAAoC;;;;;;;;;;;;;;;;;EAmBhF;AAyED,iBAAe,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAY1G;AAED,iBAAe,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAiBpG;AAED,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,22 +1,114 @@
1
1
  import { normalizeCheckCodeDisciplineOptions } from "../config/normalize-check-options.js";
2
+ import { collectSyncImportViolations } from "../imports/check-sync-imports.js";
2
3
  import { scanSourceFiles } from "../imports/scan.js";
4
+ import { resolveLogger } from "../shared/logging.js";
5
+ import { fixFolderization } from "./fix-folderization.js";
3
6
  import { runFolderizeCompoundFilesRule } from "./rules/folderize-compound-files.js";
4
7
  import { runMaxFileLinesRule } from "./rules/max-file-lines.js";
5
- async function checkCodeDiscipline(options) {
6
- const normalized = await normalizeCheckCodeDisciplineOptions(options);
7
- const sourceFiles = await scanSourceFiles(normalized);
8
- const maxFileViolations = await runMaxFileLinesRule(sourceFiles, normalized);
9
- const folderizeViolations = runFolderizeCompoundFilesRule(sourceFiles, normalized);
10
- const violations = [...maxFileViolations, ...folderizeViolations]
11
- .sort((left, right) => left.filePath.localeCompare(right.filePath) || left.rule.localeCompare(right.rule));
12
- const warnings = violations.filter((violation) => violation.severity === "warn").length;
13
- const errors = violations.length - warnings;
8
+ function buildNormalizedSyncOptions(options) {
14
9
  return {
15
- ok: errors === 0,
10
+ projectRoot: options.projectRoot,
11
+ sourceRoot: options.sourceRoot,
12
+ sourceRootRelative: options.sourceRootRelative,
13
+ sourceExtensions: options.sourceExtensions,
14
+ excludeDirs: options.excludeDirs,
15
+ tsconfigPath: options.rules.syncImports.tsconfigPath ?? `${options.projectRoot}/tsconfig.json`,
16
+ enabled: options.rules.syncImports.enabled ?? false,
17
+ stop: options.rules.syncImports.stop ?? true,
18
+ fix: options.rules.syncImports.fix ?? false,
19
+ alias: {
20
+ prefix: options.rules.syncImports.alias?.prefix ?? "#",
21
+ strategy: options.rules.syncImports.alias?.strategy ?? "random",
22
+ randomLength: options.rules.syncImports.alias?.randomLength ?? 12,
23
+ },
24
+ allowRelative: options.rules.syncImports.allowRelative ?? ["./"],
25
+ logging: options.logging,
26
+ };
27
+ }
28
+ function sortViolations(violations) {
29
+ return [...violations].sort((left, right) => left.filePath.localeCompare(right.filePath) || left.rule.localeCompare(right.rule));
30
+ }
31
+ function summarizeViolations(violations) {
32
+ const warnings = violations.filter((violation) => !violation.stop).length;
33
+ const failures = violations.length - warnings;
34
+ return {
35
+ ok: failures === 0,
16
36
  warnings,
17
- errors,
37
+ failures,
38
+ };
39
+ }
40
+ function logViolation(violation, logger) {
41
+ const metadata = {
42
+ rule: violation.rule,
43
+ filePath: violation.filePath,
44
+ suggestedPath: violation.suggestedPath,
45
+ details: violation.details,
46
+ };
47
+ if (violation.stop) {
48
+ logger.error("discipline-violation", violation.message, metadata);
49
+ return;
50
+ }
51
+ logger.warn("discipline-warning", violation.message, metadata);
52
+ }
53
+ function logSummary(label, result, logger) {
54
+ if (result.violations.length > 0) {
55
+ for (const violation of result.violations) {
56
+ logViolation(violation, logger);
57
+ }
58
+ }
59
+ if (result.ok) {
60
+ logger.success(`discipline-${label}-ok`, `${label} completed`, {
61
+ warnings: result.warnings,
62
+ failures: result.failures,
63
+ violations: result.violations.length,
64
+ });
65
+ return;
66
+ }
67
+ logger.error(`discipline-${label}-failed`, `${label} found blocking violations`, {
68
+ warnings: result.warnings,
69
+ failures: result.failures,
70
+ violations: result.violations.length,
71
+ });
72
+ }
73
+ async function collectViolations(options) {
74
+ const sourceFiles = await scanSourceFiles(options);
75
+ const maxFileViolations = await runMaxFileLinesRule(sourceFiles, options);
76
+ const folderizeViolations = runFolderizeCompoundFilesRule(sourceFiles, options);
77
+ const syncImportViolations = await collectSyncImportViolations(sourceFiles, buildNormalizedSyncOptions(options));
78
+ return sortViolations([
79
+ ...maxFileViolations,
80
+ ...folderizeViolations,
81
+ ...syncImportViolations,
82
+ ]);
83
+ }
84
+ async function checkCodeDiscipline(options) {
85
+ const normalized = await normalizeCheckCodeDisciplineOptions(options);
86
+ const logger = resolveLogger(normalized.logging);
87
+ const violations = await collectViolations(normalized);
88
+ const summary = summarizeViolations(violations);
89
+ const result = {
90
+ ...summary,
18
91
  violations,
19
92
  };
93
+ logSummary("check", result, logger);
94
+ return result;
95
+ }
96
+ async function fixCodeDiscipline(options) {
97
+ const normalized = await normalizeCheckCodeDisciplineOptions(options);
98
+ const logger = resolveLogger(normalized.logging);
99
+ const sourceFiles = await scanSourceFiles(normalized);
100
+ const result = await fixFolderization(sourceFiles, normalized, logger);
101
+ if (!result.ok || result.violations.length > 0) {
102
+ logSummary("fix", result, logger);
103
+ }
104
+ else {
105
+ logger.success("discipline-fix-ok", "fix completed", {
106
+ movedFiles: result.moved_files,
107
+ rewrittenFiles: result.rewritten_files,
108
+ rewrittenImports: result.rewritten_imports,
109
+ });
110
+ }
111
+ return result;
20
112
  }
21
- export { checkCodeDiscipline };
113
+ export { buildNormalizedSyncOptions, checkCodeDiscipline, fixCodeDiscipline };
22
114
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/checks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,KAAK,UAAU,mBAAmB,CAAC,OAAmC;IACpE,MAAM,UAAU,GAAG,MAAM,mCAAmC,CAAC,OAAO,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC7E,MAAM,mBAAmB,GAAG,6BAA6B,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEnF,MAAM,UAAU,GAAG,CAAC,GAAG,iBAAiB,EAAE,GAAG,mBAAmB,CAAC;SAC9D,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7G,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACxF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC;IAE5C,OAAO;QACL,EAAE,EAAE,MAAM,KAAK,CAAC;QAChB,QAAQ;QACR,MAAM;QACN,UAAU;KACX,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/checks/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"folderize-compound-files.d.ts","sourceRoot":"","sources":["../../../src/checks/rules/folderize-compound-files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA0ChE,iBAAS,6BAA6B,CACpC,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,uBAAuB,EAAE,CAI3B;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
1
+ {"version":3,"file":"folderize-compound-files.d.ts","sourceRoot":"","sources":["../../../src/checks/rules/folderize-compound-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,iBAAS,6BAA6B,CACpC,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,uBAAuB,EAAE,CAe3B;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -1,37 +1,19 @@
1
- import path from "node:path";
2
- function matchFolderizedFile(file, options) {
3
- if (!options.rules.folderizeCompoundFiles.enabled)
4
- return null;
5
- const basename = path.basename(file.relativeFromSourceRoot, file.extension);
6
- for (const separator of options.rules.folderizeCompoundFiles.separators) {
7
- for (const suffix of options.rules.folderizeCompoundFiles.suffixes) {
8
- const token = `${separator}${suffix}`;
9
- if (!basename.endsWith(token))
10
- continue;
11
- const stem = basename.slice(0, basename.length - token.length);
12
- if (!stem)
13
- continue;
14
- const suggestedPath = path.posix.join(path.posix.dirname(file.relativeFromProjectRoot), stem, `${suffix}${file.extension}`);
15
- return {
16
- rule: "folderize-compound-files",
17
- severity: options.rules.folderizeCompoundFiles.severity,
18
- filePath: file.relativeFromProjectRoot,
19
- message: `file can be grouped under ${suggestedPath}`,
20
- suggestedPath,
21
- details: {
22
- separator,
23
- suffix,
24
- stem,
25
- },
26
- };
27
- }
28
- }
29
- return null;
30
- }
1
+ import { planFolderizeCompoundFiles } from "./folderize-plan.js";
31
2
  function runFolderizeCompoundFilesRule(sourceFiles, options) {
32
- return sourceFiles
33
- .map((file) => matchFolderizedFile(file, options))
34
- .filter(Boolean);
3
+ return planFolderizeCompoundFiles(sourceFiles, options).map((candidate) => ({
4
+ rule: "folderize-compound-files",
5
+ stop: options.rules.folderizeCompoundFiles.stop,
6
+ fix: options.rules.folderizeCompoundFiles.fix,
7
+ filePath: candidate.relativeFromProjectRoot,
8
+ message: `file can be grouped under ${candidate.suggestedPath}`,
9
+ suggestedPath: candidate.suggestedPath,
10
+ details: {
11
+ mode: candidate.mode,
12
+ prefix: candidate.prefix,
13
+ remainder: candidate.remainder,
14
+ separator: candidate.separator,
15
+ },
16
+ }));
35
17
  }
36
18
  export { runFolderizeCompoundFilesRule };
37
19
  //# sourceMappingURL=folderize-compound-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"folderize-compound-files.js","sourceRoot":"","sources":["../../../src/checks/rules/folderize-compound-files.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,SAAS,mBAAmB,CAC1B,IAAuB,EACvB,OAA6C;IAE7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE/D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAE5E,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,UAAU,EAAE,CAAC;QACxE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC;YACnE,MAAM,KAAK,GAAG,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAExC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAChD,IAAI,EACJ,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAC7B,CAAC;YAEF,OAAO;gBACL,IAAI,EAAE,0BAA0B;gBAChC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,QAAQ;gBACvD,QAAQ,EAAE,IAAI,CAAC,uBAAuB;gBACtC,OAAO,EAAE,6BAA6B,aAAa,EAAE;gBACrD,aAAa;gBACb,OAAO,EAAE;oBACP,SAAS;oBACT,MAAM;oBACN,IAAI;iBACL;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,6BAA6B,CACpC,WAAgC,EAChC,OAA6C;IAE7C,OAAO,WAAW;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACjD,MAAM,CAAC,OAAO,CAA8B,CAAC;AAClD,CAAC;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
1
+ {"version":3,"file":"folderize-compound-files.js","sourceRoot":"","sources":["../../../src/checks/rules/folderize-compound-files.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,SAAS,6BAA6B,CACpC,WAAgC,EAChC,OAA6C;IAE7C,OAAO,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1E,IAAI,EAAE,0BAA0B;QAChC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI;QAC/C,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,GAAG;QAC7C,QAAQ,EAAE,SAAS,CAAC,uBAAuB;QAC3C,OAAO,EAAE,6BAA6B,SAAS,CAAC,aAAa,EAAE;QAC/D,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,OAAO,EAAE;YACP,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;SAC/B;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { NormalizedCheckCodeDisciplineOptions } from "../types.js";
2
+ import type { ScannedSourceFile } from "../../imports/types.js";
3
+ type FolderizationCandidate = {
4
+ absolutePath: string;
5
+ relativeFromProjectRoot: string;
6
+ suggestedAbsolutePath: string;
7
+ suggestedPath: string;
8
+ prefix: string;
9
+ remainder: string;
10
+ separator: string;
11
+ mode: "same-directory-group" | "repeated-folder-prefix";
12
+ };
13
+ declare function planFolderizeCompoundFiles(sourceFiles: ScannedSourceFile[], options: NormalizedCheckCodeDisciplineOptions): FolderizationCandidate[];
14
+ export { planFolderizeCompoundFiles };
15
+ export type { FolderizationCandidate };
16
+ //# sourceMappingURL=folderize-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folderize-plan.d.ts","sourceRoot":"","sources":["../../../src/checks/rules/folderize-plan.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,KAAK,sBAAsB,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,sBAAsB,GAAG,wBAAwB,CAAC;CACzD,CAAC;AAoDF,iBAAS,0BAA0B,CACjC,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,sBAAsB,EAAE,CAiD1B;AAED,OAAO,EAAE,0BAA0B,EAAE,CAAC;AACtC,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,80 @@
1
+ import path from "node:path";
2
+ function findPrefixMatch(file, separators) {
3
+ const basename = path.basename(file.relativeFromSourceRoot, file.extension);
4
+ let bestMatch = null;
5
+ for (const separator of separators) {
6
+ const index = basename.indexOf(separator);
7
+ if (index <= 0)
8
+ continue;
9
+ const prefix = basename.slice(0, index);
10
+ const remainder = basename.slice(index + separator.length);
11
+ if (!prefix || !remainder)
12
+ continue;
13
+ if (!bestMatch || index < bestMatch.index) {
14
+ bestMatch = { prefix, remainder, separator, index };
15
+ }
16
+ }
17
+ return bestMatch;
18
+ }
19
+ function buildSuggestedPath(file, prefix, remainder, mode) {
20
+ const sourceDir = path.dirname(file.absolutePath);
21
+ const projectDir = path.posix.dirname(file.relativeFromProjectRoot);
22
+ const targetFileName = `${remainder}${file.extension}`;
23
+ if (mode === "repeated-folder-prefix") {
24
+ return {
25
+ absolutePath: path.join(sourceDir, targetFileName),
26
+ relativeFromProjectRoot: path.posix.join(projectDir, targetFileName),
27
+ };
28
+ }
29
+ return {
30
+ absolutePath: path.join(sourceDir, prefix, targetFileName),
31
+ relativeFromProjectRoot: path.posix.join(projectDir, prefix, targetFileName),
32
+ };
33
+ }
34
+ function planFolderizeCompoundFiles(sourceFiles, options) {
35
+ if (!options.rules.folderizeCompoundFiles.enabled)
36
+ return [];
37
+ const separators = options.rules.folderizeCompoundFiles.separators;
38
+ const byDirectoryAndPrefix = new Map();
39
+ const matchesByPath = new Map();
40
+ for (const file of sourceFiles) {
41
+ const match = findPrefixMatch(file, separators);
42
+ if (!match)
43
+ continue;
44
+ matchesByPath.set(file.absolutePath, match);
45
+ const directoryKey = `${path.posix.dirname(file.relativeFromSourceRoot)}::${match.prefix}`;
46
+ const rows = byDirectoryAndPrefix.get(directoryKey) ?? [];
47
+ rows.push(file);
48
+ byDirectoryAndPrefix.set(directoryKey, rows);
49
+ }
50
+ const candidates = [];
51
+ for (const file of sourceFiles) {
52
+ const match = matchesByPath.get(file.absolutePath);
53
+ if (!match)
54
+ continue;
55
+ const directoryName = path.basename(path.dirname(file.absolutePath));
56
+ const directoryKey = `${path.posix.dirname(file.relativeFromSourceRoot)}::${match.prefix}`;
57
+ const groupedCount = byDirectoryAndPrefix.get(directoryKey)?.length ?? 0;
58
+ const mode = directoryName === match.prefix
59
+ ? "repeated-folder-prefix"
60
+ : groupedCount >= 2
61
+ ? "same-directory-group"
62
+ : null;
63
+ if (!mode)
64
+ continue;
65
+ const suggested = buildSuggestedPath(file, match.prefix, match.remainder, mode);
66
+ candidates.push({
67
+ absolutePath: file.absolutePath,
68
+ relativeFromProjectRoot: file.relativeFromProjectRoot,
69
+ suggestedAbsolutePath: suggested.absolutePath,
70
+ suggestedPath: suggested.relativeFromProjectRoot,
71
+ prefix: match.prefix,
72
+ remainder: match.remainder,
73
+ separator: match.separator,
74
+ mode,
75
+ });
76
+ }
77
+ return candidates.sort((left, right) => left.relativeFromProjectRoot.localeCompare(right.relativeFromProjectRoot));
78
+ }
79
+ export { planFolderizeCompoundFiles };
80
+ //# sourceMappingURL=folderize-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folderize-plan.js","sourceRoot":"","sources":["../../../src/checks/rules/folderize-plan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"max-file-lines.d.ts","sourceRoot":"","sources":["../../../src/checks/rules/max-file-lines.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAOhE,iBAAe,mBAAmB,CAChC,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAwBpC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"max-file-lines.d.ts","sourceRoot":"","sources":["../../../src/checks/rules/max-file-lines.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAOhE,iBAAe,mBAAmB,CAChC,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAyBpC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -15,7 +15,8 @@ async function runMaxFileLinesRule(sourceFiles, options) {
15
15
  continue;
16
16
  violations.push({
17
17
  rule: "max-file-lines",
18
- severity: options.rules.maxFileLines.severity,
18
+ stop: options.rules.maxFileLines.stop,
19
+ fix: options.rules.maxFileLines.fix,
19
20
  filePath: file.relativeFromProjectRoot,
20
21
  message: `file has ${lineCount} lines and exceeds the limit of ${options.rules.maxFileLines.max}`,
21
22
  details: {
@@ -1 +1 @@
1
- {"version":3,"file":"max-file-lines.js","sourceRoot":"","sources":["../../../src/checks/rules/max-file-lines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAKlC,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,WAAgC,EAChC,OAA6C;IAE7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAEnD,MAAM,UAAU,GAA8B,EAAE,CAAC;IAEjD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;YAAE,SAAS;QAE1D,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ;YAC7C,QAAQ,EAAE,IAAI,CAAC,uBAAuB;YACtC,OAAO,EAAE,YAAY,SAAS,mCAAmC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YACjG,OAAO,EAAE;gBACP,SAAS;gBACT,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;aACpC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"max-file-lines.js","sourceRoot":"","sources":["../../../src/checks/rules/max-file-lines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAKlC,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,WAAgC,EAChC,OAA6C;IAE7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAEnD,MAAM,UAAU,GAA8B,EAAE,CAAC;IAEjD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;YAAE,SAAS;QAE1D,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI;YACrC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;YACnC,QAAQ,EAAE,IAAI,CAAC,uBAAuB;YACtC,OAAO,EAAE,YAAY,SAAS,mCAAmC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YACjG,OAAO,EAAE;gBACP,SAAS;gBACT,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;aACpC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,18 +1,15 @@
1
- import type { SourceScanOptions, SyncImportsOptions } from "../imports/types.js";
2
- type CodeDisciplineRuleSeverity = "warn" | "error";
3
- type SyncImportsRuleOptions = Omit<SyncImportsOptions, "projectRoot"> & {
1
+ import type { LoggingOptions } from "../shared/logging-types.js";
2
+ import type { SourceScanOptions, SyncImportsRuleOptions } from "../imports/types.js";
3
+ type RuleControlOptions = {
4
4
  enabled?: boolean;
5
+ stop?: boolean;
6
+ fix?: boolean;
5
7
  };
6
- type MaxFileLinesRuleOptions = {
7
- enabled?: boolean;
8
+ type MaxFileLinesRuleOptions = RuleControlOptions & {
8
9
  max?: number;
9
- severity?: CodeDisciplineRuleSeverity;
10
10
  };
11
- type FolderizeCompoundFilesRuleOptions = {
12
- enabled?: boolean;
11
+ type FolderizeCompoundFilesRuleOptions = RuleControlOptions & {
13
12
  separators?: string[];
14
- suffixes?: string[];
15
- severity?: CodeDisciplineRuleSeverity;
16
13
  };
17
14
  type CodeDisciplineRules = {
18
15
  maxFileLines?: MaxFileLinesRuleOptions;
@@ -24,31 +21,36 @@ type CheckCodeDisciplineOptions = {
24
21
  sourceRoot?: string;
25
22
  sourceExtensions?: string[];
26
23
  excludeDirs?: string[];
24
+ logging?: LoggingOptions;
27
25
  rules?: CodeDisciplineRules;
28
26
  };
27
+ type FixCodeDisciplineOptions = CheckCodeDisciplineOptions;
29
28
  type CodeDisciplineConfig = Omit<CheckCodeDisciplineOptions, "projectRoot">;
30
- type NormalizedMaxFileLinesRule = {
29
+ type NormalizedRuleControl = {
31
30
  enabled: boolean;
31
+ stop: boolean;
32
+ fix: boolean;
33
+ };
34
+ type NormalizedMaxFileLinesRule = NormalizedRuleControl & {
32
35
  max: number;
33
- severity: CodeDisciplineRuleSeverity;
34
36
  };
35
- type NormalizedFolderizeCompoundFilesRule = {
36
- enabled: boolean;
37
+ type NormalizedFolderizeCompoundFilesRule = NormalizedRuleControl & {
37
38
  separators: string[];
38
- suffixes: string[];
39
- severity: CodeDisciplineRuleSeverity;
40
39
  };
41
40
  type NormalizedCheckCodeDisciplineOptions = SourceScanOptions & {
42
41
  sourceRootRelative: string;
42
+ logging: LoggingOptions;
43
43
  rules: {
44
44
  maxFileLines: NormalizedMaxFileLinesRule;
45
45
  folderizeCompoundFiles: NormalizedFolderizeCompoundFilesRule;
46
+ syncImports: SyncImportsRuleOptions;
46
47
  };
47
48
  };
48
- type CodeDisciplineRuleName = "max-file-lines" | "folderize-compound-files";
49
+ type CodeDisciplineRuleName = "max-file-lines" | "folderize-compound-files" | "sync-imports";
49
50
  type CodeDisciplineViolation = {
50
51
  rule: CodeDisciplineRuleName;
51
- severity: CodeDisciplineRuleSeverity;
52
+ stop: boolean;
53
+ fix: boolean;
52
54
  filePath: string;
53
55
  message: string;
54
56
  details: Record<string, unknown>;
@@ -57,8 +59,17 @@ type CodeDisciplineViolation = {
57
59
  type CheckCodeDisciplineResult = {
58
60
  ok: boolean;
59
61
  warnings: number;
60
- errors: number;
62
+ failures: number;
63
+ violations: CodeDisciplineViolation[];
64
+ };
65
+ type FixCodeDisciplineResult = {
66
+ ok: boolean;
67
+ moved_files: number;
68
+ rewritten_files: number;
69
+ rewritten_imports: number;
70
+ warnings: number;
71
+ failures: number;
61
72
  violations: CodeDisciplineViolation[];
62
73
  };
63
- export type { CheckCodeDisciplineOptions, CheckCodeDisciplineResult, CodeDisciplineConfig, CodeDisciplineRuleName, CodeDisciplineRuleSeverity, CodeDisciplineRules, CodeDisciplineViolation, FolderizeCompoundFilesRuleOptions, MaxFileLinesRuleOptions, NormalizedCheckCodeDisciplineOptions, NormalizedFolderizeCompoundFilesRule, NormalizedMaxFileLinesRule, SyncImportsRuleOptions, };
74
+ export type { CheckCodeDisciplineOptions, CheckCodeDisciplineResult, CodeDisciplineConfig, CodeDisciplineRuleName, CodeDisciplineRules, CodeDisciplineViolation, FixCodeDisciplineOptions, FixCodeDisciplineResult, FolderizeCompoundFilesRuleOptions, MaxFileLinesRuleOptions, NormalizedCheckCodeDisciplineOptions, NormalizedFolderizeCompoundFilesRule, NormalizedMaxFileLinesRule, NormalizedRuleControl, RuleControlOptions, };
64
75
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/checks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,KAAK,0BAA0B,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD,KAAK,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,GAAG;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CACvC,CAAC;AAEF,KAAK,iCAAiC,GAAG;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CACvC,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC,sBAAsB,CAAC,EAAE,iCAAiC,CAAC;IAC3D,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,KAAK,oBAAoB,GAAG,IAAI,CAAC,0BAA0B,EAAE,aAAa,CAAC,CAAC;AAE5E,KAAK,0BAA0B,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,0BAA0B,CAAC;CACtC,CAAC;AAEF,KAAK,oCAAoC,GAAG;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,0BAA0B,CAAC;CACtC,CAAC;AAEF,KAAK,oCAAoC,GAAG,iBAAiB,GAAG;IAC9D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE;QACL,YAAY,EAAE,0BAA0B,CAAC;QACzC,sBAAsB,EAAE,oCAAoC,CAAC;KAC9D,CAAC;CACH,CAAC;AAEF,KAAK,sBAAsB,GAAG,gBAAgB,GAAG,0BAA0B,CAAC;AAE5E,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,QAAQ,EAAE,0BAA0B,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,uBAAuB,EAAE,CAAC;CACvC,CAAC;AAEF,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,EACvB,iCAAiC,EACjC,uBAAuB,EACvB,oCAAoC,EACpC,oCAAoC,EACpC,0BAA0B,EAC1B,sBAAsB,GACvB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/checks/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.ts"],"names":[],"mappings":";AAUA,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAyDF,iBAAe,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAuDxF;AAQD,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"run-cli.d.ts","sourceRoot":"","sources":["../../src/cli/run-cli.ts"],"names":[],"mappings":";AAUA,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAyEF,iBAAe,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAmExF;AAQD,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { pathToFileURL } from "node:url";
3
- import { checkCodeDiscipline } from "../checks/index.js";
3
+ import { checkCodeDiscipline, fixCodeDiscipline } from "../checks/index.js";
4
4
  import { loadCodeDisciplineConfig } from "../config/index.js";
5
5
  import { syncImports } from "../imports/sync-imports.js";
6
6
  function renderHelp() {
@@ -8,8 +8,9 @@ function renderHelp() {
8
8
  "Usage: code-discipline <command> [--config <path>]",
9
9
  "",
10
10
  "Commands:",
11
- " check run configured discipline checks",
12
- " sync sync tsconfig aliases and rewrite imports",
11
+ " check run read-only discipline validation",
12
+ " sync sync tsconfig aliases and import paths when syncImports.fix is true",
13
+ " fix apply folderization moves when folderizeCompoundFiles.fix is true",
13
14
  "",
14
15
  ].join("\n");
15
16
  }
@@ -32,21 +33,35 @@ function parseArgs(args) {
32
33
  return { configPath, extra };
33
34
  }
34
35
  function buildSyncImportsOptions(projectRoot, config) {
35
- const { enabled: _enabled, ...syncRule } = config.rules?.syncImports ?? {};
36
+ const syncRule = config.rules?.syncImports ?? {};
36
37
  return {
37
38
  projectRoot,
38
39
  sourceRoot: syncRule.sourceRoot ?? config.sourceRoot,
39
40
  tsconfigPath: syncRule.tsconfigPath,
40
41
  sourceExtensions: syncRule.sourceExtensions ?? config.sourceExtensions,
41
42
  excludeDirs: syncRule.excludeDirs ?? config.excludeDirs,
43
+ enabled: syncRule.enabled,
44
+ stop: syncRule.stop,
45
+ fix: syncRule.fix,
42
46
  alias: syncRule.alias,
43
- imports: syncRule.imports,
44
- logging: syncRule.logging,
47
+ allowRelative: syncRule.allowRelative,
48
+ logging: config.logging ?? syncRule.logging,
49
+ };
50
+ }
51
+ function buildCheckOptions(projectRoot, config) {
52
+ return {
53
+ projectRoot,
54
+ sourceRoot: config.sourceRoot,
55
+ sourceExtensions: config.sourceExtensions,
56
+ excludeDirs: config.excludeDirs,
57
+ logging: config.logging,
58
+ rules: config.rules,
45
59
  };
46
60
  }
47
61
  function formatViolation(violation) {
62
+ const label = violation.stop ? "FAIL" : "WARN";
48
63
  const suggested = violation.suggestedPath ? ` suggested=${violation.suggestedPath}` : "";
49
- return `${violation.severity.toUpperCase()} ${violation.rule} ${violation.filePath} ${violation.message}${suggested}`;
64
+ return `${label} ${violation.rule} ${violation.filePath} ${violation.message}${suggested}`;
50
65
  }
51
66
  async function runCli(argv, options = {}) {
52
67
  const cwd = options.cwd ?? process.cwd();
@@ -64,13 +79,7 @@ async function runCli(argv, options = {}) {
64
79
  }
65
80
  const { config } = await loadCodeDisciplineConfig(cwd, parsed.configPath);
66
81
  if (command === "check") {
67
- const result = await checkCodeDiscipline({
68
- projectRoot: cwd,
69
- sourceRoot: config.sourceRoot,
70
- sourceExtensions: config.sourceExtensions,
71
- excludeDirs: config.excludeDirs,
72
- rules: config.rules,
73
- });
82
+ const result = await checkCodeDiscipline(buildCheckOptions(cwd, config));
74
83
  if (result.violations.length === 0) {
75
84
  stdout("No discipline violations found.\n");
76
85
  return { exitCode: 0 };
@@ -78,13 +87,28 @@ async function runCli(argv, options = {}) {
78
87
  for (const violation of result.violations) {
79
88
  stdout(`${formatViolation(violation)}\n`);
80
89
  }
81
- stdout(`Summary: ${result.errors} errors, ${result.warnings} warnings.\n`);
90
+ stdout(`Summary: ${result.failures} failures, ${result.warnings} warnings.\n`);
82
91
  return { exitCode: result.ok ? 0 : 1 };
83
92
  }
84
93
  if (command === "sync") {
85
94
  const result = await syncImports(buildSyncImportsOptions(cwd, config));
86
95
  stdout(`${JSON.stringify(result)}\n`);
87
- return { exitCode: 0 };
96
+ return { exitCode: result.ok ? 0 : 1 };
97
+ }
98
+ if (command === "fix") {
99
+ const result = await fixCodeDiscipline(buildCheckOptions(cwd, config));
100
+ if (result.violations.length > 0) {
101
+ for (const violation of result.violations) {
102
+ stdout(`${formatViolation(violation)}\n`);
103
+ }
104
+ }
105
+ stdout(`${JSON.stringify({
106
+ ok: result.ok,
107
+ moved_files: result.moved_files,
108
+ rewritten_files: result.rewritten_files,
109
+ rewritten_imports: result.rewritten_imports,
110
+ })}\n`);
111
+ return { exitCode: result.ok ? 0 : 1 };
88
112
  }
89
113
  stderr(`Unknown command: ${command}\n`);
90
114
  stderr(renderHelp());