reek 1.2.7.1 → 1.2.7.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +13 -1
- data/config/defaults.reek +4 -1
- data/features/masking_smells.feature +7 -7
- data/features/rake_task.feature +2 -2
- data/features/reports.feature +3 -3
- data/features/samples.feature +5 -2
- data/features/yaml.feature +0 -39
- data/lib/reek.rb +1 -1
- data/lib/reek/cli/command_line.rb +3 -3
- data/lib/reek/cli/reek_command.rb +5 -6
- data/lib/reek/cli/report.rb +9 -20
- data/lib/reek/cli/yaml_command.rb +1 -1
- data/lib/reek/core/class_context.rb +1 -2
- data/lib/reek/core/code_context.rb +10 -27
- data/lib/reek/core/code_parser.rb +1 -18
- data/lib/reek/core/detector_stack.rb +4 -0
- data/lib/reek/core/masking_collection.rb +6 -0
- data/lib/reek/core/method_context.rb +8 -56
- data/lib/reek/core/module_context.rb +6 -32
- data/lib/reek/core/object_refs.rb +36 -36
- data/lib/reek/core/singleton_method_context.rb +10 -21
- data/lib/reek/core/sniffer.rb +3 -2
- data/lib/reek/examiner.rb +39 -31
- data/lib/reek/smell_warning.rb +8 -0
- data/lib/reek/smells/attribute.rb +4 -2
- data/lib/reek/smells/class_variable.rb +3 -3
- data/lib/reek/smells/control_couple.rb +1 -2
- data/lib/reek/smells/data_clump.rb +86 -9
- data/lib/reek/smells/duplication.rb +2 -3
- data/lib/reek/smells/feature_envy.rb +9 -4
- data/lib/reek/smells/simulated_polymorphism.rb +1 -2
- data/lib/reek/smells/smell_detector.rb +0 -6
- data/lib/reek/smells/uncommunicative_method_name.rb +8 -2
- data/lib/reek/smells/uncommunicative_parameter_name.rb +1 -1
- data/lib/reek/smells/uncommunicative_variable_name.rb +1 -1
- data/lib/reek/smells/utility_function.rb +17 -5
- data/lib/reek/source/reference_collector.rb +21 -0
- data/lib/reek/source/sexp_formatter.rb +1 -0
- data/lib/reek/source/tree_dresser.rb +67 -9
- data/lib/reek/spec/should_reek.rb +1 -1
- data/lib/reek/spec/should_reek_of.rb +1 -1
- data/lib/reek/spec/should_reek_only_of.rb +1 -1
- data/reek.gemspec +3 -3
- data/spec/reek/cli/reek_command_spec.rb +3 -2
- data/spec/reek/cli/report_spec.rb +2 -2
- data/spec/reek/cli/yaml_command_spec.rb +2 -2
- data/spec/reek/core/code_context_spec.rb +39 -54
- data/spec/reek/core/method_context_spec.rb +7 -26
- data/spec/reek/core/module_context_spec.rb +0 -15
- data/spec/reek/core/singleton_method_context_spec.rb +0 -6
- data/spec/reek/examiner_spec.rb +6 -6
- data/spec/reek/smells/attribute_spec.rb +30 -32
- data/spec/reek/smells/class_variable_spec.rb +15 -18
- data/spec/reek/smells/data_clump_spec.rb +22 -6
- data/spec/reek/smells/duplication_spec.rb +33 -19
- data/spec/reek/smells/feature_envy_spec.rb +82 -88
- data/spec/reek/smells/large_class_spec.rb +1 -1
- data/spec/reek/smells/smell_detector_shared.rb +1 -1
- data/spec/reek/smells/uncommunicative_method_name_spec.rb +37 -35
- data/spec/reek/smells/utility_function_spec.rb +7 -0
- data/spec/reek/source/reference_collector_spec.rb +53 -0
- data/spec/reek/source/tree_dresser_spec.rb +10 -0
- data/spec/reek/spec/should_reek_only_of_spec.rb +1 -1
- data/spec/spec_helper.rb +7 -0
- metadata +4 -5
- data/features/profile.feature +0 -34
- data/lib/reek/core/block_context.rb +0 -18
- data/spec/reek/core/block_context_spec.rb +0 -26
data/History.txt
CHANGED
@@ -1,4 +1,16 @@
|
|
1
|
-
== 1.2.
|
1
|
+
== 1.2.8 (in development)
|
2
|
+
|
3
|
+
== 1.2.7.2 (2010-03-05)
|
4
|
+
|
5
|
+
=== Minor Changes
|
6
|
+
* Number of masked smells is no longer shown in report headers
|
7
|
+
* Masked smells are no longer listed in --yaml reports
|
8
|
+
* DataClump no longer needs infinite memory for large classes (#57)
|
9
|
+
* DataClump reports the names of the offending methods in the YAML report
|
10
|
+
* UncommunicativeMethodName now accepts operator names (+, -, ...)
|
11
|
+
* Uncommunicative Name now warns about uppercase letters in method & var names
|
12
|
+
|
13
|
+
== 1.2.7.1 (2010-02-03)
|
2
14
|
|
3
15
|
=== Minor Changes
|
4
16
|
* Fixed crash on a case statement with no condition (#58)
|
data/config/defaults.reek
CHANGED
@@ -8,6 +8,7 @@ UncommunicativeParameterName:
|
|
8
8
|
reject:
|
9
9
|
- !ruby/regexp /^.$/
|
10
10
|
- !ruby/regexp /[0-9]$/
|
11
|
+
- !ruby/regexp /[A-Z]/
|
11
12
|
LargeClass:
|
12
13
|
max_methods: 25
|
13
14
|
exclude: []
|
@@ -21,8 +22,9 @@ UncommunicativeMethodName:
|
|
21
22
|
|
22
23
|
enabled: true
|
23
24
|
reject:
|
24
|
-
- !ruby/regexp
|
25
|
+
- !ruby/regexp /^[a-z]$/
|
25
26
|
- !ruby/regexp /[0-9]$/
|
27
|
+
- !ruby/regexp /[A-Z]/
|
26
28
|
LongParameterList:
|
27
29
|
max_params: 3
|
28
30
|
exclude: []
|
@@ -84,6 +86,7 @@ UncommunicativeVariableName:
|
|
84
86
|
reject:
|
85
87
|
- !ruby/regexp /^.$/
|
86
88
|
- !ruby/regexp /[0-9]$/
|
89
|
+
- !ruby/regexp /[A-Z]/
|
87
90
|
SimulatedPolymorphism:
|
88
91
|
exclude: []
|
89
92
|
|
@@ -41,7 +41,7 @@ Feature: Masking smells using config files
|
|
41
41
|
Then the exit status indicates smells
|
42
42
|
And it reports:
|
43
43
|
"""
|
44
|
-
spec/samples/masked/dirty.rb -- 3 warnings
|
44
|
+
spec/samples/masked/dirty.rb -- 3 warnings:
|
45
45
|
Dirty#a calls @s.title twice (Duplication)
|
46
46
|
Dirty#a calls puts(@s.title) twice (Duplication)
|
47
47
|
Dirty#a contains iterators nested 2 deep (Nested Iterators)
|
@@ -54,7 +54,7 @@ Feature: Masking smells using config files
|
|
54
54
|
Then the exit status indicates smells
|
55
55
|
And it reports:
|
56
56
|
"""
|
57
|
-
spec/samples/masked/dirty.rb -- 3 warnings
|
57
|
+
spec/samples/masked/dirty.rb -- 3 warnings:
|
58
58
|
Dirty#a calls @s.title twice (Duplication)
|
59
59
|
Dirty#a calls puts(@s.title) twice (Duplication)
|
60
60
|
Dirty#a contains iterators nested 2 deep (Nested Iterators)
|
@@ -66,7 +66,7 @@ Feature: Masking smells using config files
|
|
66
66
|
Then the exit status indicates smells
|
67
67
|
And it reports:
|
68
68
|
"""
|
69
|
-
spec/samples/masked/dirty.rb --
|
69
|
+
spec/samples/masked/dirty.rb -- 6 warnings:
|
70
70
|
(masked) Dirty has the variable name '@s' (Uncommunicative Name)
|
71
71
|
Dirty#a calls @s.title twice (Duplication)
|
72
72
|
Dirty#a calls puts(@s.title) twice (Duplication)
|
@@ -81,7 +81,7 @@ Feature: Masking smells using config files
|
|
81
81
|
Then the exit status indicates smells
|
82
82
|
And it reports:
|
83
83
|
"""
|
84
|
-
spec/samples/masked/dirty.rb -- 3 warnings
|
84
|
+
spec/samples/masked/dirty.rb -- 3 warnings:
|
85
85
|
Dirty#a calls @s.title twice (Duplication)
|
86
86
|
Dirty#a calls puts(@s.title) twice (Duplication)
|
87
87
|
Dirty#a contains iterators nested 2 deep (Nested Iterators)
|
@@ -93,7 +93,7 @@ Feature: Masking smells using config files
|
|
93
93
|
Then the exit status indicates smells
|
94
94
|
And it reports:
|
95
95
|
"""
|
96
|
-
spec/samples/not_quite_masked/dirty.rb -- 5 warnings
|
96
|
+
spec/samples/not_quite_masked/dirty.rb -- 5 warnings:
|
97
97
|
Dirty has the variable name '@s' (Uncommunicative Name)
|
98
98
|
Dirty#a calls @s.title twice (Duplication)
|
99
99
|
Dirty#a calls puts(@s.title) twice (Duplication)
|
@@ -108,7 +108,7 @@ Feature: Masking smells using config files
|
|
108
108
|
Then the exit status indicates smells
|
109
109
|
And it reports:
|
110
110
|
"""
|
111
|
-
spec/samples/overrides/masked/dirty.rb -- 2 warnings
|
111
|
+
spec/samples/overrides/masked/dirty.rb -- 2 warnings:
|
112
112
|
Dirty#a calls @s.title twice (Duplication)
|
113
113
|
Dirty#a calls puts(@s.title) twice (Duplication)
|
114
114
|
|
@@ -120,7 +120,7 @@ Feature: Masking smells using config files
|
|
120
120
|
Then the exit status indicates smells
|
121
121
|
And it reports:
|
122
122
|
"""
|
123
|
-
spec/samples/overrides/masked/dirty.rb --
|
123
|
+
spec/samples/overrides/masked/dirty.rb -- 6 warnings:
|
124
124
|
(masked) Dirty has the variable name '@s' (Uncommunicative Name)
|
125
125
|
Dirty#a calls @s.title twice (Duplication)
|
126
126
|
Dirty#a calls puts(@s.title) twice (Duplication)
|
data/features/rake_task.feature
CHANGED
@@ -13,7 +13,7 @@ Feature: Reek can be driven through its Task
|
|
13
13
|
Then the exit status indicates an error
|
14
14
|
And it reports:
|
15
15
|
"""
|
16
|
-
spec/samples/masked/dirty.rb -- 3 warnings
|
16
|
+
spec/samples/masked/dirty.rb -- 3 warnings:
|
17
17
|
Dirty#a calls @s.title twice (Duplication)
|
18
18
|
Dirty#a calls puts(@s.title) twice (Duplication)
|
19
19
|
Dirty#a contains iterators nested 2 deep (Nested Iterators)
|
@@ -29,7 +29,7 @@ Feature: Reek can be driven through its Task
|
|
29
29
|
Then the exit status indicates an error
|
30
30
|
And it reports:
|
31
31
|
"""
|
32
|
-
spec/samples/masked/dirty.rb -- 3 warnings
|
32
|
+
spec/samples/masked/dirty.rb -- 3 warnings:
|
33
33
|
Dirty#a calls @s.title twice (Duplication)
|
34
34
|
Dirty#a calls puts(@s.title) twice (Duplication)
|
35
35
|
Dirty#a contains iterators nested 2 deep (Nested Iterators)
|
data/features/reports.feature
CHANGED
@@ -60,10 +60,10 @@ Feature: Correctly formatted reports
|
|
60
60
|
|
61
61
|
Scenario Outline: -a turns on details in presence of -q
|
62
62
|
When I run reek <options> spec/samples/clean_due_to_masking/*.rb
|
63
|
-
Then
|
63
|
+
Then the exit status indicates smells
|
64
64
|
And it reports:
|
65
65
|
"""
|
66
|
-
spec/samples/clean_due_to_masking/dirty_one.rb --
|
66
|
+
spec/samples/clean_due_to_masking/dirty_one.rb -- 7 warnings:
|
67
67
|
(masked) Dirty has no descriptive comment (Irresponsible Module)
|
68
68
|
(masked) Dirty has the variable name '@s' (Uncommunicative Name)
|
69
69
|
(masked) Dirty#a calls @s.title twice (Duplication)
|
@@ -71,7 +71,7 @@ Feature: Correctly formatted reports
|
|
71
71
|
(masked) Dirty#a contains iterators nested 2 deep (Nested Iterators)
|
72
72
|
(masked) Dirty#a has the name 'a' (Uncommunicative Name)
|
73
73
|
(masked) Dirty#a has the variable name 'x' (Uncommunicative Name)
|
74
|
-
spec/samples/clean_due_to_masking/dirty_two.rb --
|
74
|
+
spec/samples/clean_due_to_masking/dirty_two.rb -- 7 warnings:
|
75
75
|
(masked) Dirty has no descriptive comment (Irresponsible Module)
|
76
76
|
(masked) Dirty has the variable name '@s' (Uncommunicative Name)
|
77
77
|
(masked) Dirty#a calls @s.title twice (Duplication)
|
data/features/samples.feature
CHANGED
@@ -10,7 +10,7 @@ Feature: Basic smell detection
|
|
10
10
|
Then the exit status indicates smells
|
11
11
|
And it reports:
|
12
12
|
"""
|
13
|
-
spec/samples/inline.rb -- 41 warnings
|
13
|
+
spec/samples/inline.rb -- 41 warnings:
|
14
14
|
File has no descriptive comment (Irresponsible Module)
|
15
15
|
Inline declares the class variable @@directory (Class Variable)
|
16
16
|
Inline declares the class variable @@rootdir (Class Variable)
|
@@ -178,7 +178,7 @@ Feature: Basic smell detection
|
|
178
178
|
Then the exit status indicates smells
|
179
179
|
And it reports:
|
180
180
|
"""
|
181
|
-
spec/samples/redcloth.rb --
|
181
|
+
spec/samples/redcloth.rb -- 97 warnings:
|
182
182
|
RedCloth has at least 44 methods (Large Class)
|
183
183
|
RedCloth has the variable name 'a' (Uncommunicative Name)
|
184
184
|
RedCloth has the variable name 'b' (Uncommunicative Name)
|
@@ -245,6 +245,7 @@ Feature: Basic smell detection
|
|
245
245
|
RedCloth#inline_textile_span contains iterators nested 2 deep (Nested Iterators)
|
246
246
|
RedCloth#inline_textile_span has approx 8 statements (Long Method)
|
247
247
|
RedCloth#inline_textile_span has the variable name 'm' (Uncommunicative Name)
|
248
|
+
RedCloth#lT has the name 'lT' (Uncommunicative Name)
|
248
249
|
RedCloth#no_textile doesn't depend on instance state (Low Cohesion)
|
249
250
|
RedCloth#no_textile refers to text more than self (Low Cohesion)
|
250
251
|
RedCloth#pba calls $1.length twice (Duplication)
|
@@ -272,6 +273,8 @@ Feature: Basic smell detection
|
|
272
273
|
RedCloth#textile_fn_ is controlled by argument atts (Control Couple)
|
273
274
|
RedCloth#textile_p has 4 parameters (Long Parameter List)
|
274
275
|
RedCloth#textile_p is controlled by argument atts (Control Couple)
|
276
|
+
RedCloth#textile_popup_help has the parameter name 'windowH' (Uncommunicative Name)
|
277
|
+
RedCloth#textile_popup_help has the parameter name 'windowW' (Uncommunicative Name)
|
275
278
|
RedCloth#to_html has approx 24 statements (Long Method)
|
276
279
|
|
277
280
|
"""
|
data/features/yaml.feature
CHANGED
@@ -15,19 +15,6 @@ Feature: Report smells using simple YAML layout
|
|
15
15
|
And it reports:
|
16
16
|
"""
|
17
17
|
---
|
18
|
-
- !ruby/object:Reek::SmellWarning
|
19
|
-
location:
|
20
|
-
lines:
|
21
|
-
- 5
|
22
|
-
context: Dirty
|
23
|
-
source: spec/samples/masked/dirty.rb
|
24
|
-
smell:
|
25
|
-
class: UncommunicativeName
|
26
|
-
subclass: UncommunicativeVariableName
|
27
|
-
variable_name: "@s"
|
28
|
-
message: has the variable name '@s'
|
29
|
-
status:
|
30
|
-
is_active: false
|
31
18
|
- !ruby/object:Reek::SmellWarning
|
32
19
|
location:
|
33
20
|
lines:
|
@@ -71,32 +58,6 @@ Feature: Report smells using simple YAML layout
|
|
71
58
|
message: contains iterators nested 2 deep
|
72
59
|
status:
|
73
60
|
is_active: true
|
74
|
-
- !ruby/object:Reek::SmellWarning
|
75
|
-
location:
|
76
|
-
lines:
|
77
|
-
- 3
|
78
|
-
context: Dirty#a
|
79
|
-
source: spec/samples/masked/dirty.rb
|
80
|
-
smell:
|
81
|
-
method_name: a
|
82
|
-
class: UncommunicativeName
|
83
|
-
subclass: UncommunicativeMethodName
|
84
|
-
message: has the name 'a'
|
85
|
-
status:
|
86
|
-
is_active: false
|
87
|
-
- !ruby/object:Reek::SmellWarning
|
88
|
-
location:
|
89
|
-
lines:
|
90
|
-
- 5
|
91
|
-
context: Dirty#a
|
92
|
-
source: spec/samples/masked/dirty.rb
|
93
|
-
smell:
|
94
|
-
class: UncommunicativeName
|
95
|
-
subclass: UncommunicativeVariableName
|
96
|
-
variable_name: x
|
97
|
-
message: has the variable name 'x'
|
98
|
-
status:
|
99
|
-
is_active: false
|
100
61
|
|
101
62
|
"""
|
102
63
|
|
data/lib/reek.rb
CHANGED
@@ -18,7 +18,7 @@ module Reek
|
|
18
18
|
@argv = argv
|
19
19
|
@parser = OptionParser.new
|
20
20
|
@report_class = VerboseReport
|
21
|
-
@
|
21
|
+
@collection_strategy = ActiveSmellsOnly
|
22
22
|
@command_class = ReekCommand
|
23
23
|
set_options
|
24
24
|
end
|
@@ -66,7 +66,7 @@ EOB
|
|
66
66
|
|
67
67
|
@parser.separator "\nReport formatting:"
|
68
68
|
@parser.on("-a", "--[no-]show-all", "Show all smells, including those masked by config settings") do |opt|
|
69
|
-
@
|
69
|
+
@collection_strategy = opt ? ActiveAndMaskedSmells : ActiveSmellsOnly
|
70
70
|
end
|
71
71
|
@parser.on("-q", "--[no-]quiet", "Suppress headings for smell-free source files") do |opt|
|
72
72
|
@report_class = opt ? QuietReport : VerboseReport
|
@@ -90,7 +90,7 @@ EOB
|
|
90
90
|
YamlCommand.create(sources)
|
91
91
|
else
|
92
92
|
sources = get_sources
|
93
|
-
ReekCommand.create(sources, @report_class, @
|
93
|
+
ReekCommand.create(sources, @report_class, @collection_strategy)
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
@@ -8,21 +8,20 @@ module Reek
|
|
8
8
|
# text report format.
|
9
9
|
#
|
10
10
|
class ReekCommand
|
11
|
-
def self.create(sources, report_class,
|
12
|
-
examiners = sources.map {|src| Examiner.new(src) }
|
13
|
-
new(examiners, report_class
|
11
|
+
def self.create(sources, report_class, strategy = ActiveSmellsOnly)
|
12
|
+
examiners = sources.map { |src| Examiner.new(src, strategy.new) }
|
13
|
+
new(examiners, report_class)
|
14
14
|
end
|
15
15
|
|
16
|
-
def initialize(examiners, report_class
|
16
|
+
def initialize(examiners, report_class)
|
17
17
|
@examiners = examiners
|
18
18
|
@report_class = report_class
|
19
|
-
@show_all = show_all #SMELL: boolean parameter
|
20
19
|
end
|
21
20
|
|
22
21
|
def execute(view)
|
23
22
|
had_smells = false
|
24
23
|
@examiners.each do |examiner|
|
25
|
-
rpt = @report_class.new(examiner
|
24
|
+
rpt = @report_class.new(examiner)
|
26
25
|
had_smells ||= examiner.smelly?
|
27
26
|
view.output(rpt.report)
|
28
27
|
end
|
data/lib/reek/cli/report.rb
CHANGED
@@ -10,9 +10,8 @@ module Reek
|
|
10
10
|
|
11
11
|
SMELL_FORMAT = '%m%c %w (%s)'
|
12
12
|
|
13
|
-
def initialize(examiner
|
13
|
+
def initialize(examiner)
|
14
14
|
@examiner = examiner
|
15
|
-
@display_masked_warnings = display_masked_warnings # SMELL: Control Couple
|
16
15
|
end
|
17
16
|
|
18
17
|
# Creates a formatted report of all the +Smells::SmellWarning+ objects recorded in
|
@@ -31,45 +30,35 @@ module Reek
|
|
31
30
|
end
|
32
31
|
|
33
32
|
def header
|
34
|
-
"#{@examiner.description} -- #{visible_header}
|
33
|
+
"#{@examiner.description} -- #{visible_header}"
|
35
34
|
end
|
36
35
|
|
37
36
|
# Creates a formatted report of all the +Smells::SmellWarning+ objects recorded in
|
38
37
|
# this report.
|
39
38
|
def smell_list
|
40
|
-
|
41
|
-
result = @examiner.all_smells.map {|smell| " #{smell.report(SMELL_FORMAT)}"}
|
42
|
-
else
|
43
|
-
result = @examiner.all_active_smells.map {|smell| " #{smell.report(SMELL_FORMAT)}"}
|
44
|
-
end
|
45
|
-
result.join("\n")
|
39
|
+
@examiner.smells.map {|smell| " #{smell.report(SMELL_FORMAT)}"}.join("\n")
|
46
40
|
end
|
47
41
|
|
48
42
|
private
|
49
43
|
|
50
44
|
def should_report
|
51
|
-
@examiner.
|
45
|
+
@examiner.num_smells > 0
|
52
46
|
end
|
53
47
|
|
54
48
|
def visible_header
|
55
|
-
num_smells = @examiner.
|
49
|
+
num_smells = @examiner.smells.length
|
56
50
|
result = "#{num_smells} warning"
|
57
51
|
result += 's' unless num_smells == 1
|
58
52
|
result
|
59
53
|
end
|
60
|
-
|
61
|
-
def masked_header
|
62
|
-
num_masked_warnings = @examiner.num_masked_smells
|
63
|
-
num_masked_warnings == 0 ? '' : " (+#{num_masked_warnings} masked)"
|
64
|
-
end
|
65
54
|
end
|
66
55
|
|
67
56
|
#
|
68
57
|
# A report that lists every source, including those that have no smells.
|
69
58
|
#
|
70
59
|
class VerboseReport
|
71
|
-
def initialize(examiner
|
72
|
-
@reporter = ReportSection.new(examiner
|
60
|
+
def initialize(examiner)
|
61
|
+
@reporter = ReportSection.new(examiner)
|
73
62
|
end
|
74
63
|
def report
|
75
64
|
@reporter.verbose_report
|
@@ -80,8 +69,8 @@ module Reek
|
|
80
69
|
# A report that lists a section for each source that has smells.
|
81
70
|
#
|
82
71
|
class QuietReport
|
83
|
-
def initialize(examiner
|
84
|
-
@reporter = ReportSection.new(examiner
|
72
|
+
def initialize(examiner)
|
73
|
+
@reporter = ReportSection.new(examiner)
|
85
74
|
end
|
86
75
|
def report
|
87
76
|
@reporter.quiet_report
|
@@ -1,13 +1,4 @@
|
|
1
1
|
|
2
|
-
#
|
3
|
-
# Extensions to +Module+ needed by Reek.
|
4
|
-
#
|
5
|
-
class Module
|
6
|
-
def const_or_nil(sym)
|
7
|
-
const_defined?(sym) ? const_get(sym) : nil
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
2
|
module Reek
|
12
3
|
module Core
|
13
4
|
|
@@ -19,12 +10,15 @@ module Reek
|
|
19
10
|
#
|
20
11
|
class CodeContext
|
21
12
|
|
22
|
-
attr_reader :
|
13
|
+
attr_reader :exp
|
23
14
|
|
24
15
|
def initialize(outer, exp)
|
25
16
|
@outer = outer
|
26
17
|
@exp = exp
|
27
|
-
|
18
|
+
end
|
19
|
+
|
20
|
+
def name
|
21
|
+
@exp.name
|
28
22
|
end
|
29
23
|
|
30
24
|
def local_nodes(type, &blk)
|
@@ -32,22 +26,12 @@ module Reek
|
|
32
26
|
end
|
33
27
|
|
34
28
|
def each_node(type, ignoring, &blk)
|
35
|
-
|
36
|
-
@exp.look_for(type, ignoring, &blk)
|
37
|
-
else
|
38
|
-
result = []
|
39
|
-
@exp.look_for(type, ignoring) {|exp| result << exp}
|
40
|
-
result
|
41
|
-
end
|
29
|
+
@exp.each_node(type, ignoring, &blk)
|
42
30
|
end
|
43
31
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
strings.any? do |str|
|
48
|
-
re = /#{str}/
|
49
|
-
re === me or re === self.full_name
|
50
|
-
end
|
32
|
+
def matches?(candidates)
|
33
|
+
my_fq_name = full_name
|
34
|
+
candidates.any? {|str| /#{str}/ === my_fq_name }
|
51
35
|
end
|
52
36
|
|
53
37
|
#
|
@@ -64,8 +48,7 @@ module Reek
|
|
64
48
|
|
65
49
|
def full_name
|
66
50
|
outer = @outer ? @outer.full_name : ''
|
67
|
-
|
68
|
-
"#{prefix}#{@name}"
|
51
|
+
exp.full_name(outer)
|
69
52
|
end
|
70
53
|
end
|
71
54
|
end
|