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,274 +0,0 @@
|
|
1
|
-
Feature: Directory directives
|
2
|
-
In order to have a more fine-grained control over what Reek reports
|
3
|
-
And to enable domain specific modes (like a Ruby on Rails mode)
|
4
|
-
As a user
|
5
|
-
I want to be able to configure Reek using directory directives
|
6
|
-
|
7
|
-
Scenario: Configure multiple directories
|
8
|
-
Given a file named "web_app/config.reek" with:
|
9
|
-
"""
|
10
|
-
---
|
11
|
-
directories:
|
12
|
-
"web_app/app/controllers":
|
13
|
-
IrresponsibleModule:
|
14
|
-
enabled: false
|
15
|
-
NestedIterators:
|
16
|
-
enabled: false
|
17
|
-
"web_app/app/helpers":
|
18
|
-
IrresponsibleModule:
|
19
|
-
enabled: false
|
20
|
-
UtilityFunction:
|
21
|
-
enabled: false
|
22
|
-
"""
|
23
|
-
And a file named "web_app/app/controllers/users_controller.rb" with:
|
24
|
-
"""
|
25
|
-
class UsersController < ApplicationController
|
26
|
-
def show
|
27
|
-
respond_with do |format|
|
28
|
-
format.json { |json| @user.to_custom_json }
|
29
|
-
format.xml { |xml| @user.to_fancy_xml }
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
"""
|
34
|
-
And a file named "web_app/app/helpers/application_helper.rb" with:
|
35
|
-
"""
|
36
|
-
module ApplicationHelper
|
37
|
-
def current_year
|
38
|
-
Time.zone.now.year
|
39
|
-
end
|
40
|
-
end
|
41
|
-
"""
|
42
|
-
And a file named "web_app/app/models/user.rb" with:
|
43
|
-
"""
|
44
|
-
class User < ActiveRecord::Base
|
45
|
-
def logged_in_with_role(role)
|
46
|
-
true
|
47
|
-
end
|
48
|
-
end
|
49
|
-
"""
|
50
|
-
When I run reek -c web_app/config.reek web_app/
|
51
|
-
Then it reports:
|
52
|
-
"""
|
53
|
-
web_app/app/controllers/users_controller.rb -- 1 warning:
|
54
|
-
[1]:InstanceVariableAssumption: UsersController assumes too much for instance variable '@user'
|
55
|
-
web_app/app/models/user.rb -- 2 warnings:
|
56
|
-
[1]:IrresponsibleModule: User has no descriptive comment
|
57
|
-
[2]:UnusedParameters: User#logged_in_with_role has unused parameter 'role'
|
58
|
-
3 total warnings
|
59
|
-
"""
|
60
|
-
|
61
|
-
Scenario: Ignore trailing slashes
|
62
|
-
Given a file named "web_app/config.reek" with:
|
63
|
-
"""
|
64
|
-
---
|
65
|
-
directories:
|
66
|
-
"controllers/":
|
67
|
-
IrresponsibleModule:
|
68
|
-
enabled: false
|
69
|
-
"""
|
70
|
-
And a file named "controllers/users_controller.rb" with:
|
71
|
-
"""
|
72
|
-
class UsersController
|
73
|
-
def show
|
74
|
-
end
|
75
|
-
end
|
76
|
-
"""
|
77
|
-
When I run reek -c web_app/config.reek controllers
|
78
|
-
Then it reports nothing
|
79
|
-
|
80
|
-
Scenario: Partially mask smells in different directories
|
81
|
-
Given a file named "web_app/config.reek" with:
|
82
|
-
"""
|
83
|
-
---
|
84
|
-
directories:
|
85
|
-
"web_app/app/controllers":
|
86
|
-
IrresponsibleModule:
|
87
|
-
enabled: true
|
88
|
-
"web_app/app/helpers":
|
89
|
-
IrresponsibleModule:
|
90
|
-
enabled: false
|
91
|
-
UtilityFunction:
|
92
|
-
enabled: false
|
93
|
-
"web_app/app/models":
|
94
|
-
IrresponsibleModule:
|
95
|
-
enabled: false
|
96
|
-
"""
|
97
|
-
And a file named "web_app/app/controllers/users_controller.rb" with:
|
98
|
-
"""
|
99
|
-
class UsersController < ApplicationController
|
100
|
-
def show
|
101
|
-
respond_with do |format|
|
102
|
-
format.json { |json| @user.to_custom_json }
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
"""
|
107
|
-
And a file named "web_app/app/helpers/application_helper.rb" with:
|
108
|
-
"""
|
109
|
-
module ApplicationHelper
|
110
|
-
def current_year
|
111
|
-
Time.zone.now.year
|
112
|
-
end
|
113
|
-
end
|
114
|
-
"""
|
115
|
-
And a file named "web_app/app/models/user.rb" with:
|
116
|
-
"""
|
117
|
-
class User < ActiveRecord::Base
|
118
|
-
def logged_in_with_role(role)
|
119
|
-
true
|
120
|
-
end
|
121
|
-
end
|
122
|
-
"""
|
123
|
-
When I run reek -c web_app/config.reek web_app/
|
124
|
-
Then it reports:
|
125
|
-
"""
|
126
|
-
web_app/app/controllers/users_controller.rb -- 3 warnings:
|
127
|
-
[1]:InstanceVariableAssumption: UsersController assumes too much for instance variable '@user'
|
128
|
-
[1]:IrresponsibleModule: UsersController has no descriptive comment
|
129
|
-
[4]:NestedIterators: UsersController#show contains iterators nested 2 deep
|
130
|
-
web_app/app/models/user.rb -- 1 warning:
|
131
|
-
[2]:UnusedParameters: User#logged_in_with_role has unused parameter 'role'
|
132
|
-
4 total warnings
|
133
|
-
"""
|
134
|
-
|
135
|
-
Scenario: Use the default directive if there is no directory directive
|
136
|
-
Given a file named "config.reek" with:
|
137
|
-
"""
|
138
|
-
---
|
139
|
-
directories:
|
140
|
-
"web_app/app/controllers":
|
141
|
-
IrresponsibleModule:
|
142
|
-
enabled: true
|
143
|
-
NestedIterators:
|
144
|
-
enabled: false
|
145
|
-
detectors:
|
146
|
-
IrresponsibleModule:
|
147
|
-
enabled: false
|
148
|
-
NestedIterators:
|
149
|
-
enabled: true
|
150
|
-
"""
|
151
|
-
And a file named "web_app/app/controllers/users_controller.rb" with:
|
152
|
-
"""
|
153
|
-
class UsersController < ApplicationController
|
154
|
-
def show
|
155
|
-
respond_with do |format|
|
156
|
-
format.json { |json| @user.to_custom_json }
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
"""
|
161
|
-
And a file named "other/projects_controller.rb" with:
|
162
|
-
"""
|
163
|
-
class ProjectController < ApplicationController
|
164
|
-
def show
|
165
|
-
respond_with do |format|
|
166
|
-
format.json { |json| @project.to_custom_json }
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
"""
|
171
|
-
When I run reek -c config.reek other/ web_app/
|
172
|
-
Then it reports:
|
173
|
-
"""
|
174
|
-
other/projects_controller.rb -- 2 warnings:
|
175
|
-
[1]:InstanceVariableAssumption: ProjectController assumes too much for instance variable '@project'
|
176
|
-
[4]:NestedIterators: ProjectController#show contains iterators nested 2 deep
|
177
|
-
web_app/app/controllers/users_controller.rb -- 2 warnings:
|
178
|
-
[1]:InstanceVariableAssumption: UsersController assumes too much for instance variable '@user'
|
179
|
-
[1]:IrresponsibleModule: UsersController has no descriptive comment
|
180
|
-
4 total warnings
|
181
|
-
"""
|
182
|
-
|
183
|
-
Scenario: Abort on non-existent smell type in directory directive
|
184
|
-
Given a file named "config.reek" with:
|
185
|
-
"""
|
186
|
-
---
|
187
|
-
directories:
|
188
|
-
"dummy_directory":
|
189
|
-
# Typo: Should be NestedIterators
|
190
|
-
IteratorsNested:
|
191
|
-
enabled: false
|
192
|
-
"""
|
193
|
-
And a file named "dummy_directory/dummy.rb" with:
|
194
|
-
"""
|
195
|
-
class Dummy
|
196
|
-
end
|
197
|
-
"""
|
198
|
-
|
199
|
-
When I run reek -c config.reek dummy_directory/
|
200
|
-
Then the exit status indicates an error
|
201
|
-
And stderr reports:
|
202
|
-
"""
|
203
|
-
Error: We found some problems with your configuration file: [/directories/dummy_directory/IteratorsNested] key 'IteratorsNested:' is undefined.
|
204
|
-
"""
|
205
|
-
|
206
|
-
Scenario: Abort on file as directory directive
|
207
|
-
Given a file named "config.reek" with:
|
208
|
-
"""
|
209
|
-
---
|
210
|
-
directories:
|
211
|
-
"dummy_directory/dummy.rb":
|
212
|
-
NestedIterators:
|
213
|
-
enabled: false
|
214
|
-
"""
|
215
|
-
And a file named "dummy_directory/dummy.rb" with:
|
216
|
-
"""
|
217
|
-
class Dummy
|
218
|
-
end
|
219
|
-
"""
|
220
|
-
When I run reek -c config.reek dummy_directory/
|
221
|
-
Then the exit status indicates an error
|
222
|
-
And stderr reports:
|
223
|
-
"""
|
224
|
-
Error: `dummy_directory/dummy.rb` is supposed to be a directory but is a file
|
225
|
-
|
226
|
-
"""
|
227
|
-
|
228
|
-
Scenario: In case of overlapping configurations, pick the most appropriate one
|
229
|
-
Given a file named "config.reek" with:
|
230
|
-
"""
|
231
|
-
---
|
232
|
-
directories:
|
233
|
-
"foo/bar/baz":
|
234
|
-
IrresponsibleModule:
|
235
|
-
enabled: false
|
236
|
-
NestedIterators:
|
237
|
-
enabled: true
|
238
|
-
"foo/bar":
|
239
|
-
IrresponsibleModule:
|
240
|
-
enabled: true
|
241
|
-
NestedIterators:
|
242
|
-
enabled: false
|
243
|
-
"""
|
244
|
-
And a file named "foo/bar/baz/klass.rb" with:
|
245
|
-
"""
|
246
|
-
class Klass
|
247
|
-
def meth
|
248
|
-
respond_to do |arg|
|
249
|
-
answer_to do |arg|
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
253
|
-
end
|
254
|
-
"""
|
255
|
-
And a file named "foo/bar/klazz.rb" with:
|
256
|
-
"""
|
257
|
-
class Klazz
|
258
|
-
def meth
|
259
|
-
respond_to do |arg|
|
260
|
-
answer_to do |arg|
|
261
|
-
end
|
262
|
-
end
|
263
|
-
end
|
264
|
-
end
|
265
|
-
"""
|
266
|
-
When I run reek -c config.reek foo/
|
267
|
-
Then it reports:
|
268
|
-
"""
|
269
|
-
foo/bar/baz/klass.rb -- 1 warning:
|
270
|
-
[4]:NestedIterators: Klass#meth contains iterators nested 2 deep
|
271
|
-
foo/bar/klazz.rb -- 1 warning:
|
272
|
-
[1]:IrresponsibleModule: Klazz has no descriptive comment
|
273
|
-
2 total warnings
|
274
|
-
"""
|
@@ -1,35 +0,0 @@
|
|
1
|
-
Feature: Exclude directives
|
2
|
-
In order to have a more fine-grained control over what Reek reports
|
3
|
-
As a user
|
4
|
-
I want to be able to exclude specific contexts from reporting
|
5
|
-
|
6
|
-
Scenario: Exclude multiple contexts
|
7
|
-
Given a file named "config.reek" with:
|
8
|
-
"""
|
9
|
-
---
|
10
|
-
detectors:
|
11
|
-
UncommunicativeMethodName:
|
12
|
-
exclude:
|
13
|
-
- "Smelly#x"
|
14
|
-
UnusedPrivateMethod:
|
15
|
-
enabled: true
|
16
|
-
exclude:
|
17
|
-
- "Smelly#foobar"
|
18
|
-
"""
|
19
|
-
And a file named "smelly.rb" with:
|
20
|
-
"""
|
21
|
-
class Smelly
|
22
|
-
# Should report IrresponsibleModule
|
23
|
-
def foo(arg); end # Should report UnusedParameter
|
24
|
-
def x; end # Should not report UncommunicativeMethodName
|
25
|
-
private
|
26
|
-
def foobar; end # Should not report UnusedPrivateMethod
|
27
|
-
end
|
28
|
-
"""
|
29
|
-
When I run reek -c config.reek smelly.rb
|
30
|
-
Then it reports:
|
31
|
-
"""
|
32
|
-
smelly.rb -- 2 warnings:
|
33
|
-
[1]:IrresponsibleModule: Smelly has no descriptive comment
|
34
|
-
[3]:UnusedParameters: Smelly#foo has unused parameter 'arg'
|
35
|
-
"""
|
@@ -1,42 +0,0 @@
|
|
1
|
-
Feature: Exclude paths directives
|
2
|
-
In order to avoid Reek wasting time on files that cannot be fixed
|
3
|
-
As a user
|
4
|
-
I want to be able to exclude specific paths from being checked
|
5
|
-
|
6
|
-
Scenario: Exclude paths
|
7
|
-
Given the smelly file "smelly.rb" in the directory "smelly_sources"
|
8
|
-
And the smelly file "smelly.rb" in the directory "smelly_as_well"
|
9
|
-
And the smelly file "smelly.rb" in the directory "smelly_as_well_2"
|
10
|
-
When I run reek .
|
11
|
-
Then the exit status indicates smells
|
12
|
-
Given a file named "config.reek" with:
|
13
|
-
"""
|
14
|
-
---
|
15
|
-
exclude_paths:
|
16
|
-
- smelly_sources/smelly.rb
|
17
|
-
- smelly_as_well/
|
18
|
-
- smelly_as_well_2
|
19
|
-
"""
|
20
|
-
When I run reek -c config.reek .
|
21
|
-
Then it succeeds
|
22
|
-
And it reports nothing
|
23
|
-
|
24
|
-
Scenario: Using a file name within an excluded directory
|
25
|
-
Given a file named "bad_files_live_here/smelly.rb" with:
|
26
|
-
"""
|
27
|
-
# A smelly example class
|
28
|
-
class Smelly
|
29
|
-
def alfa(bravo); end
|
30
|
-
end
|
31
|
-
"""
|
32
|
-
And a file named "config.reek" with:
|
33
|
-
"""
|
34
|
-
---
|
35
|
-
exclude_paths:
|
36
|
-
- bad_files_live_here
|
37
|
-
"""
|
38
|
-
When I run reek -c config.reek bad_files_live_here/smelly.rb
|
39
|
-
Then the exit status indicates smells
|
40
|
-
When I run reek -c config.reek --force-exclusion bad_files_live_here/smelly.rb
|
41
|
-
Then it succeeds
|
42
|
-
And it reports nothing
|
@@ -1,94 +0,0 @@
|
|
1
|
-
Feature: Masking smells using config files
|
2
|
-
In order to keep my reports meaningful
|
3
|
-
As a developer
|
4
|
-
I want to mask some smells using config files
|
5
|
-
|
6
|
-
Scenario: corrupt config file prevents normal output
|
7
|
-
Given the smelly file 'smelly.rb'
|
8
|
-
And a configuration file 'corrupt.reek'
|
9
|
-
When I run reek -c corrupt.reek smelly.rb
|
10
|
-
And stderr reports:
|
11
|
-
"""
|
12
|
-
Error: We found some problems with your configuration file: [/] 'Not a valid configuration file': not a mapping.
|
13
|
-
"""
|
14
|
-
And the exit status indicates an error
|
15
|
-
And it reports nothing
|
16
|
-
|
17
|
-
Scenario: missing source file is an error
|
18
|
-
When I run reek not_here.rb
|
19
|
-
Then it reports the error "Error: No such file - not_here.rb"
|
20
|
-
|
21
|
-
Scenario: masking smells in the configuration file
|
22
|
-
Given the smelly file 'smelly.rb'
|
23
|
-
And a configuration file 'full_mask.reek'
|
24
|
-
When I run reek -c full_mask.reek smelly.rb
|
25
|
-
Then it succeeds
|
26
|
-
And it reports nothing
|
27
|
-
|
28
|
-
Scenario: allow masking some calls for duplication smell
|
29
|
-
Given the smelly file 'smelly.rb'
|
30
|
-
And a configuration file 'partial_mask.reek'
|
31
|
-
When I run reek -c partial_mask.reek smelly.rb
|
32
|
-
Then the exit status indicates smells
|
33
|
-
And it reports:
|
34
|
-
"""
|
35
|
-
smelly.rb -- 1 warning:
|
36
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
37
|
-
"""
|
38
|
-
|
39
|
-
Scenario: provide extra masking inline in comments
|
40
|
-
Given a file named "smelly_with_inline_mask.rb" with:
|
41
|
-
"""
|
42
|
-
# Smelly class
|
43
|
-
# disables :reek:UncommunicativeVariableName
|
44
|
-
class Smelly
|
45
|
-
# This will reek of UncommunicativeMethodName
|
46
|
-
def x
|
47
|
-
y = 10 # This will NOT reek of UncommunicativeVariableName
|
48
|
-
end
|
49
|
-
end
|
50
|
-
"""
|
51
|
-
And a configuration file 'partial_mask.reek'
|
52
|
-
When I run reek -c partial_mask.reek smelly_with_inline_mask.rb
|
53
|
-
Then it succeeds
|
54
|
-
And it reports nothing
|
55
|
-
|
56
|
-
Scenario: empty config file outputs normally
|
57
|
-
Given the smelly file 'smelly.rb'
|
58
|
-
And a configuration file 'empty.reek'
|
59
|
-
When I run reek -c empty.reek smelly.rb
|
60
|
-
Then the exit status indicates smells
|
61
|
-
And it reports:
|
62
|
-
"""
|
63
|
-
smelly.rb -- 2 warnings:
|
64
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x'
|
65
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y'
|
66
|
-
"""
|
67
|
-
|
68
|
-
Scenario: Disable UtilityFunction for non-public methods
|
69
|
-
Given a file named "smelly_with_modifiers.rb" with:
|
70
|
-
"""
|
71
|
-
# Smelly class for testing purposes
|
72
|
-
class Klass
|
73
|
-
def public_method(arg) arg.to_s; end
|
74
|
-
protected
|
75
|
-
def protected_method(arg) arg.to_s; end
|
76
|
-
private
|
77
|
-
def private_method(arg) arg.to_s; end
|
78
|
-
end
|
79
|
-
"""
|
80
|
-
And a file named "non_public_modifiers_mask.reek.yml" with:
|
81
|
-
"""
|
82
|
-
---
|
83
|
-
detectors:
|
84
|
-
UtilityFunction:
|
85
|
-
public_methods_only: true
|
86
|
-
"""
|
87
|
-
When I run reek -c non_public_modifiers_mask.reek.yml smelly_with_modifiers.rb
|
88
|
-
Then the exit status indicates smells
|
89
|
-
And it reports:
|
90
|
-
"""
|
91
|
-
smelly_with_modifiers.rb -- 1 warning:
|
92
|
-
[3]:UtilityFunction: Klass#public_method doesn't depend on instance state (maybe move it to another class?)
|
93
|
-
"""
|
94
|
-
But it does not report private or protected methods
|