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,54 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/too_many_methods'
3
-
4
- RSpec.describe Reek::SmellDetectors::TooManyMethods do
5
- let(:config) do
6
- { Reek::SmellDetectors::TooManyMethods::MAX_ALLOWED_METHODS_KEY => 3 }
7
- end
8
-
9
- it 'reports the right values' do
10
- src = <<-RUBY
11
- class Alfa
12
- def bravo; end
13
- def charlie; end
14
- def delta; end
15
- def echo; end
16
- end
17
- RUBY
18
-
19
- expect(src).to reek_of(:TooManyMethods,
20
- lines: [1],
21
- context: 'Alfa',
22
- message: 'has at least 4 methods',
23
- source: 'string',
24
- count: 4).with_config(config)
25
- end
26
-
27
- it 'does not report if we stay below max_methods' do
28
- src = <<-RUBY
29
- class Alfa
30
- def bravo; end
31
- def charlie; end
32
- def delta; end
33
- end
34
- RUBY
35
-
36
- expect(src).not_to reek_of(:TooManyMethods).with_config(config)
37
- end
38
-
39
- it 'stops at a nested module' do
40
- src = <<-RUBY
41
- class Alfa
42
- def bravo; end
43
- def charlie; end
44
-
45
- module Hidden
46
- def delta; end
47
- def echo; end
48
- end
49
- end
50
- RUBY
51
-
52
- expect(src).not_to reek_of(:TooManyMethods).with_config(config)
53
- end
54
- end
@@ -1,90 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/too_many_statements'
3
-
4
- RSpec.describe Reek::SmellDetectors::TooManyStatements do
5
- let(:config) do
6
- { Reek::SmellDetectors::TooManyStatements::MAX_ALLOWED_STATEMENTS_KEY => 2 }
7
- end
8
-
9
- it 'reports the right values' do
10
- src = <<-RUBY
11
- class Alfa
12
- def bravo
13
- charlie = 1
14
- delta = 2
15
- echo = 3
16
- end
17
- end
18
- RUBY
19
-
20
- expect(src).to reek_of(:TooManyStatements,
21
- lines: [2],
22
- context: 'Alfa#bravo',
23
- message: 'has approx 3 statements',
24
- source: 'string',
25
- count: 3).with_config(config)
26
- end
27
-
28
- it 'does count all occurences' do
29
- src = <<-RUBY
30
- class Alfa
31
- def bravo
32
- charlie = 1
33
- delta = 2
34
- echo = 3
35
- end
36
-
37
- def foxtrot
38
- golf = 1
39
- hotel = 2
40
- india = 3
41
- end
42
- end
43
- RUBY
44
-
45
- expect(src).
46
- to reek_of(:TooManyStatements, lines: [2], context: 'Alfa#bravo').with_config(config).
47
- and reek_of(:TooManyStatements, lines: [8], context: 'Alfa#foxtrot').with_config(config)
48
- end
49
-
50
- it 'does not report short methods' do
51
- src = <<-RUBY
52
- class Alfa
53
- def bravo
54
- charlie = 1
55
- delta = 2
56
- end
57
- end
58
- RUBY
59
-
60
- expect(src).not_to reek_of(:TooManyStatements).with_config(config)
61
- end
62
-
63
- it 'does not report initialize' do
64
- src = <<-RUBY
65
- class Alfa
66
- def initialize
67
- charlie = 1
68
- delta = 2
69
- echo = 3
70
- end
71
- end
72
- RUBY
73
-
74
- expect(src).not_to reek_of(:TooManyStatements).with_config(config)
75
- end
76
-
77
- it 'reports long inner block' do
78
- src = <<-RUBY
79
- def long
80
- self.each do |x|
81
- charlie = 1
82
- delta = 2
83
- echo = 3
84
- end
85
- end
86
- RUBY
87
-
88
- expect(src).to reek_of(:TooManyStatements).with_config(config)
89
- end
90
- end
@@ -1,78 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/uncommunicative_method_name'
3
-
4
- RSpec.describe Reek::SmellDetectors::UncommunicativeMethodName do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- def m; end
8
- RUBY
9
-
10
- expect(src).to reek_of(:UncommunicativeMethodName,
11
- lines: [1],
12
- context: 'm',
13
- message: "has the name 'm'",
14
- source: 'string',
15
- name: 'm')
16
- end
17
-
18
- describe 'default configuration' do
19
- it 'reports one-word names' do
20
- src = 'def a; end'
21
- expect(src).to reek_of(:UncommunicativeMethodName)
22
- end
23
-
24
- it 'reports names ending with a digit' do
25
- src = 'def xyz1; end'
26
- expect(src).to reek_of(:UncommunicativeMethodName)
27
- end
28
-
29
- it 'reports camelcased names' do
30
- src = 'def aBBa; end'
31
- expect(src).to reek_of(:UncommunicativeMethodName)
32
- end
33
-
34
- it 'does not report one-letter special characters' do
35
- ['+', '-', '/', '*'].each do |symbol|
36
- expect("def #{symbol}; end").not_to reek_of(:UncommunicativeMethodName)
37
- end
38
- end
39
- end
40
-
41
- describe '`accept` patterns' do
42
- let(:source) { 'def x; end' }
43
-
44
- it 'make smelly names pass' do
45
- pattern = /x/
46
- expect(source).not_to reek_of(:UncommunicativeMethodName).with_config('accept' => pattern)
47
- end
48
- end
49
-
50
- describe '`reject` patterns' do
51
- let(:source) { 'def alfa; end' }
52
-
53
- it 'reject smelly names' do
54
- patterns = [/alf/, /lfa/]
55
- patterns.each do |pattern|
56
- expect(source).to reek_of(:UncommunicativeMethodName).with_config('reject' => pattern)
57
- end
58
- end
59
- end
60
-
61
- describe '.default_config' do
62
- it 'merges in the default accept and reject patterns' do
63
- expected = {
64
- 'enabled' => true,
65
- 'exclude' => [],
66
- 'reject' => [/^[a-z]$/, /[0-9]$/, /[A-Z]/],
67
- 'accept' => []
68
- }
69
- expect(described_class.default_config).to eq(expected)
70
- end
71
- end
72
-
73
- describe '.contexts' do
74
- it 'is scoped to classes and modules' do
75
- expect(described_class.contexts).to eq([:def, :defs])
76
- end
77
- end
78
- end
@@ -1,78 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/uncommunicative_module_name'
3
-
4
- RSpec.describe Reek::SmellDetectors::UncommunicativeModuleName do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- class K
8
- end
9
- RUBY
10
-
11
- expect(src).to reek_of(:UncommunicativeModuleName,
12
- lines: [1],
13
- context: 'K',
14
- message: "has the name 'K'",
15
- source: 'string',
16
- name: 'K')
17
- end
18
-
19
- describe 'default configuration' do
20
- ['class', 'module'].each do |type|
21
- it 'does not report one-word name' do
22
- expect("#{type} Alfa; end").not_to reek_of(:UncommunicativeModuleName)
23
- end
24
-
25
- it 'reports one-letter name' do
26
- expect("#{type} X; end").to reek_of(:UncommunicativeModuleName, name: 'X')
27
- end
28
-
29
- it 'reports name of the form "x2"' do
30
- expect("#{type} X2; end").to reek_of(:UncommunicativeModuleName, name: 'X2')
31
- end
32
-
33
- it 'reports long name ending in a number' do
34
- expect("#{type} Alfa2; end").to reek_of(:UncommunicativeModuleName, name: 'Alfa2')
35
- end
36
- end
37
- end
38
-
39
- describe '`accept` patterns' do
40
- let(:source) { 'class Alfa1; end' }
41
-
42
- it 'make smelly names pass ' do
43
- patterns = [/lfa1/, /Alfa1/]
44
- patterns.each do |pattern|
45
- expect(source).not_to reek_of(:UncommunicativeModuleName).with_config('accept' => pattern)
46
- end
47
- end
48
- end
49
-
50
- describe '`reject` patterns' do
51
- let(:source) { 'class Alfa; end' }
52
-
53
- it 'reject smelly names' do
54
- patterns = [/lfa/, /Alf/]
55
- patterns.each do |pattern|
56
- expect(source).to reek_of(:UncommunicativeModuleName).with_config('reject' => pattern)
57
- end
58
- end
59
- end
60
-
61
- describe '.default_config' do
62
- it 'merges in the default accept and reject patterns' do
63
- expected = {
64
- 'enabled' => true,
65
- 'exclude' => [],
66
- 'reject' => [/^.$/, /[0-9]$/],
67
- 'accept' => []
68
- }
69
- expect(described_class.default_config).to eq(expected)
70
- end
71
- end
72
-
73
- describe '.contexts' do
74
- it 'indicates that this smell is scoped to classes and modules' do
75
- expect(described_class.contexts).to eq([:module, :class])
76
- end
77
- end
78
- end
@@ -1,147 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/uncommunicative_parameter_name'
3
-
4
- RSpec.describe Reek::SmellDetectors::UncommunicativeParameterName do
5
- it 'reports the right values' do
6
- src = <<-RUBY
7
- def alfa(x)
8
- x
9
- end
10
- RUBY
11
-
12
- expect(src).to reek_of(:UncommunicativeParameterName,
13
- lines: [1],
14
- context: 'alfa',
15
- message: "has the parameter name 'x'",
16
- source: 'string',
17
- name: 'x')
18
- end
19
-
20
- it 'does count all occurences' do
21
- src = <<-RUBY
22
- def alfa(x, y)
23
- [x, y]
24
- end
25
- RUBY
26
-
27
- expect(src).
28
- to reek_of(:UncommunicativeParameterName, lines: [1], name: 'x').
29
- and reek_of(:UncommunicativeParameterName, lines: [1], name: 'y')
30
- end
31
-
32
- { 'alfa.' => 'with a receiver',
33
- '' => 'without a receiver' }.each do |host, description|
34
- context "in a method definition #{description}" do
35
- it 'does not report two-letter parameter names' do
36
- src = "def #{host}bravo(ab); charlie(ab); end"
37
- expect(src).not_to reek_of(:UncommunicativeParameterName)
38
- end
39
-
40
- it 'reports names of the form "x2"' do
41
- src = "def #{host}bravo(x2) charlie(x2) end"
42
- expect(src).to reek_of(:UncommunicativeParameterName, name: 'x2')
43
- end
44
-
45
- it 'reports long name ending in a number' do
46
- src = "def #{host}bravo(param2) charlie(param2) end"
47
- expect(src).to reek_of(:UncommunicativeParameterName, name: 'param2')
48
- end
49
-
50
- it 'reports unused parameters' do
51
- src = "def #{host}bravo(x); charlie; end"
52
- expect(src).to reek_of(:UncommunicativeParameterName)
53
- end
54
-
55
- it 'reports splat parameters' do
56
- expect("def #{host}bravo(*a); charlie(a); end").
57
- to reek_of(:UncommunicativeParameterName, name: 'a')
58
- end
59
-
60
- it 'reports double splat parameters' do
61
- expect("def #{host}bravo(**a); charlie(a); end").
62
- to reek_of(:UncommunicativeParameterName, name: 'a')
63
- end
64
-
65
- it 'reports block parameters' do
66
- expect("def #{host}bravo(&a); charlie(a); end").
67
- to reek_of(:UncommunicativeParameterName, name: 'a')
68
- end
69
-
70
- it 'does not report unused anonymous parameter' do
71
- src = "def #{host}bravo(_); charlie; end"
72
- expect(src).not_to reek_of(:UncommunicativeParameterName)
73
- end
74
-
75
- it 'reports used anonymous parameter' do
76
- src = "def #{host}bravo(_); charlie(_) end"
77
- expect(src).to reek_of(:UncommunicativeParameterName, name: '_')
78
- end
79
-
80
- it 'reports used parameters marked as unused' do
81
- src = "def #{host}bravo(_unused) charlie(_unused) end"
82
- expect(src).to reek_of(:UncommunicativeParameterName, name: '_unused')
83
- end
84
-
85
- it 'does not report anonymous splat' do
86
- expect("def #{host}bravo(*); end").not_to reek_of(:UncommunicativeParameterName)
87
- end
88
-
89
- it 'does not report anonymous double splat' do
90
- expect("def #{host}bravo(**); end").not_to reek_of(:UncommunicativeParameterName)
91
- end
92
-
93
- it 'reports names inside array decomposition' do
94
- src = "def #{host}bravo((x, charlie)) delta(x, charlie) end"
95
- expect(src).to reek_of(:UncommunicativeParameterName,
96
- name: 'x')
97
- end
98
-
99
- it 'reports names inside nested array decomposition' do
100
- src = "def #{host}bravo((charlie, (delta, x))) echo(charlie, x) end"
101
- expect(src).to reek_of(:UncommunicativeParameterName,
102
- name: 'x')
103
- end
104
- end
105
- end
106
-
107
- describe '`accept` patterns' do
108
- let(:source) { 'def alfa(bar2); charlie(bar2); end' }
109
-
110
- it 'make smelly names pass' do
111
- patterns = [/bar2/, /ar2/]
112
- patterns.each do |pattern|
113
- expect(source).not_to reek_of(:UncommunicativeParameterName).with_config('accept' => pattern)
114
- end
115
- end
116
- end
117
-
118
- describe '`reject` patterns' do
119
- let(:source) { 'def alfa(bravo); charlie(bravo); end' }
120
-
121
- it 'reject smelly names' do
122
- patterns = [/brav/, /ravo/]
123
- patterns.each do |pattern|
124
- expect(source).to reek_of(:UncommunicativeParameterName).with_config('reject' => pattern)
125
- end
126
- end
127
- end
128
-
129
- describe '.default_config' do
130
- it 'merges in the default accept and reject patterns' do
131
- expected = {
132
- 'enabled' => true,
133
- 'exclude' => [],
134
- 'reject' => [/^.$/, /[0-9]$/, /[A-Z]/, /^_/],
135
- 'accept' => []
136
- }
137
-
138
- expect(described_class.default_config).to eq(expected)
139
- end
140
- end
141
-
142
- describe '.contexts' do
143
- it 'indicates that this smell is scoped to method definitions' do
144
- expect(described_class.contexts).to eq([:def, :defs])
145
- end
146
- end
147
- end