reek 6.0.2 → 6.1.0

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 (238) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +9 -0
  3. data/.github/workflows/ruby.yml +57 -0
  4. data/.rubocop.yml +5 -3
  5. data/.rubocop_todo.yml +6 -4
  6. data/CHANGELOG.md +26 -0
  7. data/CONTRIBUTING.md +3 -0
  8. data/Dockerfile +1 -1
  9. data/Gemfile +7 -7
  10. data/README.md +1 -1
  11. data/bin/code_climate_reek +2 -3
  12. data/lib/reek/ast/ast_node_class_map.rb +1 -1
  13. data/lib/reek/ast/node.rb +1 -1
  14. data/lib/reek/ast/sexp_extensions/arguments.rb +11 -0
  15. data/lib/reek/ast/sexp_extensions/case.rb +1 -1
  16. data/lib/reek/ast/sexp_extensions/if.rb +1 -1
  17. data/lib/reek/ast/sexp_extensions/send.rb +1 -1
  18. data/lib/reek/cli/command/todo_list_command.rb +1 -1
  19. data/lib/reek/cli/options.rb +1 -1
  20. data/lib/reek/code_comment.rb +22 -17
  21. data/lib/reek/configuration/excluded_paths.rb +2 -1
  22. data/lib/reek/context/code_context.rb +1 -1
  23. data/lib/reek/context/refinement_context.rb +16 -0
  24. data/lib/reek/context_builder.rb +17 -3
  25. data/lib/reek/rake/task.rb +1 -1
  26. data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -3
  27. data/lib/reek/smell_detectors/base_detector.rb +1 -1
  28. data/lib/reek/smell_warning.rb +1 -1
  29. data/lib/reek/source/source_locator.rb +1 -3
  30. data/lib/reek/spec/should_reek_of.rb +6 -4
  31. data/lib/reek/version.rb +2 -2
  32. data/reek.gemspec +28 -25
  33. metadata +13 -240
  34. data/.travis.yml +0 -40
  35. data/docs/API.md +0 -174
  36. data/docs/Attribute.md +0 -39
  37. data/docs/Basic-Smell-Options.md +0 -85
  38. data/docs/Boolean-Parameter.md +0 -54
  39. data/docs/Class-Variable.md +0 -40
  40. data/docs/Code-Smells.md +0 -39
  41. data/docs/Command-Line-Options.md +0 -119
  42. data/docs/Control-Couple.md +0 -26
  43. data/docs/Control-Parameter.md +0 -32
  44. data/docs/Data-Clump.md +0 -46
  45. data/docs/Duplicate-Method-Call.md +0 -264
  46. data/docs/Feature-Envy.md +0 -93
  47. data/docs/How-To-Write-New-Detectors.md +0 -132
  48. data/docs/How-reek-works-internally.md +0 -114
  49. data/docs/Instance-Variable-Assumption.md +0 -163
  50. data/docs/Irresponsible-Module.md +0 -47
  51. data/docs/Large-Class.md +0 -16
  52. data/docs/Long-Parameter-List.md +0 -39
  53. data/docs/Long-Yield-List.md +0 -37
  54. data/docs/Manual-Dispatch.md +0 -30
  55. data/docs/Missing-Safe-Method.md +0 -92
  56. data/docs/Module-Initialize.md +0 -62
  57. data/docs/Nested-Iterators.md +0 -59
  58. data/docs/Nil-Check.md +0 -47
  59. data/docs/RSpec-matchers.md +0 -129
  60. data/docs/Rake-Task.md +0 -66
  61. data/docs/Reek-4-to-Reek-5-migration.md +0 -188
  62. data/docs/Reek-Driven-Development.md +0 -46
  63. data/docs/Repeated-Conditional.md +0 -47
  64. data/docs/Simulated-Polymorphism.md +0 -16
  65. data/docs/Smell-Suppression.md +0 -96
  66. data/docs/Style-Guide.md +0 -19
  67. data/docs/Subclassed-From-Core-Class.md +0 -79
  68. data/docs/Too-Many-Constants.md +0 -37
  69. data/docs/Too-Many-Instance-Variables.md +0 -43
  70. data/docs/Too-Many-Methods.md +0 -56
  71. data/docs/Too-Many-Statements.md +0 -54
  72. data/docs/Uncommunicative-Method-Name.md +0 -94
  73. data/docs/Uncommunicative-Module-Name.md +0 -92
  74. data/docs/Uncommunicative-Name.md +0 -18
  75. data/docs/Uncommunicative-Parameter-Name.md +0 -90
  76. data/docs/Uncommunicative-Variable-Name.md +0 -96
  77. data/docs/Unused-Parameters.md +0 -28
  78. data/docs/Unused-Private-Method.md +0 -101
  79. data/docs/Utility-Function.md +0 -56
  80. data/docs/Versioning-Policy.md +0 -7
  81. data/docs/YAML-Reports.md +0 -93
  82. data/docs/defaults.reek.yml +0 -129
  83. data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
  84. data/docs/templates/default/docstring/setup.rb +0 -37
  85. data/docs/templates/default/fulldoc/html/css/common.css +0 -1
  86. data/docs/yard_plugin.rb +0 -17
  87. data/features/command_line_interface/basic_usage.feature +0 -15
  88. data/features/command_line_interface/options.feature +0 -123
  89. data/features/command_line_interface/show_progress.feature +0 -33
  90. data/features/command_line_interface/smell_selection.feature +0 -15
  91. data/features/command_line_interface/smells_count.feature +0 -38
  92. data/features/command_line_interface/stdin.feature +0 -65
  93. data/features/configuration_files/accept_setting.feature +0 -87
  94. data/features/configuration_files/directory_specific_directives.feature +0 -274
  95. data/features/configuration_files/exclude_directives.feature +0 -35
  96. data/features/configuration_files/exclude_paths_directives.feature +0 -42
  97. data/features/configuration_files/masking_smells.feature +0 -94
  98. data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
  99. data/features/configuration_files/reject_setting.feature +0 -89
  100. data/features/configuration_files/schema_validation.feature +0 -59
  101. data/features/configuration_files/show_configuration_file.feature +0 -44
  102. data/features/configuration_files/unused_private_method.feature +0 -68
  103. data/features/configuration_loading.feature +0 -91
  104. data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
  105. data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
  106. data/features/locales.feature +0 -32
  107. data/features/programmatic_access.feature +0 -41
  108. data/features/rake_task/rake_task.feature +0 -138
  109. data/features/reports/codeclimate.feature +0 -59
  110. data/features/reports/json.feature +0 -59
  111. data/features/reports/reports.feature +0 -219
  112. data/features/reports/yaml.feature +0 -52
  113. data/features/rspec_matcher.feature +0 -41
  114. data/features/samples.feature +0 -305
  115. data/features/step_definitions/.rubocop.yml +0 -5
  116. data/features/step_definitions/reek_steps.rb +0 -102
  117. data/features/step_definitions/sample_file_steps.rb +0 -63
  118. data/features/support/env.rb +0 -33
  119. data/features/todo_list.feature +0 -108
  120. data/samples/checkstyle.xml +0 -7
  121. data/samples/clean_source/clean.rb +0 -6
  122. data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
  123. data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
  124. data/samples/configuration/corrupt.reek +0 -1
  125. data/samples/configuration/empty.reek +0 -0
  126. data/samples/configuration/full_configuration.reek +0 -13
  127. data/samples/configuration/full_mask.reek +0 -6
  128. data/samples/configuration/home/home.reek.yml +0 -4
  129. data/samples/configuration/partial_mask.reek +0 -4
  130. data/samples/configuration/regular_configuration/.reek.yml +0 -4
  131. data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
  132. data/samples/configuration/with_excluded_paths.reek +0 -5
  133. data/samples/no_config_file/.keep +0 -0
  134. data/samples/paths.rb +0 -5
  135. data/samples/smelly_source/inline.rb +0 -704
  136. data/samples/smelly_source/optparse.rb +0 -1788
  137. data/samples/smelly_source/redcloth.rb +0 -1130
  138. data/samples/smelly_source/ruby.rb +0 -368
  139. data/samples/smelly_source/smelly.rb +0 -7
  140. data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
  141. data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
  142. data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
  143. data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
  144. data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
  145. data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
  146. data/samples/source_with_non_ruby_files/gibberish +0 -1
  147. data/samples/source_with_non_ruby_files/python_source.py +0 -1
  148. data/samples/source_with_non_ruby_files/ruby.rb +0 -6
  149. data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
  150. data/spec/quality/documentation_spec.rb +0 -41
  151. data/spec/quality/reek_source_spec.rb +0 -11
  152. data/spec/reek/ast/node_spec.rb +0 -211
  153. data/spec/reek/ast/object_refs_spec.rb +0 -83
  154. data/spec/reek/ast/reference_collector_spec.rb +0 -47
  155. data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
  156. data/spec/reek/cli/application_spec.rb +0 -168
  157. data/spec/reek/cli/command/report_command_spec.rb +0 -44
  158. data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
  159. data/spec/reek/cli/options_spec.rb +0 -51
  160. data/spec/reek/cli/silencer_spec.rb +0 -28
  161. data/spec/reek/code_comment_spec.rb +0 -184
  162. data/spec/reek/configuration/app_configuration_spec.rb +0 -195
  163. data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
  164. data/spec/reek/configuration/default_directive_spec.rb +0 -13
  165. data/spec/reek/configuration/directory_directives_spec.rb +0 -122
  166. data/spec/reek/configuration/excluded_paths_spec.rb +0 -16
  167. data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
  168. data/spec/reek/configuration/schema_validator_spec.rb +0 -165
  169. data/spec/reek/context/code_context_spec.rb +0 -192
  170. data/spec/reek/context/ghost_context_spec.rb +0 -60
  171. data/spec/reek/context/method_context_spec.rb +0 -72
  172. data/spec/reek/context/module_context_spec.rb +0 -55
  173. data/spec/reek/context/root_context_spec.rb +0 -12
  174. data/spec/reek/context/statement_counter_spec.rb +0 -24
  175. data/spec/reek/context_builder_spec.rb +0 -457
  176. data/spec/reek/detector_repository_spec.rb +0 -22
  177. data/spec/reek/documentation_link_spec.rb +0 -20
  178. data/spec/reek/errors/base_error_spec.rb +0 -13
  179. data/spec/reek/examiner_spec.rb +0 -309
  180. data/spec/reek/logging_error_handler_spec.rb +0 -24
  181. data/spec/reek/rake/task_spec.rb +0 -56
  182. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
  183. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
  184. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
  185. data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
  186. data/spec/reek/report/html_report_spec.rb +0 -19
  187. data/spec/reek/report/json_report_spec.rb +0 -58
  188. data/spec/reek/report/location_formatter_spec.rb +0 -32
  189. data/spec/reek/report/progress_formatter_spec.rb +0 -68
  190. data/spec/reek/report/text_report_spec.rb +0 -89
  191. data/spec/reek/report/xml_report_spec.rb +0 -24
  192. data/spec/reek/report/yaml_report_spec.rb +0 -55
  193. data/spec/reek/report_spec.rb +0 -28
  194. data/spec/reek/smell_configuration_spec.rb +0 -56
  195. data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
  196. data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
  197. data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
  198. data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
  199. data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
  200. data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
  201. data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
  202. data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
  203. data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
  204. data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
  205. data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
  206. data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
  207. data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
  208. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
  209. data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
  210. data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
  211. data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
  212. data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
  213. data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
  214. data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
  215. data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
  216. data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
  217. data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
  218. data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
  219. data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
  220. data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
  221. data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
  222. data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
  223. data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
  224. data/spec/reek/smell_detectors/utility_function_spec.rb +0 -293
  225. data/spec/reek/smell_warning_spec.rb +0 -137
  226. data/spec/reek/source/source_code_spec.rb +0 -79
  227. data/spec/reek/source/source_locator_spec.rb +0 -166
  228. data/spec/reek/spec/should_reek_of_spec.rb +0 -153
  229. data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
  230. data/spec/reek/spec/should_reek_spec.rb +0 -52
  231. data/spec/reek/spec/smell_matcher_spec.rb +0 -87
  232. data/spec/reek/tree_dresser_spec.rb +0 -46
  233. data/spec/spec_helper.rb +0 -110
  234. data/tasks/configuration.rake +0 -18
  235. data/tasks/console.rake +0 -5
  236. data/tasks/reek.rake +0 -6
  237. data/tasks/rubocop.rake +0 -11
  238. data/tasks/test.rake +0 -32
@@ -1,144 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/too_many_constants'
3
-
4
- RSpec.describe Reek::SmellDetectors::TooManyConstants do
5
- let(:config) do
6
- { Reek::SmellDetectors::TooManyConstants::MAX_ALLOWED_CONSTANTS_KEY => 2 }
7
- end
8
-
9
- it 'reports the right values' do
10
- src = <<-RUBY
11
- class Alfa
12
- Bravo = Charlie = Delta = 1
13
- end
14
- RUBY
15
-
16
- expect(src).to reek_of(:TooManyConstants,
17
- lines: [1],
18
- context: 'Alfa',
19
- message: 'has 3 constants',
20
- source: 'string',
21
- count: 3).with_config(config)
22
- end
23
-
24
- it 'does not report for non-excessive constants' do
25
- src = <<-RUBY
26
- class Alfa
27
- Bravo = Charlie = 1
28
- end
29
- RUBY
30
-
31
- expect(src).not_to reek_of(:TooManyConstants).with_config(config)
32
- end
33
-
34
- it 'does not report when increasing default' do
35
- src = <<-RUBY
36
- # :reek:TooManyConstants { max_constants: 3 }
37
- class Alfa
38
- Bravo = Charlie = Delta = 1
39
- end
40
- RUBY
41
-
42
- expect(src).not_to reek_of(:TooManyConstants).with_config(config)
43
- end
44
-
45
- it 'does not report when disabled' do
46
- src = <<-RUBY
47
- # :reek:TooManyConstants { enabled: false }
48
- class Alfa
49
- Bravo = Charlie = Delta = 1
50
- end
51
- RUBY
52
-
53
- expect(src).not_to reek_of(:TooManyConstants).with_config(config)
54
- end
55
-
56
- it 'does not account class definition' do
57
- src = <<-RUBY
58
- class Alfa
59
- Bravo = Charlie = 1
60
- Delta = Class.new(StandardError)
61
- end
62
- RUBY
63
-
64
- expect(src).not_to reek_of(:TooManyConstants).with_config(config)
65
- end
66
-
67
- it 'does not account struct definition' do
68
- src = <<-RUBY
69
- class Alfa
70
- Bravo = Charlie = 1
71
- Delta = Struct.new
72
- end
73
- RUBY
74
-
75
- expect(src).not_to reek_of(:TooManyConstants).with_config(config)
76
- end
77
-
78
- it 'counts each constant only once' do
79
- src = <<-RUBY
80
- class Alfa
81
- Bravo = Charlie = 1
82
- end
83
-
84
- class Delta
85
- Echo = Foxtrot = 1
86
- end
87
-
88
- class Golf
89
- Hotel = India = 1
90
- end
91
- RUBY
92
-
93
- expect(src).not_to reek_of(:TooManyConstants).with_config(config)
94
- end
95
-
96
- it 'does not report outer module when inner module suppressed' do
97
- src = <<-RUBY
98
- module Alfa
99
- # ignore :reek:TooManyConstants
100
- module Bravo
101
- Charlie = Delta = Echo = 1
102
- end
103
- end
104
- RUBY
105
-
106
- expect(src).not_to reek_of(:TooManyConstants).with_config(config)
107
- end
108
-
109
- it 'counts each constant only once for each namespace' do
110
- src = <<-RUBY
111
- module Alfa
112
- Bravo = Charlie = 1
113
-
114
- class Delta
115
- Echo = 1
116
- end
117
- end
118
- RUBY
119
-
120
- expect(src).not_to reek_of(:TooManyConstants).with_config(config)
121
- end
122
-
123
- it 'reports for excessive constants inside a module' do
124
- src = <<-RUBY
125
- module Alfa
126
- Bravo = Charlie = Delta = 1
127
- end
128
- RUBY
129
-
130
- expect(src).to reek_of(:TooManyConstants, context: 'Alfa').with_config(config)
131
- end
132
-
133
- it 'reports the full class name' do
134
- src = <<-RUBY
135
- module Alfa
136
- class Bravo
137
- Charlie = Delta = Echo = 1
138
- end
139
- end
140
- RUBY
141
-
142
- expect(src).to reek_of(:TooManyConstants, context: 'Alfa::Bravo').with_config(config)
143
- end
144
- end
@@ -1,132 +0,0 @@
1
- require_relative '../../spec_helper'
2
- require_lib 'reek/smell_detectors/too_many_instance_variables'
3
-
4
- RSpec.describe Reek::SmellDetectors::TooManyInstanceVariables do
5
- let(:config) do
6
- { Reek::SmellDetectors::TooManyInstanceVariables::MAX_ALLOWED_IVARS_KEY => 2 }
7
- end
8
-
9
- it 'reports the right values' do
10
- src = <<-RUBY
11
- class Alfa
12
- def bravo
13
- @charlie = @delta = @echo = 1
14
- end
15
- end
16
- RUBY
17
-
18
- expect(src).to reek_of(:TooManyInstanceVariables,
19
- lines: [1],
20
- context: 'Alfa',
21
- message: 'has at least 3 instance variables',
22
- source: 'string',
23
- count: 3).with_config(config)
24
- end
25
-
26
- it 'does not report for non-excessive ivars' do
27
- src = <<-RUBY
28
- class Alfa
29
- def bravo
30
- @charlie = @delta = 1
31
- end
32
- end
33
- RUBY
34
-
35
- expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
36
- end
37
-
38
- it 'has a configurable maximum' do
39
- src = <<-RUBY
40
- # :reek:TooManyInstanceVariables { max_instance_variables: 3 }
41
- class Alfa
42
- def bravo
43
- @charlie = @delta = @echo = 1
44
- end
45
- end
46
- RUBY
47
-
48
- expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
49
- end
50
-
51
- it 'counts each ivar only once' do
52
- src = <<-RUBY
53
- class Alfa
54
- def bravo
55
- @charlie = @delta = 1
56
- @charlie = @delta = 1
57
- end
58
- end
59
- RUBY
60
-
61
- expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
62
- end
63
-
64
- it 'does not report memoized bravo' do
65
- src = <<-RUBY
66
- class Alfa
67
- def bravo
68
- @charlie = @delta = 1
69
- @echo ||= 1
70
- end
71
- end
72
- RUBY
73
-
74
- expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
75
- end
76
-
77
- it 'does not count ivars across inner classes' do
78
- src = <<-RUBY
79
- class Alfa
80
- class Bravo
81
- def charlie
82
- @delta = @echo = 1
83
- end
84
- end
85
-
86
- class Hotel
87
- def india
88
- @juliett = 1
89
- end
90
- end
91
- end
92
- RUBY
93
-
94
- expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
95
- end
96
-
97
- it 'does not count ivars across inner modules and classes' do
98
- src = <<-RUBY
99
- class Alfa
100
- class Bravo
101
- def charlie
102
- @delta = @echo = 1
103
- end
104
- end
105
-
106
- module Foxtrot
107
- def golf
108
- @hotel = 1
109
- end
110
- end
111
- end
112
- RUBY
113
-
114
- expect(src).not_to reek_of(:TooManyInstanceVariables).with_config(config)
115
- end
116
-
117
- it 'reports excessive ivars across different methods' do
118
- src = <<-RUBY
119
- class Alfa
120
- def bravo
121
- @charlie = @delta = 1
122
- end
123
-
124
- def golf
125
- @hotel = 1
126
- end
127
- end
128
- RUBY
129
-
130
- expect(src).to reek_of(:TooManyInstanceVariables).with_config(config)
131
- end
132
- end
@@ -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