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,96 +0,0 @@
1
- require_relative '../../spec_helper'
2
-
3
- require_lib 'reek/smell_detectors/instance_variable_assumption'
4
-
5
- RSpec.describe Reek::SmellDetectors::InstanceVariableAssumption do
6
- it 'reports the right values' do
7
- src = <<-RUBY
8
- class Alfa
9
- def bravo
10
- @charlie
11
- end
12
- end
13
- RUBY
14
-
15
- expect(src).to reek_of(:InstanceVariableAssumption,
16
- lines: [1],
17
- context: 'Alfa',
18
- message: "assumes too much for instance variable '@charlie'",
19
- source: 'string',
20
- assumption: '@charlie')
21
- end
22
-
23
- it 'does count all occurences' do
24
- src = <<-RUBY
25
- class Alfa
26
- def bravo
27
- @charlie
28
- end
29
-
30
- def delta
31
- @echo
32
- end
33
- end
34
-
35
- RUBY
36
-
37
- expect(src).
38
- to reek_of(:InstanceVariableAssumption, lines: [1], assumption: '@charlie').
39
- and reek_of(:InstanceVariableAssumption, lines: [1], assumption: '@echo')
40
- end
41
-
42
- it 'does not report an empty class' do
43
- src = <<-RUBY
44
- class Alfa
45
- end
46
- RUBY
47
-
48
- expect(src).not_to reek_of(:InstanceVariableAssumption)
49
- end
50
-
51
- it 'does not report when lazy initializing' do
52
- src = <<-RUBY
53
- class Alfa
54
- def bravo
55
- @charlie ||= 1
56
- end
57
- end
58
- RUBY
59
-
60
- expect(src).not_to reek_of(:InstanceVariableAssumption)
61
- end
62
-
63
- it 'reports variable even if others are initialized' do
64
- src = <<-RUBY
65
- class Alfa
66
- def initialize
67
- @bravo = 1
68
- end
69
-
70
- def charlie
71
- [@bravo, @delta]
72
- end
73
- end
74
- RUBY
75
-
76
- expect(src).to reek_of(:InstanceVariableAssumption, assumption: '@delta')
77
- end
78
-
79
- it 'reports inner class even if outer class initializes the variable' do
80
- src = <<-RUBY
81
- class Alfa
82
- def initialize
83
- @bravo = 1
84
- end
85
-
86
- class Charlie
87
- def delta
88
- @bravo
89
- end
90
- end
91
- end
92
- RUBY
93
-
94
- expect(src).to reek_of(:InstanceVariableAssumption, context: 'Alfa::Charlie')
95
- end
96
- end
@@ -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