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.
Files changed (217) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -1
  3. data/CONTRIBUTING.md +3 -0
  4. data/Dockerfile +1 -1
  5. data/Gemfile +6 -6
  6. data/lib/reek/ast/ast_node_class_map.rb +1 -1
  7. data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -3
  8. data/lib/reek/smell_detectors/base_detector.rb +1 -1
  9. data/lib/reek/smell_warning.rb +1 -1
  10. data/lib/reek/source/source_locator.rb +1 -3
  11. data/lib/reek/version.rb +1 -1
  12. data/reek.gemspec +4 -1
  13. metadata +3 -208
  14. data/docs/API.md +0 -174
  15. data/docs/Attribute.md +0 -39
  16. data/docs/Basic-Smell-Options.md +0 -85
  17. data/docs/Boolean-Parameter.md +0 -54
  18. data/docs/Class-Variable.md +0 -40
  19. data/docs/Code-Smells.md +0 -39
  20. data/docs/Command-Line-Options.md +0 -119
  21. data/docs/Control-Couple.md +0 -26
  22. data/docs/Control-Parameter.md +0 -32
  23. data/docs/Data-Clump.md +0 -46
  24. data/docs/Duplicate-Method-Call.md +0 -264
  25. data/docs/Feature-Envy.md +0 -93
  26. data/docs/How-To-Write-New-Detectors.md +0 -132
  27. data/docs/How-reek-works-internally.md +0 -114
  28. data/docs/Instance-Variable-Assumption.md +0 -163
  29. data/docs/Irresponsible-Module.md +0 -47
  30. data/docs/Large-Class.md +0 -16
  31. data/docs/Long-Parameter-List.md +0 -39
  32. data/docs/Long-Yield-List.md +0 -37
  33. data/docs/Manual-Dispatch.md +0 -30
  34. data/docs/Missing-Safe-Method.md +0 -92
  35. data/docs/Module-Initialize.md +0 -62
  36. data/docs/Nested-Iterators.md +0 -59
  37. data/docs/Nil-Check.md +0 -47
  38. data/docs/RSpec-matchers.md +0 -129
  39. data/docs/Rake-Task.md +0 -66
  40. data/docs/Reek-4-to-Reek-5-migration.md +0 -188
  41. data/docs/Reek-Driven-Development.md +0 -46
  42. data/docs/Repeated-Conditional.md +0 -47
  43. data/docs/Simulated-Polymorphism.md +0 -16
  44. data/docs/Smell-Suppression.md +0 -96
  45. data/docs/Style-Guide.md +0 -19
  46. data/docs/Subclassed-From-Core-Class.md +0 -79
  47. data/docs/Too-Many-Constants.md +0 -37
  48. data/docs/Too-Many-Instance-Variables.md +0 -43
  49. data/docs/Too-Many-Methods.md +0 -56
  50. data/docs/Too-Many-Statements.md +0 -54
  51. data/docs/Uncommunicative-Method-Name.md +0 -94
  52. data/docs/Uncommunicative-Module-Name.md +0 -92
  53. data/docs/Uncommunicative-Name.md +0 -18
  54. data/docs/Uncommunicative-Parameter-Name.md +0 -90
  55. data/docs/Uncommunicative-Variable-Name.md +0 -96
  56. data/docs/Unused-Parameters.md +0 -28
  57. data/docs/Unused-Private-Method.md +0 -101
  58. data/docs/Utility-Function.md +0 -56
  59. data/docs/Versioning-Policy.md +0 -7
  60. data/docs/YAML-Reports.md +0 -93
  61. data/docs/defaults.reek.yml +0 -129
  62. data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
  63. data/docs/templates/default/docstring/setup.rb +0 -35
  64. data/docs/templates/default/fulldoc/html/css/common.css +0 -1
  65. data/docs/yard_plugin.rb +0 -17
  66. data/features/command_line_interface/basic_usage.feature +0 -15
  67. data/features/command_line_interface/options.feature +0 -123
  68. data/features/command_line_interface/show_progress.feature +0 -33
  69. data/features/command_line_interface/smell_selection.feature +0 -15
  70. data/features/command_line_interface/smells_count.feature +0 -38
  71. data/features/command_line_interface/stdin.feature +0 -65
  72. data/features/configuration_files/accept_setting.feature +0 -87
  73. data/features/configuration_files/directory_specific_directives.feature +0 -274
  74. data/features/configuration_files/exclude_directives.feature +0 -35
  75. data/features/configuration_files/exclude_paths_directives.feature +0 -42
  76. data/features/configuration_files/masking_smells.feature +0 -94
  77. data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
  78. data/features/configuration_files/reject_setting.feature +0 -89
  79. data/features/configuration_files/schema_validation.feature +0 -59
  80. data/features/configuration_files/show_configuration_file.feature +0 -44
  81. data/features/configuration_files/unused_private_method.feature +0 -68
  82. data/features/configuration_loading.feature +0 -91
  83. data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
  84. data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
  85. data/features/locales.feature +0 -32
  86. data/features/programmatic_access.feature +0 -41
  87. data/features/rake_task/rake_task.feature +0 -138
  88. data/features/reports/codeclimate.feature +0 -59
  89. data/features/reports/json.feature +0 -59
  90. data/features/reports/reports.feature +0 -219
  91. data/features/reports/yaml.feature +0 -52
  92. data/features/rspec_matcher.feature +0 -41
  93. data/features/samples.feature +0 -305
  94. data/features/step_definitions/.rubocop.yml +0 -5
  95. data/features/step_definitions/reek_steps.rb +0 -102
  96. data/features/step_definitions/sample_file_steps.rb +0 -63
  97. data/features/support/env.rb +0 -33
  98. data/features/todo_list.feature +0 -108
  99. data/samples/checkstyle.xml +0 -7
  100. data/samples/clean_source/clean.rb +0 -6
  101. data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
  102. data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
  103. data/samples/configuration/corrupt.reek +0 -1
  104. data/samples/configuration/empty.reek +0 -0
  105. data/samples/configuration/full_configuration.reek +0 -13
  106. data/samples/configuration/full_mask.reek +0 -6
  107. data/samples/configuration/home/home.reek.yml +0 -4
  108. data/samples/configuration/partial_mask.reek +0 -4
  109. data/samples/configuration/regular_configuration/.reek.yml +0 -4
  110. data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
  111. data/samples/configuration/with_excluded_paths.reek +0 -5
  112. data/samples/no_config_file/.keep +0 -0
  113. data/samples/paths.rb +0 -5
  114. data/samples/smelly_source/inline.rb +0 -704
  115. data/samples/smelly_source/optparse.rb +0 -1788
  116. data/samples/smelly_source/redcloth.rb +0 -1130
  117. data/samples/smelly_source/ruby.rb +0 -368
  118. data/samples/smelly_source/smelly.rb +0 -7
  119. data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
  120. data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
  121. data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
  122. data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
  123. data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
  124. data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
  125. data/samples/source_with_non_ruby_files/gibberish +0 -1
  126. data/samples/source_with_non_ruby_files/python_source.py +0 -1
  127. data/samples/source_with_non_ruby_files/ruby.rb +0 -6
  128. data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
  129. data/spec/quality/documentation_spec.rb +0 -41
  130. data/spec/quality/reek_source_spec.rb +0 -11
  131. data/spec/reek/ast/node_spec.rb +0 -211
  132. data/spec/reek/ast/object_refs_spec.rb +0 -83
  133. data/spec/reek/ast/reference_collector_spec.rb +0 -47
  134. data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
  135. data/spec/reek/cli/application_spec.rb +0 -168
  136. data/spec/reek/cli/command/report_command_spec.rb +0 -44
  137. data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
  138. data/spec/reek/cli/options_spec.rb +0 -51
  139. data/spec/reek/cli/silencer_spec.rb +0 -28
  140. data/spec/reek/code_comment_spec.rb +0 -184
  141. data/spec/reek/configuration/app_configuration_spec.rb +0 -195
  142. data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
  143. data/spec/reek/configuration/default_directive_spec.rb +0 -13
  144. data/spec/reek/configuration/directory_directives_spec.rb +0 -122
  145. data/spec/reek/configuration/excluded_paths_spec.rb +0 -25
  146. data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
  147. data/spec/reek/configuration/schema_validator_spec.rb +0 -165
  148. data/spec/reek/context/code_context_spec.rb +0 -192
  149. data/spec/reek/context/ghost_context_spec.rb +0 -60
  150. data/spec/reek/context/method_context_spec.rb +0 -72
  151. data/spec/reek/context/module_context_spec.rb +0 -55
  152. data/spec/reek/context/root_context_spec.rb +0 -12
  153. data/spec/reek/context/statement_counter_spec.rb +0 -24
  154. data/spec/reek/context_builder_spec.rb +0 -457
  155. data/spec/reek/detector_repository_spec.rb +0 -22
  156. data/spec/reek/documentation_link_spec.rb +0 -20
  157. data/spec/reek/errors/base_error_spec.rb +0 -13
  158. data/spec/reek/examiner_spec.rb +0 -309
  159. data/spec/reek/logging_error_handler_spec.rb +0 -24
  160. data/spec/reek/rake/task_spec.rb +0 -56
  161. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
  162. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
  163. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
  164. data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
  165. data/spec/reek/report/html_report_spec.rb +0 -19
  166. data/spec/reek/report/json_report_spec.rb +0 -58
  167. data/spec/reek/report/location_formatter_spec.rb +0 -32
  168. data/spec/reek/report/progress_formatter_spec.rb +0 -68
  169. data/spec/reek/report/text_report_spec.rb +0 -89
  170. data/spec/reek/report/xml_report_spec.rb +0 -24
  171. data/spec/reek/report/yaml_report_spec.rb +0 -55
  172. data/spec/reek/report_spec.rb +0 -28
  173. data/spec/reek/smell_configuration_spec.rb +0 -56
  174. data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
  175. data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
  176. data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
  177. data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
  178. data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
  179. data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
  180. data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
  181. data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
  182. data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
  183. data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
  184. data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
  185. data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
  186. data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
  187. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
  188. data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
  189. data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
  190. data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
  191. data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
  192. data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
  193. data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
  194. data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
  195. data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
  196. data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
  197. data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
  198. data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
  199. data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
  200. data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
  201. data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
  202. data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
  203. data/spec/reek/smell_detectors/utility_function_spec.rb +0 -309
  204. data/spec/reek/smell_warning_spec.rb +0 -137
  205. data/spec/reek/source/source_code_spec.rb +0 -79
  206. data/spec/reek/source/source_locator_spec.rb +0 -166
  207. data/spec/reek/spec/should_reek_of_spec.rb +0 -153
  208. data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
  209. data/spec/reek/spec/should_reek_spec.rb +0 -52
  210. data/spec/reek/spec/smell_matcher_spec.rb +0 -87
  211. data/spec/reek/tree_dresser_spec.rb +0 -46
  212. data/spec/spec_helper.rb +0 -110
  213. data/tasks/configuration.rake +0 -18
  214. data/tasks/console.rake +0 -5
  215. data/tasks/reek.rake +0 -6
  216. data/tasks/rubocop.rake +0 -11
  217. 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