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,106 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/class_variable'
3
-
4
- RSpec.describe Reek::SmellDetectors::ClassVariable do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- class Alfa
8
- @@bravo = 5
9
- end
10
- RUBY
11
-
12
- expect(src).to reek_of(:ClassVariable,
13
- lines: [2],
14
- context: 'Alfa',
15
- message: "declares the class variable '@@bravo'",
16
- source: 'string',
17
- name: '@@bravo')
18
- end
19
-
20
- it 'does count all class variables' do
21
- src = <<-RUBY
22
- class Alfa
23
- @@bravo = 42
24
- @@charlie = 99
25
- end
26
- RUBY
27
-
28
- expect(src).
29
- to reek_of(:ClassVariable, name: '@@bravo').
30
- and reek_of(:ClassVariable, name: '@@charlie')
31
- end
32
-
33
- it 'does not report class instance variables' do
34
- src = <<-RUBY
35
- class Alfa
36
- @bravo = 42
37
- end
38
- RUBY
39
-
40
- expect(src).not_to reek_of(:ClassVariable)
41
- end
42
-
43
- context 'with no class variables' do
44
- it 'records nothing in the class' do
45
- src = <<-RUBY
46
- class Alfa
47
- def bravo; end
48
- end
49
- RUBY
50
-
51
- expect(src).not_to reek_of(:ClassVariable)
52
- end
53
-
54
- it 'records nothing in the module' do
55
- src = <<-RUBY
56
- module Alfa
57
- def bravo; end
58
- end
59
- RUBY
60
-
61
- expect(src).not_to reek_of(:ClassVariable)
62
- end
63
- end
64
-
65
- ['class', 'module'].each do |scope|
66
- context "when examining a #{scope}" do
67
- it 'reports a class variable set in a method' do
68
- src = <<-RUBY
69
- #{scope} Alfa
70
- def bravo
71
- @@charlie = {}
72
- end
73
- end
74
- RUBY
75
-
76
- expect(src).to reek_of(:ClassVariable, name: '@@charlie')
77
- end
78
-
79
- it 'reports a class variable used in a method' do
80
- src = <<-RUBY
81
- #{scope} Alfa
82
- def bravo
83
- puts @@charlie
84
- end
85
- end
86
- RUBY
87
-
88
- expect(src).to reek_of(:ClassVariable, name: '@@charlie')
89
- end
90
-
91
- it "reports a class variable set in the #{scope} body and used in a method" do
92
- src = <<-RUBY
93
- #{scope} Alfa
94
- @@bravo = 42
95
-
96
- def charlie
97
- puts @@bravo
98
- end
99
- end
100
- RUBY
101
-
102
- expect(src).to reek_of(:ClassVariable, name: '@@bravo')
103
- end
104
- end
105
- end
106
- end
@@ -1,300 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/control_parameter'
3
-
4
- RSpec.describe Reek::SmellDetectors::ControlParameter do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- def alfa(bravo)
8
- bravo ? true : false
9
- end
10
- RUBY
11
-
12
- expect(src).to reek_of(:ControlParameter,
13
- lines: [2],
14
- context: 'alfa',
15
- message: "is controlled by argument 'bravo'",
16
- source: 'string',
17
- argument: 'bravo')
18
- end
19
-
20
- it 'does count all occurences' do
21
- src = <<-RUBY
22
- def alfa(bravo, charlie)
23
- bravo ? true : false
24
- charlie ? true : false
25
- end
26
- RUBY
27
-
28
- expect(src).
29
- to reek_of(:ControlParameter, lines: [2], argument: 'bravo').
30
- and reek_of(:ControlParameter, lines: [3], argument: 'charlie')
31
- end
32
-
33
- it 'does count multiple occurences of the same parameter' do
34
- src = <<-RUBY
35
- def alfa(bravo, charlie)
36
- if bravo
37
- delta if charlie
38
- end
39
- if charlie
40
- delta if bravo
41
- end
42
- end
43
- RUBY
44
-
45
- expect(src).
46
- to reek_of(:ControlParameter, lines: [2, 6], argument: 'bravo').
47
- and reek_of(:ControlParameter, lines: [3, 5], argument: 'charlie')
48
- end
49
-
50
- context 'when a parameter is not used to determine code path' do
51
- it 'does not report a ternary check on an ivar' do
52
- src = 'def alfa(bravo) @charlie ? bravo : false end'
53
- expect(src).not_to reek_of(:ControlParameter)
54
- end
55
-
56
- it 'does not report a ternary check on a lvar' do
57
- src = 'def alfa(bravo) charlie = 27; charlie ? bravo : @delta end'
58
- expect(src).not_to reek_of(:ControlParameter)
59
- end
60
-
61
- it 'does not report when parameter is unused' do
62
- src = 'def alfa(bravo) charlie = 1 end'
63
- expect(src).not_to reek_of(:ControlParameter)
64
- end
65
-
66
- it 'does not report when parameter is used inside conditional' do
67
- src = 'def alfa(bravo) if true then puts bravo end end'
68
- expect(src).not_to reek_of(:ControlParameter)
69
- end
70
- end
71
-
72
- context 'when a parameter is only used to determine code path' do
73
- it 'reports a ternary check on a parameter' do
74
- src = 'def alfa(bravo); bravo ? true : false; end'
75
- expect(src).to reek_of(:ControlParameter)
76
- end
77
-
78
- it 'reports a couple inside a block' do
79
- src = 'def alfa(bravo); charlie.map { |delta| bravo ? delta : "#{delta}" }; end'
80
- expect(src).to reek_of(:ControlParameter)
81
- end
82
-
83
- it 'reports on an if statement modifier' do
84
- src = 'def alfa(bravo); charlie if bravo; end'
85
- expect(src).to reek_of(:ControlParameter)
86
- end
87
-
88
- it 'reports on an unless statement modifier' do
89
- src = 'def alfa(bravo); charlie unless bravo; end'
90
- expect(src).to reek_of(:ControlParameter)
91
- end
92
-
93
- it 'reports on if control expression' do
94
- src = 'def alfa(bravo); if bravo then charlie end; end'
95
- expect(src).to reek_of(:ControlParameter)
96
- end
97
-
98
- it 'reports on if control expression with &&' do
99
- src = 'def alfa(bravo); if bravo && true then charlie end; end'
100
- expect(src).to reek_of(:ControlParameter)
101
- end
102
-
103
- it 'reports on if control expression with `and`' do
104
- src = 'def alfa(bravo); if bravo and true then charlie end; end'
105
- expect(src).to reek_of(:ControlParameter)
106
- end
107
-
108
- it 'reports on if control expression with preceding &&' do
109
- src = 'def alfa(bravo); if true && bravo then charlie end; end'
110
- expect(src).to reek_of(:ControlParameter)
111
- end
112
-
113
- it 'reports on if control expression with ||' do
114
- src = 'def alfa(bravo); if bravo || true then charlie end; end'
115
- expect(src).to reek_of(:ControlParameter)
116
- end
117
-
118
- it 'reports on if control expression with or' do
119
- src = 'def alfa(bravo); if bravo or true then charlie end; end'
120
- expect(src).to reek_of(:ControlParameter)
121
- end
122
-
123
- it 'reports on if control expression with if' do
124
- src = 'def alfa(bravo); if (bravo if true) then charlie end; end'
125
- expect(src).to reek_of(:ControlParameter)
126
- end
127
-
128
- it 'reports on && notation' do
129
- src = 'def alfa(bravo); bravo && charlie; end'
130
- expect(src).to reek_of(:ControlParameter)
131
- end
132
-
133
- it 'reports on || notation' do
134
- src = 'def alfa(bravo); bravo || charlie; end'
135
- expect(src).to reek_of(:ControlParameter)
136
- end
137
-
138
- it 'reports on case statement' do
139
- src = <<-RUBY
140
- def alfa(bravo)
141
- case bravo
142
- when nil then nil
143
- else false
144
- end
145
- end
146
- RUBY
147
-
148
- expect(src).to reek_of(:ControlParameter)
149
- end
150
-
151
- it 'reports on nested if statements that are both using control parameters' do
152
- src = <<-RUBY
153
- def nested(bravo)
154
- if bravo
155
- charlie
156
- charlie if bravo
157
- end
158
- end
159
- RUBY
160
-
161
- expect(src).to reek_of(:ControlParameter)
162
- end
163
-
164
- it 'reports on nested suffix if statements where the inner if is a control parameter' do
165
- src = <<-RUBY
166
- def nested(bravo)
167
- if true
168
- charlie
169
- charlie if bravo
170
- end
171
- end
172
- RUBY
173
-
174
- expect(src).to reek_of(:ControlParameter)
175
- end
176
-
177
- it 'reports on nested full if statements where the inner if is a control parameter' do
178
- src = <<-RUBY
179
- def alfa(bravo)
180
- if true
181
- charlie
182
- else
183
- if bravo
184
- delta
185
- end
186
- end
187
- end
188
- RUBY
189
-
190
- expect(src).to reek_of(:ControlParameter)
191
- end
192
-
193
- it 'reports on elsif statements' do
194
- src = <<-RUBY
195
- def alfa(bravo)
196
- if true
197
- charlie
198
- elsif bravo
199
- delta
200
- end
201
- end
202
- RUBY
203
-
204
- expect(src).to reek_of(:ControlParameter)
205
- end
206
-
207
- it 'reports on explicit comparison in the condition' do
208
- src = 'def alfa(bravo); if bravo == charlie then charlie end; end'
209
- expect(src).to reek_of(:ControlParameter)
210
- end
211
-
212
- it 'reports on explicit negative comparison in the condition' do
213
- src = 'def alfa(bravo); if bravo != charlie then charlie end; end'
214
- expect(src).to reek_of(:ControlParameter)
215
- end
216
-
217
- it 'reports when the argument is compared to a regexp' do
218
- src = 'def alfa(bravo); if bravo =~ charlie then charlie end; end'
219
- expect(src).to reek_of(:ControlParameter)
220
- end
221
-
222
- it 'reports when the argument is reverse-compared to a regexp' do
223
- src = 'def alfa(bravo); if /charlie/ =~ bravo then charlie end; end'
224
- expect(src).to reek_of(:ControlParameter)
225
- end
226
-
227
- it 'reports when the argument is used in a complex regexp' do
228
- src = 'def alfa(bravo); if /charlie#{bravo}/ =~ delta then charlie end; end'
229
- expect(src).to reek_of(:ControlParameter)
230
- end
231
-
232
- it 'reports when the argument is a block parameter' do
233
- src = 'def bravo(&charlie); delta(charlie || proc {}); end'
234
- expect(src).to reek_of(:ControlParameter)
235
- end
236
- end
237
-
238
- context 'when a parameter is used besides determining code path' do
239
- it 'does not report on if conditional expression' do
240
- src = 'def alfa(bravo); if bravo then charlie(bravo); end end'
241
- expect(src).not_to reek_of(:ControlParameter)
242
- end
243
-
244
- it 'does not report on an if statement modifier' do
245
- src = 'def alfa(bravo); charlie(bravo) if bravo; end'
246
- expect(src).not_to reek_of(:ControlParameter)
247
- end
248
-
249
- it 'does not report on an unless statement modifier' do
250
- src = 'def alfa(bravo); charlie(bravo) unless bravo; end'
251
- expect(src).not_to reek_of(:ControlParameter)
252
- end
253
-
254
- it 'does not report on if control expression with &&' do
255
- src = 'def alfa(bravo) if bravo && true then puts bravo end end'
256
- expect(src).not_to reek_of(:ControlParameter)
257
- end
258
-
259
- it 'does not report on && notation' do
260
- src = 'def alfa(bravo); bravo && charlie(bravo); end'
261
- expect(src).not_to reek_of(:ControlParameter)
262
- end
263
-
264
- it 'does not report on || notation' do
265
- src = 'def alfa(bravo); bravo || charlie(bravo) end'
266
- expect(src).not_to reek_of(:ControlParameter)
267
- end
268
-
269
- it 'does not report when parameter is used outside conditional' do
270
- src = 'def alfa(bravo) puts bravo; if bravo then charlie end; end'
271
- expect(src).not_to reek_of(:ControlParameter)
272
- end
273
-
274
- it 'does not report when parameter is used as a method call argument in a condition' do
275
- src = 'def alfa(bravo); if charlie(bravo) then delta end; end'
276
- expect(src).not_to reek_of(:ControlParameter)
277
- end
278
-
279
- it 'does not report when parameter is used as a method call receiver in a condition' do
280
- src = 'def alfa(bravo); if bravo.charlie? then delta end; end'
281
- expect(src).not_to reek_of(:ControlParameter)
282
- end
283
-
284
- it 'does not report when used in body of control flow operator' do
285
- src = <<-RUBY
286
- def alfa(bravo)
287
- case bravo
288
- when :charlie
289
- puts 'charlie'
290
- else
291
- puts 'delta'
292
- end
293
- echo or foxtrot(bravo)
294
- end
295
- RUBY
296
-
297
- expect(src).not_to reek_of(:ControlParameter)
298
- end
299
- end
300
- end
@@ -1,134 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/data_clump'
3
-
4
- RSpec.describe Reek::SmellDetectors::DataClump do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- class Alfa
8
- def bravo (echo, foxtrot); end
9
- def charlie(echo, foxtrot); end
10
- def delta (echo, foxtrot); end
11
- end
12
- RUBY
13
-
14
- expect(src).to reek_of(:DataClump,
15
- lines: [2, 3, 4],
16
- context: 'Alfa',
17
- message: "takes parameters ['echo', 'foxtrot'] to 3 methods",
18
- source: 'string',
19
- parameters: ['echo', 'foxtrot'],
20
- count: 3)
21
- end
22
-
23
- it 'does count all occurences' do
24
- src = <<-RUBY
25
- class Alfa
26
- def bravo (echo, foxtrot); end
27
- def charlie(echo, foxtrot); end
28
- def delta (echo, foxtrot); end
29
-
30
- def golf (juliett, kilo); end
31
- def hotel(juliett, kilo); end
32
- def india(juliett, kilo); end
33
- end
34
- RUBY
35
-
36
- expect(src).
37
- to reek_of(:DataClump, lines: [2, 3, 4], parameters: ['echo', 'foxtrot']).
38
- and reek_of(:DataClump, lines: [6, 7, 8], parameters: ['juliett', 'kilo'])
39
- end
40
-
41
- %w(class module).each do |scope|
42
- it "does not report parameter sets < 2 for #{scope}" do
43
- src = <<-RUBY
44
- #{scope} Alfa
45
- def bravo (echo); end
46
- def charlie(echo); end
47
- def delta (echo); end
48
- end
49
- RUBY
50
-
51
- expect(src).not_to reek_of(:DataClump)
52
- end
53
-
54
- it "does not report less than 3 methods for #{scope}" do
55
- src = <<-RUBY
56
- #{scope} Alfa
57
- def bravo (echo, foxtrot); end
58
- def charlie(echo, foxtrot); end
59
- end
60
- RUBY
61
-
62
- expect(src).not_to reek_of(:DataClump)
63
- end
64
-
65
- it 'does not care about the order of arguments' do
66
- src = <<-RUBY
67
- #{scope} Alfa
68
- def bravo (echo, foxtrot); end
69
- def charlie(foxtrot, echo); end # <- This is the swapped one!
70
- def delta (echo, foxtrot); end
71
- end
72
- RUBY
73
-
74
- expect(src).to reek_of(:DataClump,
75
- count: 3,
76
- parameters: ['echo', 'foxtrot'])
77
- end
78
-
79
- it 'reports arguments in alphabetical order even if they are never used that way' do
80
- src = <<-RUBY
81
- #{scope} Alfa
82
- def bravo (foxtrot, echo); end
83
- def charlie(foxtrot, echo); end
84
- def delta (foxtrot, echo); end
85
- end
86
- RUBY
87
-
88
- expect(src).to reek_of(:DataClump,
89
- count: 3,
90
- parameters: ['echo', 'foxtrot'])
91
- end
92
-
93
- it 'reports parameter sets that are > 2' do
94
- src = <<-RUBY
95
- #{scope} Alfa
96
- def bravo (echo, foxtrot, golf); end
97
- def charlie(echo, foxtrot, golf); end
98
- def delta (echo, foxtrot, golf); end
99
- end
100
- RUBY
101
-
102
- expect(src).to reek_of(:DataClump,
103
- count: 3,
104
- parameters: ['echo', 'foxtrot', 'golf'])
105
- end
106
-
107
- it 'detects clumps smaller than the total number of parameters' do
108
- src = <<-RUBY
109
- # Total number of parameters is 3 but the clump size is 2.
110
- #{scope} Alfa
111
- def bravo (echo, foxtrot, golf); end
112
- def charlie(echo, golf, foxtrot); end
113
- def delta (hotel, echo, foxtrot); end
114
- end
115
- RUBY
116
-
117
- expect(src).to reek_of(:DataClump,
118
- parameters: ['echo', 'foxtrot'])
119
- end
120
-
121
- it 'ignores anonymous parameters' do
122
- src = <<-RUBY
123
- #{scope} Alfa
124
- def bravo (echo, foxtrot, *); end
125
- def charlie(echo, foxtrot, *); end
126
- def delta (echo, foxtrot, *); end
127
- end
128
- RUBY
129
-
130
- expect(src).to reek_of(:DataClump,
131
- parameters: ['echo', 'foxtrot'])
132
- end
133
- end
134
- end