reek 6.0.3 → 6.0.4
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 +6 -1
- data/CONTRIBUTING.md +3 -0
- data/Dockerfile +1 -1
- data/Gemfile +6 -6
- data/lib/reek/ast/ast_node_class_map.rb +1 -1
- data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -3
- data/lib/reek/smell_detectors/base_detector.rb +1 -1
- data/lib/reek/smell_warning.rb +1 -1
- data/lib/reek/source/source_locator.rb +1 -3
- data/lib/reek/version.rb +1 -1
- data/reek.gemspec +4 -1
- metadata +3 -208
- data/docs/API.md +0 -174
- data/docs/Attribute.md +0 -39
- data/docs/Basic-Smell-Options.md +0 -85
- data/docs/Boolean-Parameter.md +0 -54
- data/docs/Class-Variable.md +0 -40
- data/docs/Code-Smells.md +0 -39
- data/docs/Command-Line-Options.md +0 -119
- data/docs/Control-Couple.md +0 -26
- data/docs/Control-Parameter.md +0 -32
- data/docs/Data-Clump.md +0 -46
- data/docs/Duplicate-Method-Call.md +0 -264
- data/docs/Feature-Envy.md +0 -93
- data/docs/How-To-Write-New-Detectors.md +0 -132
- data/docs/How-reek-works-internally.md +0 -114
- data/docs/Instance-Variable-Assumption.md +0 -163
- data/docs/Irresponsible-Module.md +0 -47
- data/docs/Large-Class.md +0 -16
- data/docs/Long-Parameter-List.md +0 -39
- data/docs/Long-Yield-List.md +0 -37
- data/docs/Manual-Dispatch.md +0 -30
- data/docs/Missing-Safe-Method.md +0 -92
- data/docs/Module-Initialize.md +0 -62
- data/docs/Nested-Iterators.md +0 -59
- data/docs/Nil-Check.md +0 -47
- data/docs/RSpec-matchers.md +0 -129
- data/docs/Rake-Task.md +0 -66
- data/docs/Reek-4-to-Reek-5-migration.md +0 -188
- data/docs/Reek-Driven-Development.md +0 -46
- data/docs/Repeated-Conditional.md +0 -47
- data/docs/Simulated-Polymorphism.md +0 -16
- data/docs/Smell-Suppression.md +0 -96
- data/docs/Style-Guide.md +0 -19
- data/docs/Subclassed-From-Core-Class.md +0 -79
- data/docs/Too-Many-Constants.md +0 -37
- data/docs/Too-Many-Instance-Variables.md +0 -43
- data/docs/Too-Many-Methods.md +0 -56
- data/docs/Too-Many-Statements.md +0 -54
- data/docs/Uncommunicative-Method-Name.md +0 -94
- data/docs/Uncommunicative-Module-Name.md +0 -92
- data/docs/Uncommunicative-Name.md +0 -18
- data/docs/Uncommunicative-Parameter-Name.md +0 -90
- data/docs/Uncommunicative-Variable-Name.md +0 -96
- data/docs/Unused-Parameters.md +0 -28
- data/docs/Unused-Private-Method.md +0 -101
- data/docs/Utility-Function.md +0 -56
- data/docs/Versioning-Policy.md +0 -7
- data/docs/YAML-Reports.md +0 -93
- data/docs/defaults.reek.yml +0 -129
- data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
- data/docs/templates/default/docstring/setup.rb +0 -35
- data/docs/templates/default/fulldoc/html/css/common.css +0 -1
- data/docs/yard_plugin.rb +0 -17
- data/features/command_line_interface/basic_usage.feature +0 -15
- data/features/command_line_interface/options.feature +0 -123
- data/features/command_line_interface/show_progress.feature +0 -33
- data/features/command_line_interface/smell_selection.feature +0 -15
- data/features/command_line_interface/smells_count.feature +0 -38
- data/features/command_line_interface/stdin.feature +0 -65
- data/features/configuration_files/accept_setting.feature +0 -87
- data/features/configuration_files/directory_specific_directives.feature +0 -274
- data/features/configuration_files/exclude_directives.feature +0 -35
- data/features/configuration_files/exclude_paths_directives.feature +0 -42
- data/features/configuration_files/masking_smells.feature +0 -94
- data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
- data/features/configuration_files/reject_setting.feature +0 -89
- data/features/configuration_files/schema_validation.feature +0 -59
- data/features/configuration_files/show_configuration_file.feature +0 -44
- data/features/configuration_files/unused_private_method.feature +0 -68
- data/features/configuration_loading.feature +0 -91
- data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
- data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
- data/features/locales.feature +0 -32
- data/features/programmatic_access.feature +0 -41
- data/features/rake_task/rake_task.feature +0 -138
- data/features/reports/codeclimate.feature +0 -59
- data/features/reports/json.feature +0 -59
- data/features/reports/reports.feature +0 -219
- data/features/reports/yaml.feature +0 -52
- data/features/rspec_matcher.feature +0 -41
- data/features/samples.feature +0 -305
- data/features/step_definitions/.rubocop.yml +0 -5
- data/features/step_definitions/reek_steps.rb +0 -102
- data/features/step_definitions/sample_file_steps.rb +0 -63
- data/features/support/env.rb +0 -33
- data/features/todo_list.feature +0 -108
- data/samples/checkstyle.xml +0 -7
- data/samples/clean_source/clean.rb +0 -6
- data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
- data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
- data/samples/configuration/corrupt.reek +0 -1
- data/samples/configuration/empty.reek +0 -0
- data/samples/configuration/full_configuration.reek +0 -13
- data/samples/configuration/full_mask.reek +0 -6
- data/samples/configuration/home/home.reek.yml +0 -4
- data/samples/configuration/partial_mask.reek +0 -4
- data/samples/configuration/regular_configuration/.reek.yml +0 -4
- data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
- data/samples/configuration/with_excluded_paths.reek +0 -5
- data/samples/no_config_file/.keep +0 -0
- data/samples/paths.rb +0 -5
- data/samples/smelly_source/inline.rb +0 -704
- data/samples/smelly_source/optparse.rb +0 -1788
- data/samples/smelly_source/redcloth.rb +0 -1130
- data/samples/smelly_source/ruby.rb +0 -368
- data/samples/smelly_source/smelly.rb +0 -7
- data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
- data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
- data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
- data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
- data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
- data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
- data/samples/source_with_non_ruby_files/gibberish +0 -1
- data/samples/source_with_non_ruby_files/python_source.py +0 -1
- data/samples/source_with_non_ruby_files/ruby.rb +0 -6
- data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
- data/spec/quality/documentation_spec.rb +0 -41
- data/spec/quality/reek_source_spec.rb +0 -11
- data/spec/reek/ast/node_spec.rb +0 -211
- data/spec/reek/ast/object_refs_spec.rb +0 -83
- data/spec/reek/ast/reference_collector_spec.rb +0 -47
- data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
- data/spec/reek/cli/application_spec.rb +0 -168
- data/spec/reek/cli/command/report_command_spec.rb +0 -44
- data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
- data/spec/reek/cli/options_spec.rb +0 -51
- data/spec/reek/cli/silencer_spec.rb +0 -28
- data/spec/reek/code_comment_spec.rb +0 -184
- data/spec/reek/configuration/app_configuration_spec.rb +0 -195
- data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
- data/spec/reek/configuration/default_directive_spec.rb +0 -13
- data/spec/reek/configuration/directory_directives_spec.rb +0 -122
- data/spec/reek/configuration/excluded_paths_spec.rb +0 -25
- data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
- data/spec/reek/configuration/schema_validator_spec.rb +0 -165
- data/spec/reek/context/code_context_spec.rb +0 -192
- data/spec/reek/context/ghost_context_spec.rb +0 -60
- data/spec/reek/context/method_context_spec.rb +0 -72
- data/spec/reek/context/module_context_spec.rb +0 -55
- data/spec/reek/context/root_context_spec.rb +0 -12
- data/spec/reek/context/statement_counter_spec.rb +0 -24
- data/spec/reek/context_builder_spec.rb +0 -457
- data/spec/reek/detector_repository_spec.rb +0 -22
- data/spec/reek/documentation_link_spec.rb +0 -20
- data/spec/reek/errors/base_error_spec.rb +0 -13
- data/spec/reek/examiner_spec.rb +0 -309
- data/spec/reek/logging_error_handler_spec.rb +0 -24
- data/spec/reek/rake/task_spec.rb +0 -56
- data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
- data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
- data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
- data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
- data/spec/reek/report/html_report_spec.rb +0 -19
- data/spec/reek/report/json_report_spec.rb +0 -58
- data/spec/reek/report/location_formatter_spec.rb +0 -32
- data/spec/reek/report/progress_formatter_spec.rb +0 -68
- data/spec/reek/report/text_report_spec.rb +0 -89
- data/spec/reek/report/xml_report_spec.rb +0 -24
- data/spec/reek/report/yaml_report_spec.rb +0 -55
- data/spec/reek/report_spec.rb +0 -28
- data/spec/reek/smell_configuration_spec.rb +0 -56
- data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
- data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
- data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
- data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
- data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
- data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
- data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
- data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
- data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
- data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
- data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
- data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
- data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
- data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
- data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
- data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
- data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
- data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
- data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
- data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
- data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
- data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
- data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
- data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
- data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
- data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
- data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
- data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
- data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
- data/spec/reek/smell_detectors/utility_function_spec.rb +0 -309
- data/spec/reek/smell_warning_spec.rb +0 -137
- data/spec/reek/source/source_code_spec.rb +0 -79
- data/spec/reek/source/source_locator_spec.rb +0 -166
- data/spec/reek/spec/should_reek_of_spec.rb +0 -153
- data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
- data/spec/reek/spec/should_reek_spec.rb +0 -52
- data/spec/reek/spec/smell_matcher_spec.rb +0 -87
- data/spec/reek/tree_dresser_spec.rb +0 -46
- data/spec/spec_helper.rb +0 -110
- data/tasks/configuration.rake +0 -18
- data/tasks/console.rake +0 -5
- data/tasks/reek.rake +0 -6
- data/tasks/rubocop.rake +0 -11
- data/tasks/test.rake +0 -32
@@ -1,201 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/smell_detectors/uncommunicative_variable_name'
|
3
|
-
|
4
|
-
RSpec.describe Reek::SmellDetectors::UncommunicativeVariableName do
|
5
|
-
it 'reports the right values' do
|
6
|
-
src = <<-RUBY
|
7
|
-
def alfa
|
8
|
-
x = 5
|
9
|
-
end
|
10
|
-
RUBY
|
11
|
-
|
12
|
-
expect(src).to reek_of(:UncommunicativeVariableName,
|
13
|
-
lines: [2],
|
14
|
-
context: 'alfa',
|
15
|
-
message: "has the variable name 'x'",
|
16
|
-
source: 'string',
|
17
|
-
name: 'x')
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'does count all occurences' do
|
21
|
-
src = <<-RUBY
|
22
|
-
def alfa
|
23
|
-
x = 3
|
24
|
-
y = 7
|
25
|
-
end
|
26
|
-
RUBY
|
27
|
-
|
28
|
-
expect(src).to reek_of(:UncommunicativeVariableName, lines: [2], name: 'x').
|
29
|
-
and reek_of(:UncommunicativeVariableName, lines: [3], name: 'y')
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'when examining instance variables' do
|
33
|
-
it 'does not report use of one-letter names' do
|
34
|
-
src = 'class Alfa; def bravo; @x; end; end'
|
35
|
-
expect(src).not_to reek_of(:UncommunicativeVariableName)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'reports one-letter names in assignment' do
|
39
|
-
src = 'class Alfa; def bravo(charlie) @x = charlie; end; end'
|
40
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: '@x')
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'when examining local variables' do
|
45
|
-
it 'does not report single underscore as a variable name' do
|
46
|
-
src = 'def alfa; _ = bravo(); end'
|
47
|
-
expect(src).not_to reek_of(:UncommunicativeVariableName)
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'reports one-letter names' do
|
51
|
-
src = 'def alfa; x = bravo(); end'
|
52
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'x')
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'reports names ending with a digit' do
|
56
|
-
src = 'def alfa; var123 = bravo(); end'
|
57
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'var123')
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'reports camelcased names' do
|
61
|
-
src = 'def alfa; bravoCharlie = delta(); end'
|
62
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'bravoCharlie')
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'reports a bad name inside a block' do
|
66
|
-
src = 'def alfa; bravo.each { x = 42 }; end'
|
67
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'x')
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'reports variable name outside any method' do
|
71
|
-
src = 'class Alfa; x = bravo(); end'
|
72
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'x')
|
73
|
-
end
|
74
|
-
|
75
|
-
it "reports bad names starting with '_'" do
|
76
|
-
src = 'def alfa; _bravoCharlie_42 = delta(); end'
|
77
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: '_bravoCharlie_42')
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context 'when examining block parameters' do
|
82
|
-
it 'reports all relevant block parameters' do
|
83
|
-
src = <<-RUBY
|
84
|
-
def alfa
|
85
|
-
@bravo.map { |x, y| x + y }
|
86
|
-
end
|
87
|
-
RUBY
|
88
|
-
|
89
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'x').
|
90
|
-
and reek_of(:UncommunicativeVariableName, name: 'y')
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'reports block parameters used outside of methods' do
|
94
|
-
src = <<-RUBY
|
95
|
-
class Alfa
|
96
|
-
@bravo.map { |x| x * 2 }
|
97
|
-
end
|
98
|
-
RUBY
|
99
|
-
|
100
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'x')
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'reports splatted block parameters correctly' do
|
104
|
-
src = <<-RUBY
|
105
|
-
def alfa
|
106
|
-
@bravo.map { |*y| y << 1 }
|
107
|
-
end
|
108
|
-
RUBY
|
109
|
-
|
110
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'y')
|
111
|
-
end
|
112
|
-
|
113
|
-
it 'reports nested block parameters' do
|
114
|
-
src = <<-RUBY
|
115
|
-
def alfa
|
116
|
-
@bravo.map { |(x, y)| x + y }
|
117
|
-
end
|
118
|
-
RUBY
|
119
|
-
|
120
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'x').
|
121
|
-
and reek_of(:UncommunicativeVariableName, name: 'y')
|
122
|
-
end
|
123
|
-
|
124
|
-
it 'reports splatted nested block parameters' do
|
125
|
-
src = <<-RUBY
|
126
|
-
def def alfa
|
127
|
-
@bravo.map { |(x, *y)| x + y }
|
128
|
-
end
|
129
|
-
RUBY
|
130
|
-
|
131
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'x').
|
132
|
-
and reek_of(:UncommunicativeVariableName, name: 'y')
|
133
|
-
end
|
134
|
-
|
135
|
-
it 'reports deeply nested block parameters' do
|
136
|
-
src = <<-RUBY
|
137
|
-
def alfa
|
138
|
-
@bravo.map { |(x, (y, z))| x + y + z }
|
139
|
-
end
|
140
|
-
RUBY
|
141
|
-
|
142
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'x').
|
143
|
-
and reek_of(:UncommunicativeVariableName, name: 'y').
|
144
|
-
and reek_of(:UncommunicativeVariableName, name: 'z')
|
145
|
-
end
|
146
|
-
|
147
|
-
it 'reports shadowed block parameters' do
|
148
|
-
src = <<-RUBY
|
149
|
-
def alfa
|
150
|
-
@bravo.map { |x; y| y = x * 2 }
|
151
|
-
end
|
152
|
-
RUBY
|
153
|
-
|
154
|
-
expect(src).to reek_of(:UncommunicativeVariableName, name: 'x').
|
155
|
-
and reek_of(:UncommunicativeVariableName, name: 'y')
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
describe '`accept` patterns' do
|
160
|
-
let(:src) { 'def alfa; bravo2 = 42; end' }
|
161
|
-
|
162
|
-
it 'make smelly names pass' do
|
163
|
-
patterns = [/ravo2/, /bravo2/]
|
164
|
-
patterns.each do |pattern|
|
165
|
-
expect(src).to reek_of(:UncommunicativeVariableName).
|
166
|
-
and not_reek_of(:UncommunicativeVariableName).with_config('accept' => pattern)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
describe '`reject` patterns' do
|
172
|
-
let(:src) { 'def alfa; foobar = 42; end' }
|
173
|
-
|
174
|
-
it 'reject smelly names' do
|
175
|
-
patterns = [/fooba/, /oobar/]
|
176
|
-
patterns.each do |pattern|
|
177
|
-
expect(src).to not_reek_of(:UncommunicativeVariableName).
|
178
|
-
and reek_of(:UncommunicativeVariableName).with_config('reject' => pattern)
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
describe '.default_config' do
|
184
|
-
it 'merges in the default accept and reject patterns' do
|
185
|
-
expected = {
|
186
|
-
'enabled' => true,
|
187
|
-
'exclude' => [],
|
188
|
-
'reject' => [/^.$/, /[0-9]$/, /[A-Z]/],
|
189
|
-
'accept' => [/^_$/]
|
190
|
-
}
|
191
|
-
|
192
|
-
expect(described_class.default_config).to eq(expected)
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
describe '.contexts' do
|
197
|
-
it 'are scoped to classes, modules, instance and singleton methods' do
|
198
|
-
expect(described_class.contexts).to eq([:module, :class, :def, :defs])
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
@@ -1,114 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/smell_detectors/unused_parameters'
|
3
|
-
|
4
|
-
RSpec.describe Reek::SmellDetectors::UnusedParameters do
|
5
|
-
it 'reports the right values' do
|
6
|
-
src = <<-RUBY
|
7
|
-
def alfa(bravo)
|
8
|
-
end
|
9
|
-
RUBY
|
10
|
-
|
11
|
-
expect(src).to reek_of(:UnusedParameters,
|
12
|
-
lines: [1],
|
13
|
-
context: 'alfa',
|
14
|
-
message: "has unused parameter 'bravo'",
|
15
|
-
source: 'string',
|
16
|
-
name: 'bravo')
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'does count all occurences' do
|
20
|
-
src = <<-RUBY
|
21
|
-
def alfa(bravo, charlie)
|
22
|
-
end
|
23
|
-
RUBY
|
24
|
-
|
25
|
-
expect(src).
|
26
|
-
to reek_of(:UnusedParameters, lines: [1], name: 'bravo').
|
27
|
-
and reek_of(:UnusedParameters, lines: [1], name: 'charlie')
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'reports nothing for no parameters' do
|
31
|
-
src = 'def alfa; end'
|
32
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'reports nothing for used parameter' do
|
36
|
-
src = 'def alfa(bravo); bravo; end'
|
37
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'reports for 1 used and 2 unused parameter' do
|
41
|
-
src = 'def alfa(bravo, charlie, delta); bravo end'
|
42
|
-
|
43
|
-
expect(src).
|
44
|
-
to not_reek_of(:UnusedParameters, name: 'bravo').
|
45
|
-
and reek_of(:UnusedParameters, name: 'charlie').
|
46
|
-
and reek_of(:UnusedParameters, name: 'delta')
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'reports nothing for named parameters prefixed with _' do
|
50
|
-
src = 'def alfa(_bravo); end'
|
51
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'reports nothing when using a parameter via self assignment' do
|
55
|
-
src = 'def alfa(bravo); bravo += 1; end'
|
56
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'reports nothing when using a parameter on a rescue' do
|
60
|
-
src = 'def alfa(bravo = 3); puts "nothing"; rescue; retry if bravo -= 1 > 0; raise; end'
|
61
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
62
|
-
end
|
63
|
-
|
64
|
-
context 'when using super' do
|
65
|
-
it 'reports nothing with implicit arguments' do
|
66
|
-
src = 'def alfa(*bravo); super; end'
|
67
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'reports something when explicitely passing no arguments' do
|
71
|
-
src = 'def alfa(*bravo); super(); end'
|
72
|
-
expect(src).to reek_of(:UnusedParameters)
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'reports nothing when explicitely passing all arguments' do
|
76
|
-
src = 'def alfa(*bravo); super(*bravo); end'
|
77
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'reports nothing in a nested context' do
|
81
|
-
src = 'def alfa(*bravo); charlie(super); end'
|
82
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context 'with anonymous parameters' do
|
87
|
-
it 'reports nothing for unused anonymous parameter' do
|
88
|
-
src = 'def alfa(_); end'
|
89
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
90
|
-
end
|
91
|
-
|
92
|
-
it 'reports nothing for unused anonymous splatted parameter' do
|
93
|
-
src = 'def alfa(*); end'
|
94
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
context 'with splatted parameters' do
|
99
|
-
it 'reports nothing for used splatted parameter' do
|
100
|
-
src = 'def alfa(*bravo); bravo; end'
|
101
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'reports something when not using a keyword argument with splat' do
|
105
|
-
src = 'def alfa(**bravo); end'
|
106
|
-
expect(src).to reek_of(:UnusedParameters)
|
107
|
-
end
|
108
|
-
|
109
|
-
it 'reports nothing when using a keyword argument with splat' do
|
110
|
-
src = 'def alfa(**bravo); bravo; end'
|
111
|
-
expect(src).not_to reek_of(:UnusedParameters)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
@@ -1,205 +0,0 @@
|
|
1
|
-
require_relative '../../spec_helper'
|
2
|
-
require_lib 'reek/smell_detectors/unused_private_method'
|
3
|
-
|
4
|
-
RSpec.describe Reek::SmellDetectors::UnusedPrivateMethod do
|
5
|
-
it 'reports the right values' do
|
6
|
-
src = <<-RUBY
|
7
|
-
class Alfa
|
8
|
-
private
|
9
|
-
|
10
|
-
def charlie
|
11
|
-
end
|
12
|
-
end
|
13
|
-
RUBY
|
14
|
-
|
15
|
-
expect(src).to reek_of(:UnusedPrivateMethod,
|
16
|
-
lines: [4],
|
17
|
-
context: 'Alfa',
|
18
|
-
message: "has the unused private instance method 'charlie'",
|
19
|
-
source: 'string',
|
20
|
-
name: 'charlie')
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'does count all occurences' do
|
24
|
-
src = <<-RUBY
|
25
|
-
class Alfa
|
26
|
-
private
|
27
|
-
|
28
|
-
def charlie
|
29
|
-
end
|
30
|
-
|
31
|
-
def charlie
|
32
|
-
end
|
33
|
-
end
|
34
|
-
RUBY
|
35
|
-
|
36
|
-
expect(src).
|
37
|
-
to reek_of(:UnusedPrivateMethod, lines: [4], name: 'charlie').
|
38
|
-
and reek_of(:UnusedPrivateMethod, lines: [7], name: 'charlie')
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'when a class has unused private methods' do
|
42
|
-
it 'reports instance methods' do
|
43
|
-
source = <<-RUBY
|
44
|
-
class Alfa
|
45
|
-
private
|
46
|
-
def bravo; end
|
47
|
-
def charlie; end
|
48
|
-
end
|
49
|
-
RUBY
|
50
|
-
|
51
|
-
expect(source).
|
52
|
-
to reek_of(:UnusedPrivateMethod, name: 'bravo').
|
53
|
-
and reek_of(:UnusedPrivateMethod, name: 'charlie')
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'reports instance methods in the correct class' do
|
57
|
-
source = <<-RUBY
|
58
|
-
class Alfa
|
59
|
-
class Bravo
|
60
|
-
private
|
61
|
-
def charlie; end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
RUBY
|
65
|
-
|
66
|
-
expect(source).
|
67
|
-
to reek_of(:UnusedPrivateMethod, context: 'Alfa::Bravo', name: 'charlie').
|
68
|
-
and not_reek_of(:UnusedPrivateMethod, context: 'Alfa', name: 'charlie')
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'discounts calls to identically named methods in nested classes' do
|
72
|
-
source = <<-RUBY
|
73
|
-
class Alfa
|
74
|
-
class Bravo
|
75
|
-
def bravo
|
76
|
-
charlie
|
77
|
-
end
|
78
|
-
|
79
|
-
private
|
80
|
-
def charlie; end
|
81
|
-
end
|
82
|
-
|
83
|
-
private
|
84
|
-
def charlie; end
|
85
|
-
end
|
86
|
-
RUBY
|
87
|
-
|
88
|
-
expect(source).
|
89
|
-
to reek_of(:UnusedPrivateMethod, context: 'Alfa', name: 'charlie').
|
90
|
-
and not_reek_of(:UnusedPrivateMethod, context: 'Alfo::Bravo', name: 'charlie')
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'creates warnings correctly' do
|
94
|
-
source = <<-RUBY
|
95
|
-
class Alfa
|
96
|
-
private
|
97
|
-
def bravo; end
|
98
|
-
def charlie; end
|
99
|
-
end
|
100
|
-
RUBY
|
101
|
-
|
102
|
-
expect(source).
|
103
|
-
to reek_of(:UnusedPrivateMethod, name: 'bravo', lines: [3]).
|
104
|
-
and reek_of(:UnusedPrivateMethod, name: 'charlie', lines: [4])
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'reports instance methods defined as private with a modifier' do
|
108
|
-
source = <<-RUBY
|
109
|
-
class Alfa
|
110
|
-
private def bravo; end
|
111
|
-
end
|
112
|
-
RUBY
|
113
|
-
|
114
|
-
expect(source).
|
115
|
-
to reek_of(:UnusedPrivateMethod, name: 'bravo')
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
context 'when the detector is configured via a source code comment' do
|
120
|
-
it 'does not report methods we excluded' do
|
121
|
-
source = <<-RUBY
|
122
|
-
# :reek:UnusedPrivateMethod { exclude: [ bravo ] }
|
123
|
-
class Alfa
|
124
|
-
private
|
125
|
-
def bravo; end
|
126
|
-
def charlie; end
|
127
|
-
end
|
128
|
-
RUBY
|
129
|
-
|
130
|
-
expect(source).
|
131
|
-
to reek_of(:UnusedPrivateMethod, name: 'charlie').
|
132
|
-
and not_reek_of(:UnusedPrivateMethod, name: 'bravo')
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
context 'when a class has only used private methods' do
|
137
|
-
it 'reports nothing' do
|
138
|
-
source = <<-RUBY
|
139
|
-
class Alfa
|
140
|
-
def bravo
|
141
|
-
charlie
|
142
|
-
end
|
143
|
-
|
144
|
-
private
|
145
|
-
def charlie; end
|
146
|
-
end
|
147
|
-
RUBY
|
148
|
-
|
149
|
-
expect(source).not_to reek_of(:UnusedPrivateMethod)
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
context 'when a class has unused protected methods' do
|
154
|
-
it 'reports nothing' do
|
155
|
-
source = <<-RUBY
|
156
|
-
class Alfa
|
157
|
-
protected
|
158
|
-
def bravo; end
|
159
|
-
end
|
160
|
-
RUBY
|
161
|
-
|
162
|
-
expect(source).not_to reek_of(:UnusedPrivateMethod)
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
context 'when a class has unused public methods' do
|
167
|
-
it 'reports nothing' do
|
168
|
-
source = <<-RUBY
|
169
|
-
class Alfa
|
170
|
-
def bravo; end
|
171
|
-
end
|
172
|
-
RUBY
|
173
|
-
|
174
|
-
expect(source).not_to reek_of(:UnusedPrivateMethod)
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
describe 'preventing methods from being reported' do
|
179
|
-
let(:source) do
|
180
|
-
<<-RUBY
|
181
|
-
class Alfa
|
182
|
-
private
|
183
|
-
def bravo; end
|
184
|
-
def charlie; end
|
185
|
-
end
|
186
|
-
RUBY
|
187
|
-
end
|
188
|
-
|
189
|
-
it 'excludes them via direct match in the app configuration' do
|
190
|
-
config = { Reek::SmellDetectors::BaseDetector::EXCLUDE_KEY => ['Alfa#charlie'] }
|
191
|
-
|
192
|
-
expect(source).
|
193
|
-
to reek_of(:UnusedPrivateMethod, name: 'bravo').with_config(config).
|
194
|
-
and not_reek_of(:UnusedPrivateMethod, name: 'charlie').with_config(config)
|
195
|
-
end
|
196
|
-
|
197
|
-
it 'excludes them via regex in the app configuration' do
|
198
|
-
config = { Reek::SmellDetectors::BaseDetector::EXCLUDE_KEY => [/charlie/] }
|
199
|
-
|
200
|
-
expect(source).
|
201
|
-
to reek_of(:UnusedPrivateMethod, name: 'bravo').with_config(config).
|
202
|
-
and not_reek_of(:UnusedPrivateMethod, name: 'charlie').with_config(config)
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|