reek 6.0.2 → 6.1.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 (247) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ruby.yml +57 -0
  4. data/.rubocop.yml +6 -4
  5. data/.rubocop_todo.yml +6 -4
  6. data/CHANGELOG.md +42 -0
  7. data/CONTRIBUTING.md +4 -1
  8. data/Dockerfile +1 -1
  9. data/Gemfile +7 -7
  10. data/README.md +2 -2
  11. data/bin/code_climate_reek +2 -3
  12. data/lib/reek/ast/ast_node_class_map.rb +1 -1
  13. data/lib/reek/ast/node.rb +1 -1
  14. data/lib/reek/ast/sexp_extensions/arguments.rb +20 -0
  15. data/lib/reek/ast/sexp_extensions/case.rb +1 -1
  16. data/lib/reek/ast/sexp_extensions/if.rb +1 -1
  17. data/lib/reek/ast/sexp_extensions/send.rb +1 -1
  18. data/lib/reek/cli/command/todo_list_command.rb +2 -2
  19. data/lib/reek/cli/options.rb +6 -6
  20. data/lib/reek/code_comment.rb +22 -17
  21. data/lib/reek/configuration/configuration_file_finder.rb +2 -1
  22. data/lib/reek/configuration/excluded_paths.rb +2 -1
  23. data/lib/reek/context/code_context.rb +1 -1
  24. data/lib/reek/context/module_context.rb +4 -0
  25. data/lib/reek/context/refinement_context.rb +16 -0
  26. data/lib/reek/context/send_context.rb +6 -0
  27. data/lib/reek/context_builder.rb +17 -3
  28. data/lib/reek/rake/task.rb +5 -5
  29. data/lib/reek/report/code_climate/code_climate_configuration.yml +3 -3
  30. data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -3
  31. data/lib/reek/smell_detectors/base_detector.rb +1 -1
  32. data/lib/reek/smell_detectors/class_variable.rb +2 -2
  33. data/lib/reek/smell_detectors/control_parameter_helpers/candidate.rb +6 -6
  34. data/lib/reek/smell_detectors/duplicate_method_call.rb +5 -5
  35. data/lib/reek/smell_detectors/unused_private_method.rb +1 -0
  36. data/lib/reek/smell_warning.rb +1 -1
  37. data/lib/reek/source/source_locator.rb +1 -3
  38. data/lib/reek/spec/should_reek_of.rb +11 -9
  39. data/lib/reek/spec.rb +1 -1
  40. data/lib/reek/version.rb +2 -2
  41. data/reek.gemspec +28 -25
  42. metadata +13 -240
  43. data/.travis.yml +0 -40
  44. data/docs/API.md +0 -174
  45. data/docs/Attribute.md +0 -39
  46. data/docs/Basic-Smell-Options.md +0 -85
  47. data/docs/Boolean-Parameter.md +0 -54
  48. data/docs/Class-Variable.md +0 -40
  49. data/docs/Code-Smells.md +0 -39
  50. data/docs/Command-Line-Options.md +0 -119
  51. data/docs/Control-Couple.md +0 -26
  52. data/docs/Control-Parameter.md +0 -32
  53. data/docs/Data-Clump.md +0 -46
  54. data/docs/Duplicate-Method-Call.md +0 -264
  55. data/docs/Feature-Envy.md +0 -93
  56. data/docs/How-To-Write-New-Detectors.md +0 -132
  57. data/docs/How-reek-works-internally.md +0 -114
  58. data/docs/Instance-Variable-Assumption.md +0 -163
  59. data/docs/Irresponsible-Module.md +0 -47
  60. data/docs/Large-Class.md +0 -16
  61. data/docs/Long-Parameter-List.md +0 -39
  62. data/docs/Long-Yield-List.md +0 -37
  63. data/docs/Manual-Dispatch.md +0 -30
  64. data/docs/Missing-Safe-Method.md +0 -92
  65. data/docs/Module-Initialize.md +0 -62
  66. data/docs/Nested-Iterators.md +0 -59
  67. data/docs/Nil-Check.md +0 -47
  68. data/docs/RSpec-matchers.md +0 -129
  69. data/docs/Rake-Task.md +0 -66
  70. data/docs/Reek-4-to-Reek-5-migration.md +0 -188
  71. data/docs/Reek-Driven-Development.md +0 -46
  72. data/docs/Repeated-Conditional.md +0 -47
  73. data/docs/Simulated-Polymorphism.md +0 -16
  74. data/docs/Smell-Suppression.md +0 -96
  75. data/docs/Style-Guide.md +0 -19
  76. data/docs/Subclassed-From-Core-Class.md +0 -79
  77. data/docs/Too-Many-Constants.md +0 -37
  78. data/docs/Too-Many-Instance-Variables.md +0 -43
  79. data/docs/Too-Many-Methods.md +0 -56
  80. data/docs/Too-Many-Statements.md +0 -54
  81. data/docs/Uncommunicative-Method-Name.md +0 -94
  82. data/docs/Uncommunicative-Module-Name.md +0 -92
  83. data/docs/Uncommunicative-Name.md +0 -18
  84. data/docs/Uncommunicative-Parameter-Name.md +0 -90
  85. data/docs/Uncommunicative-Variable-Name.md +0 -96
  86. data/docs/Unused-Parameters.md +0 -28
  87. data/docs/Unused-Private-Method.md +0 -101
  88. data/docs/Utility-Function.md +0 -56
  89. data/docs/Versioning-Policy.md +0 -7
  90. data/docs/YAML-Reports.md +0 -93
  91. data/docs/defaults.reek.yml +0 -129
  92. data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
  93. data/docs/templates/default/docstring/setup.rb +0 -37
  94. data/docs/templates/default/fulldoc/html/css/common.css +0 -1
  95. data/docs/yard_plugin.rb +0 -17
  96. data/features/command_line_interface/basic_usage.feature +0 -15
  97. data/features/command_line_interface/options.feature +0 -123
  98. data/features/command_line_interface/show_progress.feature +0 -33
  99. data/features/command_line_interface/smell_selection.feature +0 -15
  100. data/features/command_line_interface/smells_count.feature +0 -38
  101. data/features/command_line_interface/stdin.feature +0 -65
  102. data/features/configuration_files/accept_setting.feature +0 -87
  103. data/features/configuration_files/directory_specific_directives.feature +0 -274
  104. data/features/configuration_files/exclude_directives.feature +0 -35
  105. data/features/configuration_files/exclude_paths_directives.feature +0 -42
  106. data/features/configuration_files/masking_smells.feature +0 -94
  107. data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
  108. data/features/configuration_files/reject_setting.feature +0 -89
  109. data/features/configuration_files/schema_validation.feature +0 -59
  110. data/features/configuration_files/show_configuration_file.feature +0 -44
  111. data/features/configuration_files/unused_private_method.feature +0 -68
  112. data/features/configuration_loading.feature +0 -91
  113. data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
  114. data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
  115. data/features/locales.feature +0 -32
  116. data/features/programmatic_access.feature +0 -41
  117. data/features/rake_task/rake_task.feature +0 -138
  118. data/features/reports/codeclimate.feature +0 -59
  119. data/features/reports/json.feature +0 -59
  120. data/features/reports/reports.feature +0 -219
  121. data/features/reports/yaml.feature +0 -52
  122. data/features/rspec_matcher.feature +0 -41
  123. data/features/samples.feature +0 -305
  124. data/features/step_definitions/.rubocop.yml +0 -5
  125. data/features/step_definitions/reek_steps.rb +0 -102
  126. data/features/step_definitions/sample_file_steps.rb +0 -63
  127. data/features/support/env.rb +0 -33
  128. data/features/todo_list.feature +0 -108
  129. data/samples/checkstyle.xml +0 -7
  130. data/samples/clean_source/clean.rb +0 -6
  131. data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
  132. data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
  133. data/samples/configuration/corrupt.reek +0 -1
  134. data/samples/configuration/empty.reek +0 -0
  135. data/samples/configuration/full_configuration.reek +0 -13
  136. data/samples/configuration/full_mask.reek +0 -6
  137. data/samples/configuration/home/home.reek.yml +0 -4
  138. data/samples/configuration/partial_mask.reek +0 -4
  139. data/samples/configuration/regular_configuration/.reek.yml +0 -4
  140. data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
  141. data/samples/configuration/with_excluded_paths.reek +0 -5
  142. data/samples/no_config_file/.keep +0 -0
  143. data/samples/paths.rb +0 -5
  144. data/samples/smelly_source/inline.rb +0 -704
  145. data/samples/smelly_source/optparse.rb +0 -1788
  146. data/samples/smelly_source/redcloth.rb +0 -1130
  147. data/samples/smelly_source/ruby.rb +0 -368
  148. data/samples/smelly_source/smelly.rb +0 -7
  149. data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
  150. data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
  151. data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
  152. data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
  153. data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
  154. data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
  155. data/samples/source_with_non_ruby_files/gibberish +0 -1
  156. data/samples/source_with_non_ruby_files/python_source.py +0 -1
  157. data/samples/source_with_non_ruby_files/ruby.rb +0 -6
  158. data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
  159. data/spec/quality/documentation_spec.rb +0 -41
  160. data/spec/quality/reek_source_spec.rb +0 -11
  161. data/spec/reek/ast/node_spec.rb +0 -211
  162. data/spec/reek/ast/object_refs_spec.rb +0 -83
  163. data/spec/reek/ast/reference_collector_spec.rb +0 -47
  164. data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
  165. data/spec/reek/cli/application_spec.rb +0 -168
  166. data/spec/reek/cli/command/report_command_spec.rb +0 -44
  167. data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
  168. data/spec/reek/cli/options_spec.rb +0 -51
  169. data/spec/reek/cli/silencer_spec.rb +0 -28
  170. data/spec/reek/code_comment_spec.rb +0 -184
  171. data/spec/reek/configuration/app_configuration_spec.rb +0 -195
  172. data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
  173. data/spec/reek/configuration/default_directive_spec.rb +0 -13
  174. data/spec/reek/configuration/directory_directives_spec.rb +0 -122
  175. data/spec/reek/configuration/excluded_paths_spec.rb +0 -16
  176. data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
  177. data/spec/reek/configuration/schema_validator_spec.rb +0 -165
  178. data/spec/reek/context/code_context_spec.rb +0 -192
  179. data/spec/reek/context/ghost_context_spec.rb +0 -60
  180. data/spec/reek/context/method_context_spec.rb +0 -72
  181. data/spec/reek/context/module_context_spec.rb +0 -55
  182. data/spec/reek/context/root_context_spec.rb +0 -12
  183. data/spec/reek/context/statement_counter_spec.rb +0 -24
  184. data/spec/reek/context_builder_spec.rb +0 -457
  185. data/spec/reek/detector_repository_spec.rb +0 -22
  186. data/spec/reek/documentation_link_spec.rb +0 -20
  187. data/spec/reek/errors/base_error_spec.rb +0 -13
  188. data/spec/reek/examiner_spec.rb +0 -309
  189. data/spec/reek/logging_error_handler_spec.rb +0 -24
  190. data/spec/reek/rake/task_spec.rb +0 -56
  191. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
  192. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
  193. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
  194. data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
  195. data/spec/reek/report/html_report_spec.rb +0 -19
  196. data/spec/reek/report/json_report_spec.rb +0 -58
  197. data/spec/reek/report/location_formatter_spec.rb +0 -32
  198. data/spec/reek/report/progress_formatter_spec.rb +0 -68
  199. data/spec/reek/report/text_report_spec.rb +0 -89
  200. data/spec/reek/report/xml_report_spec.rb +0 -24
  201. data/spec/reek/report/yaml_report_spec.rb +0 -55
  202. data/spec/reek/report_spec.rb +0 -28
  203. data/spec/reek/smell_configuration_spec.rb +0 -56
  204. data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
  205. data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
  206. data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
  207. data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
  208. data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
  209. data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
  210. data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
  211. data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
  212. data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
  213. data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
  214. data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
  215. data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
  216. data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
  217. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
  218. data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
  219. data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
  220. data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
  221. data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
  222. data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
  223. data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
  224. data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
  225. data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
  226. data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
  227. data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
  228. data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
  229. data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
  230. data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
  231. data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
  232. data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
  233. data/spec/reek/smell_detectors/utility_function_spec.rb +0 -293
  234. data/spec/reek/smell_warning_spec.rb +0 -137
  235. data/spec/reek/source/source_code_spec.rb +0 -79
  236. data/spec/reek/source/source_locator_spec.rb +0 -166
  237. data/spec/reek/spec/should_reek_of_spec.rb +0 -153
  238. data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
  239. data/spec/reek/spec/should_reek_spec.rb +0 -52
  240. data/spec/reek/spec/smell_matcher_spec.rb +0 -87
  241. data/spec/reek/tree_dresser_spec.rb +0 -46
  242. data/spec/spec_helper.rb +0 -110
  243. data/tasks/configuration.rake +0 -18
  244. data/tasks/console.rake +0 -5
  245. data/tasks/reek.rake +0 -6
  246. data/tasks/rubocop.rake +0 -11
  247. data/tasks/test.rake +0 -32
@@ -1,226 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/irresponsible_module'
3
-
4
- RSpec.describe Reek::SmellDetectors::IrresponsibleModule do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- class Alfa
8
- end
9
- RUBY
10
-
11
- expect(src).to reek_of(:IrresponsibleModule,
12
- lines: [1],
13
- context: 'Alfa',
14
- message: 'has no descriptive comment',
15
- source: 'string')
16
- end
17
-
18
- it 'does count all occurences' do
19
- src = <<-RUBY
20
- class Alfa
21
- # Method is necessary because we don't count namespace classes.
22
- def bravo; end
23
- class Charlie
24
- end
25
- end
26
- RUBY
27
-
28
- expect(src).
29
- to reek_of(:IrresponsibleModule, lines: [1], context: 'Alfa').
30
- and reek_of(:IrresponsibleModule, lines: [4], context: 'Alfa::Charlie')
31
- end
32
-
33
- %w(class module).each do |scope|
34
- it "reports a #{scope} without a comment" do
35
- src = <<-RUBY
36
- #{scope} Alfa
37
- end
38
- RUBY
39
-
40
- expect(src).to reek_of(:IrresponsibleModule)
41
- end
42
-
43
- it "does not report a #{scope} having a comment" do
44
- src = <<-RUBY
45
- # Do not report me, I'm responsible!
46
- #{scope} Alfa; end
47
- RUBY
48
-
49
- expect(src).not_to reek_of(:IrresponsibleModule)
50
- end
51
-
52
- it "reports a #{scope} with an empty comment" do
53
- src = <<-RUBY
54
- #
55
- #
56
- #
57
- #{scope} Alfa; end
58
- RUBY
59
-
60
- expect(src).to reek_of(:IrresponsibleModule)
61
- end
62
-
63
- it "reports a #{scope} with a preceding comment with intermittent material" do
64
- src = <<-RUBY
65
- # This is a comment that should not be related to Bravo
66
-
67
- require 'alfa'
68
-
69
- #{scope} Bravo
70
- end
71
- RUBY
72
-
73
- expect(src).to reek_of(:IrresponsibleModule)
74
- end
75
-
76
- it "reports a #{scope} with only a trailing comment" do
77
- src = <<-RUBY
78
- #{scope} Alfa
79
- end # This belongs to Alfa but doesn't count
80
- RUBY
81
-
82
- expect(src).to reek_of(:IrresponsibleModule)
83
- end
84
-
85
- it "does not report #{scope} used only as a namespace" do
86
- src = <<-RUBY
87
- #{scope} Alfa
88
- # Describes Bravo
89
- #{scope} Bravo
90
- def charlie
91
- end
92
- end
93
- end
94
- RUBY
95
-
96
- expect(src).not_to reek_of(:IrresponsibleModule, context: 'Alfa')
97
- end
98
-
99
- it "does not report #{scope} used only as a namespace for several nested moduless" do
100
- src = <<-RUBY
101
- #{scope} Alfa
102
- # Describes Bravo
103
- class Bravo
104
- def charlie
105
- end
106
- end
107
-
108
- # Describes Delta
109
- module Delta
110
- end
111
- end
112
- RUBY
113
-
114
- expect(src).not_to reek_of(:IrresponsibleModule, context: 'Alfa')
115
- end
116
-
117
- it "reports #{scope} that is used as a namespace but also has methods" do
118
- src = <<-RUBY
119
- #{scope} Alfa
120
- def bravo
121
- end
122
-
123
- # Describes Charlie
124
- #{scope} Charlie
125
- end
126
- end
127
- RUBY
128
-
129
- expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa')
130
- end
131
-
132
- it "reports #{scope} that is used as a namespace but also has singleton methods" do
133
- src = <<-RUBY
134
- #{scope} Alfa
135
- def self.bravo
136
- end
137
-
138
- # Describes Charlie
139
- #{scope} Charlie
140
- end
141
- end
142
- RUBY
143
-
144
- expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa')
145
- end
146
-
147
- it "does not report a namespace #{scope} that has a nested class through assignment" do
148
- src = <<-RUBY
149
- #{scope} Alfa
150
- # Bravo is responsible
151
- Bravo = Class.new Charlie do
152
- def delta; end
153
- end
154
- end
155
- RUBY
156
-
157
- expect(src).not_to reek_of(:IrresponsibleModule, context: 'Alfa')
158
- end
159
-
160
- it "does not report #{scope} only containing constants" do
161
- src = <<-RUBY
162
- #{scope} Alfa
163
- Bravo = 23
164
- end
165
- RUBY
166
-
167
- expect(src).not_to reek_of(:IrresponsibleModule, context: 'Alfa')
168
- end
169
-
170
- it "reports #{scope} that contains method calls" do
171
- src = <<-RUBY
172
- #{scope} Alfa
173
- bravo :charlie
174
- end
175
- RUBY
176
-
177
- expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa')
178
- end
179
-
180
- it "reports #{scope} that contains non-constant assignments" do
181
- src = <<-RUBY
182
- #{scope} Alfa
183
- bravo = charlie
184
- end
185
- RUBY
186
-
187
- expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa')
188
- end
189
-
190
- it "reports an irresponsible #{scope} defined through assignment" do
191
- src = <<-RUBY
192
- # Alfa is responsible, but Bravo is not
193
- #{scope} Alfa
194
- Bravo = Class.new Charlie # Only "class" is supposed to reek here.
195
- end
196
- RUBY
197
-
198
- expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa::Bravo')
199
- end
200
-
201
- it 'reports structs defined through assignment' do
202
- src = <<-RUBY
203
- # Alfa is responsible, but Bravo is not
204
- #{scope} Alfa
205
- Bravo = Struct.new(:charlie)
206
- end
207
- RUBY
208
-
209
- expect(src).to reek_of(:IrresponsibleModule, context: 'Alfa::Bravo')
210
- end
211
-
212
- it 'does not report constants that are not classes' do
213
- src = <<-RUBY
214
- # Alfa is responsible
215
- #{scope} Alfa
216
- Bravo = 23
217
- Charlie = Hash.new
218
- Delta = ''.freeze
219
- Echo = Class.new.new
220
- end
221
- RUBY
222
-
223
- expect(src).not_to reek_of(:IrresponsibleModule)
224
- end
225
- end
226
- end
@@ -1,61 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/long_parameter_list'
3
-
4
- RSpec.describe Reek::SmellDetectors::LongParameterList do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- class Alfa
8
- def bravo(charlie, delta, echo, foxtrot)
9
- end
10
- end
11
- RUBY
12
-
13
- expect(src).to reek_of(:LongParameterList,
14
- lines: [2],
15
- context: 'Alfa#bravo',
16
- message: 'has 4 parameters',
17
- source: 'string',
18
- count: 4)
19
- end
20
-
21
- it 'does count all occurences' do
22
- src = <<-RUBY
23
- class Alfa
24
- def bravo(charlie, delta, echo, foxtrot)
25
- end
26
-
27
- def golf(hotel, india, juliett, kilo)
28
- end
29
- end
30
- RUBY
31
-
32
- expect(src).
33
- to reek_of(:LongParameterList, lines: [2], context: 'Alfa#bravo').
34
- and reek_of(:LongParameterList, lines: [5], context: 'Alfa#golf')
35
- end
36
-
37
- it 'reports nothing for 3 parameters' do
38
- src = 'def alfa(bravo, charlie, delta); end'
39
- expect(src).not_to reek_of(:LongParameterList)
40
- end
41
-
42
- it 'does not count an optional block' do
43
- src = 'def alfa(bravo, charlie, delta, &block); end'
44
- expect(src).not_to reek_of(:LongParameterList)
45
- end
46
-
47
- it 'does not report inner block with too many parameters' do
48
- src = <<-RUBY
49
- def alfa(bravo)
50
- bravo.each { |charlie, delta, echo, foxtrot| }
51
- end
52
- RUBY
53
-
54
- expect(src).not_to reek_of(:LongParameterList)
55
- end
56
-
57
- it 'reports 4 parameters with default parameters' do
58
- src = 'def alfa(bravo = 1, charlie = 2, delta = 3, echo = 4); end'
59
- expect(src).to reek_of(:LongParameterList)
60
- end
61
- end
@@ -1,49 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/long_yield_list'
3
-
4
- RSpec.describe Reek::SmellDetectors::LongYieldList do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- class Alfa
8
- def bravo(charlie, delta, echo, foxtrot)
9
- yield charlie, delta, echo, foxtrot
10
- end
11
- end
12
- RUBY
13
-
14
- expect(src).to reek_of(:LongYieldList,
15
- lines: [3],
16
- context: 'Alfa#bravo',
17
- message: 'yields 4 parameters',
18
- source: 'string',
19
- count: 4)
20
- end
21
-
22
- it 'does count all occurences' do
23
- src = <<-RUBY
24
- class Alfa
25
- def bravo(charlie, delta, echo, foxtrot)
26
- yield charlie, delta, echo, foxtrot
27
- end
28
-
29
- def golf(hotel, india, juliett, kilo)
30
- yield hotel, india, juliett, kilo
31
- end
32
- end
33
- RUBY
34
-
35
- expect(src).
36
- to reek_of(:LongYieldList, lines: [3], context: 'Alfa#bravo').
37
- and reek_of(:LongYieldList, lines: [7], context: 'Alfa#golf')
38
- end
39
-
40
- it 'does not report yield with 3 parameters' do
41
- src = <<-RUBY
42
- def alfa(bravo, charlie, delta)
43
- yield bravo, charlie, delta
44
- end
45
- RUBY
46
-
47
- expect(src).not_to reek_of(:LongYieldList)
48
- end
49
- end
@@ -1,75 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/too_many_constants'
3
-
4
- RSpec.describe Reek::SmellDetectors::ManualDispatch do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- class Alfa
8
- def bravo(charlie)
9
- true if charlie.respond_to?(:to_a)
10
- end
11
- end
12
- RUBY
13
-
14
- expect(src).to reek_of(:ManualDispatch,
15
- lines: [3],
16
- context: 'Alfa#bravo',
17
- message: 'manually dispatches method call',
18
- source: 'string')
19
- end
20
-
21
- it 'does count all occurences' do
22
- src = <<-RUBY
23
- class Alfa
24
- def bravo(charlie)
25
- true if charlie.respond_to?(:to_a)
26
- end
27
-
28
- def delta(echo)
29
- true if echo.respond_to?(:to_a)
30
- end
31
- end
32
- RUBY
33
-
34
- expect(src).
35
- to reek_of(:ManualDispatch, lines: [3], context: 'Alfa#bravo').
36
- and reek_of(:ManualDispatch, lines: [7], context: 'Alfa#delta')
37
- end
38
-
39
- it 'reports manual dispatch smell when using #respond_to? on implicit self' do
40
- src = <<-RUBY
41
- class Alfa
42
- def bravo
43
- charlie if respond_to?(:delta)
44
- end
45
- end
46
- RUBY
47
-
48
- expect(src).to reek_of(:ManualDispatch)
49
- end
50
-
51
- it 'reports manual dispatch within a conditional' do
52
- src = <<-RUBY
53
- class Alfa
54
- def bravo
55
- charlie.respond_to?(:delta) && charlie.echo
56
- end
57
- end
58
- RUBY
59
-
60
- expect(src).to reek_of(:ManualDispatch)
61
- end
62
-
63
- it 'reports occurences in a single method as one smell warning' do
64
- src = <<-RUBY
65
- class Alfa
66
- def bravo(charlie, delta)
67
- return true if charlie.respond_to?(:to_a)
68
- true if delta.respond_to?(:to_a)
69
- end
70
- end
71
- RUBY
72
-
73
- expect(src).to reek_of(:ManualDispatch, lines: [3, 4], context: 'Alfa#bravo')
74
- end
75
- end
@@ -1,68 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/missing_safe_method'
3
-
4
- RSpec.describe Reek::SmellDetectors::MissingSafeMethod do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- class Alfa
8
- def bravo!
9
- end
10
- end
11
- RUBY
12
-
13
- expect(src).to reek_of(:MissingSafeMethod,
14
- lines: [2],
15
- context: 'Alfa',
16
- message: "has missing safe method 'bravo!'",
17
- source: 'string',
18
- name: 'bravo!')
19
- end
20
-
21
- it 'does count all occurences' do
22
- src = <<-RUBY
23
- class Alfa
24
- def bravo!
25
- end
26
-
27
- def charlie!
28
- end
29
- end
30
- RUBY
31
-
32
- expect(src).
33
- to reek_of(:MissingSafeMethod, lines: [2], name: 'bravo!').
34
- and reek_of(:MissingSafeMethod, lines: [5], name: 'charlie!')
35
- end
36
-
37
- it 'reports nothing when method and bang counterpart exist' do
38
- src = <<-RUBY
39
- class Alfa
40
- def bravo
41
- end
42
-
43
- def bravo!
44
- end
45
- end
46
- RUBY
47
-
48
- expect(src).not_to reek_of(:MissingSafeMethod)
49
- end
50
-
51
- it 'does not report methods we excluded via comment' do
52
- source = <<-RUBY
53
- # :reek:MissingSafeMethod { exclude: [ bravo! ] }
54
- class Alfa
55
- def bravo!
56
- end
57
-
58
- def charlie!
59
- end
60
- end
61
- RUBY
62
-
63
- aggregate_failures do
64
- expect(source).not_to reek_of(:MissingSafeMethod, name: 'bravo!')
65
- expect(source).to reek_of(:MissingSafeMethod, name: 'charlie!')
66
- end
67
- end
68
- end
@@ -1,77 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/module_initialize'
3
-
4
- RSpec.describe Reek::SmellDetectors::ModuleInitialize do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- module Alfa
8
- def initialize; end
9
- end
10
- RUBY
11
-
12
- expect(src).to reek_of(:ModuleInitialize,
13
- lines: [1],
14
- context: 'Alfa',
15
- message: 'has initialize method',
16
- source: 'string')
17
- end
18
-
19
- it 'reports nothing for a method with a different name' do
20
- src = <<-RUBY
21
- module Alfa
22
- def bravo; end
23
- end
24
- RUBY
25
-
26
- expect(src).not_to reek_of(:ModuleInitialize)
27
- end
28
-
29
- it 'reports nothing for a method named initialize in a nested class' do
30
- src = <<-RUBY
31
- module Alfa
32
- class Bravo
33
- def initialize; end
34
- end
35
- end
36
- RUBY
37
-
38
- expect(src).not_to reek_of(:ModuleInitialize)
39
- end
40
-
41
- it 'reports nothing for a method named initialize in a nested struct' do
42
- src = <<-RUBY
43
- module Alfa
44
- Bravo = Struct.new(:charlie) do
45
- def initialize; end
46
- end
47
- end
48
- RUBY
49
-
50
- expect(src).not_to reek_of(:ModuleInitialize)
51
- end
52
-
53
- it 'reports nothing for a method named initialize in a nested dynamic class' do
54
- src = <<-RUBY
55
- module Alfa
56
- def self.bravo
57
- Class.new do
58
- def initialize; end
59
- end
60
- end
61
- end
62
- RUBY
63
-
64
- expect(src).not_to reek_of(:ModuleInitialize)
65
- end
66
-
67
- it 'can be disabled via comment' do
68
- src = <<-RUBY
69
- # :reek:ModuleInitialize
70
- module Alfa
71
- def initialize; end
72
- end
73
- RUBY
74
-
75
- expect(src).not_to reek_of(:ModuleInitialize)
76
- end
77
- end