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,201 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/uncommunicative_variable_name'
3
-
4
- RSpec.describe Reek::SmellDetectors::UncommunicativeVariableName do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- def alfa
8
- x = 5
9
- end
10
- RUBY
11
-
12
- expect(src).to reek_of(:UncommunicativeVariableName,
13
- lines: [2],
14
- context: 'alfa',
15
- message: "has the variable name 'x'",
16
- source: 'string',
17
- name: 'x')
18
- end
19
-
20
- it 'does count all occurences' do
21
- src = <<-RUBY
22
- def alfa
23
- x = 3
24
- y = 7
25
- end
26
- RUBY
27
-
28
- expect(src).to reek_of(:UncommunicativeVariableName, lines: [2], name: 'x').
29
- and reek_of(:UncommunicativeVariableName, lines: [3], name: 'y')
30
- end
31
-
32
- context 'when examining instance variables' do
33
- it 'does not report use of one-letter names' do
34
- src = 'class Alfa; def bravo; @x; end; end'
35
- expect(src).not_to reek_of(:UncommunicativeVariableName)
36
- end
37
-
38
- it 'reports one-letter names in assignment' do
39
- src = 'class Alfa; def bravo(charlie) @x = charlie; end; end'
40
- expect(src).to reek_of(:UncommunicativeVariableName, name: '@x')
41
- end
42
- end
43
-
44
- context 'when examining local variables' do
45
- it 'does not report single underscore as a variable name' do
46
- src = 'def alfa; _ = bravo(); end'
47
- expect(src).not_to reek_of(:UncommunicativeVariableName)
48
- end
49
-
50
- it 'reports one-letter names' do
51
- src = 'def alfa; x = bravo(); end'
52
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'x')
53
- end
54
-
55
- it 'reports names ending with a digit' do
56
- src = 'def alfa; var123 = bravo(); end'
57
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'var123')
58
- end
59
-
60
- it 'reports camelcased names' do
61
- src = 'def alfa; bravoCharlie = delta(); end'
62
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'bravoCharlie')
63
- end
64
-
65
- it 'reports a bad name inside a block' do
66
- src = 'def alfa; bravo.each { x = 42 }; end'
67
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'x')
68
- end
69
-
70
- it 'reports variable name outside any method' do
71
- src = 'class Alfa; x = bravo(); end'
72
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'x')
73
- end
74
-
75
- it "reports bad names starting with '_'" do
76
- src = 'def alfa; _bravoCharlie_42 = delta(); end'
77
- expect(src).to reek_of(:UncommunicativeVariableName, name: '_bravoCharlie_42')
78
- end
79
- end
80
-
81
- context 'when examining block parameters' do
82
- it 'reports all relevant block parameters' do
83
- src = <<-RUBY
84
- def alfa
85
- @bravo.map { |x, y| x + y }
86
- end
87
- RUBY
88
-
89
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'x').
90
- and reek_of(:UncommunicativeVariableName, name: 'y')
91
- end
92
-
93
- it 'reports block parameters used outside of methods' do
94
- src = <<-RUBY
95
- class Alfa
96
- @bravo.map { |x| x * 2 }
97
- end
98
- RUBY
99
-
100
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'x')
101
- end
102
-
103
- it 'reports splatted block parameters correctly' do
104
- src = <<-RUBY
105
- def alfa
106
- @bravo.map { |*y| y << 1 }
107
- end
108
- RUBY
109
-
110
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'y')
111
- end
112
-
113
- it 'reports nested block parameters' do
114
- src = <<-RUBY
115
- def alfa
116
- @bravo.map { |(x, y)| x + y }
117
- end
118
- RUBY
119
-
120
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'x').
121
- and reek_of(:UncommunicativeVariableName, name: 'y')
122
- end
123
-
124
- it 'reports splatted nested block parameters' do
125
- src = <<-RUBY
126
- def def alfa
127
- @bravo.map { |(x, *y)| x + y }
128
- end
129
- RUBY
130
-
131
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'x').
132
- and reek_of(:UncommunicativeVariableName, name: 'y')
133
- end
134
-
135
- it 'reports deeply nested block parameters' do
136
- src = <<-RUBY
137
- def alfa
138
- @bravo.map { |(x, (y, z))| x + y + z }
139
- end
140
- RUBY
141
-
142
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'x').
143
- and reek_of(:UncommunicativeVariableName, name: 'y').
144
- and reek_of(:UncommunicativeVariableName, name: 'z')
145
- end
146
-
147
- it 'reports shadowed block parameters' do
148
- src = <<-RUBY
149
- def alfa
150
- @bravo.map { |x; y| y = x * 2 }
151
- end
152
- RUBY
153
-
154
- expect(src).to reek_of(:UncommunicativeVariableName, name: 'x').
155
- and reek_of(:UncommunicativeVariableName, name: 'y')
156
- end
157
- end
158
-
159
- describe '`accept` patterns' do
160
- let(:src) { 'def alfa; bravo2 = 42; end' }
161
-
162
- it 'make smelly names pass' do
163
- patterns = [/ravo2/, /bravo2/]
164
- patterns.each do |pattern|
165
- expect(src).to reek_of(:UncommunicativeVariableName).
166
- and not_reek_of(:UncommunicativeVariableName).with_config('accept' => pattern)
167
- end
168
- end
169
- end
170
-
171
- describe '`reject` patterns' do
172
- let(:src) { 'def alfa; foobar = 42; end' }
173
-
174
- it 'reject smelly names' do
175
- patterns = [/fooba/, /oobar/]
176
- patterns.each do |pattern|
177
- expect(src).to not_reek_of(:UncommunicativeVariableName).
178
- and reek_of(:UncommunicativeVariableName).with_config('reject' => pattern)
179
- end
180
- end
181
- end
182
-
183
- describe '.default_config' do
184
- it 'merges in the default accept and reject patterns' do
185
- expected = {
186
- 'enabled' => true,
187
- 'exclude' => [],
188
- 'reject' => [/^.$/, /[0-9]$/, /[A-Z]/],
189
- 'accept' => [/^_$/]
190
- }
191
-
192
- expect(described_class.default_config).to eq(expected)
193
- end
194
- end
195
-
196
- describe '.contexts' do
197
- it 'are scoped to classes, modules, instance and singleton methods' do
198
- expect(described_class.contexts).to eq([:module, :class, :def, :defs])
199
- end
200
- end
201
- end
@@ -1,114 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/unused_parameters'
3
-
4
- RSpec.describe Reek::SmellDetectors::UnusedParameters do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- def alfa(bravo)
8
- end
9
- RUBY
10
-
11
- expect(src).to reek_of(:UnusedParameters,
12
- lines: [1],
13
- context: 'alfa',
14
- message: "has unused parameter 'bravo'",
15
- source: 'string',
16
- name: 'bravo')
17
- end
18
-
19
- it 'does count all occurences' do
20
- src = <<-RUBY
21
- def alfa(bravo, charlie)
22
- end
23
- RUBY
24
-
25
- expect(src).
26
- to reek_of(:UnusedParameters, lines: [1], name: 'bravo').
27
- and reek_of(:UnusedParameters, lines: [1], name: 'charlie')
28
- end
29
-
30
- it 'reports nothing for no parameters' do
31
- src = 'def alfa; end'
32
- expect(src).not_to reek_of(:UnusedParameters)
33
- end
34
-
35
- it 'reports nothing for used parameter' do
36
- src = 'def alfa(bravo); bravo; end'
37
- expect(src).not_to reek_of(:UnusedParameters)
38
- end
39
-
40
- it 'reports for 1 used and 2 unused parameter' do
41
- src = 'def alfa(bravo, charlie, delta); bravo end'
42
-
43
- expect(src).
44
- to not_reek_of(:UnusedParameters, name: 'bravo').
45
- and reek_of(:UnusedParameters, name: 'charlie').
46
- and reek_of(:UnusedParameters, name: 'delta')
47
- end
48
-
49
- it 'reports nothing for named parameters prefixed with _' do
50
- src = 'def alfa(_bravo); end'
51
- expect(src).not_to reek_of(:UnusedParameters)
52
- end
53
-
54
- it 'reports nothing when using a parameter via self assignment' do
55
- src = 'def alfa(bravo); bravo += 1; end'
56
- expect(src).not_to reek_of(:UnusedParameters)
57
- end
58
-
59
- it 'reports nothing when using a parameter on a rescue' do
60
- src = 'def alfa(bravo = 3); puts "nothing"; rescue; retry if bravo -= 1 > 0; raise; end'
61
- expect(src).not_to reek_of(:UnusedParameters)
62
- end
63
-
64
- context 'when using super' do
65
- it 'reports nothing with implicit arguments' do
66
- src = 'def alfa(*bravo); super; end'
67
- expect(src).not_to reek_of(:UnusedParameters)
68
- end
69
-
70
- it 'reports something when explicitely passing no arguments' do
71
- src = 'def alfa(*bravo); super(); end'
72
- expect(src).to reek_of(:UnusedParameters)
73
- end
74
-
75
- it 'reports nothing when explicitely passing all arguments' do
76
- src = 'def alfa(*bravo); super(*bravo); end'
77
- expect(src).not_to reek_of(:UnusedParameters)
78
- end
79
-
80
- it 'reports nothing in a nested context' do
81
- src = 'def alfa(*bravo); charlie(super); end'
82
- expect(src).not_to reek_of(:UnusedParameters)
83
- end
84
- end
85
-
86
- context 'with anonymous parameters' do
87
- it 'reports nothing for unused anonymous parameter' do
88
- src = 'def alfa(_); end'
89
- expect(src).not_to reek_of(:UnusedParameters)
90
- end
91
-
92
- it 'reports nothing for unused anonymous splatted parameter' do
93
- src = 'def alfa(*); end'
94
- expect(src).not_to reek_of(:UnusedParameters)
95
- end
96
- end
97
-
98
- context 'with splatted parameters' do
99
- it 'reports nothing for used splatted parameter' do
100
- src = 'def alfa(*bravo); bravo; end'
101
- expect(src).not_to reek_of(:UnusedParameters)
102
- end
103
-
104
- it 'reports something when not using a keyword argument with splat' do
105
- src = 'def alfa(**bravo); end'
106
- expect(src).to reek_of(:UnusedParameters)
107
- end
108
-
109
- it 'reports nothing when using a keyword argument with splat' do
110
- src = 'def alfa(**bravo); bravo; end'
111
- expect(src).not_to reek_of(:UnusedParameters)
112
- end
113
- end
114
- end
@@ -1,205 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/unused_private_method'
3
-
4
- RSpec.describe Reek::SmellDetectors::UnusedPrivateMethod do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- class Alfa
8
- private
9
-
10
- def charlie
11
- end
12
- end
13
- RUBY
14
-
15
- expect(src).to reek_of(:UnusedPrivateMethod,
16
- lines: [4],
17
- context: 'Alfa',
18
- message: "has the unused private instance method 'charlie'",
19
- source: 'string',
20
- name: 'charlie')
21
- end
22
-
23
- it 'does count all occurences' do
24
- src = <<-RUBY
25
- class Alfa
26
- private
27
-
28
- def charlie
29
- end
30
-
31
- def charlie
32
- end
33
- end
34
- RUBY
35
-
36
- expect(src).
37
- to reek_of(:UnusedPrivateMethod, lines: [4], name: 'charlie').
38
- and reek_of(:UnusedPrivateMethod, lines: [7], name: 'charlie')
39
- end
40
-
41
- context 'when a class has unused private methods' do
42
- it 'reports instance methods' do
43
- source = <<-RUBY
44
- class Alfa
45
- private
46
- def bravo; end
47
- def charlie; end
48
- end
49
- RUBY
50
-
51
- expect(source).
52
- to reek_of(:UnusedPrivateMethod, name: 'bravo').
53
- and reek_of(:UnusedPrivateMethod, name: 'charlie')
54
- end
55
-
56
- it 'reports instance methods in the correct class' do
57
- source = <<-RUBY
58
- class Alfa
59
- class Bravo
60
- private
61
- def charlie; end
62
- end
63
- end
64
- RUBY
65
-
66
- expect(source).
67
- to reek_of(:UnusedPrivateMethod, context: 'Alfa::Bravo', name: 'charlie').
68
- and not_reek_of(:UnusedPrivateMethod, context: 'Alfa', name: 'charlie')
69
- end
70
-
71
- it 'discounts calls to identically named methods in nested classes' do
72
- source = <<-RUBY
73
- class Alfa
74
- class Bravo
75
- def bravo
76
- charlie
77
- end
78
-
79
- private
80
- def charlie; end
81
- end
82
-
83
- private
84
- def charlie; end
85
- end
86
- RUBY
87
-
88
- expect(source).
89
- to reek_of(:UnusedPrivateMethod, context: 'Alfa', name: 'charlie').
90
- and not_reek_of(:UnusedPrivateMethod, context: 'Alfo::Bravo', name: 'charlie')
91
- end
92
-
93
- it 'creates warnings correctly' do
94
- source = <<-RUBY
95
- class Alfa
96
- private
97
- def bravo; end
98
- def charlie; end
99
- end
100
- RUBY
101
-
102
- expect(source).
103
- to reek_of(:UnusedPrivateMethod, name: 'bravo', lines: [3]).
104
- and reek_of(:UnusedPrivateMethod, name: 'charlie', lines: [4])
105
- end
106
-
107
- it 'reports instance methods defined as private with a modifier' do
108
- source = <<-RUBY
109
- class Alfa
110
- private def bravo; end
111
- end
112
- RUBY
113
-
114
- expect(source).
115
- to reek_of(:UnusedPrivateMethod, name: 'bravo')
116
- end
117
- end
118
-
119
- context 'when the detector is configured via a source code comment' do
120
- it 'does not report methods we excluded' do
121
- source = <<-RUBY
122
- # :reek:UnusedPrivateMethod { exclude: [ bravo ] }
123
- class Alfa
124
- private
125
- def bravo; end
126
- def charlie; end
127
- end
128
- RUBY
129
-
130
- expect(source).
131
- to reek_of(:UnusedPrivateMethod, name: 'charlie').
132
- and not_reek_of(:UnusedPrivateMethod, name: 'bravo')
133
- end
134
- end
135
-
136
- context 'when a class has only used private methods' do
137
- it 'reports nothing' do
138
- source = <<-RUBY
139
- class Alfa
140
- def bravo
141
- charlie
142
- end
143
-
144
- private
145
- def charlie; end
146
- end
147
- RUBY
148
-
149
- expect(source).not_to reek_of(:UnusedPrivateMethod)
150
- end
151
- end
152
-
153
- context 'when a class has unused protected methods' do
154
- it 'reports nothing' do
155
- source = <<-RUBY
156
- class Alfa
157
- protected
158
- def bravo; end
159
- end
160
- RUBY
161
-
162
- expect(source).not_to reek_of(:UnusedPrivateMethod)
163
- end
164
- end
165
-
166
- context 'when a class has unused public methods' do
167
- it 'reports nothing' do
168
- source = <<-RUBY
169
- class Alfa
170
- def bravo; end
171
- end
172
- RUBY
173
-
174
- expect(source).not_to reek_of(:UnusedPrivateMethod)
175
- end
176
- end
177
-
178
- describe 'preventing methods from being reported' do
179
- let(:source) do
180
- <<-RUBY
181
- class Alfa
182
- private
183
- def bravo; end
184
- def charlie; end
185
- end
186
- RUBY
187
- end
188
-
189
- it 'excludes them via direct match in the app configuration' do
190
- config = { Reek::SmellDetectors::BaseDetector::EXCLUDE_KEY => ['Alfa#charlie'] }
191
-
192
- expect(source).
193
- to reek_of(:UnusedPrivateMethod, name: 'bravo').with_config(config).
194
- and not_reek_of(:UnusedPrivateMethod, name: 'charlie').with_config(config)
195
- end
196
-
197
- it 'excludes them via regex in the app configuration' do
198
- config = { Reek::SmellDetectors::BaseDetector::EXCLUDE_KEY => [/charlie/] }
199
-
200
- expect(source).
201
- to reek_of(:UnusedPrivateMethod, name: 'bravo').with_config(config).
202
- and not_reek_of(:UnusedPrivateMethod, name: 'charlie').with_config(config)
203
- end
204
- end
205
- end