hashira 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.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +141 -0
  3. data/README.md +53 -5
  4. data/lib/hashira/analysis/catalog.rb +27 -0
  5. data/lib/hashira/analysis/census.rb +42 -35
  6. data/lib/hashira/analysis/constant_registry.rb +43 -0
  7. data/lib/hashira/analysis/cycle_findings.rb +34 -29
  8. data/lib/hashira/analysis/cycle_search.rb +28 -35
  9. data/lib/hashira/analysis/cycles.rb +14 -0
  10. data/lib/hashira/analysis/definition.rb +22 -0
  11. data/lib/hashira/analysis/definitions.rb +22 -18
  12. data/lib/hashira/analysis/edge.rb +4 -3
  13. data/lib/hashira/analysis/edge_map.rb +23 -26
  14. data/lib/hashira/analysis/finding.rb +7 -6
  15. data/lib/hashira/analysis/folder_placement.rb +17 -0
  16. data/lib/hashira/analysis/folding.rb +54 -0
  17. data/lib/hashira/analysis/graph.rb +35 -38
  18. data/lib/hashira/analysis/metric.rb +8 -7
  19. data/lib/hashira/analysis/namespace_placement.rb +28 -0
  20. data/lib/hashira/analysis/namespace_prefix.rb +32 -0
  21. data/lib/hashira/analysis/naming.rb +14 -0
  22. data/lib/hashira/analysis/no_folding.rb +13 -0
  23. data/lib/hashira/analysis/node_walk.rb +3 -3
  24. data/lib/hashira/analysis/placement.rb +19 -0
  25. data/lib/hashira/analysis/references.rb +14 -13
  26. data/lib/hashira/analysis/resolver.rb +28 -0
  27. data/lib/hashira/analysis/roster.rb +25 -0
  28. data/lib/hashira/analysis/rule.rb +10 -14
  29. data/lib/hashira/analysis/sdp_check.rb +8 -12
  30. data/lib/hashira/analysis/sdp_violation_findings.rb +20 -18
  31. data/lib/hashira/analysis/syntax.rb +21 -6
  32. data/lib/hashira/analysis/type_walk.rb +7 -9
  33. data/lib/hashira/churn.rb +11 -13
  34. data/lib/hashira/ci/accepted.rb +27 -31
  35. data/lib/hashira/ci/baseline.rb +22 -24
  36. data/lib/hashira/ci/diff.rb +8 -7
  37. data/lib/hashira/ci/edge_diff_report.rb +13 -17
  38. data/lib/hashira/ci/finding_diff_report.rb +14 -18
  39. data/lib/hashira/ci/gate.rb +19 -23
  40. data/lib/hashira/ci/improvement.rb +9 -14
  41. data/lib/hashira/ci/ratchet.rb +36 -27
  42. data/lib/hashira/ci/ratchet_report.rb +26 -32
  43. data/lib/hashira/cli/arguments.rb +23 -0
  44. data/lib/hashira/cli/command_line.rb +55 -71
  45. data/lib/hashira/cli/fail_on.rb +15 -20
  46. data/lib/hashira/cli/options.rb +9 -4
  47. data/lib/hashira/cli/package_by.rb +14 -0
  48. data/lib/hashira/cli/run.rb +29 -27
  49. data/lib/hashira/cli/skip.rb +14 -20
  50. data/lib/hashira/cli/usage.rb +41 -41
  51. data/lib/hashira/cli.rb +17 -19
  52. data/lib/hashira/complexity/analyzer.rb +30 -32
  53. data/lib/hashira/complexity/boolean_run.rb +11 -15
  54. data/lib/hashira/complexity/cognitive_score.rb +61 -66
  55. data/lib/hashira/complexity/if_chain.rb +33 -38
  56. data/lib/hashira/complexity/method_finding.rb +43 -48
  57. data/lib/hashira/complexity/method_score.rb +9 -7
  58. data/lib/hashira/complexity/rescue_scan.rb +16 -21
  59. data/lib/hashira/complexity/rollup.rb +13 -15
  60. data/lib/hashira/diagram/dot.rb +8 -11
  61. data/lib/hashira/diagram/mermaid.rb +11 -16
  62. data/lib/hashira/diagram/renderer.rb +10 -15
  63. data/lib/hashira/duplication/analyzer.rb +10 -14
  64. data/lib/hashira/duplication/cluster.rb +15 -12
  65. data/lib/hashira/duplication/clusterer.rb +31 -29
  66. data/lib/hashira/duplication/delta.rb +29 -30
  67. data/lib/hashira/duplication/duplication_finding.rb +19 -21
  68. data/lib/hashira/duplication/extractor.rb +15 -19
  69. data/lib/hashira/duplication/fragment.rb +19 -23
  70. data/lib/hashira/duplication/grouping.rb +12 -16
  71. data/lib/hashira/duplication/index.rb +20 -24
  72. data/lib/hashira/duplication/maximal.rb +11 -15
  73. data/lib/hashira/duplication/near_miss.rb +19 -22
  74. data/lib/hashira/duplication/sequence.rb +20 -22
  75. data/lib/hashira/duplication/similarity.rb +28 -35
  76. data/lib/hashira/duplication/union_find.rb +10 -14
  77. data/lib/hashira/duplication/variance.rb +36 -44
  78. data/lib/hashira/error.rb +4 -2
  79. data/lib/hashira/hotspots/file_cost.rb +8 -7
  80. data/lib/hashira/hotspots/rollup.rb +19 -21
  81. data/lib/hashira/pipeline.rb +36 -31
  82. data/lib/hashira/project.rb +53 -32
  83. data/lib/hashira/report/complexity_table.rb +27 -31
  84. data/lib/hashira/report/dependency_map.rb +17 -22
  85. data/lib/hashira/report/finding_lines.rb +15 -19
  86. data/lib/hashira/report/graph_payload.rb +14 -20
  87. data/lib/hashira/report/hotspot_table.rb +32 -37
  88. data/lib/hashira/report/json.rb +30 -32
  89. data/lib/hashira/report/metrics_table.rb +46 -33
  90. data/lib/hashira/report/text.rb +59 -52
  91. data/lib/hashira/version.rb +1 -1
  92. data/lib/hashira.rb +92 -55
  93. metadata +16 -2
  94. data/lib/hashira/analysis/root_namespace.rb +0 -14
@@ -2,47 +2,45 @@
2
2
 
3
3
  require "json"
4
4
 
5
- module Hashira
6
- module Report
7
- class Json
8
- def initialize(view, io: $stdout)
9
- @view = view
10
- @io = io
11
- end
5
+ class Hashira::Report::Json
6
+ def initialize(view, io: $stdout)
7
+ @view = view
8
+ @io = io
9
+ end
12
10
 
13
- def print
14
- @io.puts JSON.pretty_generate(payload)
15
- 0
16
- end
11
+ def print
12
+ @io.puts(JSON.pretty_generate(payload))
13
+ 0
14
+ end
17
15
 
18
- private
16
+ private
19
17
 
20
- def payload = base.merge(graph_payload).merge(sections.compact)
18
+ def payload = base.merge(coupling).merge(sections.compact)
21
19
 
22
- def base = { findings: @view.findings.all.map(&:to_h), accepted: accepted_entries }
20
+ def base = { findings: @view.findings.all.map(&:to_h), accepted: accepted }
23
21
 
24
- def graph_payload
25
- graph = @view.graph
26
- graph ? GraphPayload.new(graph).to_h : {}
27
- end
22
+ def coupling
23
+ graph = @view.graph
24
+ graph ? Hashira::Report::GraphPayload.new(graph).to_h : {}
25
+ end
28
26
 
29
- def sections
30
- { complexity: (complexity_payload if @view.complexity),
31
- duplication: (duplication_payload if @view.duplication),
32
- hotspots: @view.hotspots&.files&.map(&:to_h) }
33
- end
27
+ def sections
28
+ {
29
+ complexity: (complexity if @view.complexity),
30
+ duplication: (duplication if @view.duplication),
31
+ hotspots: @view.hotspots&.files&.map(&:to_h)
32
+ }
33
+ end
34
34
 
35
- def accepted_entries
36
- @view.findings.accepted.map { |finding, reason| finding.to_h.merge(reason:) }
37
- end
35
+ def accepted
36
+ @view.findings.accepted.map { |finding, reason| finding.to_h.merge(reason:) }
37
+ end
38
38
 
39
- def complexity_payload = { methods: method_scores, classes: class_scores }
39
+ def complexity = { methods: the_methods, classes: the_classes }
40
40
 
41
- def method_scores = @view.complexity.methods.map(&:to_h)
41
+ def the_methods = @view.complexity.methods.map(&:to_h)
42
42
 
43
- def class_scores = @view.complexity.classes.map(&:to_h)
43
+ def the_classes = @view.complexity.classes.map(&:to_h)
44
44
 
45
- def duplication_payload = @view.duplication.clusters.map { Duplication::Delta.new(it).to_h }
46
- end
47
- end
45
+ def duplication = @view.duplication.clusters.map { Hashira::Duplication::Delta.new(it).to_h }
48
46
  end
@@ -1,37 +1,50 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hashira
4
- module Report
5
- class MetricsTable
6
- def initialize(graph, io: $stdout)
7
- @graph = graph
8
- @io = io
9
- end
10
-
11
- def print
12
- heading
13
- by_instability.each { |package, metric| @io.puts row(package, metric) }
14
- legend
15
- end
16
-
17
- private
18
-
19
- def by_instability = @graph.metrics.sort_by { |_package, metric| metric.instability }
20
-
21
- def heading
22
- @io.puts format("%-12s %3s %3s %3s %5s %-3s", *%w[package TC Ca Ce I Cyc])
23
- @io.puts "-" * 40
24
- end
25
-
26
- def row(package, metric)
27
- cyclic = @graph.cyclic?(package) ? "YES" : "-"
28
- format("%-12s %3d %3d %3d %5.2f %-3s", package, *metric.to_h.values, cyclic)
29
- end
30
-
31
- def legend
32
- @io.puts "\nLegend: TC total types, Ca afferent (incoming), Ce efferent (outgoing),"
33
- @io.puts " I=Ce/(Ce+Ca) instability (0=maximally stable, 1=maximally unstable)\n\n"
34
- end
35
- end
3
+ class Hashira::Report::MetricsTable
4
+ def initialize(graph, io: $stdout)
5
+ @graph = graph
6
+ @io = io
7
+ end
8
+
9
+ LIMIT = 25
10
+
11
+ def print
12
+ heading
13
+ kept.each { |package, metric| @io.puts(row(package, metric)) }
14
+ note unless spared.empty?
15
+ legend
16
+ end
17
+
18
+ private
19
+
20
+ def ranked = @graph.metrics.sort_by { |_package, metric| metric.instability }
21
+
22
+ def split = @split ||= (ranked.size > LIMIT ? ranked.partition { |_package, metric| !leaf?(metric) } : [ranked, []])
23
+
24
+ def kept = split.first
25
+
26
+ def spared = split.last
27
+
28
+ def leaf?(metric) = metric.types <= 1 && metric.efferent.zero? && metric.afferent <= 1
29
+
30
+ def note
31
+ @io.puts(" + #{spared.size} single-type leaf packages (TC ≤ 1, Ca ≤ 1, Ce = 0) — hidden for brevity")
32
+ end
33
+
34
+ def heading
35
+ @io.puts(format("%-12s %3s %3s %3s %5s %-3s", *%w[package TC Ca Ce I Cyc]))
36
+ @io.puts("-" * 40)
37
+ end
38
+
39
+ def row(package, metric)
40
+ format(
41
+ "%-12s %3d %3d %3d %5.2f %-3s", package, *metric.to_h.values,
42
+ (@graph.cycles.through?(package) ? "YES" : "-")
43
+ )
44
+ end
45
+
46
+ def legend
47
+ @io.puts("\nLegend: TC total types, Ca afferent (incoming), Ce efferent (outgoing),")
48
+ @io.puts(" I=Ce/(Ce+Ca) instability (0=maximally stable, 1=maximally unstable)\n\n")
36
49
  end
37
50
  end
@@ -1,68 +1,75 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hashira
4
- module Report
5
- class Text
6
- def initialize(view, io: $stdout)
7
- @view = view
8
- @io = io
9
- end
3
+ class Hashira::Report::Text
4
+ def initialize(view, io: $stdout)
5
+ @view = view
6
+ @io = io
7
+ end
10
8
 
11
- def print
12
- coupling_sections if @view.graph
13
- complexity_section if @view.complexity
14
- hotspot_section if @view.hotspots
15
- findings_section
16
- 0
17
- end
9
+ def print
10
+ coupling if @view.graph
11
+ complexity if @view.complexity
12
+ hotspots if @view.hotspots
13
+ findings
14
+ 0
15
+ end
18
16
 
19
- private
17
+ private
20
18
 
21
- def coupling_sections
22
- graph = @view.graph
23
- header(graph)
24
- MetricsTable.new(graph, io: @io).print
25
- DependencyMap.new(graph, io: @io).print
26
- end
19
+ def coupling
20
+ graph = @view.graph
21
+ header(graph)
22
+ Hashira::Report::MetricsTable.new(graph, io: @io).print
23
+ Hashira::Report::DependencyMap.new(graph, io: @io).print
24
+ folded(graph.folds)
25
+ end
26
+
27
+ def folded(folds)
28
+ return if folds.empty?
29
+ @io.puts("\nFolded (single-type classes joined to their base or domain):")
30
+ folds.each { @io.puts(" #{it[:from]} -> #{it[:to]} (#{it[:via]})") }
31
+ end
27
32
 
28
- def complexity_section = ComplexityTable.new(@view.complexity, io: @io).print
33
+ def complexity = Hashira::Report::ComplexityTable.new(@view.complexity, io: @io).print
29
34
 
30
- def hotspot_section = HotspotTable.new(@view.hotspots, io: @io).print
35
+ def hotspots = Hashira::Report::HotspotTable.new(@view.hotspots, io: @io).print
31
36
 
32
- def header(graph)
33
- project = @view.project
34
- packages = graph.packages.size
35
- @io.puts "Package (layer) metrics for #{project.label} " \
36
- "(#{packages} packages, #{project.files.size} files)\n\n"
37
- single_package_note if packages == 1
38
- end
37
+ def header(graph)
38
+ packages = graph.packages.size
39
+ @io.puts(banner(packages))
40
+ caveat if packages == 1
41
+ end
39
42
 
40
- def single_package_note
41
- @io.puts "Only one package found there are no boundaries to analyze. " \
42
- "Pass subdirectories to set them (e.g. hashira lib/gem/*/).\n\n"
43
- end
43
+ def banner(packages)
44
+ "Package (layer) metrics for #{@view.project.label} (#{packages} packages, #{total} files)\n\n"
45
+ end
44
46
 
45
- def findings_section
46
- all = @view.findings.all
47
- @io.puts "\nFindings (#{all.size}):"
48
- print_findings(all)
49
- accepted_section
50
- @io.puts "\n Full evidence + machine format: hashira --json" unless all.empty?
51
- end
47
+ def total = @view.project.files.size
52
48
 
53
- def print_findings(all)
54
- return @io.puts " none ✓ — structure is healthy" if all.empty?
49
+ def caveat
50
+ @io.puts(
51
+ "Only one package found — there are no boundaries to analyze. " \
52
+ "Pass subdirectories to set them (e.g. hashira lib/gem/*/).\n\n"
53
+ )
54
+ end
55
55
 
56
- all.each { FindingLines.new(it, indent: " ", io: @io).print_with_overflow }
57
- end
56
+ def findings
57
+ all = @view.findings.all
58
+ @io.puts("\nFindings (#{all.size}):")
59
+ list(all)
60
+ accepted
61
+ @io.puts("\n Full evidence + machine format: hashira --json") unless all.empty?
62
+ end
58
63
 
59
- def accepted_section
60
- accepted = @view.findings.accepted
61
- return if accepted.empty?
64
+ def list(all)
65
+ return @io.puts(" none ✓ — structure is healthy") if all.empty?
66
+ all.each { Hashira::Report::FindingLines.new(it, indent: " ", io: @io).emit }
67
+ end
62
68
 
63
- @io.puts "\nAccepted (#{accepted.size}):"
64
- accepted.each { |finding, reason| @io.puts " ~ #{finding.kind}/#{finding.package} — #{reason}" }
65
- end
66
- end
69
+ def accepted
70
+ accepted = @view.findings.accepted
71
+ return if accepted.empty?
72
+ @io.puts("\nAccepted (#{accepted.size}):")
73
+ accepted.each { |finding, reason| @io.puts(" ~ #{finding.kind}/#{finding.package} — #{reason}") }
67
74
  end
68
75
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hashira
4
- VERSION = "0.2.0"
4
+ VERSION = "0.4.0"
5
5
  end
data/lib/hashira.rb CHANGED
@@ -1,77 +1,114 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "hashira/version"
4
- require_relative "hashira/error"
5
- require_relative "hashira/project"
6
- require_relative "hashira/churn"
7
- require_relative "hashira/analysis/syntax"
8
- require_relative "hashira/analysis/node_walk"
9
- require_relative "hashira/analysis/type_walk"
10
- require_relative "hashira/analysis/references"
11
- require_relative "hashira/analysis/definitions"
12
- require_relative "hashira/analysis/root_namespace"
3
+ module Hashira
4
+ module Analysis
5
+ end
6
+
7
+ module CI
8
+ end
9
+
10
+ module Complexity
11
+ end
12
+
13
+ module Diagram
14
+ end
15
+
16
+ module Duplication
17
+ end
18
+
19
+ module Hotspots
20
+ end
21
+
22
+ module Report
23
+ end
24
+ end
25
+
26
+ require_relative "hashira/analysis/catalog"
13
27
  require_relative "hashira/analysis/census"
28
+ require_relative "hashira/analysis/constant_registry"
29
+ require_relative "hashira/analysis/cycle_findings"
30
+ require_relative "hashira/analysis/cycle_search"
31
+ require_relative "hashira/analysis/cycles"
32
+ require_relative "hashira/analysis/definition"
33
+ require_relative "hashira/analysis/definitions"
14
34
  require_relative "hashira/analysis/edge"
15
35
  require_relative "hashira/analysis/edge_map"
16
- require_relative "hashira/analysis/metric"
17
- require_relative "hashira/analysis/sdp_check"
18
- require_relative "hashira/analysis/cycle_search"
19
- require_relative "hashira/analysis/graph"
20
36
  require_relative "hashira/analysis/finding"
37
+ require_relative "hashira/analysis/folder_placement"
38
+ require_relative "hashira/analysis/folding"
39
+ require_relative "hashira/analysis/graph"
40
+ require_relative "hashira/analysis/metric"
41
+ require_relative "hashira/analysis/namespace_placement"
42
+ require_relative "hashira/analysis/namespace_prefix"
43
+ require_relative "hashira/analysis/naming"
44
+ require_relative "hashira/analysis/no_folding"
45
+ require_relative "hashira/analysis/node_walk"
46
+ require_relative "hashira/analysis/placement"
47
+ require_relative "hashira/analysis/references"
48
+ require_relative "hashira/analysis/resolver"
49
+ require_relative "hashira/analysis/roster"
21
50
  require_relative "hashira/analysis/rule"
22
- require_relative "hashira/analysis/cycle_findings"
51
+ require_relative "hashira/analysis/sdp_check"
23
52
  require_relative "hashira/analysis/sdp_violation_findings"
24
- require_relative "hashira/complexity/method_score"
25
- require_relative "hashira/complexity/rollup"
26
- require_relative "hashira/complexity/if_chain"
53
+ require_relative "hashira/analysis/syntax"
54
+ require_relative "hashira/analysis/type_walk"
55
+ require_relative "hashira/churn"
56
+ require_relative "hashira/ci/accepted"
57
+ require_relative "hashira/ci/baseline"
58
+ require_relative "hashira/ci/diff"
59
+ require_relative "hashira/ci/edge_diff_report"
60
+ require_relative "hashira/ci/finding_diff_report"
61
+ require_relative "hashira/ci/gate"
62
+ require_relative "hashira/ci/improvement"
63
+ require_relative "hashira/ci/ratchet"
64
+ require_relative "hashira/ci/ratchet_report"
65
+ require_relative "hashira/cli"
66
+ require_relative "hashira/cli/arguments"
67
+ require_relative "hashira/cli/command_line"
68
+ require_relative "hashira/cli/fail_on"
69
+ require_relative "hashira/cli/options"
70
+ require_relative "hashira/cli/package_by"
71
+ require_relative "hashira/cli/run"
72
+ require_relative "hashira/cli/skip"
73
+ require_relative "hashira/cli/usage"
74
+ require_relative "hashira/complexity/analyzer"
27
75
  require_relative "hashira/complexity/boolean_run"
28
- require_relative "hashira/complexity/rescue_scan"
29
76
  require_relative "hashira/complexity/cognitive_score"
77
+ require_relative "hashira/complexity/if_chain"
30
78
  require_relative "hashira/complexity/method_finding"
31
- require_relative "hashira/complexity/analyzer"
32
- require_relative "hashira/duplication/fragment"
33
- require_relative "hashira/duplication/sequence"
34
- require_relative "hashira/duplication/extractor"
35
- require_relative "hashira/duplication/similarity"
36
- require_relative "hashira/duplication/union_find"
79
+ require_relative "hashira/complexity/method_score"
80
+ require_relative "hashira/complexity/rescue_scan"
81
+ require_relative "hashira/complexity/rollup"
82
+ require_relative "hashira/diagram/dot"
83
+ require_relative "hashira/diagram/mermaid"
84
+ require_relative "hashira/diagram/renderer"
85
+ require_relative "hashira/duplication/analyzer"
37
86
  require_relative "hashira/duplication/cluster"
87
+ require_relative "hashira/duplication/clusterer"
88
+ require_relative "hashira/duplication/delta"
89
+ require_relative "hashira/duplication/duplication_finding"
90
+ require_relative "hashira/duplication/extractor"
91
+ require_relative "hashira/duplication/fragment"
38
92
  require_relative "hashira/duplication/grouping"
39
93
  require_relative "hashira/duplication/index"
40
- require_relative "hashira/duplication/near_miss"
41
94
  require_relative "hashira/duplication/maximal"
42
- require_relative "hashira/duplication/clusterer"
95
+ require_relative "hashira/duplication/near_miss"
96
+ require_relative "hashira/duplication/sequence"
97
+ require_relative "hashira/duplication/similarity"
98
+ require_relative "hashira/duplication/union_find"
43
99
  require_relative "hashira/duplication/variance"
44
- require_relative "hashira/duplication/delta"
45
- require_relative "hashira/duplication/duplication_finding"
46
- require_relative "hashira/duplication/analyzer"
47
- require_relative "hashira/diagram/dot"
48
- require_relative "hashira/diagram/mermaid"
49
- require_relative "hashira/diagram/renderer"
50
- require_relative "hashira/ci/accepted"
51
- require_relative "hashira/ci/baseline"
52
- require_relative "hashira/ci/diff"
53
- require_relative "hashira/ci/improvement"
54
- require_relative "hashira/ci/edge_diff_report"
55
- require_relative "hashira/ci/finding_diff_report"
56
- require_relative "hashira/ci/ratchet_report"
57
- require_relative "hashira/ci/gate"
58
- require_relative "hashira/ci/ratchet"
100
+ require_relative "hashira/error"
59
101
  require_relative "hashira/hotspots/file_cost"
60
102
  require_relative "hashira/hotspots/rollup"
61
- require_relative "hashira/report/view"
62
- require_relative "hashira/report/graph_payload"
63
- require_relative "hashira/report/finding_lines"
64
- require_relative "hashira/report/dependency_map"
65
- require_relative "hashira/report/metrics_table"
103
+ require_relative "hashira/pipeline"
104
+ require_relative "hashira/project"
66
105
  require_relative "hashira/report/complexity_table"
106
+ require_relative "hashira/report/dependency_map"
107
+ require_relative "hashira/report/finding_lines"
108
+ require_relative "hashira/report/graph_payload"
67
109
  require_relative "hashira/report/hotspot_table"
68
110
  require_relative "hashira/report/json"
111
+ require_relative "hashira/report/metrics_table"
69
112
  require_relative "hashira/report/text"
70
- require_relative "hashira/pipeline"
71
- require_relative "hashira/cli"
72
- require_relative "hashira/cli/fail_on"
73
- require_relative "hashira/cli/skip"
74
- require_relative "hashira/cli/options"
75
- require_relative "hashira/cli/command_line"
76
- require_relative "hashira/cli/usage"
77
- require_relative "hashira/cli/run"
113
+ require_relative "hashira/report/view"
114
+ require_relative "hashira/version"
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.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Giacomo GK
@@ -26,18 +26,30 @@ files:
26
26
  - README.md
27
27
  - exe/hashira
28
28
  - lib/hashira.rb
29
+ - lib/hashira/analysis/catalog.rb
29
30
  - lib/hashira/analysis/census.rb
31
+ - lib/hashira/analysis/constant_registry.rb
30
32
  - lib/hashira/analysis/cycle_findings.rb
31
33
  - lib/hashira/analysis/cycle_search.rb
34
+ - lib/hashira/analysis/cycles.rb
35
+ - lib/hashira/analysis/definition.rb
32
36
  - lib/hashira/analysis/definitions.rb
33
37
  - lib/hashira/analysis/edge.rb
34
38
  - lib/hashira/analysis/edge_map.rb
35
39
  - lib/hashira/analysis/finding.rb
40
+ - lib/hashira/analysis/folder_placement.rb
41
+ - lib/hashira/analysis/folding.rb
36
42
  - lib/hashira/analysis/graph.rb
37
43
  - lib/hashira/analysis/metric.rb
44
+ - lib/hashira/analysis/namespace_placement.rb
45
+ - lib/hashira/analysis/namespace_prefix.rb
46
+ - lib/hashira/analysis/naming.rb
47
+ - lib/hashira/analysis/no_folding.rb
38
48
  - lib/hashira/analysis/node_walk.rb
49
+ - lib/hashira/analysis/placement.rb
39
50
  - lib/hashira/analysis/references.rb
40
- - lib/hashira/analysis/root_namespace.rb
51
+ - lib/hashira/analysis/resolver.rb
52
+ - lib/hashira/analysis/roster.rb
41
53
  - lib/hashira/analysis/rule.rb
42
54
  - lib/hashira/analysis/sdp_check.rb
43
55
  - lib/hashira/analysis/sdp_violation_findings.rb
@@ -54,9 +66,11 @@ files:
54
66
  - lib/hashira/ci/ratchet.rb
55
67
  - lib/hashira/ci/ratchet_report.rb
56
68
  - lib/hashira/cli.rb
69
+ - lib/hashira/cli/arguments.rb
57
70
  - lib/hashira/cli/command_line.rb
58
71
  - lib/hashira/cli/fail_on.rb
59
72
  - lib/hashira/cli/options.rb
73
+ - lib/hashira/cli/package_by.rb
60
74
  - lib/hashira/cli/run.rb
61
75
  - lib/hashira/cli/skip.rb
62
76
  - lib/hashira/cli/usage.rb
@@ -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