@nielspeter/eess-ts 0.2.0 → 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 +87 -34
- 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 -14
- 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SyntaxKind } from 'ts-morph';
|
|
1
|
+
import { Node, SyntaxKind } from 'ts-morph';
|
|
2
2
|
import { createViolation } from '../core/violation.js';
|
|
3
3
|
/**
|
|
4
4
|
* All public methods must have JSDoc comments.
|
|
@@ -55,15 +55,24 @@ export function noPublicFields() {
|
|
|
55
55
|
const violations = [];
|
|
56
56
|
for (const cls of elements) {
|
|
57
57
|
for (const prop of cls.getProperties()) {
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
|
|
58
|
+
// An ECMAScript `#private` field FIRST, because `getScope()` cannot see
|
|
59
|
+
// it: `#name` carries no TypeScript accessibility modifier, so the scope
|
|
60
|
+
// reads `'public'` and the field was reported. That is a false positive
|
|
61
|
+
// whose remedy — "use private + getter/setter" — is strictly backwards:
|
|
62
|
+
// `#` is private at RUNTIME, while `private` is erased at compile time.
|
|
63
|
+
// Measured on `ArchRuleError.#violations` (plan 0165).
|
|
64
|
+
if (Node.isPrivateIdentifier(prop.getNameNode()))
|
|
61
65
|
continue;
|
|
62
66
|
const scope = prop.getScope();
|
|
63
67
|
if (scope !== undefined && String(scope) !== 'public')
|
|
64
68
|
continue;
|
|
65
|
-
//
|
|
66
|
-
|
|
69
|
+
// `readonly` is not mutable — which is what this rule is named for.
|
|
70
|
+
// It previously accepted only `static readonly`, so a public
|
|
71
|
+
// `readonly` INSTANCE field was reported with the remedy "use private
|
|
72
|
+
// + getter/setter": advice that removes nothing (the field already
|
|
73
|
+
// cannot be reassigned) and that the rule's own description does not
|
|
74
|
+
// support. Measured on `DiffFilter.baseBranch` (plan 0165).
|
|
75
|
+
if (prop.isReadonly())
|
|
67
76
|
continue;
|
|
68
77
|
violations.push(createViolation(prop, `${cls.getName() ?? '<anonymous>'}.${prop.getName()} is a public field — use private + getter/setter`, context));
|
|
69
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-quality.js","sourceRoot":"","sources":["../../src/rules/code-quality.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"code-quality.js","sourceRoot":"","sources":["../../src/rules/code-quality.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/hygiene.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export declare function noDeadModules(): Condition<SourceFile>;
|
|
|
27
27
|
*/
|
|
28
28
|
export declare function noUnusedExports(): Condition<SourceFile>;
|
|
29
29
|
/**
|
|
30
|
-
* No stub or deferred-work comments in function
|
|
30
|
+
* No stub or deferred-work comments in a function's body OR its own leading docstring.
|
|
31
31
|
* Catches common markers (see STUB_PATTERNS) and phrases like
|
|
32
32
|
* "not implemented" or "coming soon".
|
|
33
33
|
*
|
package/dist/rules/hygiene.js
CHANGED
|
@@ -31,7 +31,7 @@ export function noUnusedExports() {
|
|
|
31
31
|
return haveNoUnusedExports();
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
* No stub or deferred-work comments in function
|
|
34
|
+
* No stub or deferred-work comments in a function's body OR its own leading docstring.
|
|
35
35
|
* Catches common markers (see STUB_PATTERNS) and phrases like
|
|
36
36
|
* "not implemented" or "coming soon".
|
|
37
37
|
*
|
|
@@ -17,7 +17,8 @@ import type { Condition } from '@nielspeter/eess';
|
|
|
17
17
|
*/
|
|
18
18
|
export declare function maxFunctionComplexity(threshold: number): Condition<ArchFunction>;
|
|
19
19
|
/**
|
|
20
|
-
* Function must not exceed the given number of lines
|
|
20
|
+
* Function must not exceed the given number of CODE lines — comments and blank
|
|
21
|
+
* lines are not counted (bug 0170).
|
|
21
22
|
*
|
|
22
23
|
* @example
|
|
23
24
|
* ```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-function.d.ts","sourceRoot":"","sources":["../../src/rules/metrics-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAKnE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"metrics-function.d.ts","sourceRoot":"","sources":["../../src/rules/metrics-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAKnE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CA+BhF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CA6B3E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CA0BhF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createViolation } from '../core/violation.js';
|
|
2
1
|
import { cyclomaticComplexity, linesOfCode } from '../helpers/complexity.js';
|
|
2
|
+
import { metricViolation } from '../core/metric-violation.js';
|
|
3
3
|
/**
|
|
4
4
|
* Function must not exceed the given cyclomatic complexity.
|
|
5
5
|
*
|
|
@@ -23,7 +23,18 @@ export function maxFunctionComplexity(threshold) {
|
|
|
23
23
|
for (const fn of elements) {
|
|
24
24
|
const cc = cyclomaticComplexity(fn.getBody());
|
|
25
25
|
if (cc > threshold) {
|
|
26
|
-
|
|
26
|
+
// ONE derivation, used for the message and the identity alike. Two
|
|
27
|
+
// expressions that agree in every branch but one is how bug 0068
|
|
28
|
+
// happened: `fn.getName() ?? '<anonymous>'` beside a bare
|
|
29
|
+
// `fn.getName()` disagree for an anonymous function, which would have
|
|
30
|
+
// reproduced the same defect inside its own fix.
|
|
31
|
+
const name = fn.getName() ?? '<anonymous>';
|
|
32
|
+
violations.push(metricViolation(fn.getNode(), {
|
|
33
|
+
metric: 'complexity',
|
|
34
|
+
measured: cc,
|
|
35
|
+
message: `${name} has cyclomatic complexity ${String(cc)} (max: ${String(threshold)})`,
|
|
36
|
+
qualifiedName: name,
|
|
37
|
+
}, context));
|
|
27
38
|
}
|
|
28
39
|
}
|
|
29
40
|
return violations;
|
|
@@ -31,7 +42,8 @@ export function maxFunctionComplexity(threshold) {
|
|
|
31
42
|
};
|
|
32
43
|
}
|
|
33
44
|
/**
|
|
34
|
-
* Function must not exceed the given number of lines
|
|
45
|
+
* Function must not exceed the given number of CODE lines — comments and blank
|
|
46
|
+
* lines are not counted (bug 0170).
|
|
35
47
|
*
|
|
36
48
|
* @example
|
|
37
49
|
* ```ts
|
|
@@ -42,13 +54,22 @@ export function maxFunctionComplexity(threshold) {
|
|
|
42
54
|
*/
|
|
43
55
|
export function maxFunctionLines(threshold) {
|
|
44
56
|
return {
|
|
45
|
-
description: `have no more than ${String(threshold)} lines`,
|
|
57
|
+
description: `have no more than ${String(threshold)} code lines`,
|
|
46
58
|
evaluate(elements, context) {
|
|
47
59
|
const violations = [];
|
|
48
60
|
for (const fn of elements) {
|
|
49
61
|
const loc = linesOfCode(fn.getNode());
|
|
50
62
|
if (loc > threshold) {
|
|
51
|
-
|
|
63
|
+
const name = fn.getName() ?? '<anonymous>'; // one derivation — see maxFunctionComplexity
|
|
64
|
+
violations.push(metricViolation(fn.getNode(), {
|
|
65
|
+
metric: 'lines',
|
|
66
|
+
// `code-lines` since bug 0170 — the metric kept its name when it stopped
|
|
67
|
+
// counting comments, and the baseline must not compare across that.
|
|
68
|
+
unit: 'code-lines',
|
|
69
|
+
measured: loc,
|
|
70
|
+
message: `${name} has ${String(loc)} code lines (max: ${String(threshold)})`,
|
|
71
|
+
qualifiedName: name,
|
|
72
|
+
}, context));
|
|
52
73
|
}
|
|
53
74
|
}
|
|
54
75
|
return violations;
|
|
@@ -77,7 +98,13 @@ export function maxFunctionParameters(threshold) {
|
|
|
77
98
|
for (const fn of elements) {
|
|
78
99
|
const params = fn.getParameters().length;
|
|
79
100
|
if (params > threshold) {
|
|
80
|
-
|
|
101
|
+
const name = fn.getName() ?? '<anonymous>'; // one derivation — see maxFunctionComplexity
|
|
102
|
+
violations.push(metricViolation(fn.getNode(), {
|
|
103
|
+
metric: 'parameters',
|
|
104
|
+
measured: params,
|
|
105
|
+
message: `${name} has ${String(params)} parameters (max: ${String(threshold)}) — use an options object`,
|
|
106
|
+
qualifiedName: name,
|
|
107
|
+
}, context));
|
|
81
108
|
}
|
|
82
109
|
}
|
|
83
110
|
return violations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-function.js","sourceRoot":"","sources":["../../src/rules/metrics-function.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"metrics-function.js","sourceRoot":"","sources":["../../src/rules/metrics-function.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/metrics.d.ts
CHANGED
|
@@ -13,7 +13,8 @@ import type { Condition } from '@nielspeter/eess';
|
|
|
13
13
|
*/
|
|
14
14
|
export declare function maxCyclomaticComplexity(threshold: number): Condition<ClassDeclaration>;
|
|
15
15
|
/**
|
|
16
|
-
* No class may exceed the given number of lines
|
|
16
|
+
* No class may exceed the given number of CODE lines — comments and blank
|
|
17
|
+
* lines are not counted (bug 0170).
|
|
17
18
|
*
|
|
18
19
|
* @example
|
|
19
20
|
* ```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/rules/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAKjB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AA8BnE;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/rules/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAKjB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AA8BnE;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CA2BtF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CA2B5E;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CA8B7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAwBzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CA2B5E;AAGD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,uBAAuB,CAAA"}
|
package/dist/rules/metrics.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createViolation } from '../core/violation.js';
|
|
2
1
|
import { cyclomaticComplexity, linesOfCode } from '../helpers/complexity.js';
|
|
2
|
+
import { metricViolation } from '../core/metric-violation.js';
|
|
3
3
|
function getClassMembers(cls) {
|
|
4
4
|
return [
|
|
5
5
|
...cls.getMethods(),
|
|
@@ -36,7 +36,12 @@ export function maxCyclomaticComplexity(threshold) {
|
|
|
36
36
|
for (const member of getClassMembers(cls)) {
|
|
37
37
|
const cc = cyclomaticComplexity(member.getBody());
|
|
38
38
|
if (cc > threshold) {
|
|
39
|
-
violations.push(
|
|
39
|
+
violations.push(metricViolation(member, {
|
|
40
|
+
metric: 'complexity',
|
|
41
|
+
measured: cc,
|
|
42
|
+
qualifiedName: getMemberName(cls, member),
|
|
43
|
+
message: `${getMemberName(cls, member)} has cyclomatic complexity ${String(cc)} (max: ${String(threshold)}) — split into smaller methods`,
|
|
44
|
+
}, context));
|
|
40
45
|
}
|
|
41
46
|
}
|
|
42
47
|
}
|
|
@@ -45,7 +50,8 @@ export function maxCyclomaticComplexity(threshold) {
|
|
|
45
50
|
};
|
|
46
51
|
}
|
|
47
52
|
/**
|
|
48
|
-
* No class may exceed the given number of lines
|
|
53
|
+
* No class may exceed the given number of CODE lines — comments and blank
|
|
54
|
+
* lines are not counted (bug 0170).
|
|
49
55
|
*
|
|
50
56
|
* @example
|
|
51
57
|
* ```ts
|
|
@@ -56,13 +62,20 @@ export function maxCyclomaticComplexity(threshold) {
|
|
|
56
62
|
*/
|
|
57
63
|
export function maxClassLines(threshold) {
|
|
58
64
|
return {
|
|
59
|
-
description: `have no more than ${String(threshold)} lines`,
|
|
65
|
+
description: `have no more than ${String(threshold)} code lines`,
|
|
60
66
|
evaluate(elements, context) {
|
|
61
67
|
const violations = [];
|
|
62
68
|
for (const cls of elements) {
|
|
63
69
|
const loc = linesOfCode(cls);
|
|
64
70
|
if (loc > threshold) {
|
|
65
|
-
violations.push(
|
|
71
|
+
violations.push(metricViolation(cls, {
|
|
72
|
+
metric: 'lines',
|
|
73
|
+
// `code-lines` since bug 0170 — the metric kept its name when it stopped
|
|
74
|
+
// counting comments, and the baseline must not compare across that.
|
|
75
|
+
unit: 'code-lines',
|
|
76
|
+
measured: loc,
|
|
77
|
+
message: `${cls.getName() ?? '<anonymous>'} has ${String(loc)} code lines (max: ${String(threshold)}) — consider splitting into focused classes`,
|
|
78
|
+
}, context));
|
|
66
79
|
}
|
|
67
80
|
}
|
|
68
81
|
return violations;
|
|
@@ -81,14 +94,22 @@ export function maxClassLines(threshold) {
|
|
|
81
94
|
*/
|
|
82
95
|
export function maxMethodLines(threshold) {
|
|
83
96
|
return {
|
|
84
|
-
description: `have no method longer than ${String(threshold)} lines`,
|
|
97
|
+
description: `have no method longer than ${String(threshold)} code lines`,
|
|
85
98
|
evaluate(elements, context) {
|
|
86
99
|
const violations = [];
|
|
87
100
|
for (const cls of elements) {
|
|
88
101
|
for (const member of getClassMembers(cls)) {
|
|
89
102
|
const loc = linesOfCode(member);
|
|
90
103
|
if (loc > threshold) {
|
|
91
|
-
violations.push(
|
|
104
|
+
violations.push(metricViolation(member, {
|
|
105
|
+
metric: 'lines',
|
|
106
|
+
// `code-lines` since bug 0170 — the metric kept its name when it stopped
|
|
107
|
+
// counting comments, and the baseline must not compare across that.
|
|
108
|
+
unit: 'code-lines',
|
|
109
|
+
measured: loc,
|
|
110
|
+
qualifiedName: getMemberName(cls, member),
|
|
111
|
+
message: `${getMemberName(cls, member)} has ${String(loc)} code lines (max: ${String(threshold)})`,
|
|
112
|
+
}, context));
|
|
92
113
|
}
|
|
93
114
|
}
|
|
94
115
|
}
|
|
@@ -116,7 +137,11 @@ export function maxMethods(threshold) {
|
|
|
116
137
|
for (const cls of elements) {
|
|
117
138
|
const count = cls.getMethods().length;
|
|
118
139
|
if (count > threshold) {
|
|
119
|
-
violations.push(
|
|
140
|
+
violations.push(metricViolation(cls, {
|
|
141
|
+
metric: 'methods',
|
|
142
|
+
measured: count,
|
|
143
|
+
message: `${cls.getName() ?? '<anonymous>'} has ${String(count)} methods (max: ${String(threshold)}) — consider splitting into focused classes`,
|
|
144
|
+
}, context));
|
|
120
145
|
}
|
|
121
146
|
}
|
|
122
147
|
return violations;
|
|
@@ -144,7 +169,12 @@ export function maxParameters(threshold) {
|
|
|
144
169
|
for (const member of getClassMembers(cls)) {
|
|
145
170
|
const params = member.getParameters().length;
|
|
146
171
|
if (params > threshold) {
|
|
147
|
-
violations.push(
|
|
172
|
+
violations.push(metricViolation(member, {
|
|
173
|
+
metric: 'parameters',
|
|
174
|
+
measured: params,
|
|
175
|
+
qualifiedName: getMemberName(cls, member),
|
|
176
|
+
message: `${getMemberName(cls, member)} has ${String(params)} parameters (max: ${String(threshold)}) — use an options object`,
|
|
177
|
+
}, context));
|
|
148
178
|
}
|
|
149
179
|
}
|
|
150
180
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/rules/metrics.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/rules/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,77 @@
|
|
|
1
|
+
import type { RuleDescription } from '@nielspeter/eess';
|
|
1
2
|
import { SmellBuilder } from './smell-builder.js';
|
|
2
|
-
import type { ArchViolation } from '
|
|
3
|
+
import type { ArchViolation } from '@nielspeter/eess';
|
|
3
4
|
import type { ArchProject } from '../core/project.js';
|
|
4
5
|
export declare class DuplicateBodiesBuilder extends SmellBuilder {
|
|
5
6
|
private _minSimilarity;
|
|
7
|
+
private _minDistinctVocabulary;
|
|
6
8
|
constructor(project: ArchProject);
|
|
7
9
|
/** Set the AST similarity threshold. Default: 0.85. */
|
|
8
10
|
withMinSimilarity(threshold: number): this;
|
|
11
|
+
/**
|
|
12
|
+
* Minimum count of distinct identifier/literal text either body must carry
|
|
13
|
+
* before a pair is even compared — not raw line count, and not similarity.
|
|
14
|
+
* Two bodies can share a syntactic shape for no reason other than the shape
|
|
15
|
+
* being mandated (a wither, a getter, a boilerplate skeleton); below this
|
|
16
|
+
* threshold a "match" carries no information about what the code actually
|
|
17
|
+
* does. Default: 8 — see plan 0103's Phase 0 triage for how it was chosen.
|
|
18
|
+
* Tune down for a codebase with terser naming than this default assumes;
|
|
19
|
+
* tune up if short, low-vocabulary bodies keep surfacing as noise.
|
|
20
|
+
*/
|
|
21
|
+
minDistinctVocabulary(n: number): this;
|
|
22
|
+
/**
|
|
23
|
+
* Named by id or by what the detector checks — the inherited version returns
|
|
24
|
+
* the sentinel `'unnamed'`, and `inconsistent-siblings.ts` already carries this
|
|
25
|
+
* override for that reason.
|
|
26
|
+
*
|
|
27
|
+
* It became load-bearing in plan 0099: the floor makes an over-filtered
|
|
28
|
+
* detector FAIL, and `dedupeConfigFindings` keys on `(file, ruleId ?? rule,
|
|
29
|
+
* element)`. With `file: ''` and `'unnamed'` in both other slots, three
|
|
30
|
+
* genuinely different detectors — different similarity, different
|
|
31
|
+
* `ignorePaths` — collapsed into one finding claiming they were "one option"
|
|
32
|
+
* and "one edit". Two were silently discarded and the survivor said
|
|
33
|
+
* `Rule: unnamed`.
|
|
34
|
+
*/
|
|
35
|
+
describeRule(): RuleDescription;
|
|
9
36
|
protected detect(): ArchViolation[];
|
|
10
37
|
protected describe(): string;
|
|
11
38
|
/** Check if a file path passes all glob-based filters. */
|
|
39
|
+
/**
|
|
40
|
+
* The three matcher sets travel together as one `filters` — they are one
|
|
41
|
+
* configuration, and four positional `picomatch.Matcher[]` arguments in a row
|
|
42
|
+
* are exactly the transposition risk the parameter cap exists to prevent.
|
|
43
|
+
*/
|
|
12
44
|
private passesFileFilters;
|
|
13
45
|
/** Check if a function body meets the minimum line count. */
|
|
14
46
|
private meetsMinLines;
|
|
15
47
|
/** Collect all functions matching folder/path/test filters. */
|
|
48
|
+
/**
|
|
49
|
+
* Bodies entering pairwise comparison — plan 0096, and the ONE method both
|
|
50
|
+
* readers call.
|
|
51
|
+
*
|
|
52
|
+
* The seam is AFTER `minLines` and the path filters: a project can load 300
|
|
53
|
+
* files while every body sits under the threshold, and the count that notices
|
|
54
|
+
* has to be taken where the comparison receives its input, not where the files
|
|
55
|
+
* were read.
|
|
56
|
+
*
|
|
57
|
+
* No fingerprinting to count. `meetsMinLines` already returns false for a
|
|
58
|
+
* bodyless function, so `fingerprintAll(xs).length === xs.length` **always** —
|
|
59
|
+
* fingerprinting to answer "is it zero" is a full AST pass of dead work on
|
|
60
|
+
* what becomes the hot path of every consumer's `diagnose()` call.
|
|
61
|
+
*/
|
|
62
|
+
private selected;
|
|
63
|
+
/** Units this detector examined — plan 0096. */
|
|
64
|
+
examinedUnits(): number;
|
|
16
65
|
private collectFilteredFunctions;
|
|
17
|
-
/** Build fingerprints for all collected functions. */
|
|
18
|
-
private fingerprintAll;
|
|
19
|
-
/** Compare all pairs of fingerprints, collect those above threshold. */
|
|
20
|
-
private findSimilarPairs;
|
|
21
66
|
/** Build violations from similar pairs. */
|
|
67
|
+
/**
|
|
68
|
+
* Report order: by folder when `.groupByFolder()` asked for it, otherwise the
|
|
69
|
+
* order the pairs were found in.
|
|
70
|
+
*
|
|
71
|
+
* Extracted from {@link buildViolations} so that method is the violation
|
|
72
|
+
* shape and nothing else — presentation order is a separate decision.
|
|
73
|
+
*/
|
|
74
|
+
private orderedPairs;
|
|
22
75
|
private buildViolations;
|
|
23
76
|
}
|
|
24
77
|
//# sourceMappingURL=duplicate-bodies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicate-bodies.d.ts","sourceRoot":"","sources":["../../src/smells/duplicate-bodies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"duplicate-bodies.d.ts","sourceRoot":"","sources":["../../src/smells/duplicate-bodies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAIjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AASrD,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,sBAAsB,CAAI;gBAEtB,OAAO,EAAE,WAAW;IAIhC,uDAAuD;IACvD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1C;;;;;;;;;OASG;IACH,qBAAqB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAMtC;;;;;;;;;;;;OAYG;IACM,YAAY,IAAI,eAAe;IAOxC,SAAS,CAAC,MAAM,IAAI,aAAa,EAAE;IAOnC,SAAS,CAAC,QAAQ,IAAI,MAAM;IAqB5B,0DAA0D;IAC1D;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAoBzB,6DAA6D;IAC7D,OAAO,CAAC,aAAa;IAOrB,+DAA+D;IAC/D;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,QAAQ;IAIhB,gDAAgD;IAChD,aAAa,IAAI,MAAM;IAIvB,OAAO,CAAC,wBAAwB;IAmChC,2CAA2C;IAC3C;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,eAAe;CA2CxB"}
|