hashira 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +97 -0
  3. data/README.md +334 -32
  4. data/lib/hashira/analysis/census.rb +12 -14
  5. data/lib/hashira/analysis/constant_registry.rb +40 -0
  6. data/lib/hashira/analysis/cycle_findings.rb +1 -1
  7. data/lib/hashira/analysis/cycle_search.rb +1 -1
  8. data/lib/hashira/analysis/definitions.rb +1 -1
  9. data/lib/hashira/analysis/finding.rb +6 -2
  10. data/lib/hashira/analysis/graph.rb +3 -3
  11. data/lib/hashira/analysis/namespace_prefix.rb +32 -0
  12. data/lib/hashira/analysis/node_walk.rb +7 -1
  13. data/lib/hashira/analysis/references.rb +2 -2
  14. data/lib/hashira/analysis/sdp_check.rb +1 -1
  15. data/lib/hashira/analysis/type_walk.rb +1 -1
  16. data/lib/hashira/churn.rb +22 -0
  17. data/lib/hashira/ci/accepted.rb +11 -7
  18. data/lib/hashira/ci/baseline.rb +40 -0
  19. data/lib/hashira/ci/diff.rb +15 -0
  20. data/lib/hashira/ci/edge_diff_report.rb +4 -27
  21. data/lib/hashira/ci/finding_diff_report.rb +26 -0
  22. data/lib/hashira/ci/gate.rb +7 -5
  23. data/lib/hashira/ci/improvement.rb +19 -0
  24. data/lib/hashira/ci/ratchet.rb +16 -20
  25. data/lib/hashira/ci/ratchet_report.rb +42 -0
  26. data/lib/hashira/cli/command_line.rb +12 -6
  27. data/lib/hashira/cli/fail_on.rb +4 -2
  28. data/lib/hashira/cli/options.rb +1 -1
  29. data/lib/hashira/cli/run.rb +9 -3
  30. data/lib/hashira/cli/skip.rb +27 -0
  31. data/lib/hashira/cli/usage.rb +10 -5
  32. data/lib/hashira/cli.rb +1 -1
  33. data/lib/hashira/complexity/analyzer.rb +45 -0
  34. data/lib/hashira/complexity/boolean_run.rb +22 -0
  35. data/lib/hashira/complexity/cognitive_score.rb +72 -0
  36. data/lib/hashira/complexity/if_chain.rb +45 -0
  37. data/lib/hashira/complexity/method_finding.rb +52 -0
  38. data/lib/hashira/complexity/method_score.rb +17 -0
  39. data/lib/hashira/complexity/rescue_scan.rb +28 -0
  40. data/lib/hashira/complexity/rollup.rb +22 -0
  41. data/lib/hashira/duplication/analyzer.rb +21 -0
  42. data/lib/hashira/duplication/cluster.rb +26 -0
  43. data/lib/hashira/duplication/clusterer.rb +50 -0
  44. data/lib/hashira/duplication/delta.rb +39 -0
  45. data/lib/hashira/duplication/duplication_finding.rb +30 -0
  46. data/lib/hashira/duplication/extractor.rb +31 -0
  47. data/lib/hashira/duplication/fragment.rb +42 -0
  48. data/lib/hashira/duplication/grouping.rb +24 -0
  49. data/lib/hashira/duplication/index.rb +35 -0
  50. data/lib/hashira/duplication/maximal.rb +21 -0
  51. data/lib/hashira/duplication/near_miss.rb +33 -0
  52. data/lib/hashira/duplication/sequence.rb +36 -0
  53. data/lib/hashira/duplication/similarity.rb +50 -0
  54. data/lib/hashira/duplication/union_find.rb +21 -0
  55. data/lib/hashira/duplication/variance.rb +57 -0
  56. data/lib/hashira/hotspots/file_cost.rb +19 -0
  57. data/lib/hashira/hotspots/rollup.rb +33 -0
  58. data/lib/hashira/pipeline.rb +28 -6
  59. data/lib/hashira/project.rb +32 -9
  60. data/lib/hashira/report/complexity_table.rb +40 -0
  61. data/lib/hashira/report/dependency_map.rb +8 -5
  62. data/lib/hashira/report/finding_lines.rb +1 -1
  63. data/lib/hashira/report/graph_payload.rb +29 -0
  64. data/lib/hashira/report/hotspot_table.rb +41 -0
  65. data/lib/hashira/report/json.rb +24 -17
  66. data/lib/hashira/report/metrics_table.rb +1 -2
  67. data/lib/hashira/report/text.rb +24 -14
  68. data/lib/hashira/report/view.rb +7 -0
  69. data/lib/hashira/version.rb +1 -1
  70. data/lib/hashira.rb +38 -1
  71. metadata +46 -7
  72. data/lib/hashira/analysis/root_namespace.rb +0 -14
data/lib/hashira.rb CHANGED
@@ -3,12 +3,14 @@
3
3
  require_relative "hashira/version"
4
4
  require_relative "hashira/error"
5
5
  require_relative "hashira/project"
6
+ require_relative "hashira/churn"
6
7
  require_relative "hashira/analysis/syntax"
7
8
  require_relative "hashira/analysis/node_walk"
8
9
  require_relative "hashira/analysis/type_walk"
9
10
  require_relative "hashira/analysis/references"
10
11
  require_relative "hashira/analysis/definitions"
11
- require_relative "hashira/analysis/root_namespace"
12
+ require_relative "hashira/analysis/namespace_prefix"
13
+ require_relative "hashira/analysis/constant_registry"
12
14
  require_relative "hashira/analysis/census"
13
15
  require_relative "hashira/analysis/edge"
14
16
  require_relative "hashira/analysis/edge_map"
@@ -20,21 +22,56 @@ require_relative "hashira/analysis/finding"
20
22
  require_relative "hashira/analysis/rule"
21
23
  require_relative "hashira/analysis/cycle_findings"
22
24
  require_relative "hashira/analysis/sdp_violation_findings"
25
+ require_relative "hashira/complexity/method_score"
26
+ require_relative "hashira/complexity/rollup"
27
+ require_relative "hashira/complexity/if_chain"
28
+ require_relative "hashira/complexity/boolean_run"
29
+ require_relative "hashira/complexity/rescue_scan"
30
+ require_relative "hashira/complexity/cognitive_score"
31
+ require_relative "hashira/complexity/method_finding"
32
+ require_relative "hashira/complexity/analyzer"
33
+ require_relative "hashira/duplication/fragment"
34
+ require_relative "hashira/duplication/sequence"
35
+ require_relative "hashira/duplication/extractor"
36
+ require_relative "hashira/duplication/similarity"
37
+ require_relative "hashira/duplication/union_find"
38
+ require_relative "hashira/duplication/cluster"
39
+ require_relative "hashira/duplication/grouping"
40
+ require_relative "hashira/duplication/index"
41
+ require_relative "hashira/duplication/near_miss"
42
+ require_relative "hashira/duplication/maximal"
43
+ require_relative "hashira/duplication/clusterer"
44
+ require_relative "hashira/duplication/variance"
45
+ require_relative "hashira/duplication/delta"
46
+ require_relative "hashira/duplication/duplication_finding"
47
+ require_relative "hashira/duplication/analyzer"
23
48
  require_relative "hashira/diagram/dot"
24
49
  require_relative "hashira/diagram/mermaid"
25
50
  require_relative "hashira/diagram/renderer"
26
51
  require_relative "hashira/ci/accepted"
52
+ require_relative "hashira/ci/baseline"
53
+ require_relative "hashira/ci/diff"
54
+ require_relative "hashira/ci/improvement"
27
55
  require_relative "hashira/ci/edge_diff_report"
56
+ require_relative "hashira/ci/finding_diff_report"
57
+ require_relative "hashira/ci/ratchet_report"
28
58
  require_relative "hashira/ci/gate"
29
59
  require_relative "hashira/ci/ratchet"
60
+ require_relative "hashira/hotspots/file_cost"
61
+ require_relative "hashira/hotspots/rollup"
62
+ require_relative "hashira/report/view"
63
+ require_relative "hashira/report/graph_payload"
30
64
  require_relative "hashira/report/finding_lines"
31
65
  require_relative "hashira/report/dependency_map"
32
66
  require_relative "hashira/report/metrics_table"
67
+ require_relative "hashira/report/complexity_table"
68
+ require_relative "hashira/report/hotspot_table"
33
69
  require_relative "hashira/report/json"
34
70
  require_relative "hashira/report/text"
35
71
  require_relative "hashira/pipeline"
36
72
  require_relative "hashira/cli"
37
73
  require_relative "hashira/cli/fail_on"
74
+ require_relative "hashira/cli/skip"
38
75
  require_relative "hashira/cli/options"
39
76
  require_relative "hashira/cli/command_line"
40
77
  require_relative "hashira/cli/usage"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashira
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Giacomo GK
@@ -9,9 +9,11 @@ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies: []
12
- description: Measures package coupling in a Ruby codebase (Ca/Ce/instability, SDP
13
- violations, cycles) from the AST, with findings backed by file-level evidence and
14
- an edge-set ratchet for CI.
12
+ description: Measures package coupling (Ca/Ce/instability, SDP violations, cycles),
13
+ per-method cognitive complexity, and near-miss code duplication in a Ruby codebase
14
+ from the AST, then ranks files by cost against git churn. Findings are backed by
15
+ file-level evidence, and a baseline ratchets edges and findings for CI — direction,
16
+ not a score.
15
17
  email:
16
18
  - giaco@hey.com
17
19
  executables:
@@ -25,6 +27,7 @@ files:
25
27
  - exe/hashira
26
28
  - lib/hashira.rb
27
29
  - lib/hashira/analysis/census.rb
30
+ - lib/hashira/analysis/constant_registry.rb
28
31
  - lib/hashira/analysis/cycle_findings.rb
29
32
  - lib/hashira/analysis/cycle_search.rb
30
33
  - lib/hashira/analysis/definitions.rb
@@ -33,35 +36,71 @@ files:
33
36
  - lib/hashira/analysis/finding.rb
34
37
  - lib/hashira/analysis/graph.rb
35
38
  - lib/hashira/analysis/metric.rb
39
+ - lib/hashira/analysis/namespace_prefix.rb
36
40
  - lib/hashira/analysis/node_walk.rb
37
41
  - lib/hashira/analysis/references.rb
38
- - lib/hashira/analysis/root_namespace.rb
39
42
  - lib/hashira/analysis/rule.rb
40
43
  - lib/hashira/analysis/sdp_check.rb
41
44
  - lib/hashira/analysis/sdp_violation_findings.rb
42
45
  - lib/hashira/analysis/syntax.rb
43
46
  - lib/hashira/analysis/type_walk.rb
47
+ - lib/hashira/churn.rb
44
48
  - lib/hashira/ci/accepted.rb
49
+ - lib/hashira/ci/baseline.rb
50
+ - lib/hashira/ci/diff.rb
45
51
  - lib/hashira/ci/edge_diff_report.rb
52
+ - lib/hashira/ci/finding_diff_report.rb
46
53
  - lib/hashira/ci/gate.rb
54
+ - lib/hashira/ci/improvement.rb
47
55
  - lib/hashira/ci/ratchet.rb
56
+ - lib/hashira/ci/ratchet_report.rb
48
57
  - lib/hashira/cli.rb
49
58
  - lib/hashira/cli/command_line.rb
50
59
  - lib/hashira/cli/fail_on.rb
51
60
  - lib/hashira/cli/options.rb
52
61
  - lib/hashira/cli/run.rb
62
+ - lib/hashira/cli/skip.rb
53
63
  - lib/hashira/cli/usage.rb
64
+ - lib/hashira/complexity/analyzer.rb
65
+ - lib/hashira/complexity/boolean_run.rb
66
+ - lib/hashira/complexity/cognitive_score.rb
67
+ - lib/hashira/complexity/if_chain.rb
68
+ - lib/hashira/complexity/method_finding.rb
69
+ - lib/hashira/complexity/method_score.rb
70
+ - lib/hashira/complexity/rescue_scan.rb
71
+ - lib/hashira/complexity/rollup.rb
54
72
  - lib/hashira/diagram/dot.rb
55
73
  - lib/hashira/diagram/mermaid.rb
56
74
  - lib/hashira/diagram/renderer.rb
75
+ - lib/hashira/duplication/analyzer.rb
76
+ - lib/hashira/duplication/cluster.rb
77
+ - lib/hashira/duplication/clusterer.rb
78
+ - lib/hashira/duplication/delta.rb
79
+ - lib/hashira/duplication/duplication_finding.rb
80
+ - lib/hashira/duplication/extractor.rb
81
+ - lib/hashira/duplication/fragment.rb
82
+ - lib/hashira/duplication/grouping.rb
83
+ - lib/hashira/duplication/index.rb
84
+ - lib/hashira/duplication/maximal.rb
85
+ - lib/hashira/duplication/near_miss.rb
86
+ - lib/hashira/duplication/sequence.rb
87
+ - lib/hashira/duplication/similarity.rb
88
+ - lib/hashira/duplication/union_find.rb
89
+ - lib/hashira/duplication/variance.rb
57
90
  - lib/hashira/error.rb
91
+ - lib/hashira/hotspots/file_cost.rb
92
+ - lib/hashira/hotspots/rollup.rb
58
93
  - lib/hashira/pipeline.rb
59
94
  - lib/hashira/project.rb
95
+ - lib/hashira/report/complexity_table.rb
60
96
  - lib/hashira/report/dependency_map.rb
61
97
  - lib/hashira/report/finding_lines.rb
98
+ - lib/hashira/report/graph_payload.rb
99
+ - lib/hashira/report/hotspot_table.rb
62
100
  - lib/hashira/report/json.rb
63
101
  - lib/hashira/report/metrics_table.rb
64
102
  - lib/hashira/report/text.rb
103
+ - lib/hashira/report/view.rb
65
104
  - lib/hashira/version.rb
66
105
  homepage: https://github.com/giacope/hashira
67
106
  licenses:
@@ -85,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
124
  - !ruby/object:Gem::Version
86
125
  version: '0'
87
126
  requirements: []
88
- rubygems_version: 4.0.10
127
+ rubygems_version: 4.0.17
89
128
  specification_version: 4
90
- summary: Package coupling metrics for Ruby, via Prism
129
+ summary: Coupling, cognitive-complexity, and duplication metrics for Ruby, via Prism
91
130
  test_files: []
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Hashira
4
- module Analysis
5
- module RootNamespace
6
- module_function
7
-
8
- def infer(definitions)
9
- definitions.map { |_node, full, _package| full.first }
10
- .tally.max_by { |_name, count| count }&.first
11
- end
12
- end
13
- end
14
- end