@nielspeter/eess-ts 0.2.1 → 0.5.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 +75 -32
- 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 +141 -55
- 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 +385 -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 +182 -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 +177 -39
- 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 +16 -19
- 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 +243 -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 +109 -42
- 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 +8 -3
- package/dist/cli/commands/baseline.d.ts.map +1 -1
- package/dist/cli/commands/baseline.js +111 -7
- 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 +385 -47
- 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 +47 -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 +101 -43
- 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 +25 -32
- package/dist/cli/load-rules.js.map +1 -1
- package/dist/cli/resolve-config.d.ts +0 -8
- package/dist/cli/resolve-config.d.ts.map +1 -1
- package/dist/cli/resolve-config.js +25 -55
- 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 +351 -0
- package/dist/cli/rule-file-findings.js.map +1 -0
- package/dist/cli/watch.d.ts +17 -34
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +14 -129
- 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 +41 -19
- 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 +41 -37
- 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 +20 -6
- 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 +155 -93
- 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 +150 -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 +49 -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 +117 -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 +390 -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 +19 -0
- package/dist/core/exclusion-comments.d.ts.map +1 -0
- package/dist/core/exclusion-comments.js +7 -0
- package/dist/core/exclusion-comments.js.map +1 -0
- package/dist/core/execute-rule.d.ts +158 -0
- package/dist/core/execute-rule.d.ts.map +1 -0
- package/dist/core/execute-rule.js +666 -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/invalidate-on-modify.d.ts +20 -0
- package/dist/core/invalidate-on-modify.d.ts.map +1 -0
- package/dist/core/invalidate-on-modify.js +26 -0
- package/dist/core/invalidate-on-modify.js.map +1 -0
- 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 +227 -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 +593 -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 +224 -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 +22 -0
- package/dist/core/path-universe.d.ts.map +1 -0
- package/dist/core/path-universe.js +45 -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 +29 -4
- package/dist/core/project.js.map +1 -1
- package/dist/core/rule-builder.d.ts +303 -0
- package/dist/core/rule-builder.d.ts.map +1 -0
- package/dist/core/rule-builder.js +463 -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 +88 -0
- package/dist/core/rule-declaration.js.map +1 -0
- package/dist/core/terminal-builder.d.ts +629 -0
- package/dist/core/terminal-builder.d.ts.map +1 -0
- package/dist/core/terminal-builder.js +807 -0
- package/dist/core/terminal-builder.js.map +1 -0
- package/dist/core/terminal-execution.d.ts +39 -0
- package/dist/core/terminal-execution.d.ts.map +1 -0
- package/dist/core/terminal-execution.js +103 -0
- package/dist/core/terminal-execution.js.map +1 -0
- package/dist/core/ts-comment-mask.d.ts +2 -0
- package/dist/core/ts-comment-mask.d.ts.map +1 -0
- package/dist/core/ts-comment-mask.js +102 -0
- package/dist/core/ts-comment-mask.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/graphql-rule-builder.d.ts +95 -0
- package/dist/graphql/graphql-rule-builder.d.ts.map +1 -0
- package/dist/graphql/graphql-rule-builder.js +127 -0
- package/dist/graphql/graphql-rule-builder.js.map +1 -0
- package/dist/graphql/index.d.ts +1 -0
- package/dist/graphql/index.d.ts.map +1 -1
- package/dist/graphql/index.js +2 -1
- package/dist/graphql/index.js.map +1 -1
- package/dist/graphql/resolver-rule-builder.d.ts +44 -23
- package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
- package/dist/graphql/resolver-rule-builder.js +80 -72
- 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 +82 -12
- package/dist/graphql/schema-loader.js.map +1 -1
- package/dist/graphql/schema-predicates.d.ts.map +1 -1
- package/dist/graphql/schema-predicates.js +17 -12
- package/dist/graphql/schema-predicates.js.map +1 -1
- package/dist/graphql/schema-rule-builder.d.ts +15 -24
- package/dist/graphql/schema-rule-builder.d.ts.map +1 -1
- package/dist/graphql/schema-rule-builder.js +39 -77
- 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 +28 -0
- package/dist/helpers/baseline-generator.d.ts.map +1 -0
- package/dist/helpers/baseline-generator.js +27 -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 +135 -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 +53 -84
- 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 +16 -0
- package/dist/helpers/diff-aware.d.ts.map +1 -0
- package/dist/helpers/diff-aware.js +16 -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 +164 -86
- 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 +55 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -15
- 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 +54 -8
- package/dist/models/arch-function.d.ts.map +1 -1
- package/dist/models/arch-function.js +145 -8
- package/dist/models/arch-function.js.map +1 -1
- package/dist/models/arch-jsx-element.d.ts.map +1 -1
- package/dist/models/arch-jsx-element.js +18 -19
- 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/jsx.d.ts.map +1 -1
- package/dist/predicates/jsx.js +2 -1
- package/dist/predicates/jsx.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 +49 -16
- package/dist/presets/agent-guardrails.d.ts.map +1 -1
- package/dist/presets/agent-guardrails.js +308 -19
- package/dist/presets/agent-guardrails.js.map +1 -1
- package/dist/presets/boundaries.d.ts +46 -3
- 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 +23 -3
- 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 +10 -5
- package/dist/presets/index.d.ts.map +1 -1
- package/dist/presets/index.js +19 -3
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/layered.d.ts +47 -3
- 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 +81 -10
- 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 +267 -2
- package/dist/presets/shared.d.ts.map +1 -1
- package/dist/presets/shared.js +367 -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 +63 -39
- 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 +80 -47
- package/dist/rules/metrics.js.map +1 -1
- package/dist/smells/clusters.d.ts +78 -0
- package/dist/smells/clusters.d.ts.map +1 -0
- package/dist/smells/clusters.js +124 -0
- package/dist/smells/clusters.js.map +1 -0
- package/dist/smells/duplicate-bodies.d.ts +92 -5
- package/dist/smells/duplicate-bodies.d.ts.map +1 -1
- package/dist/smells/duplicate-bodies.js +203 -73
- package/dist/smells/duplicate-bodies.js.map +1 -1
- package/dist/smells/duplicate-report.d.ts +90 -0
- package/dist/smells/duplicate-report.d.ts.map +1 -0
- package/dist/smells/duplicate-report.js +344 -0
- package/dist/smells/duplicate-report.js.map +1 -0
- package/dist/smells/fingerprint.d.ts +20 -1
- package/dist/smells/fingerprint.d.ts.map +1 -1
- package/dist/smells/fingerprint.js +27 -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 +28 -0
- package/dist/smells/similar-pairs.d.ts.map +1 -0
- package/dist/smells/similar-pairs.js +134 -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 +112 -14
- package/dist/smells/smell-builder.js.map +1 -1
- package/dist/smells/variation.d.ts +47 -0
- package/dist/smells/variation.d.ts.map +1 -0
- package/dist/smells/variation.js +90 -0
- package/dist/smells/variation.js.map +1 -0
- 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 +65 -16
- package/dist/tsconfig/tsconfig-builder.js.map +1 -1
- package/package.json +4 -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 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-builder.js","sourceRoot":"","sources":["../../src/core/terminal-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CollectResult } from '@nielspeter/eess';
|
|
2
|
+
import type { RuleFacts } from './vacuity-diagnosis.js';
|
|
3
|
+
/** A rule, reduced to what running it needs. */
|
|
4
|
+
export interface RuleRun {
|
|
5
|
+
readonly facts: RuleFacts;
|
|
6
|
+
readonly expectsEmpty: boolean;
|
|
7
|
+
assertsSomething(): boolean;
|
|
8
|
+
ownsDiscoveryDiagnosis(): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* ADR-010 §3 / ADR-014 §3: "`.notExist()` over zero subjects is a declaration
|
|
11
|
+
* by construction." The flag has to reach the receipt, or a cardinality-exempt
|
|
12
|
+
* rule arrives at the emitter undeclared and is reported as a vacuous pass.
|
|
13
|
+
* `TerminalBuilder.asRun()` already passed this; the guard did not read it.
|
|
14
|
+
*/
|
|
15
|
+
assertsCardinality(): boolean;
|
|
16
|
+
collectViolations(): CollectResult;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Run the rule, but let the gates speak first.
|
|
20
|
+
*
|
|
21
|
+
* Split from `TerminalBuilder` with the diagnoses it calls. The class kept the
|
|
22
|
+
* ORDER of the gates — assertion, then dead selector, then the evidence floor —
|
|
23
|
+
* tangled with the fluent surface that configures them; the order is the whole
|
|
24
|
+
* content of this function and now reads as such.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Returns the RECEIPT, not a bare array — plan 0235.
|
|
28
|
+
*
|
|
29
|
+
* The gate paths below fire BEFORE `run.collectViolations()` on purpose (see
|
|
30
|
+
* `TerminalBuilder.collectWithAssertionGuard`'s comment: `CrossProjectBuilder`
|
|
31
|
+
* throws a `RangeError` from its collection, so a gate placed after it would
|
|
32
|
+
* never run and the error would escape the CLI's `ArchRuleError`-only catch).
|
|
33
|
+
* Those paths therefore report `examined: 0` — honest, because nothing was
|
|
34
|
+
* collected — and the caller must NOT reach for the count itself. A first cut
|
|
35
|
+
* did exactly that from `violations()` and reintroduced bug 0025's escaping
|
|
36
|
+
* `RangeError`; the evidence has to come back through here.
|
|
37
|
+
*/
|
|
38
|
+
export declare function collectWithAssertionGuard(run: RuleRun): CollectResult;
|
|
39
|
+
//# sourceMappingURL=terminal-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-execution.d.ts","sourceRoot":"","sources":["../../src/core/terminal-execution.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAQvD,gDAAgD;AAChD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,gBAAgB,IAAI,OAAO,CAAA;IAC3B,sBAAsB,IAAI,OAAO,CAAA;IACjC;;;;;OAKG;IACH,kBAAkB,IAAI,OAAO,CAAA;IAC7B,iBAAiB,IAAI,aAAa,CAAA;CACnC;AAED;;;;;;;GAOG;AACH;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAmFrE"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { collectResult } from '@nielspeter/eess';
|
|
2
|
+
import { assertionLessFinding, deadSelectorFindings, evidenceFloor, expiredDeclarationViolation, } from './vacuity-diagnosis.js';
|
|
3
|
+
/**
|
|
4
|
+
* Run the rule, but let the gates speak first.
|
|
5
|
+
*
|
|
6
|
+
* Split from `TerminalBuilder` with the diagnoses it calls. The class kept the
|
|
7
|
+
* ORDER of the gates — assertion, then dead selector, then the evidence floor —
|
|
8
|
+
* tangled with the fluent surface that configures them; the order is the whole
|
|
9
|
+
* content of this function and now reads as such.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Returns the RECEIPT, not a bare array — plan 0235.
|
|
13
|
+
*
|
|
14
|
+
* The gate paths below fire BEFORE `run.collectViolations()` on purpose (see
|
|
15
|
+
* `TerminalBuilder.collectWithAssertionGuard`'s comment: `CrossProjectBuilder`
|
|
16
|
+
* throws a `RangeError` from its collection, so a gate placed after it would
|
|
17
|
+
* never run and the error would escape the CLI's `ArchRuleError`-only catch).
|
|
18
|
+
* Those paths therefore report `examined: 0` — honest, because nothing was
|
|
19
|
+
* collected — and the caller must NOT reach for the count itself. A first cut
|
|
20
|
+
* did exactly that from `violations()` and reintroduced bug 0025's escaping
|
|
21
|
+
* `RangeError`; the evidence has to come back through here.
|
|
22
|
+
*/
|
|
23
|
+
export function collectWithAssertionGuard(run) {
|
|
24
|
+
if (run.assertsSomething()) {
|
|
25
|
+
// Plan 0074 (R3b). AFTER the assertion gate, deliberately: a rule with a
|
|
26
|
+
// dead glob AND no condition reports the missing assertion only, which is
|
|
27
|
+
// the right root cause — no selector makes an assertion-less rule capable
|
|
28
|
+
// of failing. The comment above already committed to that ordering; this
|
|
29
|
+
// is the branch that honours it.
|
|
30
|
+
//
|
|
31
|
+
// Gate-first for a dead SELECTOR, before `collectViolations()`: a rule whose
|
|
32
|
+
// selector cannot match will walk the whole AST to select nothing.
|
|
33
|
+
//
|
|
34
|
+
// But NOT gate-first for a dead **discovery** glob, and that asymmetry is
|
|
35
|
+
// plan 0080's whole design. Admitting discovery globs to the gate without
|
|
36
|
+
// it is destructive rather than additive: this early return means the gate
|
|
37
|
+
// REPLACES a builder's own finding rather than adding to it, and the slice
|
|
38
|
+
// builders already produce a better one (`emptyDiscoveryViolation`). Review
|
|
39
|
+
// measured the cost of getting this wrong — **15 slice tests, 13 of them
|
|
40
|
+
// the whole bug-0009 remedy corpus**, whose stated subject is that each
|
|
41
|
+
// branch's advice is true. Trading a rule 1 defect for a rule 2 defect.
|
|
42
|
+
//
|
|
43
|
+
// So the owner **declares itself** — `ownsDiscoveryDiagnosis()` — rather than
|
|
44
|
+
// the gate naming who to skip. An "except slice" list would be the same
|
|
45
|
+
// unchecked claim about who owns what that this file used to carry in a
|
|
46
|
+
// comment, and that comment being wrong is what plan 0080 exists to fix.
|
|
47
|
+
// The precedent is `assertsCardinality()` directly above: knowledge lives
|
|
48
|
+
// with the builder that has it.
|
|
49
|
+
//
|
|
50
|
+
// A first attempt derived it instead — run `collectViolations()` and prefer
|
|
51
|
+
// any `bypassFilters` finding it produced. That cannot work, and slice is
|
|
52
|
+
// the counterexample: for a **partially** empty `assignedFrom` it produces
|
|
53
|
+
// nothing *deliberately* (a slice with no files yet is legitimate, and that
|
|
54
|
+
// guard was withdrawn before release for firing on real projects). So
|
|
55
|
+
// "prefer what it produced" reads silence as "no opinion" when it is in
|
|
56
|
+
// fact the opinion.
|
|
57
|
+
const dead = deadSelectorFindings(run.facts);
|
|
58
|
+
if (dead.selector.length > 0)
|
|
59
|
+
return collectResult(dead.selector, { examined: 0 });
|
|
60
|
+
if (dead.discovery.length > 0 && !run.ownsDiscoveryDiagnosis())
|
|
61
|
+
return collectResult(dead.discovery, { examined: 0 });
|
|
62
|
+
// Plan 0099: the floor. 0098 produced this evidence and discarded it here;
|
|
63
|
+
// this is where discarding stops.
|
|
64
|
+
const collected = run.collectViolations();
|
|
65
|
+
const { examined } = collected;
|
|
66
|
+
const violations = [...collected];
|
|
67
|
+
// ADR-010's floor: four branches that all answer one question — is a pass
|
|
68
|
+
// here CONSTRUCTED from evidence, or defaulted? See `evidenceFloor`.
|
|
69
|
+
// The declaration, computed ONCE and used on both exits below.
|
|
70
|
+
//
|
|
71
|
+
// `evidenceFloor` returns the (empty) violations rather than `undefined` for
|
|
72
|
+
// a cardinality-exempt rule — its exempt path IS the declaration case — so an
|
|
73
|
+
// exit that drops the flag here leaves a `.notExist()` rule undeclared, and
|
|
74
|
+
// the emitter then reports it as a vacuous pass. Measured: exactly that,
|
|
75
|
+
// before this was hoisted.
|
|
76
|
+
const declaredEmpty = run.expectsEmpty ||
|
|
77
|
+
(examined === 0 && (collected.declaredEmpty === true || run.assertsCardinality()))
|
|
78
|
+
? true
|
|
79
|
+
: undefined;
|
|
80
|
+
const floor = evidenceFloor(run.facts, violations, examined);
|
|
81
|
+
if (floor !== undefined)
|
|
82
|
+
return collectResult(floor, { examined, sourceEmpty: collected.sourceEmpty, declaredEmpty });
|
|
83
|
+
// The expiry half, and it is the ROOT's alone — `rule-builder.ts` used to
|
|
84
|
+
// carry its own, so keeping both double-reported one fault.
|
|
85
|
+
//
|
|
86
|
+
// `_expectEmpty`, NOT `declaresEmpty()`: `.notExist()` over a non-empty
|
|
87
|
+
// selection is the condition doing its job, never an expired declaration,
|
|
88
|
+
// and on `CrossProjectBuilder` `declaresEmpty()` is an all-sides
|
|
89
|
+
// conjunction whose per-side expiry that class reports itself.
|
|
90
|
+
if (examined > 0 && run.expectsEmpty) {
|
|
91
|
+
return collectResult([expiredDeclarationViolation(run.facts, examined), ...violations], {
|
|
92
|
+
examined,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return collectResult(violations, {
|
|
96
|
+
examined,
|
|
97
|
+
sourceEmpty: collected.sourceEmpty,
|
|
98
|
+
declaredEmpty,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return collectResult(assertionLessFinding(run.facts), { examined: 0 });
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=terminal-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-execution.js","sourceRoot":"","sources":["../../src/core/terminal-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-comment-mask.d.ts","sourceRoot":"","sources":["../../src/core/ts-comment-mask.ts"],"names":[],"mappings":"AAoEA,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoC3E"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { Project, SyntaxKind } from 'ts-morph';
|
|
3
|
+
/**
|
|
4
|
+
* `eess-ts`'s comment masker, injected into the kernel's one exclusion-comment
|
|
5
|
+
* parser (ADR-012).
|
|
6
|
+
*
|
|
7
|
+
* The kernel has no AST and cannot get one — it declares zero dependencies so
|
|
8
|
+
* that `eess-md` does not inherit a TypeScript parser. Its default masker is a
|
|
9
|
+
* regex scan, which is correct but coarse. This is the accurate version for
|
|
10
|
+
* TypeScript, and it is all that ever justified `eess-ts` carrying a second copy
|
|
11
|
+
* of the parser. Now only the masker is this package's; the parsing is not.
|
|
12
|
+
*
|
|
13
|
+
* The kernel composes: this runs first, its default runs over the output. So
|
|
14
|
+
* this can only blank MORE than the default, never less.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Every string-like literal, blanked — [ts-archunit bug 0043](https://github.com/nielspeter/ts-archunit/blob/main/bugs/fixed/0043-an-exclusion-directive-inside-a-string-literal-suppresses.md).
|
|
18
|
+
*
|
|
19
|
+
* The scan below is line-based, and a line-based scan cannot tell a directive
|
|
20
|
+
* from the same characters inside a string. Measured before this existed: all
|
|
21
|
+
* three of `"…"`, `'…'` and `` `…` `` containing the directive text produced a
|
|
22
|
+
* **live exclusion** that silenced a real finding — silently, because a
|
|
23
|
+
* directive carrying a reason never triggers the undocumented-exclusion warning.
|
|
24
|
+
*
|
|
25
|
+
* **Newlines are preserved**, and that is the load-bearing part: the scan below
|
|
26
|
+
* is line-based and reports `line` on every exclusion, so a mask that dropped a
|
|
27
|
+
* newline would misreport every directive after it.
|
|
28
|
+
*
|
|
29
|
+
* Characters are replaced with spaces rather than removed, which keeps
|
|
30
|
+
* intra-line offsets stable too — but nothing downstream consumes a column, so
|
|
31
|
+
* that half is defence in depth rather than a guarded property. Measured:
|
|
32
|
+
* collapsing the blanks to `''`, and masking one character short, both leave the
|
|
33
|
+
* suite green. Recorded rather than dressed up — a sabotage row that survives
|
|
34
|
+
* for a real reason is a different thing from a missing guard.
|
|
35
|
+
*
|
|
36
|
+
* ## Why a parse, and not a scan
|
|
37
|
+
*
|
|
38
|
+
* The first attempt used `ts.createScanner`, which is the real lexer and fixed
|
|
39
|
+
* the three plain cases. It left two: `` `${x} // …` `` and JSX text. A bare
|
|
40
|
+
* scanner has no parser context, so it cannot know when to re-scan a template
|
|
41
|
+
* middle or JSX children, and both were classified as code — meaning the `//`
|
|
42
|
+
* inside them became a comment. Measured, not predicted.
|
|
43
|
+
*
|
|
44
|
+
* So: parse, and blank the literals. Everything remaining is code, where `//`
|
|
45
|
+
* genuinely does start a comment.
|
|
46
|
+
*
|
|
47
|
+
* A **ts-morph** project rather than the raw compiler API, per
|
|
48
|
+
* [ADR-002](../../../../adr/002-ts-morph-ast-engine.md), reusing one in-memory project
|
|
49
|
+
* across calls so the cost is a parse rather than a project construction. The
|
|
50
|
+
* whole scan is gated on a rule having already produced a violation in the file,
|
|
51
|
+
* so nothing is parsed for a clean run.
|
|
52
|
+
*
|
|
53
|
+
* A `TemplateExpression` is blanked **whole**, including its `${…}`
|
|
54
|
+
* substitutions. A comment is legal inside a substitution, so this can miss a
|
|
55
|
+
* real directive there — it errs toward *not* suppressing, which is the safe
|
|
56
|
+
* direction for a mechanism whose failure mode is a silent green.
|
|
57
|
+
*/
|
|
58
|
+
const LITERAL_KINDS = [
|
|
59
|
+
SyntaxKind.StringLiteral,
|
|
60
|
+
SyntaxKind.NoSubstitutionTemplateLiteral,
|
|
61
|
+
SyntaxKind.TemplateExpression,
|
|
62
|
+
SyntaxKind.RegularExpressionLiteral,
|
|
63
|
+
SyntaxKind.JsxText,
|
|
64
|
+
];
|
|
65
|
+
let scratch;
|
|
66
|
+
export function maskTsLiterals(sourceText, filePath) {
|
|
67
|
+
scratch ??= new Project({ useInMemoryFileSystem: true });
|
|
68
|
+
// `.tsx` so JSX parses; a `.ts` parse reads `<div>` as a type assertion and
|
|
69
|
+
// the JsxText case silently stops being covered.
|
|
70
|
+
const sourceFile = scratch.createSourceFile(`/scan/${path.basename(filePath)}.tsx`, sourceText, {
|
|
71
|
+
overwrite: true,
|
|
72
|
+
});
|
|
73
|
+
const out = sourceText.split('');
|
|
74
|
+
for (const kind of LITERAL_KINDS) {
|
|
75
|
+
for (const node of sourceFile.getDescendantsOfKind(kind)) {
|
|
76
|
+
for (let i = node.getStart(); i < node.getEnd(); i++) {
|
|
77
|
+
if (out[i] !== undefined && out[i] !== '\n')
|
|
78
|
+
out[i] = ' ';
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const withoutLiteralText = out.join('');
|
|
83
|
+
// Block comments too, and this is not tidying — it is the difference between
|
|
84
|
+
// documenting the feature and invoking it.
|
|
85
|
+
//
|
|
86
|
+
// The grammar is `//`-only and always has been (a `/* … */` directive produced
|
|
87
|
+
// no exclusion before this fix and still produces none). But a JSDoc block
|
|
88
|
+
// that *mentions* the directive in prose puts the characters on a line, and
|
|
89
|
+
// the line scan below cannot tell prose from a directive.
|
|
90
|
+
//
|
|
91
|
+
// Found the hard way: this very file's docstring explains the bug, contains
|
|
92
|
+
// the directive text, and the moment comments started being read correctly it
|
|
93
|
+
// declared a live exclusion against `preset/boundaries/no-cross-boundary` —
|
|
94
|
+
// caught by this repo's own preset fan-out test. Any user writing a code
|
|
95
|
+
// comment about the feature would hit the same thing.
|
|
96
|
+
//
|
|
97
|
+
// Safe to do with a regex here, and only here: every string, template and
|
|
98
|
+
// regex literal has already been blanked, so a surviving `/*` is a real
|
|
99
|
+
// block-comment start.
|
|
100
|
+
return withoutLiteralText.replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, ' '));
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=ts-comment-mask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-comment-mask.js","sourceRoot":"","sources":["../../src/core/ts-comment-mask.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE9C;;;;;;;;;;;;GAYG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,aAAa,GAAG;IACpB,UAAU,CAAC,aAAa;IACxB,UAAU,CAAC,6BAA6B;IACxC,UAAU,CAAC,kBAAkB;IAC7B,UAAU,CAAC,wBAAwB;IACnC,UAAU,CAAC,OAAO;CACV,CAAA;AAEV,IAAI,OAA4B,CAAA;AAEhC,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,QAAgB;IACjE,OAAO,KAAK,IAAI,OAAO,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAA;IACxD,4EAA4E;IAC5E,iDAAiD;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE;QAC9F,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;oBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAA;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,kBAAkB,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEvC,6EAA6E;IAC7E,2CAA2C;IAC3C,EAAE;IACF,+EAA+E;IAC/E,2EAA2E;IAC3E,4EAA4E;IAC5E,0DAA0D;IAC1D,EAAE;IACF,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,yEAAyE;IACzE,sDAAsD;IACtD,EAAE;IACF,0EAA0E;IAC1E,wEAAwE;IACxE,uBAAuB;IACvB,OAAO,kBAAkB,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA;AACzF,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { ArchViolation } from '@nielspeter/eess';
|
|
2
|
+
import type { ArchProject } from './project.js';
|
|
3
|
+
import type { GlobNode, RuleDescription } from '@nielspeter/eess';
|
|
4
|
+
/**
|
|
5
|
+
* What a rule can be asked about itself, without running it.
|
|
6
|
+
*
|
|
7
|
+
* Every diagnosis in this module is a function of these and nothing else — none
|
|
8
|
+
* of them evaluates the rule. That is what let them leave `TerminalBuilder`:
|
|
9
|
+
* they were never terminal behaviour, they were explanations OF it, and keeping
|
|
10
|
+
* them on the class is most of why it carried 372 code lines.
|
|
11
|
+
*/
|
|
12
|
+
export declare const ASSERTION_DOCS = "https://github.com/nielspeter/eess/blob/main/docs/violation-reporting.md#a-rule-must-assert-something";
|
|
13
|
+
export interface RuleFacts {
|
|
14
|
+
/** The builder's own class, for naming the rule in a finding. */
|
|
15
|
+
readonly ruleClass: {
|
|
16
|
+
name: string;
|
|
17
|
+
};
|
|
18
|
+
describeRule(): RuleDescription;
|
|
19
|
+
assertionAdvice(): string;
|
|
20
|
+
emptyDeclarationAdvice(): string;
|
|
21
|
+
examinedUnitNoun(): string;
|
|
22
|
+
narrowingHint(): string | undefined;
|
|
23
|
+
getProject(): ArchProject | undefined;
|
|
24
|
+
globs(): readonly GlobNode[];
|
|
25
|
+
assertsCardinality(): boolean;
|
|
26
|
+
declaresEmpty(): boolean;
|
|
27
|
+
zeroSubjectsAdvice(): string;
|
|
28
|
+
zeroSubjectsViolation(project: ArchProject | undefined): ArchViolation;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The finding for a rule that states no assertion at all.
|
|
32
|
+
*
|
|
33
|
+
* Extracted from `collectWithAssertionGuard`, which was the assertion gate,
|
|
34
|
+
* the dead-selector gate, the evidence floor AND this constructor in one
|
|
35
|
+
* method — most of its branching was the reader having to hold all four.
|
|
36
|
+
*/
|
|
37
|
+
export declare function assertionLessFinding(facts: RuleFacts): ArchViolation[];
|
|
38
|
+
/**
|
|
39
|
+
* ADR-010's floor: what to report when a family produced NOTHING from NOTHING.
|
|
40
|
+
*
|
|
41
|
+
* `undefined` means "no floor finding — carry on", which is not the same as
|
|
42
|
+
* an empty array (that is a deliberate pass, and `assertsCardinality()`
|
|
43
|
+
* returns one).
|
|
44
|
+
*
|
|
45
|
+
* A family that produced ANY finding passes through untouched. The floor
|
|
46
|
+
* fires only where a family produced nothing from nothing — bug 0066's shape.
|
|
47
|
+
* Each family's own empty-selection block stays as the better-attributed
|
|
48
|
+
* implementation; this is a floor beneath them, not a replacement.
|
|
49
|
+
*
|
|
50
|
+
* Precedence has already removed the other causes by the time this is reached:
|
|
51
|
+
* no dead selector glob, no missing assertion, no empty project, no cardinality
|
|
52
|
+
* assertion, no declaration. So the remedy names ONE cause without the hedging
|
|
53
|
+
* ADR-009 rule 2 forbids.
|
|
54
|
+
*
|
|
55
|
+
* Three defects in 0098's preview wording are fixed here, from its
|
|
56
|
+
* user-perspective review:
|
|
57
|
+
*
|
|
58
|
+
* - **It hedged where we hold the fact.** "including any default it applies
|
|
59
|
+
* that you did not write" was printed as a hypothetical while the rule knew
|
|
60
|
+
* the answer. We materialized the selection, so we know the project loaded N
|
|
61
|
+
* files and the selection produced 0 — print the numbers.
|
|
62
|
+
* - **"can never fail" overstated.** For a `crossLayer` rule whose pairs do not
|
|
63
|
+
* exist yet, or a folder empty in a young repository, the rule is correct and
|
|
64
|
+
* matches nothing *today*. "never" made a true statement false.
|
|
65
|
+
* - **The ranking was wrong for the people most likely to adopt early.** It
|
|
66
|
+
* called widening the fix and declaring "the exception… proves nothing". For
|
|
67
|
+
* a team whose second layer is not built yet, widening is *impossible* — the
|
|
68
|
+
* code does not exist — so the only available action was the one the message
|
|
69
|
+
* disparaged. Both are now offered as peers, and the declaration is described
|
|
70
|
+
* by what it does: it expires.
|
|
71
|
+
*/
|
|
72
|
+
export declare function evidenceFloor(facts: RuleFacts, violations: ArchViolation[], examined: number): ArchViolation[] | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* A declaration that has expired — plan 0099.
|
|
75
|
+
*
|
|
76
|
+
* The property that makes `.expectEmpty()` an assertion rather than
|
|
77
|
+
* `allowEmpty()`'s permission, which had no failing state and so stayed green
|
|
78
|
+
* forever. Here the number IS the finding: the author asserted zero and the
|
|
79
|
+
* answer is not zero.
|
|
80
|
+
*
|
|
81
|
+
* The remedy is DISTINCT from the message, because `format.ts` drops the `Fix:`
|
|
82
|
+
* line when the two are equal — a defect this producer's rule-builder ancestor
|
|
83
|
+
* shipped with, found in review of plan 0089.
|
|
84
|
+
*/
|
|
85
|
+
export declare function expiredDeclarationViolation(facts: RuleFacts, examined: number): ArchViolation;
|
|
86
|
+
/**
|
|
87
|
+
* A dead glob's findings, **split by whether the builder might own the message**.
|
|
88
|
+
*
|
|
89
|
+
* `selector` and `discovery` are both faults (`isFaultPosition`), but the caller
|
|
90
|
+
* treats them differently: a dead selector short-circuits before the AST walk,
|
|
91
|
+
* while a dead discovery glob defers to whatever the builder produced. An
|
|
92
|
+
* `ArchViolation` carries no position, so the split happens here rather than
|
|
93
|
+
* being recovered by inspecting findings downstream.
|
|
94
|
+
*/
|
|
95
|
+
export declare function deadSelectorFindings(facts: RuleFacts): {
|
|
96
|
+
selector: ArchViolation[];
|
|
97
|
+
discovery: ArchViolation[];
|
|
98
|
+
};
|
|
99
|
+
/** The value behind `TerminalBuilder.zeroSubjectsAdvice()`. */
|
|
100
|
+
export declare function zeroSubjectsAdviceOf(facts: RuleFacts): string;
|
|
101
|
+
/** The value behind `TerminalBuilder.zeroSubjectsViolation()`. */
|
|
102
|
+
export declare function zeroSubjectsViolationOf(facts: RuleFacts, project: ArchProject | undefined): ArchViolation;
|
|
103
|
+
//# sourceMappingURL=vacuity-diagnosis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vacuity-diagnosis.d.ts","sourceRoot":"","sources":["../../src/core/vacuity-diagnosis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAY,eAAe,EAAE,MAAM,kBAAkB,CAAA;AA2B3E;;;;;;;GAOG;AAKH,eAAO,MAAM,cAAc,0GAC8E,CAAA;AAEzG,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,YAAY,IAAI,eAAe,CAAA;IAC/B,eAAe,IAAI,MAAM,CAAA;IACzB,sBAAsB,IAAI,MAAM,CAAA;IAChC,gBAAgB,IAAI,MAAM,CAAA;IAC1B,aAAa,IAAI,MAAM,GAAG,SAAS,CAAA;IACnC,UAAU,IAAI,WAAW,GAAG,SAAS,CAAA;IACrC,KAAK,IAAI,SAAS,QAAQ,EAAE,CAAA;IAC5B,kBAAkB,IAAI,OAAO,CAAA;IAC7B,aAAa,IAAI,OAAO,CAAA;IACxB,kBAAkB,IAAI,MAAM,CAAA;IAC5B,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,CAAA;CACvE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,EAAE,CAmCtE;AA6FD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,aAAa,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,GAAG,SAAS,CA4B7B;AAmCD;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAoC7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG;IACtD,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,SAAS,EAAE,aAAa,EAAE,CAAA;CAC3B,CAsCA;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAgC7D;AAED,kEAAkE;AAClE,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GAAG,SAAS,GAC/B,aAAa,CA4Bf"}
|