@nielspeter/eess-ts 0.2.1 → 0.4.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.
- package/README.md +61 -35
- package/dist/builders/call-rule-builder.d.ts +66 -26
- package/dist/builders/call-rule-builder.d.ts.map +1 -1
- package/dist/builders/call-rule-builder.js +73 -31
- package/dist/builders/call-rule-builder.js.map +1 -1
- package/dist/builders/class-rule-builder.d.ts +125 -26
- package/dist/builders/class-rule-builder.d.ts.map +1 -1
- package/dist/builders/class-rule-builder.js +134 -30
- package/dist/builders/class-rule-builder.js.map +1 -1
- package/dist/builders/correspondence-builder.d.ts +287 -0
- package/dist/builders/correspondence-builder.d.ts.map +1 -0
- package/dist/builders/correspondence-builder.js +393 -0
- package/dist/builders/correspondence-builder.js.map +1 -0
- package/dist/builders/correspondence-findings.d.ts +104 -0
- package/dist/builders/correspondence-findings.d.ts.map +1 -0
- package/dist/builders/correspondence-findings.js +301 -0
- package/dist/builders/correspondence-findings.js.map +1 -0
- package/dist/builders/cross-layer-builder.d.ts +99 -16
- package/dist/builders/cross-layer-builder.d.ts.map +1 -1
- package/dist/builders/cross-layer-builder.js +181 -35
- package/dist/builders/cross-layer-builder.js.map +1 -1
- package/dist/builders/function-rule-builder.d.ts +144 -25
- package/dist/builders/function-rule-builder.d.ts.map +1 -1
- package/dist/builders/function-rule-builder.js +173 -26
- package/dist/builders/function-rule-builder.js.map +1 -1
- package/dist/builders/jsx-rule-builder.d.ts +70 -14
- package/dist/builders/jsx-rule-builder.d.ts.map +1 -1
- package/dist/builders/jsx-rule-builder.js +73 -14
- package/dist/builders/jsx-rule-builder.js.map +1 -1
- package/dist/builders/module-rule-builder.d.ts +2 -2
- package/dist/builders/module-rule-builder.d.ts.map +1 -1
- package/dist/builders/module-rule-builder.js +12 -3
- package/dist/builders/module-rule-builder.js.map +1 -1
- package/dist/builders/scoped-function-rule-builder.d.ts +11 -0
- package/dist/builders/scoped-function-rule-builder.d.ts.map +1 -1
- package/dist/builders/scoped-function-rule-builder.js +12 -0
- package/dist/builders/scoped-function-rule-builder.js.map +1 -1
- package/dist/builders/slice-discovery-message.d.ts +36 -0
- package/dist/builders/slice-discovery-message.d.ts.map +1 -0
- package/dist/builders/slice-discovery-message.js +181 -0
- package/dist/builders/slice-discovery-message.js.map +1 -0
- package/dist/builders/slice-rule-builder.d.ts +151 -12
- package/dist/builders/slice-rule-builder.d.ts.map +1 -1
- package/dist/builders/slice-rule-builder.js +242 -35
- package/dist/builders/slice-rule-builder.js.map +1 -1
- package/dist/builders/type-rule-builder.d.ts +95 -24
- package/dist/builders/type-rule-builder.d.ts.map +1 -1
- package/dist/builders/type-rule-builder.js +105 -29
- package/dist/builders/type-rule-builder.js.map +1 -1
- package/dist/{helpers → builders}/within.d.ts +2 -2
- package/dist/builders/within.d.ts.map +1 -0
- package/dist/{helpers → builders}/within.js +1 -1
- package/dist/builders/within.js.map +1 -0
- package/dist/cli/commands/baseline.d.ts +3 -2
- package/dist/cli/commands/baseline.d.ts.map +1 -1
- package/dist/cli/commands/baseline.js +68 -6
- package/dist/cli/commands/baseline.js.map +1 -1
- package/dist/cli/commands/check.d.ts +7 -2
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +241 -45
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +29 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +224 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +2 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +19 -10
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/init.d.ts +9 -3
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +162 -137
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/import-rule-module.d.ts +29 -0
- package/dist/cli/import-rule-module.d.ts.map +1 -0
- package/dist/cli/import-rule-module.js +60 -0
- package/dist/cli/import-rule-module.js.map +1 -0
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +98 -33
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/load-rules.d.ts +6 -11
- package/dist/cli/load-rules.d.ts.map +1 -1
- package/dist/cli/load-rules.js +21 -29
- package/dist/cli/load-rules.js.map +1 -1
- package/dist/cli/resolve-config.d.ts.map +1 -1
- package/dist/cli/resolve-config.js +24 -24
- package/dist/cli/resolve-config.js.map +1 -1
- package/dist/cli/rule-file-findings.d.ts +178 -0
- package/dist/cli/rule-file-findings.d.ts.map +1 -0
- package/dist/cli/rule-file-findings.js +293 -0
- package/dist/cli/rule-file-findings.js.map +1 -0
- package/dist/cli/watch.d.ts +20 -7
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +39 -14
- package/dist/cli/watch.js.map +1 -1
- package/dist/conditions/body-analysis-function.d.ts.map +1 -1
- package/dist/conditions/body-analysis-function.js +16 -7
- package/dist/conditions/body-analysis-function.js.map +1 -1
- package/dist/conditions/body-analysis-module.d.ts.map +1 -1
- package/dist/conditions/body-analysis-module.js +14 -9
- package/dist/conditions/body-analysis-module.js.map +1 -1
- package/dist/conditions/body-analysis.d.ts.map +1 -1
- package/dist/conditions/body-analysis.js +16 -7
- package/dist/conditions/body-analysis.js.map +1 -1
- package/dist/conditions/call.d.ts.map +1 -1
- package/dist/conditions/call.js +38 -17
- package/dist/conditions/call.js.map +1 -1
- package/dist/conditions/catch-analysis.d.ts +2 -1
- package/dist/conditions/catch-analysis.d.ts.map +1 -1
- package/dist/conditions/catch-analysis.js.map +1 -1
- package/dist/conditions/cross-layer.d.ts +2 -10
- package/dist/conditions/cross-layer.d.ts.map +1 -1
- package/dist/conditions/cross-layer.js +227 -23
- package/dist/conditions/cross-layer.js.map +1 -1
- package/dist/conditions/dependency.d.ts +35 -6
- package/dist/conditions/dependency.d.ts.map +1 -1
- package/dist/conditions/dependency.js +299 -45
- package/dist/conditions/dependency.js.map +1 -1
- package/dist/conditions/exports.d.ts.map +1 -1
- package/dist/conditions/exports.js +10 -0
- package/dist/conditions/exports.js.map +1 -1
- package/dist/conditions/function.d.ts.map +1 -1
- package/dist/conditions/function.js +19 -5
- package/dist/conditions/function.js.map +1 -1
- package/dist/conditions/helpers.d.ts +2 -1
- package/dist/conditions/helpers.d.ts.map +1 -1
- package/dist/conditions/helpers.js +4 -1
- package/dist/conditions/helpers.js.map +1 -1
- package/dist/conditions/jsx.d.ts.map +1 -1
- package/dist/conditions/jsx.js +7 -2
- package/dist/conditions/jsx.js.map +1 -1
- package/dist/conditions/match-identity.d.ts +43 -0
- package/dist/conditions/match-identity.d.ts.map +1 -0
- package/dist/conditions/match-identity.js +43 -0
- package/dist/conditions/match-identity.js.map +1 -0
- package/dist/conditions/members.d.ts.map +1 -1
- package/dist/conditions/members.js +17 -4
- package/dist/conditions/members.js.map +1 -1
- package/dist/conditions/reverse-dependency.d.ts +18 -5
- package/dist/conditions/reverse-dependency.d.ts.map +1 -1
- package/dist/conditions/reverse-dependency.js +109 -92
- package/dist/conditions/reverse-dependency.js.map +1 -1
- package/dist/conditions/slice.d.ts +86 -2
- package/dist/conditions/slice.d.ts.map +1 -1
- package/dist/conditions/slice.js +234 -53
- package/dist/conditions/slice.js.map +1 -1
- package/dist/conditions/structural.d.ts.map +1 -1
- package/dist/conditions/structural.js +16 -4
- package/dist/conditions/structural.js.map +1 -1
- package/dist/core/check-all.d.ts +19 -0
- package/dist/core/check-all.d.ts.map +1 -0
- package/dist/core/check-all.js +96 -0
- package/dist/core/check-all.js.map +1 -0
- package/dist/core/combinators.d.ts +48 -0
- package/dist/core/combinators.d.ts.map +1 -0
- package/dist/core/combinators.js +56 -0
- package/dist/core/combinators.js.map +1 -0
- package/dist/core/descendant-cache.d.ts +36 -0
- package/dist/core/descendant-cache.d.ts.map +1 -0
- package/dist/core/descendant-cache.js +119 -0
- package/dist/core/descendant-cache.js.map +1 -0
- package/dist/core/diagnose.d.ts +234 -0
- package/dist/core/diagnose.d.ts.map +1 -0
- package/dist/core/diagnose.js +382 -0
- package/dist/core/diagnose.js.map +1 -0
- package/dist/core/disk-set.d.ts +48 -0
- package/dist/core/disk-set.d.ts.map +1 -0
- package/dist/core/disk-set.js +218 -0
- package/dist/core/disk-set.js.map +1 -0
- package/dist/core/element-cache.d.ts +75 -0
- package/dist/core/element-cache.d.ts.map +1 -0
- package/dist/core/element-cache.js +32 -0
- package/dist/core/element-cache.js.map +1 -0
- package/dist/core/empty-project-advice.d.ts +75 -0
- package/dist/core/empty-project-advice.d.ts.map +1 -0
- package/dist/core/empty-project-advice.js +61 -0
- package/dist/core/empty-project-advice.js.map +1 -0
- package/dist/core/exclusion-comments.d.ts +54 -0
- package/dist/core/exclusion-comments.d.ts.map +1 -0
- package/dist/core/exclusion-comments.js +310 -0
- package/dist/core/exclusion-comments.js.map +1 -0
- package/dist/core/execute-rule.d.ts +150 -0
- package/dist/core/execute-rule.d.ts.map +1 -0
- package/dist/core/execute-rule.js +580 -0
- package/dist/core/execute-rule.js.map +1 -0
- package/dist/core/glob-diagnosis.d.ts +78 -0
- package/dist/core/glob-diagnosis.d.ts.map +1 -0
- package/dist/core/glob-diagnosis.js +134 -0
- package/dist/core/glob-diagnosis.js.map +1 -0
- package/dist/core/glob-evaluator.d.ts +48 -0
- package/dist/core/glob-evaluator.d.ts.map +1 -0
- package/dist/core/glob-evaluator.js +89 -0
- package/dist/core/glob-evaluator.js.map +1 -0
- package/dist/core/import-candidates.d.ts +60 -0
- package/dist/core/import-candidates.d.ts.map +1 -0
- package/dist/core/import-candidates.js +93 -0
- package/dist/core/import-candidates.js.map +1 -0
- package/dist/core/import-options.d.ts +55 -2
- package/dist/core/import-options.d.ts.map +1 -1
- package/dist/core/import-options.js +64 -0
- package/dist/core/import-options.js.map +1 -1
- package/dist/core/line-index.d.ts +3 -0
- package/dist/core/line-index.d.ts.map +1 -0
- package/dist/core/line-index.js +229 -0
- package/dist/core/line-index.js.map +1 -0
- package/dist/core/metric-violation.d.ts +86 -0
- package/dist/core/metric-violation.d.ts.map +1 -0
- package/dist/core/metric-violation.js +132 -0
- package/dist/core/metric-violation.js.map +1 -0
- package/dist/core/module-edges.d.ts +361 -0
- package/dist/core/module-edges.d.ts.map +1 -0
- package/dist/core/module-edges.js +592 -0
- package/dist/core/module-edges.js.map +1 -0
- package/dist/core/object-literal-functions.d.ts +42 -0
- package/dist/core/object-literal-functions.d.ts.map +1 -0
- package/dist/core/object-literal-functions.js +75 -0
- package/dist/core/object-literal-functions.js.map +1 -0
- package/dist/core/orphan-exclusions.d.ts +44 -0
- package/dist/core/orphan-exclusions.d.ts.map +1 -0
- package/dist/core/orphan-exclusions.js +214 -0
- package/dist/core/orphan-exclusions.js.map +1 -0
- package/dist/core/pair-condition.d.ts +32 -3
- package/dist/core/pair-condition.d.ts.map +1 -1
- package/dist/core/path-universe.d.ts +54 -0
- package/dist/core/path-universe.d.ts.map +1 -0
- package/dist/core/path-universe.js +65 -0
- package/dist/core/path-universe.js.map +1 -0
- package/dist/core/per-root-compiler-options.d.ts +20 -0
- package/dist/core/per-root-compiler-options.d.ts.map +1 -0
- package/dist/core/per-root-compiler-options.js +57 -0
- package/dist/core/per-root-compiler-options.js.map +1 -0
- package/dist/core/project-relative.d.ts +98 -0
- package/dist/core/project-relative.d.ts.map +1 -0
- package/dist/core/project-relative.js +185 -0
- package/dist/core/project-relative.js.map +1 -0
- package/dist/core/project.d.ts +7 -1
- package/dist/core/project.d.ts.map +1 -1
- package/dist/core/project.js +24 -0
- package/dist/core/project.js.map +1 -1
- package/dist/core/rule-builder.d.ts +282 -0
- package/dist/core/rule-builder.d.ts.map +1 -0
- package/dist/core/rule-builder.js +445 -0
- package/dist/core/rule-builder.js.map +1 -0
- package/dist/core/rule-declaration.d.ts +32 -0
- package/dist/core/rule-declaration.d.ts.map +1 -0
- package/dist/core/rule-declaration.js +126 -0
- package/dist/core/rule-declaration.js.map +1 -0
- package/dist/core/terminal-builder.d.ts +625 -0
- package/dist/core/terminal-builder.d.ts.map +1 -0
- package/dist/core/terminal-builder.js +787 -0
- package/dist/core/terminal-builder.js.map +1 -0
- package/dist/core/terminal-execution.d.ts +23 -0
- package/dist/core/terminal-execution.d.ts.map +1 -0
- package/dist/core/terminal-execution.js +71 -0
- package/dist/core/terminal-execution.js.map +1 -0
- package/dist/core/vacuity-diagnosis.d.ts +103 -0
- package/dist/core/vacuity-diagnosis.d.ts.map +1 -0
- package/dist/core/vacuity-diagnosis.js +415 -0
- package/dist/core/vacuity-diagnosis.js.map +1 -0
- package/dist/core/violation.d.ts +16 -11
- package/dist/core/violation.d.ts.map +1 -1
- package/dist/core/violation.js +33 -13
- package/dist/core/violation.js.map +1 -1
- package/dist/graphql/index.js +1 -1
- package/dist/graphql/index.js.map +1 -1
- package/dist/graphql/resolver-rule-builder.d.ts +98 -23
- package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
- package/dist/graphql/resolver-rule-builder.js +151 -21
- package/dist/graphql/resolver-rule-builder.js.map +1 -1
- package/dist/graphql/schema-loader.d.ts +21 -0
- package/dist/graphql/schema-loader.d.ts.map +1 -1
- package/dist/graphql/schema-loader.js +81 -12
- package/dist/graphql/schema-loader.js.map +1 -1
- package/dist/graphql/schema-rule-builder.d.ts +57 -20
- package/dist/graphql/schema-rule-builder.d.ts.map +1 -1
- package/dist/graphql/schema-rule-builder.js +101 -25
- package/dist/graphql/schema-rule-builder.js.map +1 -1
- package/dist/helpers/baseline-diagnostics.d.ts +45 -0
- package/dist/helpers/baseline-diagnostics.d.ts.map +1 -0
- package/dist/helpers/baseline-diagnostics.js +168 -0
- package/dist/helpers/baseline-diagnostics.js.map +1 -0
- package/dist/helpers/baseline-generator.d.ts +19 -0
- package/dist/helpers/baseline-generator.d.ts.map +1 -0
- package/dist/helpers/baseline-generator.js +18 -0
- package/dist/helpers/baseline-generator.js.map +1 -0
- package/dist/helpers/baseline.d.ts +336 -0
- package/dist/helpers/baseline.d.ts.map +1 -0
- package/dist/helpers/baseline.js +664 -0
- package/dist/helpers/baseline.js.map +1 -0
- package/dist/helpers/body-traversal.d.ts +27 -2
- package/dist/helpers/body-traversal.d.ts.map +1 -1
- package/dist/helpers/body-traversal.js +122 -16
- package/dist/helpers/body-traversal.js.map +1 -1
- package/dist/helpers/callback-extractor.d.ts.map +1 -1
- package/dist/helpers/callback-extractor.js +48 -47
- package/dist/helpers/callback-extractor.js.map +1 -1
- package/dist/helpers/complexity.d.ts +13 -5
- package/dist/helpers/complexity.d.ts.map +1 -1
- package/dist/helpers/complexity.js +15 -6
- package/dist/helpers/complexity.js.map +1 -1
- package/dist/helpers/diff-aware.d.ts +44 -0
- package/dist/helpers/diff-aware.d.ts.map +1 -0
- package/dist/helpers/diff-aware.js +84 -0
- package/dist/helpers/diff-aware.js.map +1 -0
- package/dist/helpers/matchers.d.ts +68 -7
- package/dist/helpers/matchers.d.ts.map +1 -1
- package/dist/helpers/matchers.js +114 -20
- package/dist/helpers/matchers.js.map +1 -1
- package/dist/helpers/slice-graph.d.ts +100 -8
- package/dist/helpers/slice-graph.d.ts.map +1 -1
- package/dist/helpers/slice-graph.js +126 -34
- package/dist/helpers/slice-graph.js.map +1 -1
- package/dist/helpers/tarjan.d.ts +0 -14
- package/dist/helpers/tarjan.d.ts.map +1 -1
- package/dist/helpers/tarjan.js +29 -16
- package/dist/helpers/tarjan.js.map +1 -1
- package/dist/index.d.ts +56 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -13
- package/dist/index.js.map +1 -1
- package/dist/models/arch-call.d.ts +3 -2
- package/dist/models/arch-call.d.ts.map +1 -1
- package/dist/models/arch-call.js.map +1 -1
- package/dist/models/arch-function.d.ts +28 -6
- package/dist/models/arch-function.d.ts.map +1 -1
- package/dist/models/arch-function.js +106 -3
- package/dist/models/arch-function.js.map +1 -1
- package/dist/models/arch-jsx-element.js +2 -2
- package/dist/models/arch-jsx-element.js.map +1 -1
- package/dist/models/slice.d.ts +33 -9
- package/dist/models/slice.d.ts.map +1 -1
- package/dist/models/slice.js +129 -19
- package/dist/models/slice.js.map +1 -1
- package/dist/predicates/call.d.ts.map +1 -1
- package/dist/predicates/call.js +5 -0
- package/dist/predicates/call.js.map +1 -1
- package/dist/predicates/identity.d.ts +21 -0
- package/dist/predicates/identity.d.ts.map +1 -1
- package/dist/predicates/identity.js +75 -3
- package/dist/predicates/identity.js.map +1 -1
- package/dist/predicates/index.d.ts +1 -1
- package/dist/predicates/index.d.ts.map +1 -1
- package/dist/predicates/index.js +1 -1
- package/dist/predicates/index.js.map +1 -1
- package/dist/predicates/metrics.d.ts +4 -2
- package/dist/predicates/metrics.d.ts.map +1 -1
- package/dist/predicates/metrics.js +4 -2
- package/dist/predicates/metrics.js.map +1 -1
- package/dist/predicates/module.d.ts +4 -12
- package/dist/predicates/module.d.ts.map +1 -1
- package/dist/predicates/module.js +57 -37
- package/dist/predicates/module.js.map +1 -1
- package/dist/presets/agent-guardrails.d.ts +22 -15
- package/dist/presets/agent-guardrails.d.ts.map +1 -1
- package/dist/presets/agent-guardrails.js +124 -19
- package/dist/presets/agent-guardrails.js.map +1 -1
- package/dist/presets/boundaries.d.ts +45 -2
- package/dist/presets/boundaries.d.ts.map +1 -1
- package/dist/presets/boundaries.js +132 -23
- package/dist/presets/boundaries.js.map +1 -1
- package/dist/presets/data-layer.d.ts +22 -2
- package/dist/presets/data-layer.d.ts.map +1 -1
- package/dist/presets/data-layer.js +58 -16
- package/dist/presets/data-layer.js.map +1 -1
- package/dist/presets/index.d.ts +7 -5
- package/dist/presets/index.d.ts.map +1 -1
- package/dist/presets/index.js +9 -3
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/layered.d.ts +46 -2
- package/dist/presets/layered.d.ts.map +1 -1
- package/dist/presets/layered.js +66 -29
- package/dist/presets/layered.js.map +1 -1
- package/dist/presets/recommended.d.ts +80 -9
- package/dist/presets/recommended.d.ts.map +1 -1
- package/dist/presets/recommended.js +25 -23
- package/dist/presets/recommended.js.map +1 -1
- package/dist/presets/shared.d.ts +270 -2
- package/dist/presets/shared.d.ts.map +1 -1
- package/dist/presets/shared.js +338 -4
- package/dist/presets/shared.js.map +1 -1
- package/dist/rules/code-quality.d.ts.map +1 -1
- package/dist/rules/code-quality.js +15 -6
- package/dist/rules/code-quality.js.map +1 -1
- package/dist/rules/hygiene.d.ts +1 -1
- package/dist/rules/hygiene.js +1 -1
- package/dist/rules/metrics-function.d.ts +2 -1
- package/dist/rules/metrics-function.d.ts.map +1 -1
- package/dist/rules/metrics-function.js +33 -6
- package/dist/rules/metrics-function.js.map +1 -1
- package/dist/rules/metrics.d.ts +2 -1
- package/dist/rules/metrics.d.ts.map +1 -1
- package/dist/rules/metrics.js +39 -9
- package/dist/rules/metrics.js.map +1 -1
- package/dist/smells/duplicate-bodies.d.ts +58 -5
- package/dist/smells/duplicate-bodies.d.ts.map +1 -1
- package/dist/smells/duplicate-bodies.js +137 -56
- package/dist/smells/duplicate-bodies.js.map +1 -1
- package/dist/smells/fingerprint.d.ts +8 -1
- package/dist/smells/fingerprint.d.ts.map +1 -1
- package/dist/smells/fingerprint.js +21 -3
- package/dist/smells/fingerprint.js.map +1 -1
- package/dist/smells/inconsistent-siblings.d.ts +128 -7
- package/dist/smells/inconsistent-siblings.d.ts.map +1 -1
- package/dist/smells/inconsistent-siblings.js +288 -86
- package/dist/smells/inconsistent-siblings.js.map +1 -1
- package/dist/smells/sibling-files.d.ts +47 -0
- package/dist/smells/sibling-files.d.ts.map +1 -0
- package/dist/smells/sibling-files.js +104 -0
- package/dist/smells/sibling-files.js.map +1 -0
- package/dist/smells/similar-pairs.d.ts +27 -0
- package/dist/smells/similar-pairs.d.ts.map +1 -0
- package/dist/smells/similar-pairs.js +52 -0
- package/dist/smells/similar-pairs.js.map +1 -0
- package/dist/smells/smell-builder.d.ts +57 -12
- package/dist/smells/smell-builder.d.ts.map +1 -1
- package/dist/smells/smell-builder.js +111 -14
- package/dist/smells/smell-builder.js.map +1 -1
- package/dist/tsconfig/index.d.ts +19 -0
- package/dist/tsconfig/index.d.ts.map +1 -0
- package/dist/tsconfig/index.js +20 -0
- package/dist/tsconfig/index.js.map +1 -0
- package/dist/tsconfig/tsconfig-builder.d.ts +42 -9
- package/dist/tsconfig/tsconfig-builder.d.ts.map +1 -1
- package/dist/tsconfig/tsconfig-builder.js +64 -16
- package/dist/tsconfig/tsconfig-builder.js.map +1 -1
- package/package.json +3 -2
- package/dist/core/module-dependencies.d.ts +0 -28
- package/dist/core/module-dependencies.d.ts.map +0 -1
- package/dist/core/module-dependencies.js +0 -35
- package/dist/core/module-dependencies.js.map +0 -1
- package/dist/helpers/within.d.ts.map +0 -1
- package/dist/helpers/within.js.map +0 -1
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { writeStderr } from '@nielspeter/eess';
|
|
4
|
+
/**
|
|
5
|
+
* A diff filter that restricts violation reporting to files
|
|
6
|
+
* changed since a base branch.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: Rules evaluate the FULL project (needed for cross-file
|
|
9
|
+
* rules like cycles and layer ordering). Only the REPORTING is filtered
|
|
10
|
+
* to changed files. This ensures correctness — a new file that creates
|
|
11
|
+
* a cycle is detected even though the cycle involves unchanged files.
|
|
12
|
+
*/
|
|
13
|
+
export class DiffFilter {
|
|
14
|
+
changedFiles;
|
|
15
|
+
/**
|
|
16
|
+
* The branch this filter diffed against, for the suppression notice plan
|
|
17
|
+
* 0071 added. Defaulted rather than required: the constructor is public API
|
|
18
|
+
* (`src/index.ts` exports `DiffFilter`), so an existing
|
|
19
|
+
* `new DiffFilter(files)` must keep compiling.
|
|
20
|
+
*/
|
|
21
|
+
baseBranch;
|
|
22
|
+
constructor(changedFiles, baseBranch = 'the base branch') {
|
|
23
|
+
this.changedFiles = changedFiles;
|
|
24
|
+
this.baseBranch = baseBranch;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Filter violations to only those in changed files.
|
|
28
|
+
* If changedFiles is null (git error), returns all violations unfiltered.
|
|
29
|
+
*/
|
|
30
|
+
filterToChanged(violations) {
|
|
31
|
+
const files = this.changedFiles;
|
|
32
|
+
if (files === null)
|
|
33
|
+
return violations;
|
|
34
|
+
// Config-level meta-findings (empty selector/discovery) have no changed
|
|
35
|
+
// file to attribute to — never filter them out (ADR-008; plan 0067).
|
|
36
|
+
return violations.filter((v) => v.bypassFilters === true || files.has(v.file));
|
|
37
|
+
}
|
|
38
|
+
/** Number of changed files detected, or -1 if diff unavailable */
|
|
39
|
+
get size() {
|
|
40
|
+
return this.changedFiles === null ? -1 : this.changedFiles.size;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a diff filter from git, comparing HEAD against a base branch.
|
|
45
|
+
*
|
|
46
|
+
* Uses `git diff --name-only <base>...HEAD` to find changed files.
|
|
47
|
+
* Resolves relative paths to absolute paths for matching against
|
|
48
|
+
* violation file paths (which are always absolute).
|
|
49
|
+
*
|
|
50
|
+
* @param baseBranch - The base branch to diff against (default: 'main')
|
|
51
|
+
* @returns A DiffFilter for use with check(\{ diff \})
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* // Only report violations in files changed since main
|
|
55
|
+
* classes(p).should().notContain(call('eval')).check(\{ diff: diffAware('main') \})
|
|
56
|
+
*/
|
|
57
|
+
export function diffAware(baseBranch = 'main') {
|
|
58
|
+
const cwd = process.cwd();
|
|
59
|
+
let output;
|
|
60
|
+
try {
|
|
61
|
+
output = execFileSync('git', ['diff', '--name-only', `${baseBranch}...HEAD`], {
|
|
62
|
+
encoding: 'utf-8',
|
|
63
|
+
cwd,
|
|
64
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
65
|
+
}).trim();
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
// Not a git repo, or the base branch doesn't exist — skip filtering (report
|
|
69
|
+
// all violations). The cause is named: "could not run git diff" alone sends
|
|
70
|
+
// a reader looking for a missing branch when the real answer may be that git
|
|
71
|
+
// is not installed, or that the cwd is not a repository at all.
|
|
72
|
+
writeStderr(`[eess] Could not run git diff against '${baseBranch}' ` +
|
|
73
|
+
`(${error instanceof Error ? error.message.split('\n')[0] : String(error)}). ` +
|
|
74
|
+
'All violations will be reported.');
|
|
75
|
+
return new DiffFilter(null, baseBranch);
|
|
76
|
+
}
|
|
77
|
+
if (output === '') {
|
|
78
|
+
// No changes — empty set means nothing is "changed", so all violations are filtered out
|
|
79
|
+
return new DiffFilter(new Set(), baseBranch);
|
|
80
|
+
}
|
|
81
|
+
const changedFiles = new Set(output.split('\n').map((relativePath) => path.resolve(cwd, relativePath)));
|
|
82
|
+
return new DiffFilter(changedFiles, baseBranch);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=diff-aware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-aware.js","sourceRoot":"","sources":["../../src/helpers/diff-aware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C;;;;;;;;GAQG;AACH,MAAM,OAAO,UAAU;IACJ,YAAY,CAAoB;IAEjD;;;;;OAKG;IACM,UAAU,CAAQ;IAE3B,YAAY,YAAgC,EAAE,aAAqB,iBAAiB;QAClF,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,UAA2B;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;QAC/B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,UAAU,CAAA;QACrC,wEAAwE;QACxE,qEAAqE;QACrE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAChF,CAAC;IAED,kEAAkE;IAClE,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAA;IACjE,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,SAAS,CAAC,aAAqB,MAAM;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAEzB,IAAI,MAAc,CAAA;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,SAAS,CAAC,EAAE;YAC5E,QAAQ,EAAE,OAAO;YACjB,GAAG;YACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAA;IACX,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,4EAA4E;QAC5E,4EAA4E;QAC5E,6EAA6E;QAC7E,gEAAgE;QAChE,WAAW,CACT,0CAA0C,UAAU,IAAI;YACtD,IAAI,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;YAC9E,kCAAkC,CACrC,CAAA;QACD,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IACzC,CAAC;IAED,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,wFAAwF;QACxF,OAAO,IAAI,UAAU,CAAC,IAAI,GAAG,EAAE,EAAE,UAAU,CAAC,CAAA;IAC9C,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAC1E,CAAA;IAED,OAAO,IAAI,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;AACjD,CAAC"}
|
|
@@ -21,6 +21,29 @@ export interface ExpressionMatcher {
|
|
|
21
21
|
* The condition layer enforces this — matchers can assume the kind is correct.
|
|
22
22
|
*/
|
|
23
23
|
matches(node: Node): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Every position at which this matcher's pattern matches a comment attached
|
|
26
|
+
* to `node`. Absent for an ordinary matcher, where the node *is* the match.
|
|
27
|
+
*
|
|
28
|
+
* **Presence of this method is what makes a matcher a trivia matcher.** It
|
|
29
|
+
* was two members — a `matchesTrivia: true` flag beside a single-position
|
|
30
|
+
* accessor — and that admitted four states of which two were silently wrong:
|
|
31
|
+
* the flag without the accessor reported every node at its own line, and the
|
|
32
|
+
* accessor without the flag reproduced the original bug. Both were measured.
|
|
33
|
+
* One member cannot disagree with itself.
|
|
34
|
+
*
|
|
35
|
+
* **Every** position, not the first. A node routinely carries several
|
|
36
|
+
* matching comments — four stacked `// TODO` lines lead one statement — and
|
|
37
|
+
* the unit of a comment finding is the **comment**. Returning one collapsed
|
|
38
|
+
* them, which left `noStubComments()` reporting a single finding for four
|
|
39
|
+
* stubs: a ratchet hole exactly where agent-written stubs accumulate, in the
|
|
40
|
+
* rule `agentGuardrails` ships to catch them.
|
|
41
|
+
*
|
|
42
|
+
* Must be **pure and stable for a node**: the traversal calls it to
|
|
43
|
+
* enumerate and deduplicate matches, and the conditions layer calls it again
|
|
44
|
+
* to name the line, across a layer boundary, and the two must agree.
|
|
45
|
+
*/
|
|
46
|
+
matchedTriviaPositions?(node: Node): readonly number[];
|
|
24
47
|
}
|
|
25
48
|
/**
|
|
26
49
|
* Match a CallExpression by function/method name.
|
|
@@ -82,13 +105,50 @@ export declare function newExpr(nameOrRegex: string | RegExp): ExpressionMatcher
|
|
|
82
105
|
export declare function expression(textOrRegex: string | RegExp): ExpressionMatcher;
|
|
83
106
|
export declare function property(name: string | RegExp, value?: boolean | number | string | RegExp): ExpressionMatcher;
|
|
84
107
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
108
|
+
* A stub marker: an **UPPERCASE** marker word opening a comment line, or either
|
|
109
|
+
* of two phrases.
|
|
110
|
+
*
|
|
111
|
+
* Both halves of that are load-bearing, and each was found by a prose false
|
|
112
|
+
* positive in this repo's own source
|
|
113
|
+
* ([ts-archunit bug 0053](https://github.com/nielspeter/ts-archunit/blob/main/bugs/fixed/0053-the-stub-rule-matched-prose-about-stubs.md)).
|
|
114
|
+
*
|
|
115
|
+
* **Anchored to a line start**, because unanchored it matched every sentence that
|
|
116
|
+
* mentions a marker — including the docstring of the fix for bug 0052, which says
|
|
117
|
+
* the word TODO three times.
|
|
118
|
+
*
|
|
119
|
+
* **Case-sensitive for the markers**, because anchoring alone was not enough: a
|
|
120
|
+
* wrapped JSDoc sentence put the lowercase word "stub," at the start of a
|
|
121
|
+
* continuation line. Uppercase is the convention (`// TODO:`, `// FIXME`) and the
|
|
122
|
+
* casing is what separates a marker from the English word. Known limit, stated
|
|
123
|
+
* rather than discovered: a lowercase `// todo: x` is not matched. That is the
|
|
124
|
+
* price of not matching "the todo list below", and it is the right trade for a
|
|
125
|
+
* rule whose findings must fail a build.
|
|
126
|
+
*
|
|
127
|
+
* The phrase forms are anchored too, because unanchored they matched
|
|
128
|
+
* `noStubComments()`'s own docstring, which lists them. That is bug 0043's shape:
|
|
129
|
+
* documentation of a syntax read as the syntax.
|
|
130
|
+
*
|
|
131
|
+
* **The phrase forms ARE case-insensitive, since v0.55.0** — and were not between v0.47.0
|
|
132
|
+
* and then, though this text claimed otherwise for part of that window. The `i` flag was
|
|
133
|
+
* dropped for the whole expression, correctly, because the MARKERS must stay
|
|
134
|
+
* case-sensitive: that is what rejects a wrapped JSDoc line beginning `stub,`. But only
|
|
135
|
+
* the phrases' INITIAL letters were alternated, so `// NOT IMPLEMENTED` and
|
|
136
|
+
* `// COMING SOON` silently stopped matching. The reasoning offered at the time was
|
|
137
|
+
* "nobody writes NOT IMPLEMENTED", which is precisely the casing the marker branch would
|
|
138
|
+
* otherwise have caught. `anyCase` below DERIVES the alternation, so the class cannot come
|
|
139
|
+
* back one letter at a time
|
|
140
|
+
* ([ts-archunit bug 0061](https://github.com/nielspeter/ts-archunit/blob/main/bugs/fixed/0061-an-all-caps-stub-marker-no-longer-matches.md)).
|
|
141
|
+
*/
|
|
142
|
+
/**
|
|
143
|
+
* A word matched case-INSENSITIVELY, letter by letter.
|
|
88
144
|
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
145
|
+
* JavaScript has no inline `(?i:…)` group and the `i` flag applies to the whole expression,
|
|
146
|
+
* which cannot be used here — the MARKER branch must stay case-sensitive. So the phrase
|
|
147
|
+
* branch alternates its own letters, and it is DERIVED rather than hand-written, because
|
|
148
|
+
* hand-writing it is what produced bug 0061: `[Nn]ot\\s+[Ii]mplemented` alternates the
|
|
149
|
+
* first letter of each word and nothing else.
|
|
91
150
|
*/
|
|
151
|
+
export declare function anyCase(word: string): string;
|
|
92
152
|
export declare const STUB_PATTERNS: RegExp;
|
|
93
153
|
/**
|
|
94
154
|
* Match comments attached to AST nodes.
|
|
@@ -98,8 +158,9 @@ export declare const STUB_PATTERNS: RegExp;
|
|
|
98
158
|
* `syntaxKinds: undefined` so the broad traversal path visits every node,
|
|
99
159
|
* and `matches(node)` checks that node's comment ranges.
|
|
100
160
|
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
161
|
+
* The same comment is visible as trivia of several nested nodes, so the
|
|
162
|
+
* traversal deduplicates by the comment's own position — this matcher holds no
|
|
163
|
+
* state of its own (bug 0034).
|
|
103
164
|
*
|
|
104
165
|
* @param pattern - String substring or RegExp to test against comment text.
|
|
105
166
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../../src/helpers/matchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAqB,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../../src/helpers/matchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAqB,MAAM,UAAU,CAAA;AAG9D;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAEnC;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAA;IAE5B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,sBAAsB,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,MAAM,EAAE,CAAA;CACvD;AAaD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAqBpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAqBhE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAqBvE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAgC1E;AAsDD,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GACzC,iBAAiB,CAgBnB;AAeD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH;;;;;;;;GAQG;AAEH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoC5C;AAOD,eAAO,MAAM,aAAa,QAEzB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAuCnE;AAeD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAoBzE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,OAAO,IAAI,iBAAiB,CAwB3C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,iBAAiB,CAoB/E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,CAQpD"}
|
package/dist/helpers/matchers.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Node, SyntaxKind } from 'ts-morph';
|
|
2
|
+
import { writeStderr } from '@nielspeter/eess';
|
|
2
3
|
/**
|
|
3
4
|
* Normalize expression text for matching.
|
|
4
5
|
* Replaces optional chaining `?.` with `.` so users don't need to
|
|
@@ -143,7 +144,7 @@ export function expression(textOrRegex) {
|
|
|
143
144
|
// No syntaxKinds — walks all descendants
|
|
144
145
|
matches(node) {
|
|
145
146
|
if (!warned) {
|
|
146
|
-
|
|
147
|
+
writeStderr(`[eess] expression('${textOrRegex}') is a broad matcher. ` +
|
|
147
148
|
`Prefer call(), access(), or newExpr() for precise matching.`);
|
|
148
149
|
warned = true;
|
|
149
150
|
}
|
|
@@ -156,7 +157,7 @@ export function expression(textOrRegex) {
|
|
|
156
157
|
// No syntaxKinds — walks all descendants
|
|
157
158
|
matches(node) {
|
|
158
159
|
if (!warned) {
|
|
159
|
-
|
|
160
|
+
writeStderr(`[eess] expression(${String(textOrRegex)}) is a broad matcher. ` +
|
|
160
161
|
`Prefer call(), access(), or newExpr() for precise matching.`);
|
|
161
162
|
warned = true;
|
|
162
163
|
}
|
|
@@ -244,7 +245,96 @@ export function property(name, value) {
|
|
|
244
245
|
* Exported as a constant for use with `comment()`. Users can pass
|
|
245
246
|
* their own RegExp to `comment()` for narrower matching.
|
|
246
247
|
*/
|
|
247
|
-
|
|
248
|
+
const MARKER = 'TODO|FIXME|HACK|XXX|STUB|DEFERRED|PLACEHOLDER';
|
|
249
|
+
/** Start of a comment, or of a line inside one, past any `//`, `/*` or `*`. */
|
|
250
|
+
const COMMENT_LINE_START = String.raw `(?:^|\n)[ \t]*(?:\/\/+|\/\*+|\*+)?[ \t]*`;
|
|
251
|
+
/**
|
|
252
|
+
* A stub marker: an **UPPERCASE** marker word opening a comment line, or either
|
|
253
|
+
* of two phrases.
|
|
254
|
+
*
|
|
255
|
+
* Both halves of that are load-bearing, and each was found by a prose false
|
|
256
|
+
* positive in this repo's own source
|
|
257
|
+
* ([ts-archunit bug 0053](https://github.com/nielspeter/ts-archunit/blob/main/bugs/fixed/0053-the-stub-rule-matched-prose-about-stubs.md)).
|
|
258
|
+
*
|
|
259
|
+
* **Anchored to a line start**, because unanchored it matched every sentence that
|
|
260
|
+
* mentions a marker — including the docstring of the fix for bug 0052, which says
|
|
261
|
+
* the word TODO three times.
|
|
262
|
+
*
|
|
263
|
+
* **Case-sensitive for the markers**, because anchoring alone was not enough: a
|
|
264
|
+
* wrapped JSDoc sentence put the lowercase word "stub," at the start of a
|
|
265
|
+
* continuation line. Uppercase is the convention (`// TODO:`, `// FIXME`) and the
|
|
266
|
+
* casing is what separates a marker from the English word. Known limit, stated
|
|
267
|
+
* rather than discovered: a lowercase `// todo: x` is not matched. That is the
|
|
268
|
+
* price of not matching "the todo list below", and it is the right trade for a
|
|
269
|
+
* rule whose findings must fail a build.
|
|
270
|
+
*
|
|
271
|
+
* The phrase forms are anchored too, because unanchored they matched
|
|
272
|
+
* `noStubComments()`'s own docstring, which lists them. That is bug 0043's shape:
|
|
273
|
+
* documentation of a syntax read as the syntax.
|
|
274
|
+
*
|
|
275
|
+
* **The phrase forms ARE case-insensitive, since v0.55.0** — and were not between v0.47.0
|
|
276
|
+
* and then, though this text claimed otherwise for part of that window. The `i` flag was
|
|
277
|
+
* dropped for the whole expression, correctly, because the MARKERS must stay
|
|
278
|
+
* case-sensitive: that is what rejects a wrapped JSDoc line beginning `stub,`. But only
|
|
279
|
+
* the phrases' INITIAL letters were alternated, so `// NOT IMPLEMENTED` and
|
|
280
|
+
* `// COMING SOON` silently stopped matching. The reasoning offered at the time was
|
|
281
|
+
* "nobody writes NOT IMPLEMENTED", which is precisely the casing the marker branch would
|
|
282
|
+
* otherwise have caught. `anyCase` below DERIVES the alternation, so the class cannot come
|
|
283
|
+
* back one letter at a time
|
|
284
|
+
* ([ts-archunit bug 0061](https://github.com/nielspeter/ts-archunit/blob/main/bugs/fixed/0061-an-all-caps-stub-marker-no-longer-matches.md)).
|
|
285
|
+
*/
|
|
286
|
+
/**
|
|
287
|
+
* A word matched case-INSENSITIVELY, letter by letter.
|
|
288
|
+
*
|
|
289
|
+
* JavaScript has no inline `(?i:…)` group and the `i` flag applies to the whole expression,
|
|
290
|
+
* which cannot be used here — the MARKER branch must stay case-sensitive. So the phrase
|
|
291
|
+
* branch alternates its own letters, and it is DERIVED rather than hand-written, because
|
|
292
|
+
* hand-writing it is what produced bug 0061: `[Nn]ot\\s+[Ii]mplemented` alternates the
|
|
293
|
+
* first letter of each word and nothing else.
|
|
294
|
+
*/
|
|
295
|
+
// eess-exclude eess/no-unused-exports: consumed by the test suite; the build tsconfig this gate reads excludes tests, so `src` is the only usage it can see
|
|
296
|
+
export function anyCase(word) {
|
|
297
|
+
const escape = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
298
|
+
return [...word]
|
|
299
|
+
.map((ch) => {
|
|
300
|
+
const lower = ch.toLowerCase();
|
|
301
|
+
const upper = ch.toUpperCase();
|
|
302
|
+
// A character CLASS while both mappings are single characters, and an ALTERNATION
|
|
303
|
+
// when either is not.
|
|
304
|
+
//
|
|
305
|
+
// The alternation is the correctness half: a case mapping is not one-to-one.
|
|
306
|
+
// Measured, `'ß'.toUpperCase()` is `'SS'` — two characters — so `[SSß]` is a class of
|
|
307
|
+
// three single characters matching `S` or `ß` and **not** `SS`, and
|
|
308
|
+
// `anyCase('straße')` produced a pattern that did not match its own uppercase form
|
|
309
|
+
// without throwing. Same silent-wrongness as an unescaped metacharacter; the first
|
|
310
|
+
// version of this function fixed only that half.
|
|
311
|
+
//
|
|
312
|
+
// Keeping the class for the single-character case is the *cost* half, and it is not
|
|
313
|
+
// cosmetic. `[Nn]` and `(?:N|n)` match identically, so switching every letter to an
|
|
314
|
+
// alternation would move `STUB_PATTERNS`' text — and therefore every baselined
|
|
315
|
+
// finding's identity — while changing no behaviour at all. That is a migration
|
|
316
|
+
// charged to every adopter for nothing. Found by the change detector firing on it.
|
|
317
|
+
if (lower !== upper) {
|
|
318
|
+
return upper.length === 1 && lower.length === 1
|
|
319
|
+
? `[${escape(upper)}${escape(lower)}]`
|
|
320
|
+
: `(?:${escape(upper)}|${escape(lower)})`;
|
|
321
|
+
}
|
|
322
|
+
// A character with no case is passed through ESCAPED. Measured before adding this:
|
|
323
|
+
// `anyCase('todo(x)')` produced `[Tt][Oo][Dd][Oo]([Xx])` — a capture group; `'wip.'`
|
|
324
|
+
// produced a `.` meaning any character; `'a+b'` produced "one or more a". None of
|
|
325
|
+
// them throw, so the pattern silently means something other than the phrase.
|
|
326
|
+
//
|
|
327
|
+
// No live defect — today's phrases are letters and spaces — but this function exists
|
|
328
|
+
// to be called with a new phrase, and that is when it would bite.
|
|
329
|
+
return escape(ch);
|
|
330
|
+
})
|
|
331
|
+
.join('');
|
|
332
|
+
}
|
|
333
|
+
/** `not implemented` / `coming soon`, any casing, any run of whitespace between words. */
|
|
334
|
+
const PHRASES = ['not implemented', 'coming soon']
|
|
335
|
+
.map((phrase) => phrase.split(' ').map(anyCase).join('\\s+'))
|
|
336
|
+
.join('|');
|
|
337
|
+
export const STUB_PATTERNS = new RegExp([`${COMMENT_LINE_START}(?:${MARKER})\\b`, `${COMMENT_LINE_START}(?:${PHRASES})\\b`].join('|'));
|
|
248
338
|
/**
|
|
249
339
|
* Match comments attached to AST nodes.
|
|
250
340
|
*
|
|
@@ -253,8 +343,9 @@ export const STUB_PATTERNS = /\b(TODO|FIXME|HACK|XXX|STUB|DEFERRED|PLACEHOLDER)\
|
|
|
253
343
|
* `syntaxKinds: undefined` so the broad traversal path visits every node,
|
|
254
344
|
* and `matches(node)` checks that node's comment ranges.
|
|
255
345
|
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
346
|
+
* The same comment is visible as trivia of several nested nodes, so the
|
|
347
|
+
* traversal deduplicates by the comment's own position — this matcher holds no
|
|
348
|
+
* state of its own (bug 0034).
|
|
258
349
|
*
|
|
259
350
|
* @param pattern - String substring or RegExp to test against comment text.
|
|
260
351
|
*
|
|
@@ -264,10 +355,16 @@ export const STUB_PATTERNS = /\b(TODO|FIXME|HACK|XXX|STUB|DEFERRED|PLACEHOLDER)\
|
|
|
264
355
|
* comment('HACK') // matches hack comments
|
|
265
356
|
*/
|
|
266
357
|
export function comment(pattern) {
|
|
267
|
-
//
|
|
268
|
-
//
|
|
269
|
-
//
|
|
270
|
-
|
|
358
|
+
// NO dedup state here, deliberately — bug 0034. This used to hold a
|
|
359
|
+
// `Set<string>` of matched `filePath:pos` keys that was never reset, so the
|
|
360
|
+
// SAME rule object returned 2 violations and then 0 on its second
|
|
361
|
+
// evaluation: measured, and the purest form of the green that means nothing
|
|
362
|
+
// this project exists to remove. It bit watch mode, a preset array checked
|
|
363
|
+
// twice, and any test reusing a rule constant.
|
|
364
|
+
//
|
|
365
|
+
// Dedup now happens in the traversal, keyed by attachment point, via
|
|
366
|
+
// `matchedTriviaPositions` below. A matcher that holds no state cannot go
|
|
367
|
+
// stale.
|
|
271
368
|
function testComment(range) {
|
|
272
369
|
const text = range.getText();
|
|
273
370
|
if (typeof pattern === 'string') {
|
|
@@ -283,18 +380,15 @@ export function comment(pattern) {
|
|
|
283
380
|
: `comment matching ${String(pattern)}`,
|
|
284
381
|
// No syntaxKinds — broad traversal to visit all nodes and their comments
|
|
285
382
|
matches(node) {
|
|
286
|
-
const filePath = node.getSourceFile().getFilePath();
|
|
287
383
|
const ranges = [...node.getLeadingCommentRanges(), ...node.getTrailingCommentRanges()];
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
}
|
|
297
|
-
return false;
|
|
384
|
+
return ranges.some((range) => testComment(range));
|
|
385
|
+
},
|
|
386
|
+
matchedTriviaPositions(node) {
|
|
387
|
+
// `getPos()`, never `getEnd()`: a multi-line block comment or JSDoc would
|
|
388
|
+
// otherwise be reported at its CLOSING line. Invisible to an all-`//`
|
|
389
|
+
// fixture, where the two share a line — found by sabotage.
|
|
390
|
+
const ranges = [...node.getLeadingCommentRanges(), ...node.getTrailingCommentRanges()];
|
|
391
|
+
return ranges.filter((range) => testComment(range)).map((range) => range.getPos());
|
|
298
392
|
},
|
|
299
393
|
};
|
|
300
394
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchers.js","sourceRoot":"","sources":["../../src/helpers/matchers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"matchers.js","sourceRoot":"","sources":["../../src/helpers/matchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAqB,MAAM,UAAU,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAoD9C;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACnC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,IAAI,CAAC,WAA4B;IAC/C,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;YACL,WAAW,EAAE,YAAY,WAAW,GAAG;YACvC,WAAW,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;YACxC,OAAO,CAAC,IAAU;gBAChB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAA;gBAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC1D,OAAO,IAAI,KAAK,WAAW,CAAA;YAC7B,CAAC;SACF,CAAA;IACH,CAAC;IACD,OAAO;QACL,WAAW,EAAE,iBAAiB,MAAM,CAAC,WAAW,CAAC,EAAE;QACnD,WAAW,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;QACxC,OAAO,CAAC,IAAU;YAChB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAA;YAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;YAC1D,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/B,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,MAAM,CAAC,KAAsB;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL,WAAW,EAAE,cAAc,KAAK,GAAG;YACnC,WAAW,EAAE,CAAC,UAAU,CAAC,wBAAwB,CAAC;YAClD,OAAO,CAAC,IAAU;gBAChB,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACxD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC1C,OAAO,IAAI,KAAK,KAAK,CAAA;YACvB,CAAC;SACF,CAAA;IACH,CAAC;IACD,OAAO;QACL,WAAW,EAAE,mBAAmB,MAAM,CAAC,KAAK,CAAC,EAAE;QAC/C,WAAW,EAAE,CAAC,UAAU,CAAC,wBAAwB,CAAC;QAClD,OAAO,CAAC,IAAU;YAChB,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAA;YACxD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;YAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,OAAO,CAAC,WAA4B;IAClD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;YACL,WAAW,EAAE,QAAQ,WAAW,GAAG;YACnC,WAAW,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;YACvC,OAAO,CAAC,IAAU;gBAChB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAA;gBAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAA;gBAC3C,OAAO,IAAI,KAAK,WAAW,CAAA;YAC7B,CAAC;SACF,CAAA;IACH,CAAC;IACD,OAAO;QACL,WAAW,EAAE,gBAAgB,MAAM,CAAC,WAAW,CAAC,EAAE;QAClD,WAAW,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QACvC,OAAO,CAAC,IAAU;YAChB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAA;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAA;YAC3C,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/B,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,WAA4B;IACrD,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;YACL,WAAW,EAAE,0BAA0B,WAAW,GAAG;YACrD,yCAAyC;YACzC,OAAO,CAAC,IAAU;gBAChB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,WAAW,CACT,sBAAsB,WAAW,yBAAyB;wBACxD,6DAA6D,CAChE,CAAA;oBACD,MAAM,GAAG,IAAI,CAAA;gBACf,CAAC;gBACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;YAC7C,CAAC;SACF,CAAA;IACH,CAAC;IACD,OAAO;QACL,WAAW,EAAE,uBAAuB,MAAM,CAAC,WAAW,CAAC,EAAE;QACzD,yCAAyC;QACzC,OAAO,CAAC,IAAU;YAChB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,WAAW,CACT,qBAAqB,MAAM,CAAC,WAAW,CAAC,wBAAwB;oBAC9D,6DAA6D,CAChE,CAAA;gBACD,MAAM,GAAG,IAAI,CAAA;YACf,CAAC;YACD,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACzC,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;;GAEG;AACH,SAAS,kBAAkB,CAAC,WAAiB,EAAE,KAAyC;IACtF,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,CAAA;QAClC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,YAAY,CAAA;IACnF,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,eAAe,EAAE,KAAK,KAAK,CAAA;IACtF,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,eAAe,EAAE,KAAK,KAAK,CAAA;IACrF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;AAC1C,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAU,EAAE,IAAqB;IAC1D,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAClD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,oBAAoB;QAAE,OAAO,KAAK,CAAA;IAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA;IAC7F,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,KAAK,IAAI,CAAA;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,IAAqB,EACrB,KAA0C;IAE1C,MAAM,QAAQ,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACtE,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;IAClE,MAAM,WAAW,GAAG,YAAY,QAAQ,GAAG,SAAS,EAAE,CAAA;IAEtD,OAAO;QACL,WAAW;QACX,WAAW,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;QAC5C,OAAO,CAAC,IAAU;YAChB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAA;YAChD,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAA;YACpC,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;YACvF,IAAI,CAAC,WAAW;gBAAE,OAAO,KAAK,CAAA;YAC9B,OAAO,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QAC/C,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,GAAG,+CAA+C,CAAA;AAE9D,+EAA+E;AAC/E,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAA,0CAA0C,CAAA;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH;;;;;;;;GAQG;AACH,4JAA4J;AAC5J,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;IACpF,OAAO,CAAC,GAAG,IAAI,CAAC;SACb,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACV,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;QAC9B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;QAC9B,kFAAkF;QAClF,sBAAsB;QACtB,EAAE;QACF,6EAA6E;QAC7E,sFAAsF;QACtF,oEAAoE;QACpE,mFAAmF;QACnF,mFAAmF;QACnF,iDAAiD;QACjD,EAAE;QACF,oFAAoF;QACpF,oFAAoF;QACpF,+EAA+E;QAC/E,+EAA+E;QAC/E,mFAAmF;QACnF,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAC7C,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG;gBACtC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAA;QAC7C,CAAC;QACD,mFAAmF;QACnF,qFAAqF;QACrF,kFAAkF;QAClF,6EAA6E;QAC7E,EAAE;QACF,qFAAqF;QACrF,kEAAkE;QAClE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAA;IACnB,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC;AAED,0FAA0F;AAC1F,MAAM,OAAO,GAAG,CAAC,iBAAiB,EAAE,aAAa,CAAC;KAC/C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC5D,IAAI,CAAC,GAAG,CAAC,CAAA;AAEZ,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,MAAM,CACrC,CAAC,GAAG,kBAAkB,MAAM,MAAM,MAAM,EAAE,GAAG,kBAAkB,MAAM,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAC9F,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,OAAO,CAAC,OAAwB;IAC9C,oEAAoE;IACpE,4EAA4E;IAC5E,kEAAkE;IAClE,4EAA4E;IAC5E,2EAA2E;IAC3E,+CAA+C;IAC/C,EAAE;IACF,qEAAqE;IACrE,0EAA0E;IAC1E,SAAS;IACT,SAAS,WAAW,CAAC,KAAmB;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC;QACD,gDAAgD;QAChD,OAAO,CAAC,SAAS,GAAG,CAAC,CAAA;QACrB,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO;QACL,WAAW,EACT,OAAO,OAAO,KAAK,QAAQ;YACzB,CAAC,CAAC,uBAAuB,OAAO,GAAG;YACnC,CAAC,CAAC,oBAAoB,MAAM,CAAC,OAAO,CAAC,EAAE;QAC3C,yEAAyE;QACzE,OAAO,CAAC,IAAU;YAChB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAA;YACtF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;QACnD,CAAC;QACD,sBAAsB,CAAC,IAAU;YAC/B,0EAA0E;YAC1E,sEAAsE;YACtE,2DAA2D;YAC3D,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAA;YACtF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QACpF,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAU;IAC/B,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,CAAA;IAC5D,CAAC;IACD,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,CAAA;IACxC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,UAA2B;IACpD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO;YACL,WAAW,EAAE,gBAAgB,UAAU,GAAG;YAC1C,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,qBAAqB,CAAC;YACtE,OAAO,CAAC,IAAU;gBAChB,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;gBAC/B,OAAO,GAAG,KAAK,UAAU,CAAA;YAC3B,CAAC;SACF,CAAA;IACH,CAAC;IACD,OAAO;QACL,WAAW,EAAE,wBAAwB,MAAM,CAAC,UAAU,CAAC,EAAE;QACzD,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,qBAAqB,CAAC;QACtE,OAAO,CAAC,IAAU;YAChB,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAA;YACnC,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7B,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO;QACL,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,CAAC;QAC3D,OAAO,CAAC,IAAU;YAChB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;YAChD,CAAC;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,gEAAgE;gBAChE,yEAAyE;gBACzE,uEAAuE;gBACvE,qEAAqE;gBACrE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;gBAC/B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;oBAAE,OAAO,KAAK,CAAA;gBAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;gBACjC,IAAI,CAAC,IAAI;oBAAE,OAAO,KAAK,CAAA;gBACvB,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAA;gBAC3C,IAAI,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAA;gBAC3D,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAA;AACH,CAAC;AAoBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,aAAa,CAAC,OAA8B;IAC1D,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAA;IAC9C,OAAO;QACL,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,uBAAuB,CAAC;QAC1E,OAAO,CAAC,IAAU;YAChB,oEAAoE;YACpE,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAA;YAC3C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAA;YAC5C,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAA;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;YACnC,IAAI,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;gBACvC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC;oBAClE,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC3C,OAAO,CAAC,IAAU;YAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACvC,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { SourceFile } from 'ts-morph';
|
|
2
2
|
import type { Slice } from '../models/slice.js';
|
|
3
|
+
import type { ImportOptions } from '../core/import-options.js';
|
|
4
|
+
import type { ModuleEdge } from '../core/module-edges.js';
|
|
3
5
|
/**
|
|
4
6
|
* An edge in the slice dependency graph.
|
|
5
|
-
* Represents: a file in `from`
|
|
7
|
+
* Represents: a file in `from` depends on a file in `to`.
|
|
6
8
|
*/
|
|
7
|
-
|
|
9
|
+
interface SliceEdge {
|
|
8
10
|
from: string;
|
|
9
11
|
to: string;
|
|
10
12
|
}
|
|
@@ -13,20 +15,110 @@ export interface SliceEdge {
|
|
|
13
15
|
* Shared by buildSliceDependencyGraph and findSliceDependencyDetails.
|
|
14
16
|
*/
|
|
15
17
|
export declare function buildFileToSliceMap(slices: Slice[]): Map<string, string>;
|
|
16
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Which erasure question a condition is asking.
|
|
20
|
+
*
|
|
21
|
+
* Both live on this graph and they are **not the same question**, which only became
|
|
22
|
+
* visible when `ModuleEdge` learned to tell them apart
|
|
23
|
+
* ([ts-archunit plan 0087](https://github.com/nielspeter/ts-archunit/blob/main/plans/completed/0087-an-inline-type-import-still-requests-the-module.md)):
|
|
24
|
+
*
|
|
25
|
+
* - `'module-request'` — will importing this file cause the target to be *evaluated*?
|
|
26
|
+
* That is what a **cycle** is: a deadlock in module-initialization order. Used by
|
|
27
|
+
* `beFreeOfCycles`.
|
|
28
|
+
* - `'type-bindings'` — does this file *reference* the target's types? That is
|
|
29
|
+
* **coupling**, which is what `notDependOn` and `respectLayerOrder` are about, and
|
|
30
|
+
* it matches what `dependOn`/`notImportFrom` have always meant by
|
|
31
|
+
* `ignoreTypeImports`.
|
|
32
|
+
*
|
|
33
|
+
* They diverge for exactly two spellings, and only under `verbatimModuleSyntax: true`:
|
|
34
|
+
* `import { type X } from 's'` and `export { type X } from 's'` emit `import {} from 's'`
|
|
35
|
+
* / `export {} from 's'`. Those are eager edges — so a cycle question must count them —
|
|
36
|
+
* while the bindings crossing them are still purely type-level, so a coupling question
|
|
37
|
+
* told to ignore type imports must not.
|
|
38
|
+
*
|
|
39
|
+
* Getting this backwards is a false positive on one side and a false negative on the
|
|
40
|
+
* other, in the same release.
|
|
41
|
+
*/
|
|
42
|
+
type ErasureQuestion = 'module-request' | 'type-bindings';
|
|
43
|
+
/**
|
|
44
|
+
* Build a directed dependency graph between slices.
|
|
45
|
+
*
|
|
46
|
+
* For each file in each slice, resolve its dependencies. If the target file
|
|
47
|
+
* belongs to a different slice, add a directed edge from the depending slice
|
|
48
|
+
* to the depended-upon slice.
|
|
49
|
+
*
|
|
50
|
+
* @param slices - The resolved slices
|
|
51
|
+
* @param fileToSlice - Pre-built file-to-slice map (optional, built internally if not provided)
|
|
52
|
+
* @param options - `ignoreTypeImports` drops edges that are erased at compile time
|
|
53
|
+
* @returns Unique directed edges between slices
|
|
54
|
+
*/
|
|
55
|
+
/**
|
|
56
|
+
* A built graph, and the only way to ask it for the sites behind one of its edges.
|
|
57
|
+
*
|
|
58
|
+
* `question` and `options` must be the same for the graph and for the details walk, and
|
|
59
|
+
* for a while they were four literals across two call sites kept in step by convention.
|
|
60
|
+
* The failure is silent and specific: the conditions emit **one violation per detail**, so
|
|
61
|
+
* a graph that counts an edge the details walk cannot see reports nothing at all, and a
|
|
62
|
+
* details walk that counts more reports the wrong site.
|
|
63
|
+
*
|
|
64
|
+
* A review measured the live half of that. Passing `'type-bindings'` to `beFreeOfCycles`'s
|
|
65
|
+
* details call — the one mutation of eight that stayed **green** — turned the cycle finding
|
|
66
|
+
* into *"feature dynamically imports legacy at index.ts:1"*, pointing the reader at the one
|
|
67
|
+
* construct that BREAKS cycles and telling them to remove it. ADR-009 rule 2, from a
|
|
68
|
+
* mismatch no test could see.
|
|
69
|
+
*
|
|
70
|
+
* So the pairing is no longer expressible: `detailsFor` reads what the graph was built
|
|
71
|
+
* with. This also retires the older `options`-mismatch hazard the docstrings managed with
|
|
72
|
+
* prose.
|
|
73
|
+
*/
|
|
74
|
+
interface SliceGraph {
|
|
75
|
+
readonly edges: SliceEdge[];
|
|
76
|
+
detailsFor(fromSliceName: string, toSliceName: string): SliceDependencySite[];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Build the graph, and bind the details walk to the same question and options.
|
|
80
|
+
*
|
|
81
|
+
* Prefer this over the two loose functions; they remain exported because
|
|
82
|
+
* `tests/` and the reverse-graph work call them directly with an explicit question.
|
|
83
|
+
*/
|
|
84
|
+
export declare function sliceGraph(slices: Slice[], fileToSlice: Map<string, string> | undefined, options: ImportOptions | undefined, question: ErasureQuestion): SliceGraph;
|
|
17
85
|
/**
|
|
18
86
|
* Find which specific files cause a dependency from one slice to another.
|
|
19
87
|
* Used for detailed violation messages.
|
|
20
88
|
*
|
|
89
|
+
* **`options` must be the options the graph was built with**, and that is not a style
|
|
90
|
+
* preference. `respectLayerOrder` and `notDependOn` push one violation *per detail*,
|
|
91
|
+
* so a graph that counts an edge this function cannot see finds the dependency and
|
|
92
|
+
* reports **nothing** — a false green produced by two filters disagreeing rather than
|
|
93
|
+
* by either one being absent. `beFreeOfCycles` fails differently and more quietly: it
|
|
94
|
+
* still reports the cycle, at `unknown:0`, which is a finding whose remedy nobody can
|
|
95
|
+
* act on.
|
|
96
|
+
*
|
|
21
97
|
* @param slices - The resolved slices
|
|
22
98
|
* @param fromSliceName - Source slice name
|
|
23
99
|
* @param toSliceName - Target slice name
|
|
24
100
|
* @param fileToSlice - Pre-built file-to-slice map (optional, built internally if not provided)
|
|
101
|
+
* @param options - Must match the options passed to `buildSliceDependencyGraph`
|
|
25
102
|
* @returns Array of { sourceFile, importPath, importLine }
|
|
26
103
|
*/
|
|
27
|
-
export
|
|
28
|
-
sourceFile: SourceFile;
|
|
29
|
-
importPath: string;
|
|
30
|
-
importLine: number;
|
|
31
|
-
|
|
104
|
+
export interface SliceDependencySite {
|
|
105
|
+
readonly sourceFile: SourceFile;
|
|
106
|
+
readonly importPath: string;
|
|
107
|
+
readonly importLine: number;
|
|
108
|
+
/**
|
|
109
|
+
* The edge itself, so a caller can build an identity and a message from what the
|
|
110
|
+
* dependency *is* rather than from where it sits.
|
|
111
|
+
*
|
|
112
|
+
* Added by [ts-archunit plan 0088](https://github.com/nielspeter/ts-archunit/blob/main/plans/0088-a-slice-finding-identifies-itself.md): the
|
|
113
|
+
* dependency conditions identify a finding by `basename::kind::specifier::names` and
|
|
114
|
+
* deliberately **not** by line, because a line moves when anything above it is edited
|
|
115
|
+
* (see `ArchViolation.identity`). The slice conditions could not follow that scheme
|
|
116
|
+
* while this function returned only a line number.
|
|
117
|
+
*
|
|
118
|
+
* It also unblocks naming the offending edge's KIND in the message — `edgeVerb()` has
|
|
119
|
+
* returned `'re-exports'` since v0.28.0 and no slice condition could use it.
|
|
120
|
+
*/
|
|
121
|
+
readonly edge: ModuleEdge;
|
|
122
|
+
}
|
|
123
|
+
export {};
|
|
32
124
|
//# sourceMappingURL=slice-graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slice-graph.d.ts","sourceRoot":"","sources":["../../src/helpers/slice-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"slice-graph.d.ts","sourceRoot":"","sources":["../../src/helpers/slice-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,yBAAyB,CAAA;AAGzE;;;GAGG;AACH,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxE;AAqCD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,KAAK,eAAe,GAAG,gBAAgB,GAAG,eAAe,CAAA;AAyGzD;;;;;;;;;;;GAWG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH,UAAU,UAAU;IAClB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAA;IAC3B,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAAA;CAC9E;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,KAAK,EAAE,EACf,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC5C,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,QAAQ,EAAE,eAAe,GACxB,UAAU,CAMZ;AAuBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAC1B"}
|