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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83760bf0344db6b8f65cd5bbb6e57f90ee4e1b54c10edb3920821a517e6649cd
4
- data.tar.gz: 258214d9022fda0ecbe287c4313719472c30f056c1ff6ffd4f7ff023b255b199
3
+ metadata.gz: 6c025e0e50af37b8dc3c118f97752c18155f59d48c08332961527d24b2e8f50c
4
+ data.tar.gz: e681b629a371e90fcfeb0f8f62669e3d26ba7a4c8ba34322cda546424be9c71a
5
5
  SHA512:
6
- metadata.gz: 56c12a16cc200dd475d84a543fd9edf2ce888f550a5d4d22cbe813c3439ed0915263340d7c02654417666bcd728ee5e9ba976670cae46098293b58595589f36c
7
- data.tar.gz: 0f012f16ec237bdece4f797ea2977c0db5fa083df32ac86ce57b14911777eec0d832aff8e861df67c5cc80b847b0c3caf801a157b759724cc9f858ae4236ace9
6
+ metadata.gz: 304af91b9ff40fc9385991e130ae3cd28b928d4ac8bd896693edbd802c0b414a261c9ecf4bf3a5290590516ae97596a7fe39ed0cc0a388916f443201ff99c604
7
+ data.tar.gz: 4e7267ff76b9c9d99f996245245b9157bbae85927bf22f146883715254c7bc013821e9b7786500daf410344b1ef0a81fb61165979e5d2a74059bd06deeb656d4
@@ -0,0 +1,13 @@
1
+ # Documentation for all configuration options:
2
+ # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
3
+
4
+ version: 2
5
+ updates:
6
+ - package-ecosystem: "bundler"
7
+ directory: "/"
8
+ schedule:
9
+ interval: "daily"
10
+ - package-ecosystem: "github-actions"
11
+ directory: "/"
12
+ schedule:
13
+ interval: "monthly"
@@ -0,0 +1,57 @@
1
+ # This workflow will download a prebuilt Ruby version, install dependencies and
2
+ # run tests with Rake
3
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
4
+
5
+ name: CI
6
+
7
+ "on":
8
+ push:
9
+ branches: [master]
10
+ pull_request:
11
+ branches: [master]
12
+ schedule:
13
+ - cron: '16 4 12 * *'
14
+
15
+ env:
16
+ CUCUMBER_PUBLISH_QUIET: true
17
+ RUBYOPTS: "--disable-did-you-mean"
18
+ jobs:
19
+ test:
20
+
21
+ runs-on: ubuntu-latest
22
+
23
+ strategy:
24
+ matrix:
25
+ ruby: ["3.0", "3.1", "3.2", "jruby-9.4", "3.3"]
26
+
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - name: Set up Ruby
30
+ uses: ruby/setup-ruby@v1
31
+ with:
32
+ ruby-version: ${{ matrix.ruby }}
33
+ bundler-cache: true
34
+ - name: Run specs
35
+ run: bundle exec rake test:spec
36
+ - name: Run performance tests
37
+ run: bundle exec rake test:performance
38
+ - name: Update default configuration
39
+ run: bundle exec rake configuration:update_default_configuration
40
+ - name: Run cucumber features
41
+ run: bundle exec rake test:features
42
+ - name: Run code quality specs
43
+ run: bundle exec rake test:quality
44
+
45
+ rubocop:
46
+
47
+ runs-on: ubuntu-latest
48
+
49
+ steps:
50
+ - uses: actions/checkout@v4
51
+ - name: Set up Ruby
52
+ uses: ruby/setup-ruby@v1
53
+ with:
54
+ ruby-version: "3.3"
55
+ bundler-cache: true
56
+ - name: Run RuboCop
57
+ run: bundle exec rubocop -P
data/.rubocop.yml CHANGED
@@ -1,5 +1,9 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
+ inherit_mode:
4
+ merge:
5
+ - Exclude
6
+
3
7
  require:
4
8
  - rubocop-rspec
5
9
  - rubocop-performance
@@ -7,10 +11,8 @@ require:
7
11
  AllCops:
8
12
  Exclude:
9
13
  - 'samples/**/*'
10
- - 'tmp/**/*'
11
- - 'vendor/**/*'
12
14
  NewCops: enable
13
- TargetRubyVersion: 2.4
15
+ TargetRubyVersion: 3.0
14
16
 
15
17
  # Tables are nice
16
18
  Layout/HashAlignment:
@@ -46,7 +48,7 @@ Layout/MultilineOperationIndentation:
46
48
  Lint/AmbiguousBlockAssociation:
47
49
  Enabled: false
48
50
 
49
- # Some of our source examples include interpolation explicitely.
51
+ # Some of our source examples include interpolation explicitly.
50
52
  Lint/InterpolationCheck:
51
53
  Exclude:
52
54
  - 'spec/**/*'
@@ -78,14 +80,6 @@ RSpec/DescribeClass:
78
80
  RSpec/ExampleLength:
79
81
  Enabled: false
80
82
 
81
- # rubocop-rspec expects a CodeClimate namespace to go with the code_climate directory.
82
- RSpec/FilePath:
83
- Exclude:
84
- - 'spec/reek/report/code_climate/code_climate_configuration_spec.rb'
85
- - 'spec/reek/report/code_climate/code_climate_fingerprint_spec.rb'
86
- - 'spec/reek/report/code_climate/code_climate_formatter_spec.rb'
87
- - 'spec/reek/report/code_climate/code_climate_report_spec.rb'
88
-
89
83
  # Allow and/or for control flow only
90
84
  Style/AndOr:
91
85
  EnforcedStyle: conditionals
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2020-08-19 19:02:50 UTC using RuboCop version 0.89.1.
3
+ # on 2021-01-03 18:17:11 UTC using RuboCop version 1.7.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -13,22 +13,24 @@ Lint/MissingSuper:
13
13
  - 'lib/reek/smell_detectors/base_detector.rb'
14
14
 
15
15
  # Offense count: 2
16
+ # Configuration parameters: IgnoredPatterns.
17
+ # IgnoredPatterns: (?-mix:(exactly|at_least|at_most)\(\d+\)\.times)
16
18
  Lint/UnreachableLoop:
17
19
  Exclude:
18
20
  - 'spec/reek/ast/node_spec.rb'
19
21
 
20
22
  # Offense count: 2
21
- # Configuration parameters: IgnoredMethods.
23
+ # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
22
24
  Metrics/AbcSize:
23
25
  Max: 21
24
26
 
25
27
  # Offense count: 1
26
28
  # Configuration parameters: CountComments, CountAsOne.
27
29
  Metrics/ClassLength:
28
- Max: 161
30
+ Max: 170
29
31
 
30
32
  # Offense count: 13
31
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods.
33
+ # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
32
34
  Metrics/MethodLength:
33
35
  Max: 16
34
36
 
data/CHANGELOG.md CHANGED
@@ -1,5 +1,100 @@
1
1
  # Change log
2
2
 
3
+ ## 6.2.0 (2023-12-31)
4
+
5
+ ### Features and bugfixes
6
+
7
+ * Code Climate: add config `target_ruby_version` to support different versions
8
+ of Ruby syntax ([#1694] by [dantevvp])
9
+ * Treat `Data.define` as a class definition ([#1725] by [mvz])
10
+ * Fix Instance Variable Assumption false positive ([#1737] by [JuanVqz])
11
+ * Add `Tempfile.create` to ignored iterators list ([#1747] by [mateusdeap])
12
+ * Improve configuration schema validation. This also replaces the kwalify
13
+ dependency with dry-schema ([#1749] by [fbuys])
14
+
15
+ ### Dependencies
16
+
17
+ * Add missing dependency rexml ([#1703] by [tricknotes])
18
+ * Drop support for Ruby 2.6 and 2.7 ([#1716] and [#1755] by [mvz])
19
+ * Add support for Ruby 3.3 ([#1756] and [#1755] by [mvz])
20
+
21
+ ### Documentation
22
+
23
+ * Fix the badges in our README ([#1711] by [troessner])
24
+ * Remove non working link in CONTRIBUTING.md ([#1738] by [JuanVqz])
25
+ * Add downloads badge ([#1750] by [troessner])
26
+
27
+ ### Internal
28
+
29
+ * Rename Code Climate related classes ([#1735] by [mvz])
30
+ * Fix `cucumber_opts` warning ([#1736] by [JuanVqz])
31
+ * Fix editor highlighting for fenced code blocks in documentation ([#1745] by [JuanVqz])
32
+
33
+ [JuanVqz]: https://github.com/JuanVqz
34
+ [dantevvp]: https://github.com/dantevvp
35
+ [fbuys]: https://github.com/fbuys
36
+ [mateusdeap]: https://github.com/mateusdeap
37
+ [mvz]: https://github.com/mvz
38
+ [tricknotes]: https://github.com/tricknotes
39
+ [troessner]: https://github.com/troessner
40
+
41
+ [#1694]: https://github.com/troessner/reek/pull/1694
42
+ [#1703]: https://github.com/troessner/reek/pull/1703
43
+ [#1711]: https://github.com/troessner/reek/pull/1711
44
+ [#1725]: https://github.com/troessner/reek/pull/1725
45
+ [#1735]: https://github.com/troessner/reek/pull/1735
46
+ [#1736]: https://github.com/troessner/reek/pull/1736
47
+ [#1737]: https://github.com/troessner/reek/pull/1737
48
+ [#1738]: https://github.com/troessner/reek/pull/1738
49
+ [#1745]: https://github.com/troessner/reek/pull/1745
50
+ [#1749]: https://github.com/troessner/reek/pull/1749
51
+ [#1747]: https://github.com/troessner/reek/pull/1747
52
+ [#1750]: https://github.com/troessner/reek/pull/1750
53
+ [#1756]: https://github.com/troessner/reek/pull/1756
54
+ [#1755]: https://github.com/troessner/reek/pull/1755
55
+
56
+ ## 6.1.4 (2023-01-13)
57
+
58
+ * (mvz) Update parser dependency to the 3.2.x series
59
+
60
+ ## 6.1.3 (2022-12-29)
61
+
62
+ * (gonubana) Allow failing safely when trying to recursively find a configuration
63
+
64
+ ## 6.1.2 (2022-11-21)
65
+
66
+ * (mvz) Add support for keyword nil arguments
67
+
68
+ ## 6.1.1 (2022-04-20)
69
+
70
+ * (ydah) UnusedPrivateMethod to be detect use of methods via `Method#to_proc`
71
+
72
+ ## 6.1.0 (2022-01-14)
73
+
74
+ * (mvz) Drop support for Ruby 2.4 and 2.5
75
+ * (mvz) Support Ruby 3.0 and 3.1
76
+ * (mvz) Support argument forwarding after regular arguments
77
+
78
+ ## 6.0.6 (2021-08-12)
79
+
80
+ * (mvz) Remove explicit dependency on psych. This fixes an issue where
81
+ installing Reek would unintentionally pull in psych 4.0
82
+
83
+ ## 6.0.5 (2021-08-01)
84
+
85
+ * (dependabot) Loosen dependency on psych
86
+ * (Nicolás Ferrari) Fix bugs when used by codeclimate
87
+
88
+ ## 6.0.4 (2021-04-27)
89
+
90
+ * (Nicolás Ferrari) Add build-base to Dockerfile
91
+ * (Masataka Pocke Kuwabara and Daniel Santos Dantas) Reduce gem package size
92
+
93
+ ## 6.0.3 (2021-01-11)
94
+
95
+ * (mvz) Require parser 3.0
96
+ * (mvz) In a refinement, assign smells to the refined module or class
97
+
3
98
  ## 6.0.2 (2020-10-17)
4
99
 
5
100
  * (mvz) Loosen dependency on psych. This should resolve installation problems on
data/CONTRIBUTING.md CHANGED
@@ -27,6 +27,9 @@ version, Ruby platform (MRI, JRuby, etc.), operating system.
27
27
  Try to provide a minimal example that reproduces the issue.
28
28
  Extra kudos if you can write it as a failing test. :)
29
29
 
30
+ Make sure any code examples and output are properly formatted
31
+ using [code blocks](https://github.github.com/gfm/#fenced-code-blocks).
32
+
30
33
  ## Contributing features, bugfixes, documentation
31
34
 
32
35
  ### Getting started
@@ -59,11 +62,8 @@ demonstrate that your fix was needed.
59
62
 
60
63
  Reek uses [Rspec](http://rspec.info/) for unit and functional testing.
61
64
 
62
- We're trying to follow [betterspecs](http://betterspecs.org/). We're not using
63
- RSpec's
64
- [shared examples](https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples)
65
- because we find them rather harming than helpful. You can find an excellent
66
- cheat sheet on how to write idiomatic Rspec
65
+ We're trying to follow [betterspecs](http://betterspecs.org/).
66
+ You can find an excellent cheat sheet on how to write idiomatic Rspec
67
67
  [here](http://www.rubypigeon.com/posts/rspec-core-cheat-sheet).
68
68
 
69
69
  We do not use the popular "foo" / "bar" naming when it comes to the question
@@ -71,7 +71,7 @@ We do not use the popular "foo" / "bar" naming when it comes to the question
71
71
  [military alphabet](https://en.wikipedia.org/wiki/NATO_phonetic_alphabet) in
72
72
  ascending order which means that we would write this
73
73
 
74
- ```Ruby
74
+ ```ruby
75
75
  class Foo
76
76
  def bar(baz)
77
77
  baz.quux
@@ -81,7 +81,7 @@ end
81
81
 
82
82
  rather like this:
83
83
 
84
- ```Ruby
84
+ ```ruby
85
85
  class Alfa
86
86
  def bravo(charlie)
87
87
  charlie.delta
@@ -139,7 +139,7 @@ Once you’re happy with your feature / fix – or want to
139
139
  share it as a work-in-progress and request comments – once
140
140
  again make sure all of the tests pass. This will also run
141
141
  [RuboCop](https://github.com/bbatsov/rubocop) – fix any
142
- offences RuboCop finds (or discuss them in the pull request):
142
+ offenses RuboCop finds (or discuss them in the pull request):
143
143
 
144
144
  ```
145
145
  bundle exec rake
@@ -199,11 +199,11 @@ In this example we assume the current version is 5.3.1 and you want to update to
199
199
  * Update the version in `lib/reek/version.rb`
200
200
  * List all relevant changes in `CHANGELOG.md`
201
201
  * Update the version number in our cucumber features, otherwise the build will fail. You can do this quite easily via
202
- ```Bash
202
+ ```bash
203
203
  find features/ -type f -exec sed -i '' 's/v5.3.1/v5.3.2/g' {} +
204
204
  ```
205
205
  * Push the branch, create a pull request, have it reviewed and merged
206
206
  * Pull the latest master and then do a
207
- ```Bash
207
+ ```bash
208
208
  bundle exec rake release
209
209
  ```
data/Dockerfile CHANGED
@@ -11,7 +11,7 @@ ENV code_dir /code
11
11
  ENV app_dir /usr/src/app
12
12
  ENV user app
13
13
 
14
- RUN apk --update add git
14
+ RUN apk --update add git build-base
15
15
  ADD . ${app_dir}
16
16
 
17
17
  RUN adduser -u 9000 -D ${user}
data/Gemfile CHANGED
@@ -5,18 +5,19 @@ gemspec
5
5
  ruby RUBY_VERSION
6
6
 
7
7
  group :development do
8
- gem 'aruba', '~> 1.0'
8
+ gem 'aruba', '~> 2.1'
9
+ gem 'bigdecimal', '>= 2.0.0', '< 4.0'
9
10
  gem 'codeclimate-engine-rb', '~> 0.4.0'
10
- gem 'cucumber', ['>= 4.0', '< 6.0']
11
+ gem 'cucumber', '~> 9.0'
11
12
  gem 'kramdown', '~> 2.1'
12
13
  gem 'kramdown-parser-gfm', '~> 1.0'
13
14
  gem 'rake', '~> 13.0'
14
15
  gem 'rspec', '~> 3.0'
15
16
  gem 'rspec-benchmark', '~> 0.6.0'
16
- gem 'rubocop', '~> 0.93.0'
17
- gem 'rubocop-performance', '~> 1.8.0'
18
- gem 'rubocop-rspec', '~> 1.43.1'
19
- gem 'simplecov', ['>= 0.18.0', '< 0.20.0']
17
+ gem 'rubocop', '~> 1.59.0'
18
+ gem 'rubocop-performance', '~> 1.20.0'
19
+ gem 'rubocop-rspec', '~> 2.25.0'
20
+ gem 'simplecov', '>= 0.18.0', '< 0.23.0'
20
21
  gem 'yard', '~> 0.9.5'
21
22
 
22
23
  platforms :mri do
@@ -25,5 +26,5 @@ group :development do
25
26
  end
26
27
 
27
28
  group :debugging do
28
- gem 'pry', '~> 0.13.0'
29
+ gem 'pry', '~> 0.14.0'
29
30
  end
data/README.md CHANGED
@@ -35,15 +35,15 @@
35
35
 
36
36
  ## Overview
37
37
 
38
- * [![Build Status](https://secure.travis-ci.org/troessner/reek.svg?branch=master)](https://travis-ci.org/troessner/reek?branch=master)
38
+ * ![Downloads](https://img.shields.io/badge/Downloads-%3E24_million-blue)
39
+ * ![Build Status](https://github.com/troessner/reek/actions/workflows/ruby.yml/badge.svg?branch=master)
39
40
  * [![Gem Version](https://badge.fury.io/rb/reek.svg)](https://badge.fury.io/rb/reek)
40
- * ![](http://img.shields.io/github/tag/troessner/reek.svg)
41
- * ![](http://img.shields.io/badge/license-MIT-brightgreen.svg)
41
+ * ![Git Tag](http://img.shields.io/github/tag/troessner/reek.svg)
42
+ * ![Licence](http://img.shields.io/badge/license-MIT-brightgreen.svg)
42
43
  * [![Inline docs](https://inch-ci.org/github/troessner/reek.png)](https://inch-ci.org/github/troessner/reek)
43
44
  * [![Code Climate](https://codeclimate.com/github/troessner/reek/badges/gpa.svg)](https://codeclimate.com/github/troessner/reek)
44
45
  * [![codebeat](https://codebeat.co/badges/42fed4ff-3e55-4aed-8ecc-409b4aa539b3)](https://codebeat.co/projects/github-com-troessner-reek)
45
- * ![](http://ruby-gem-downloads-badge.herokuapp.com/reek?type=total)
46
- * ![](http://ruby-gem-downloads-badge.herokuapp.com/reek?label=downloads-current-version)
46
+
47
47
 
48
48
  ## Quickstart
49
49
 
@@ -56,13 +56,13 @@ or [that one](https://troessner.svbtle.com/the-latest-and-greatest-additions-to-
56
56
 
57
57
  Install it via rubygems:
58
58
 
59
- ```Bash
59
+ ```bash
60
60
  gem install reek
61
61
  ```
62
62
 
63
63
  and run it like this:
64
64
 
65
- ```Bash
65
+ ```bash
66
66
  reek [options] [dir_or_source_file]*
67
67
  ```
68
68
 
@@ -70,7 +70,7 @@ reek [options] [dir_or_source_file]*
70
70
 
71
71
  Imagine a source file `demo.rb` containing:
72
72
 
73
- ```Ruby
73
+ ```ruby
74
74
  # Smelly class
75
75
  class Smelly
76
76
  # This will reek of UncommunicativeMethodName
@@ -94,7 +94,7 @@ demo.rb -- 2 warnings:
94
94
 
95
95
  ## Supported Ruby versions
96
96
 
97
- Reek is officially supported for CRuby 2.4 to 2.7 and for JRuby 9.2.
97
+ Reek is officially supported for CRuby 2.6 through 3.1 and for JRuby 9.3.
98
98
  Other Ruby implementations (like Rubinius) are not officially supported but
99
99
  should work as well.
100
100
 
@@ -111,7 +111,7 @@ language and business logic.
111
111
  That said, an example might help you get going. Have a look at this sample of a
112
112
  Ruby on Rails model (be aware that this is truncated, not working code):
113
113
 
114
- ```Ruby
114
+ ```ruby
115
115
  class ShoppingCart < ActiveRecord::Base
116
116
  has_many :items
117
117
 
@@ -140,7 +140,7 @@ would report:
140
140
  Fixing this is pretty straightforward. Put the gross price calculation for a single item
141
141
  where it belongs, which would be the `Item` class:
142
142
 
143
- ```Ruby
143
+ ```ruby
144
144
  class ShoppingCart < ActiveRecord::Base
145
145
  has_many :items
146
146
 
@@ -165,7 +165,7 @@ those first when you have a warning that you don't know how to deal with.
165
165
 
166
166
  There are multiple ways you can have Reek work on sources, the most common one just being
167
167
 
168
- ```Bash
168
+ ```bash
169
169
  reek lib/
170
170
  ```
171
171
 
@@ -173,25 +173,25 @@ If you don't pass any source arguments to Reek it just takes the current working
173
173
 
174
174
  So
175
175
 
176
- ```Bash
176
+ ```bash
177
177
  reek
178
178
  ```
179
179
 
180
180
  is the exact same thing as being explicit:
181
181
 
182
- ```Bash
182
+ ```bash
183
183
  reek .
184
184
  ```
185
185
 
186
186
  Additionally you can pipe code to Reek like this:
187
187
 
188
- ```Bash
188
+ ```bash
189
189
  echo "class C; def m; end; end" | reek
190
190
  ```
191
191
 
192
192
  This would print out:
193
193
 
194
- ```Bash
194
+ ```bash
195
195
  $stdin -- 3 warnings:
196
196
  [1]:C has no descriptive comment (IrresponsibleModule)
197
197
  [1]:C has the name 'C' (UncommunicativeModuleName)
@@ -219,7 +219,7 @@ for up to date details of exactly what Reek will check in your code.
219
219
  because it is [kind of controversial](https://github.com/troessner/reek/issues/844) which means
220
220
  you have to explicitly activate it in your configuration via
221
221
 
222
- ```Yaml
222
+ ```yaml
223
223
  UnusedPrivateMethod:
224
224
  enabled: true
225
225
  ```
@@ -228,7 +228,7 @@ UnusedPrivateMethod:
228
228
  as well that can turn out to be really unforgiving.
229
229
  As a consequence, we made it possible to disable it for non-public methods like this:
230
230
 
231
- ```Yaml
231
+ ```yaml
232
232
  ---
233
233
  UtilityFunction:
234
234
  public_methods_only: true
@@ -240,7 +240,7 @@ UtilityFunction:
240
240
 
241
241
  For a basic overview, run
242
242
 
243
- ```Ruby
243
+ ```ruby
244
244
  reek --help
245
245
  ```
246
246
 
@@ -328,7 +328,7 @@ directories:
328
328
  exclude_paths:
329
329
  - lib/legacy
330
330
  - lib/rake/legacy_tasks
331
- - lib/smelly.rb
331
+ - lib/smelly.rb
332
332
  ```
333
333
 
334
334
  As you see above, Reek's configuration consists of 3 different sections denoted by 3 different keys:
@@ -395,7 +395,7 @@ In case you need to suppress a smell warning and you can't or don't want to
395
395
  use configuration files for whatever reasons you can also use special
396
396
  source code comments like this:
397
397
 
398
- ```Ruby
398
+ ```ruby
399
399
  # This method smells of :reek:NestedIterators
400
400
  def smelly_method foo
401
401
  foo.each {|bar| bar.each {|baz| baz.qux}}
@@ -404,14 +404,14 @@ end
404
404
 
405
405
  You can even pass in smell specific configuration settings:
406
406
 
407
- ```Ruby
407
+ ```ruby
408
408
  # :reek:NestedIterators { max_allowed_nesting: 2 }
409
409
  def smelly_method foo
410
410
  foo.each {|bar| bar.each {|baz| baz.qux}}
411
411
  end
412
412
  ```
413
413
 
414
- This is an incredibly powerful feature and further explained under [Smell Suppresion](docs/Smell-Suppression.md).
414
+ This is an incredibly powerful feature and further explained under [Smell Suppression](docs/Smell-Suppression.md).
415
415
 
416
416
  #### Debugging trouble with the configuration
417
417
 
@@ -432,7 +432,7 @@ codebase this might not be an option.
432
432
  Fortunately Reek provides a 'todo' flag which you can use to generate a configuration that will
433
433
  suppress all smell warnings for the current codebase:
434
434
 
435
- ```Bash
435
+ ```bash
436
436
  reek --todo lib/
437
437
  ```
438
438
 
@@ -447,7 +447,7 @@ If for whatever reasons you decide to put '.reek.yml' somewhere else where
447
447
  Reek won't pick it up automatically you need to tell Reek explicitly to do so
448
448
  via:
449
449
 
450
- ```Bash
450
+ ```bash
451
451
  reek -c whatever/.reek.yml lib/
452
452
  ```
453
453
 
@@ -461,7 +461,7 @@ and instead abort execution. It also will not take **any** other configuration f
461
461
 
462
462
  This means that when you run
463
463
 
464
- ```Bash
464
+ ```bash
465
465
  reek -c other_configuration.reek --todo lib/
466
466
  ```
467
467
 
@@ -474,7 +474,7 @@ but keep in mind that this is not the intended use case of this feature.
474
474
 
475
475
  Besides the obvious
476
476
 
477
- ```Bash
477
+ ```bash
478
478
  reek [options] [dir_or_source_file]*
479
479
  ```
480
480
 
@@ -523,7 +523,7 @@ bundle exec rake console
523
523
  You can also use Pry while running the tests by adding the following at the
524
524
  point where you want to start debugging:
525
525
 
526
- ```Ruby
526
+ ```ruby
527
527
  require 'pry'
528
528
  binding.pry
529
529
  ```
@@ -569,7 +569,7 @@ Reek supports 5 output formats:
569
569
  Making Reek "Rails"-friendly is fairly simple since we support directory specific configurations (`directory directives` in Reek talk).
570
570
  Just add this to your configuration file:
571
571
 
572
- ```Yaml
572
+ ```yaml
573
573
  directories:
574
574
  "app/controllers":
575
575
  IrresponsibleModule: