hashira 0.7.0 → 0.9.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +94 -0
- data/README.md +57 -3
- data/exe/hashira +1 -1
- data/lib/hashira/analysis/finding.rb +11 -1
- data/lib/hashira/analysis/syntax.rb +6 -6
- data/lib/hashira/analysis/type_walk.rb +4 -0
- data/lib/hashira/churn.rb +1 -10
- data/lib/hashira/ci/accepted.rb +9 -7
- data/lib/hashira/ci/baseline.rb +53 -33
- data/lib/hashira/ci/comparison.rb +33 -0
- data/lib/hashira/ci/diff.rb +0 -15
- data/lib/hashira/ci/gate.rb +3 -3
- data/lib/hashira/ci/mark.rb +7 -0
- data/lib/hashira/ci/ratchet.rb +12 -4
- data/lib/hashira/ci/ratchet_report.rb +4 -4
- data/lib/hashira/ci/scope.rb +0 -1
- data/lib/hashira/ci/slice.rb +21 -0
- data/lib/hashira/ci/sweep.rb +13 -0
- data/lib/hashira/cli/arguments.rb +12 -8
- data/lib/hashira/cli/choice.rb +9 -0
- data/lib/hashira/cli/command_line.rb +8 -5
- data/lib/hashira/cli/fail_on.rb +6 -6
- data/lib/hashira/cli/flag.rb +3 -1
- data/lib/hashira/cli/flags.rb +10 -0
- data/lib/hashira/cli/format.rb +1 -1
- data/lib/hashira/cli/needs.rb +13 -2
- data/lib/hashira/cli/only.rb +16 -0
- data/lib/hashira/cli/options.rb +8 -10
- data/lib/hashira/cli/package_by.rb +1 -1
- data/lib/hashira/cli/run.rb +9 -8
- data/lib/hashira/cli.rb +22 -21
- data/lib/hashira/complexity/cognitive_score.rb +44 -33
- data/lib/hashira/complexity/method_finding.rb +7 -5
- data/lib/hashira/complexity/method_score.rb +1 -1
- data/lib/hashira/complexity/scores.rb +11 -9
- data/lib/hashira/coupling/audiences.rb +3 -3
- data/lib/hashira/coupling/catalog.rb +8 -6
- data/lib/hashira/coupling/census.rb +42 -22
- data/lib/hashira/coupling/cycle_search.rb +11 -7
- data/lib/hashira/coupling/definitions.rb +1 -7
- data/lib/hashira/coupling/edge_map.rb +9 -8
- data/lib/hashira/coupling/folding.rb +5 -5
- data/lib/hashira/coupling/graph.rb +16 -9
- data/lib/hashira/coupling/metric.rb +3 -1
- data/lib/hashira/coupling/naming.rb +4 -4
- data/lib/hashira/coupling/references.rb +12 -12
- data/lib/hashira/coupling/report.rb +7 -9
- data/lib/hashira/coupling/roll_call.rb +1 -1
- data/lib/hashira/coupling/roll_call_findings.rb +1 -1
- data/lib/hashira/coupling/roster.rb +37 -12
- data/lib/hashira/coupling/rule.rb +1 -1
- data/lib/hashira/coupling/sdp_violation_findings.rb +3 -1
- data/lib/hashira/duplication/clones.rb +1 -1
- data/lib/hashira/duplication/clusters.rb +10 -7
- data/lib/hashira/duplication/delta.rb +1 -4
- data/lib/hashira/duplication/duplication_finding.rb +4 -2
- data/lib/hashira/duplication/fragment.rb +20 -2
- data/lib/hashira/duplication/harvest.rb +7 -5
- data/lib/hashira/duplication/index.rb +3 -2
- data/lib/hashira/duplication/literal.rb +25 -0
- data/lib/hashira/duplication/similarity.rb +2 -2
- data/lib/hashira/duplication/variance.rb +7 -1
- data/lib/hashira/error.rb +0 -3
- data/lib/hashira/focus.rb +29 -0
- data/lib/hashira/git_log.rb +19 -0
- data/lib/hashira/hotspots/file_cost.rb +1 -1
- data/lib/hashira/hotspots/rollup.rb +2 -2
- data/lib/hashira/pipeline.rb +22 -14
- data/lib/hashira/project.rb +35 -34
- data/lib/hashira/report/columns.rb +14 -8
- data/lib/hashira/report/graph_payload.rb +1 -1
- data/lib/hashira/report/hotspot_table.rb +1 -1
- data/lib/hashira/report/json.rb +2 -1
- data/lib/hashira/report/metrics_table.rb +3 -3
- data/lib/hashira/report/phrases.rb +23 -18
- data/lib/hashira/report/smell_phrases.rb +2 -2
- data/lib/hashira/smells/branches.rb +62 -0
- data/lib/hashira/smells/census.rb +11 -6
- data/lib/hashira/smells/check.rb +1 -5
- data/lib/hashira/smells/contexts.rb +7 -5
- data/lib/hashira/smells/control_parameter.rb +1 -1
- data/lib/hashira/smells/data_clump.rb +2 -4
- data/lib/hashira/smells/duplicate_method_call.rb +25 -5
- data/lib/hashira/smells/feature_envy.rb +3 -3
- data/lib/hashira/smells/foreign.rb +14 -14
- data/lib/hashira/smells/instance_variable_assumption.rb +5 -15
- data/lib/hashira/smells/kind.rb +9 -0
- data/lib/hashira/smells/lineage.rb +92 -0
- data/lib/hashira/smells/manual_dispatch.rb +1 -1
- data/lib/hashira/smells/module_initialize.rb +0 -2
- data/lib/hashira/smells/nil_check.rb +1 -1
- data/lib/hashira/smells/ownership.rb +19 -7
- data/lib/hashira/smells/param_check.rb +2 -2
- data/lib/hashira/smells/refs.rb +13 -7
- data/lib/hashira/smells/repeated_conditional.rb +1 -3
- data/lib/hashira/smells/report.rb +16 -7
- data/lib/hashira/smells/too_many_instance_variables.rb +3 -3
- data/lib/hashira/smells/visibility.rb +18 -11
- data/lib/hashira/trees.rb +8 -4
- data/lib/hashira/version.rb +1 -1
- data/lib/hashira.rb +12 -0
- metadata +13 -1
|
@@ -5,17 +5,24 @@ require "prism"
|
|
|
5
5
|
class Hashira::Smells::Visibility
|
|
6
6
|
MARKERS = %i[public private protected module_function].freeze
|
|
7
7
|
|
|
8
|
-
def initialize(
|
|
9
|
-
@
|
|
10
|
-
@overrides = {}
|
|
11
|
-
@found = []
|
|
12
|
-
scan(statements(type_node))
|
|
8
|
+
def initialize(type)
|
|
9
|
+
@node = type
|
|
13
10
|
end
|
|
14
11
|
|
|
15
|
-
def entries
|
|
12
|
+
def entries
|
|
13
|
+
blank
|
|
14
|
+
scan(statements(@node))
|
|
15
|
+
@_found.map { |node, section| [node, @_overrides.fetch(node.name, section)] }
|
|
16
|
+
end
|
|
16
17
|
|
|
17
18
|
private
|
|
18
19
|
|
|
20
|
+
def blank
|
|
21
|
+
@_section = :public
|
|
22
|
+
@_overrides = {}
|
|
23
|
+
@_found = []
|
|
24
|
+
end
|
|
25
|
+
|
|
19
26
|
def statements(node)
|
|
20
27
|
body = node.body
|
|
21
28
|
body.is_a?(Prism::StatementsNode) ? body.body : []
|
|
@@ -25,7 +32,7 @@ class Hashira::Smells::Visibility
|
|
|
25
32
|
|
|
26
33
|
def classify(node)
|
|
27
34
|
case node
|
|
28
|
-
when Prism::DefNode then @
|
|
35
|
+
when Prism::DefNode then @_found << [node, @_section]
|
|
29
36
|
when Prism::CallNode then heed(node)
|
|
30
37
|
else descend(node)
|
|
31
38
|
end
|
|
@@ -46,19 +53,19 @@ class Hashira::Smells::Visibility
|
|
|
46
53
|
def bare?(node) = MARKERS.include?(node.name) && !node.receiver
|
|
47
54
|
|
|
48
55
|
def switch(name, arguments)
|
|
49
|
-
arguments ? tag(name, arguments.arguments) : (@
|
|
56
|
+
arguments ? tag(name, arguments.arguments) : (@_section = name)
|
|
50
57
|
end
|
|
51
58
|
|
|
52
59
|
def tag(section, arguments) = arguments.each { note(it, section) }
|
|
53
60
|
|
|
54
61
|
def note(argument, section)
|
|
55
62
|
case argument
|
|
56
|
-
when Prism::DefNode then @
|
|
57
|
-
when Prism::SymbolNode then @
|
|
63
|
+
when Prism::DefNode then @_found << [argument, section]
|
|
64
|
+
when Prism::SymbolNode then @_overrides[argument.unescaped.to_sym] = section
|
|
58
65
|
end
|
|
59
66
|
end
|
|
60
67
|
|
|
61
68
|
def shadow(node)
|
|
62
|
-
statements(node).each { @
|
|
69
|
+
statements(node).each { @_found << [it, :singleton] if it.is_a?(Prism::DefNode) }
|
|
63
70
|
end
|
|
64
71
|
end
|
data/lib/hashira/trees.rb
CHANGED
|
@@ -4,17 +4,21 @@ require "prism"
|
|
|
4
4
|
|
|
5
5
|
class Hashira::Trees
|
|
6
6
|
def initialize(project)
|
|
7
|
-
@
|
|
8
|
-
@all = project.files.to_h { [it, parse(it)] }
|
|
7
|
+
@project = project
|
|
9
8
|
end
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
def all = @_all ||= @project.files.to_h { [it, parse(it)] }
|
|
11
|
+
|
|
12
|
+
def unparsed
|
|
13
|
+
all
|
|
14
|
+
@_unparsed ||= []
|
|
15
|
+
end
|
|
12
16
|
|
|
13
17
|
private
|
|
14
18
|
|
|
15
19
|
def parse(path)
|
|
16
20
|
result = Prism.parse_file(path)
|
|
17
|
-
@
|
|
21
|
+
(@_unparsed ||= []) << path if result.failure?
|
|
18
22
|
result.value
|
|
19
23
|
rescue SystemCallError => error
|
|
20
24
|
raise(Hashira::Error, "cannot read #{path} (#{error.message})")
|
data/lib/hashira/version.rb
CHANGED
data/lib/hashira.rb
CHANGED
|
@@ -34,25 +34,32 @@ require_relative "hashira/analysis/node_walk"
|
|
|
34
34
|
require_relative "hashira/analysis/syntax"
|
|
35
35
|
require_relative "hashira/analysis/type_walk"
|
|
36
36
|
require_relative "hashira/churn"
|
|
37
|
+
require_relative "hashira/git_log"
|
|
37
38
|
require_relative "hashira/ci/accepted"
|
|
38
39
|
require_relative "hashira/ci/baseline"
|
|
40
|
+
require_relative "hashira/ci/comparison"
|
|
39
41
|
require_relative "hashira/ci/diff"
|
|
40
42
|
require_relative "hashira/ci/edge_diff_report"
|
|
41
43
|
require_relative "hashira/ci/finding_diff_report"
|
|
42
44
|
require_relative "hashira/ci/gate"
|
|
43
45
|
require_relative "hashira/ci/improvement"
|
|
46
|
+
require_relative "hashira/ci/mark"
|
|
44
47
|
require_relative "hashira/ci/ratchet"
|
|
45
48
|
require_relative "hashira/ci/ratchet_report"
|
|
46
49
|
require_relative "hashira/ci/scope"
|
|
50
|
+
require_relative "hashira/ci/slice"
|
|
47
51
|
require_relative "hashira/ci/status"
|
|
52
|
+
require_relative "hashira/ci/sweep"
|
|
48
53
|
require_relative "hashira/cli"
|
|
49
54
|
require_relative "hashira/cli/arguments"
|
|
55
|
+
require_relative "hashira/cli/choice"
|
|
50
56
|
require_relative "hashira/cli/command_line"
|
|
51
57
|
require_relative "hashira/cli/fail_on"
|
|
52
58
|
require_relative "hashira/cli/flag"
|
|
53
59
|
require_relative "hashira/cli/flags"
|
|
54
60
|
require_relative "hashira/cli/format"
|
|
55
61
|
require_relative "hashira/cli/needs"
|
|
62
|
+
require_relative "hashira/cli/only"
|
|
56
63
|
require_relative "hashira/cli/options"
|
|
57
64
|
require_relative "hashira/cli/package_by"
|
|
58
65
|
require_relative "hashira/cli/run"
|
|
@@ -110,6 +117,7 @@ require_relative "hashira/duplication/fragment"
|
|
|
110
117
|
require_relative "hashira/duplication/grouping"
|
|
111
118
|
require_relative "hashira/duplication/harvest"
|
|
112
119
|
require_relative "hashira/duplication/index"
|
|
120
|
+
require_relative "hashira/duplication/literal"
|
|
113
121
|
require_relative "hashira/duplication/maximal"
|
|
114
122
|
require_relative "hashira/duplication/near_miss"
|
|
115
123
|
require_relative "hashira/duplication/sequence"
|
|
@@ -117,6 +125,7 @@ require_relative "hashira/duplication/similarity"
|
|
|
117
125
|
require_relative "hashira/duplication/union_find"
|
|
118
126
|
require_relative "hashira/duplication/variance"
|
|
119
127
|
require_relative "hashira/error"
|
|
128
|
+
require_relative "hashira/focus"
|
|
120
129
|
require_relative "hashira/hotspots/file_cost"
|
|
121
130
|
require_relative "hashira/hotspots/rollup"
|
|
122
131
|
require_relative "hashira/pipeline"
|
|
@@ -134,8 +143,10 @@ require_relative "hashira/report/phrases"
|
|
|
134
143
|
require_relative "hashira/report/smell_phrases"
|
|
135
144
|
require_relative "hashira/report/text"
|
|
136
145
|
require_relative "hashira/report/view"
|
|
146
|
+
require_relative "hashira/smells/branches"
|
|
137
147
|
require_relative "hashira/smells/census"
|
|
138
148
|
require_relative "hashira/smells/check"
|
|
149
|
+
require_relative "hashira/smells/kind"
|
|
139
150
|
require_relative "hashira/smells/conditions"
|
|
140
151
|
require_relative "hashira/smells/contexts"
|
|
141
152
|
require_relative "hashira/smells/control_parameter"
|
|
@@ -143,6 +154,7 @@ require_relative "hashira/smells/data_clump"
|
|
|
143
154
|
require_relative "hashira/smells/duplicate_method_call"
|
|
144
155
|
require_relative "hashira/smells/feature_envy"
|
|
145
156
|
require_relative "hashira/smells/instance_variable_assumption"
|
|
157
|
+
require_relative "hashira/smells/lineage"
|
|
146
158
|
require_relative "hashira/smells/manual_dispatch"
|
|
147
159
|
require_relative "hashira/smells/module_initialize"
|
|
148
160
|
require_relative "hashira/smells/nil_check"
|
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.
|
|
4
|
+
version: 0.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Giacomo GK
|
|
@@ -33,23 +33,29 @@ files:
|
|
|
33
33
|
- lib/hashira/churn.rb
|
|
34
34
|
- lib/hashira/ci/accepted.rb
|
|
35
35
|
- lib/hashira/ci/baseline.rb
|
|
36
|
+
- lib/hashira/ci/comparison.rb
|
|
36
37
|
- lib/hashira/ci/diff.rb
|
|
37
38
|
- lib/hashira/ci/edge_diff_report.rb
|
|
38
39
|
- lib/hashira/ci/finding_diff_report.rb
|
|
39
40
|
- lib/hashira/ci/gate.rb
|
|
40
41
|
- lib/hashira/ci/improvement.rb
|
|
42
|
+
- lib/hashira/ci/mark.rb
|
|
41
43
|
- lib/hashira/ci/ratchet.rb
|
|
42
44
|
- lib/hashira/ci/ratchet_report.rb
|
|
43
45
|
- lib/hashira/ci/scope.rb
|
|
46
|
+
- lib/hashira/ci/slice.rb
|
|
44
47
|
- lib/hashira/ci/status.rb
|
|
48
|
+
- lib/hashira/ci/sweep.rb
|
|
45
49
|
- lib/hashira/cli.rb
|
|
46
50
|
- lib/hashira/cli/arguments.rb
|
|
51
|
+
- lib/hashira/cli/choice.rb
|
|
47
52
|
- lib/hashira/cli/command_line.rb
|
|
48
53
|
- lib/hashira/cli/fail_on.rb
|
|
49
54
|
- lib/hashira/cli/flag.rb
|
|
50
55
|
- lib/hashira/cli/flags.rb
|
|
51
56
|
- lib/hashira/cli/format.rb
|
|
52
57
|
- lib/hashira/cli/needs.rb
|
|
58
|
+
- lib/hashira/cli/only.rb
|
|
53
59
|
- lib/hashira/cli/options.rb
|
|
54
60
|
- lib/hashira/cli/package_by.rb
|
|
55
61
|
- lib/hashira/cli/run.rb
|
|
@@ -108,6 +114,7 @@ files:
|
|
|
108
114
|
- lib/hashira/duplication/grouping.rb
|
|
109
115
|
- lib/hashira/duplication/harvest.rb
|
|
110
116
|
- lib/hashira/duplication/index.rb
|
|
117
|
+
- lib/hashira/duplication/literal.rb
|
|
111
118
|
- lib/hashira/duplication/maximal.rb
|
|
112
119
|
- lib/hashira/duplication/near_miss.rb
|
|
113
120
|
- lib/hashira/duplication/sequence.rb
|
|
@@ -115,6 +122,8 @@ files:
|
|
|
115
122
|
- lib/hashira/duplication/union_find.rb
|
|
116
123
|
- lib/hashira/duplication/variance.rb
|
|
117
124
|
- lib/hashira/error.rb
|
|
125
|
+
- lib/hashira/focus.rb
|
|
126
|
+
- lib/hashira/git_log.rb
|
|
118
127
|
- lib/hashira/hotspots/file_cost.rb
|
|
119
128
|
- lib/hashira/hotspots/rollup.rb
|
|
120
129
|
- lib/hashira/pipeline.rb
|
|
@@ -133,6 +142,7 @@ files:
|
|
|
133
142
|
- lib/hashira/report/text.rb
|
|
134
143
|
- lib/hashira/report/view.rb
|
|
135
144
|
- lib/hashira/smells/boundary_sprawl.rb
|
|
145
|
+
- lib/hashira/smells/branches.rb
|
|
136
146
|
- lib/hashira/smells/census.rb
|
|
137
147
|
- lib/hashira/smells/check.rb
|
|
138
148
|
- lib/hashira/smells/conditions.rb
|
|
@@ -143,6 +153,8 @@ files:
|
|
|
143
153
|
- lib/hashira/smells/feature_envy.rb
|
|
144
154
|
- lib/hashira/smells/foreign.rb
|
|
145
155
|
- lib/hashira/smells/instance_variable_assumption.rb
|
|
156
|
+
- lib/hashira/smells/kind.rb
|
|
157
|
+
- lib/hashira/smells/lineage.rb
|
|
146
158
|
- lib/hashira/smells/manual_dispatch.rb
|
|
147
159
|
- lib/hashira/smells/module_initialize.rb
|
|
148
160
|
- lib/hashira/smells/nil_check.rb
|