reek 6.0.2 → 6.2.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 (271) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +13 -0
  3. data/.github/workflows/ruby.yml +57 -0
  4. data/.rubocop.yml +6 -12
  5. data/.rubocop_todo.yml +6 -4
  6. data/CHANGELOG.md +95 -0
  7. data/CONTRIBUTING.md +10 -10
  8. data/Dockerfile +1 -1
  9. data/Gemfile +8 -7
  10. data/README.md +29 -29
  11. data/bin/code_climate_reek +56 -8
  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 +20 -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 +22 -7
  18. data/lib/reek/cli/command/todo_list_command.rb +3 -3
  19. data/lib/reek/cli/options.rb +6 -6
  20. data/lib/reek/{report/code_climate → code_climate}/code_climate_configuration.rb +1 -1
  21. data/lib/reek/{report/code_climate → code_climate}/code_climate_configuration.yml +41 -41
  22. data/lib/reek/{report/code_climate → code_climate}/code_climate_fingerprint.rb +2 -2
  23. data/lib/reek/{report/code_climate → code_climate}/code_climate_formatter.rb +2 -4
  24. data/lib/reek/{report/code_climate → code_climate}/code_climate_report.rb +3 -3
  25. data/lib/reek/code_comment.rb +25 -20
  26. data/lib/reek/configuration/app_configuration.rb +5 -5
  27. data/lib/reek/configuration/configuration_converter.rb +1 -1
  28. data/lib/reek/configuration/configuration_file_finder.rb +5 -4
  29. data/lib/reek/configuration/default_directive.rb +1 -1
  30. data/lib/reek/configuration/directory_directives.rb +1 -1
  31. data/lib/reek/configuration/excluded_paths.rb +3 -2
  32. data/lib/reek/configuration/schema.rb +177 -0
  33. data/lib/reek/configuration/schema_validator.rb +12 -13
  34. data/lib/reek/context/attribute_context.rb +1 -1
  35. data/lib/reek/context/code_context.rb +1 -1
  36. data/lib/reek/context/method_context.rb +1 -1
  37. data/lib/reek/context/module_context.rb +4 -0
  38. data/lib/reek/context/refinement_context.rb +16 -0
  39. data/lib/reek/context/send_context.rb +7 -1
  40. data/lib/reek/context_builder.rb +17 -3
  41. data/lib/reek/documentation_link.rb +3 -5
  42. data/lib/reek/errors/bad_detector_configuration_key_in_comment_error.rb +2 -2
  43. data/lib/reek/errors/bad_detector_in_comment_error.rb +2 -2
  44. data/lib/reek/errors/encoding_error.rb +1 -1
  45. data/lib/reek/errors/garbage_detector_configuration_in_comment_error.rb +2 -2
  46. data/lib/reek/errors/incomprehensible_source_error.rb +1 -1
  47. data/lib/reek/errors/legacy_comment_separator_error.rb +2 -2
  48. data/lib/reek/errors/syntax_error.rb +1 -1
  49. data/lib/reek/rake/task.rb +5 -5
  50. data/lib/reek/smell_detectors/base_detector.rb +1 -1
  51. data/lib/reek/smell_detectors/class_variable.rb +2 -2
  52. data/lib/reek/smell_detectors/control_parameter_helpers/candidate.rb +6 -6
  53. data/lib/reek/smell_detectors/control_parameter_helpers/control_parameter_finder.rb +1 -1
  54. data/lib/reek/smell_detectors/duplicate_method_call.rb +5 -5
  55. data/lib/reek/smell_detectors/instance_variable_assumption.rb +8 -8
  56. data/lib/reek/smell_detectors/nested_iterators.rb +4 -3
  57. data/lib/reek/smell_detectors/unused_private_method.rb +3 -2
  58. data/lib/reek/smell_warning.rb +1 -1
  59. data/lib/reek/source/source_locator.rb +1 -3
  60. data/lib/reek/spec/should_reek_of.rb +11 -9
  61. data/lib/reek/spec.rb +1 -1
  62. data/lib/reek/version.rb +2 -2
  63. data/reek.gemspec +29 -25
  64. metadata +37 -250
  65. data/.travis.yml +0 -40
  66. data/docs/API.md +0 -174
  67. data/docs/Attribute.md +0 -39
  68. data/docs/Basic-Smell-Options.md +0 -85
  69. data/docs/Boolean-Parameter.md +0 -54
  70. data/docs/Class-Variable.md +0 -40
  71. data/docs/Code-Smells.md +0 -39
  72. data/docs/Command-Line-Options.md +0 -119
  73. data/docs/Control-Couple.md +0 -26
  74. data/docs/Control-Parameter.md +0 -32
  75. data/docs/Data-Clump.md +0 -46
  76. data/docs/Duplicate-Method-Call.md +0 -264
  77. data/docs/Feature-Envy.md +0 -93
  78. data/docs/How-To-Write-New-Detectors.md +0 -132
  79. data/docs/How-reek-works-internally.md +0 -114
  80. data/docs/Instance-Variable-Assumption.md +0 -163
  81. data/docs/Irresponsible-Module.md +0 -47
  82. data/docs/Large-Class.md +0 -16
  83. data/docs/Long-Parameter-List.md +0 -39
  84. data/docs/Long-Yield-List.md +0 -37
  85. data/docs/Manual-Dispatch.md +0 -30
  86. data/docs/Missing-Safe-Method.md +0 -92
  87. data/docs/Module-Initialize.md +0 -62
  88. data/docs/Nested-Iterators.md +0 -59
  89. data/docs/Nil-Check.md +0 -47
  90. data/docs/RSpec-matchers.md +0 -129
  91. data/docs/Rake-Task.md +0 -66
  92. data/docs/Reek-4-to-Reek-5-migration.md +0 -188
  93. data/docs/Reek-Driven-Development.md +0 -46
  94. data/docs/Repeated-Conditional.md +0 -47
  95. data/docs/Simulated-Polymorphism.md +0 -16
  96. data/docs/Smell-Suppression.md +0 -96
  97. data/docs/Style-Guide.md +0 -19
  98. data/docs/Subclassed-From-Core-Class.md +0 -79
  99. data/docs/Too-Many-Constants.md +0 -37
  100. data/docs/Too-Many-Instance-Variables.md +0 -43
  101. data/docs/Too-Many-Methods.md +0 -56
  102. data/docs/Too-Many-Statements.md +0 -54
  103. data/docs/Uncommunicative-Method-Name.md +0 -94
  104. data/docs/Uncommunicative-Module-Name.md +0 -92
  105. data/docs/Uncommunicative-Name.md +0 -18
  106. data/docs/Uncommunicative-Parameter-Name.md +0 -90
  107. data/docs/Uncommunicative-Variable-Name.md +0 -96
  108. data/docs/Unused-Parameters.md +0 -28
  109. data/docs/Unused-Private-Method.md +0 -101
  110. data/docs/Utility-Function.md +0 -56
  111. data/docs/Versioning-Policy.md +0 -7
  112. data/docs/YAML-Reports.md +0 -93
  113. data/docs/defaults.reek.yml +0 -129
  114. data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
  115. data/docs/templates/default/docstring/setup.rb +0 -37
  116. data/docs/templates/default/fulldoc/html/css/common.css +0 -1
  117. data/docs/yard_plugin.rb +0 -17
  118. data/features/command_line_interface/basic_usage.feature +0 -15
  119. data/features/command_line_interface/options.feature +0 -123
  120. data/features/command_line_interface/show_progress.feature +0 -33
  121. data/features/command_line_interface/smell_selection.feature +0 -15
  122. data/features/command_line_interface/smells_count.feature +0 -38
  123. data/features/command_line_interface/stdin.feature +0 -65
  124. data/features/configuration_files/accept_setting.feature +0 -87
  125. data/features/configuration_files/directory_specific_directives.feature +0 -274
  126. data/features/configuration_files/exclude_directives.feature +0 -35
  127. data/features/configuration_files/exclude_paths_directives.feature +0 -42
  128. data/features/configuration_files/masking_smells.feature +0 -94
  129. data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
  130. data/features/configuration_files/reject_setting.feature +0 -89
  131. data/features/configuration_files/schema_validation.feature +0 -59
  132. data/features/configuration_files/show_configuration_file.feature +0 -44
  133. data/features/configuration_files/unused_private_method.feature +0 -68
  134. data/features/configuration_loading.feature +0 -91
  135. data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
  136. data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
  137. data/features/locales.feature +0 -32
  138. data/features/programmatic_access.feature +0 -41
  139. data/features/rake_task/rake_task.feature +0 -138
  140. data/features/reports/codeclimate.feature +0 -59
  141. data/features/reports/json.feature +0 -59
  142. data/features/reports/reports.feature +0 -219
  143. data/features/reports/yaml.feature +0 -52
  144. data/features/rspec_matcher.feature +0 -41
  145. data/features/samples.feature +0 -305
  146. data/features/step_definitions/.rubocop.yml +0 -5
  147. data/features/step_definitions/reek_steps.rb +0 -102
  148. data/features/step_definitions/sample_file_steps.rb +0 -63
  149. data/features/support/env.rb +0 -33
  150. data/features/todo_list.feature +0 -108
  151. data/lib/reek/configuration/schema.yml +0 -210
  152. data/samples/checkstyle.xml +0 -7
  153. data/samples/clean_source/clean.rb +0 -6
  154. data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
  155. data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
  156. data/samples/configuration/corrupt.reek +0 -1
  157. data/samples/configuration/empty.reek +0 -0
  158. data/samples/configuration/full_configuration.reek +0 -13
  159. data/samples/configuration/full_mask.reek +0 -6
  160. data/samples/configuration/home/home.reek.yml +0 -4
  161. data/samples/configuration/partial_mask.reek +0 -4
  162. data/samples/configuration/regular_configuration/.reek.yml +0 -4
  163. data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
  164. data/samples/configuration/with_excluded_paths.reek +0 -5
  165. data/samples/no_config_file/.keep +0 -0
  166. data/samples/paths.rb +0 -5
  167. data/samples/smelly_source/inline.rb +0 -704
  168. data/samples/smelly_source/optparse.rb +0 -1788
  169. data/samples/smelly_source/redcloth.rb +0 -1130
  170. data/samples/smelly_source/ruby.rb +0 -368
  171. data/samples/smelly_source/smelly.rb +0 -7
  172. data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
  173. data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
  174. data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
  175. data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
  176. data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
  177. data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
  178. data/samples/source_with_non_ruby_files/gibberish +0 -1
  179. data/samples/source_with_non_ruby_files/python_source.py +0 -1
  180. data/samples/source_with_non_ruby_files/ruby.rb +0 -6
  181. data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
  182. data/spec/quality/documentation_spec.rb +0 -41
  183. data/spec/quality/reek_source_spec.rb +0 -11
  184. data/spec/reek/ast/node_spec.rb +0 -211
  185. data/spec/reek/ast/object_refs_spec.rb +0 -83
  186. data/spec/reek/ast/reference_collector_spec.rb +0 -47
  187. data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
  188. data/spec/reek/cli/application_spec.rb +0 -168
  189. data/spec/reek/cli/command/report_command_spec.rb +0 -44
  190. data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
  191. data/spec/reek/cli/options_spec.rb +0 -51
  192. data/spec/reek/cli/silencer_spec.rb +0 -28
  193. data/spec/reek/code_comment_spec.rb +0 -184
  194. data/spec/reek/configuration/app_configuration_spec.rb +0 -195
  195. data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
  196. data/spec/reek/configuration/default_directive_spec.rb +0 -13
  197. data/spec/reek/configuration/directory_directives_spec.rb +0 -122
  198. data/spec/reek/configuration/excluded_paths_spec.rb +0 -16
  199. data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
  200. data/spec/reek/configuration/schema_validator_spec.rb +0 -165
  201. data/spec/reek/context/code_context_spec.rb +0 -192
  202. data/spec/reek/context/ghost_context_spec.rb +0 -60
  203. data/spec/reek/context/method_context_spec.rb +0 -72
  204. data/spec/reek/context/module_context_spec.rb +0 -55
  205. data/spec/reek/context/root_context_spec.rb +0 -12
  206. data/spec/reek/context/statement_counter_spec.rb +0 -24
  207. data/spec/reek/context_builder_spec.rb +0 -457
  208. data/spec/reek/detector_repository_spec.rb +0 -22
  209. data/spec/reek/documentation_link_spec.rb +0 -20
  210. data/spec/reek/errors/base_error_spec.rb +0 -13
  211. data/spec/reek/examiner_spec.rb +0 -309
  212. data/spec/reek/logging_error_handler_spec.rb +0 -24
  213. data/spec/reek/rake/task_spec.rb +0 -56
  214. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
  215. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
  216. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
  217. data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
  218. data/spec/reek/report/html_report_spec.rb +0 -19
  219. data/spec/reek/report/json_report_spec.rb +0 -58
  220. data/spec/reek/report/location_formatter_spec.rb +0 -32
  221. data/spec/reek/report/progress_formatter_spec.rb +0 -68
  222. data/spec/reek/report/text_report_spec.rb +0 -89
  223. data/spec/reek/report/xml_report_spec.rb +0 -24
  224. data/spec/reek/report/yaml_report_spec.rb +0 -55
  225. data/spec/reek/report_spec.rb +0 -28
  226. data/spec/reek/smell_configuration_spec.rb +0 -56
  227. data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
  228. data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
  229. data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
  230. data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
  231. data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
  232. data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
  233. data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
  234. data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
  235. data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
  236. data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
  237. data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
  238. data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
  239. data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
  240. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
  241. data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
  242. data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
  243. data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
  244. data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
  245. data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
  246. data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
  247. data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
  248. data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
  249. data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
  250. data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
  251. data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
  252. data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
  253. data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
  254. data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
  255. data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
  256. data/spec/reek/smell_detectors/utility_function_spec.rb +0 -293
  257. data/spec/reek/smell_warning_spec.rb +0 -137
  258. data/spec/reek/source/source_code_spec.rb +0 -79
  259. data/spec/reek/source/source_locator_spec.rb +0 -166
  260. data/spec/reek/spec/should_reek_of_spec.rb +0 -153
  261. data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
  262. data/spec/reek/spec/should_reek_spec.rb +0 -52
  263. data/spec/reek/spec/smell_matcher_spec.rb +0 -87
  264. data/spec/reek/tree_dresser_spec.rb +0 -46
  265. data/spec/spec_helper.rb +0 -110
  266. data/tasks/configuration.rake +0 -18
  267. data/tasks/console.rake +0 -5
  268. data/tasks/reek.rake +0 -6
  269. data/tasks/rubocop.rake +0 -11
  270. data/tasks/test.rake +0 -32
  271. /data/lib/reek/{report/code_climate.rb → code_climate.rb} +0 -0
@@ -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