reek 6.0.2 → 6.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (228) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +9 -0
  3. data/.github/workflows/ruby.yml +52 -0
  4. data/.rubocop_todo.yml +6 -4
  5. data/CHANGELOG.md +20 -0
  6. data/CONTRIBUTING.md +3 -0
  7. data/Dockerfile +1 -1
  8. data/Gemfile +6 -6
  9. data/bin/code_climate_reek +2 -3
  10. data/lib/reek/ast/ast_node_class_map.rb +1 -1
  11. data/lib/reek/ast/node.rb +1 -1
  12. data/lib/reek/code_comment.rb +22 -17
  13. data/lib/reek/configuration/excluded_paths.rb +2 -1
  14. data/lib/reek/context/code_context.rb +1 -1
  15. data/lib/reek/context/refinement_context.rb +16 -0
  16. data/lib/reek/context_builder.rb +16 -2
  17. data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -3
  18. data/lib/reek/smell_detectors/base_detector.rb +1 -1
  19. data/lib/reek/smell_warning.rb +1 -1
  20. data/lib/reek/source/source_locator.rb +1 -3
  21. data/lib/reek/version.rb +2 -2
  22. data/reek.gemspec +5 -3
  23. metadata +11 -239
  24. data/.travis.yml +0 -40
  25. data/docs/API.md +0 -174
  26. data/docs/Attribute.md +0 -39
  27. data/docs/Basic-Smell-Options.md +0 -85
  28. data/docs/Boolean-Parameter.md +0 -54
  29. data/docs/Class-Variable.md +0 -40
  30. data/docs/Code-Smells.md +0 -39
  31. data/docs/Command-Line-Options.md +0 -119
  32. data/docs/Control-Couple.md +0 -26
  33. data/docs/Control-Parameter.md +0 -32
  34. data/docs/Data-Clump.md +0 -46
  35. data/docs/Duplicate-Method-Call.md +0 -264
  36. data/docs/Feature-Envy.md +0 -93
  37. data/docs/How-To-Write-New-Detectors.md +0 -132
  38. data/docs/How-reek-works-internally.md +0 -114
  39. data/docs/Instance-Variable-Assumption.md +0 -163
  40. data/docs/Irresponsible-Module.md +0 -47
  41. data/docs/Large-Class.md +0 -16
  42. data/docs/Long-Parameter-List.md +0 -39
  43. data/docs/Long-Yield-List.md +0 -37
  44. data/docs/Manual-Dispatch.md +0 -30
  45. data/docs/Missing-Safe-Method.md +0 -92
  46. data/docs/Module-Initialize.md +0 -62
  47. data/docs/Nested-Iterators.md +0 -59
  48. data/docs/Nil-Check.md +0 -47
  49. data/docs/RSpec-matchers.md +0 -129
  50. data/docs/Rake-Task.md +0 -66
  51. data/docs/Reek-4-to-Reek-5-migration.md +0 -188
  52. data/docs/Reek-Driven-Development.md +0 -46
  53. data/docs/Repeated-Conditional.md +0 -47
  54. data/docs/Simulated-Polymorphism.md +0 -16
  55. data/docs/Smell-Suppression.md +0 -96
  56. data/docs/Style-Guide.md +0 -19
  57. data/docs/Subclassed-From-Core-Class.md +0 -79
  58. data/docs/Too-Many-Constants.md +0 -37
  59. data/docs/Too-Many-Instance-Variables.md +0 -43
  60. data/docs/Too-Many-Methods.md +0 -56
  61. data/docs/Too-Many-Statements.md +0 -54
  62. data/docs/Uncommunicative-Method-Name.md +0 -94
  63. data/docs/Uncommunicative-Module-Name.md +0 -92
  64. data/docs/Uncommunicative-Name.md +0 -18
  65. data/docs/Uncommunicative-Parameter-Name.md +0 -90
  66. data/docs/Uncommunicative-Variable-Name.md +0 -96
  67. data/docs/Unused-Parameters.md +0 -28
  68. data/docs/Unused-Private-Method.md +0 -101
  69. data/docs/Utility-Function.md +0 -56
  70. data/docs/Versioning-Policy.md +0 -7
  71. data/docs/YAML-Reports.md +0 -93
  72. data/docs/defaults.reek.yml +0 -129
  73. data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
  74. data/docs/templates/default/docstring/setup.rb +0 -37
  75. data/docs/templates/default/fulldoc/html/css/common.css +0 -1
  76. data/docs/yard_plugin.rb +0 -17
  77. data/features/command_line_interface/basic_usage.feature +0 -15
  78. data/features/command_line_interface/options.feature +0 -123
  79. data/features/command_line_interface/show_progress.feature +0 -33
  80. data/features/command_line_interface/smell_selection.feature +0 -15
  81. data/features/command_line_interface/smells_count.feature +0 -38
  82. data/features/command_line_interface/stdin.feature +0 -65
  83. data/features/configuration_files/accept_setting.feature +0 -87
  84. data/features/configuration_files/directory_specific_directives.feature +0 -274
  85. data/features/configuration_files/exclude_directives.feature +0 -35
  86. data/features/configuration_files/exclude_paths_directives.feature +0 -42
  87. data/features/configuration_files/masking_smells.feature +0 -94
  88. data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
  89. data/features/configuration_files/reject_setting.feature +0 -89
  90. data/features/configuration_files/schema_validation.feature +0 -59
  91. data/features/configuration_files/show_configuration_file.feature +0 -44
  92. data/features/configuration_files/unused_private_method.feature +0 -68
  93. data/features/configuration_loading.feature +0 -91
  94. data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
  95. data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
  96. data/features/locales.feature +0 -32
  97. data/features/programmatic_access.feature +0 -41
  98. data/features/rake_task/rake_task.feature +0 -138
  99. data/features/reports/codeclimate.feature +0 -59
  100. data/features/reports/json.feature +0 -59
  101. data/features/reports/reports.feature +0 -219
  102. data/features/reports/yaml.feature +0 -52
  103. data/features/rspec_matcher.feature +0 -41
  104. data/features/samples.feature +0 -305
  105. data/features/step_definitions/.rubocop.yml +0 -5
  106. data/features/step_definitions/reek_steps.rb +0 -102
  107. data/features/step_definitions/sample_file_steps.rb +0 -63
  108. data/features/support/env.rb +0 -33
  109. data/features/todo_list.feature +0 -108
  110. data/samples/checkstyle.xml +0 -7
  111. data/samples/clean_source/clean.rb +0 -6
  112. data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
  113. data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
  114. data/samples/configuration/corrupt.reek +0 -1
  115. data/samples/configuration/empty.reek +0 -0
  116. data/samples/configuration/full_configuration.reek +0 -13
  117. data/samples/configuration/full_mask.reek +0 -6
  118. data/samples/configuration/home/home.reek.yml +0 -4
  119. data/samples/configuration/partial_mask.reek +0 -4
  120. data/samples/configuration/regular_configuration/.reek.yml +0 -4
  121. data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
  122. data/samples/configuration/with_excluded_paths.reek +0 -5
  123. data/samples/no_config_file/.keep +0 -0
  124. data/samples/paths.rb +0 -5
  125. data/samples/smelly_source/inline.rb +0 -704
  126. data/samples/smelly_source/optparse.rb +0 -1788
  127. data/samples/smelly_source/redcloth.rb +0 -1130
  128. data/samples/smelly_source/ruby.rb +0 -368
  129. data/samples/smelly_source/smelly.rb +0 -7
  130. data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
  131. data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
  132. data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
  133. data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
  134. data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
  135. data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
  136. data/samples/source_with_non_ruby_files/gibberish +0 -1
  137. data/samples/source_with_non_ruby_files/python_source.py +0 -1
  138. data/samples/source_with_non_ruby_files/ruby.rb +0 -6
  139. data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
  140. data/spec/quality/documentation_spec.rb +0 -41
  141. data/spec/quality/reek_source_spec.rb +0 -11
  142. data/spec/reek/ast/node_spec.rb +0 -211
  143. data/spec/reek/ast/object_refs_spec.rb +0 -83
  144. data/spec/reek/ast/reference_collector_spec.rb +0 -47
  145. data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
  146. data/spec/reek/cli/application_spec.rb +0 -168
  147. data/spec/reek/cli/command/report_command_spec.rb +0 -44
  148. data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
  149. data/spec/reek/cli/options_spec.rb +0 -51
  150. data/spec/reek/cli/silencer_spec.rb +0 -28
  151. data/spec/reek/code_comment_spec.rb +0 -184
  152. data/spec/reek/configuration/app_configuration_spec.rb +0 -195
  153. data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
  154. data/spec/reek/configuration/default_directive_spec.rb +0 -13
  155. data/spec/reek/configuration/directory_directives_spec.rb +0 -122
  156. data/spec/reek/configuration/excluded_paths_spec.rb +0 -16
  157. data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
  158. data/spec/reek/configuration/schema_validator_spec.rb +0 -165
  159. data/spec/reek/context/code_context_spec.rb +0 -192
  160. data/spec/reek/context/ghost_context_spec.rb +0 -60
  161. data/spec/reek/context/method_context_spec.rb +0 -72
  162. data/spec/reek/context/module_context_spec.rb +0 -55
  163. data/spec/reek/context/root_context_spec.rb +0 -12
  164. data/spec/reek/context/statement_counter_spec.rb +0 -24
  165. data/spec/reek/context_builder_spec.rb +0 -457
  166. data/spec/reek/detector_repository_spec.rb +0 -22
  167. data/spec/reek/documentation_link_spec.rb +0 -20
  168. data/spec/reek/errors/base_error_spec.rb +0 -13
  169. data/spec/reek/examiner_spec.rb +0 -309
  170. data/spec/reek/logging_error_handler_spec.rb +0 -24
  171. data/spec/reek/rake/task_spec.rb +0 -56
  172. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
  173. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
  174. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
  175. data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
  176. data/spec/reek/report/html_report_spec.rb +0 -19
  177. data/spec/reek/report/json_report_spec.rb +0 -58
  178. data/spec/reek/report/location_formatter_spec.rb +0 -32
  179. data/spec/reek/report/progress_formatter_spec.rb +0 -68
  180. data/spec/reek/report/text_report_spec.rb +0 -89
  181. data/spec/reek/report/xml_report_spec.rb +0 -24
  182. data/spec/reek/report/yaml_report_spec.rb +0 -55
  183. data/spec/reek/report_spec.rb +0 -28
  184. data/spec/reek/smell_configuration_spec.rb +0 -56
  185. data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
  186. data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
  187. data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
  188. data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
  189. data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
  190. data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
  191. data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
  192. data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
  193. data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
  194. data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
  195. data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
  196. data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
  197. data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
  198. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
  199. data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
  200. data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
  201. data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
  202. data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
  203. data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
  204. data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
  205. data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
  206. data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
  207. data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
  208. data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
  209. data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
  210. data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
  211. data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
  212. data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
  213. data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
  214. data/spec/reek/smell_detectors/utility_function_spec.rb +0 -293
  215. data/spec/reek/smell_warning_spec.rb +0 -137
  216. data/spec/reek/source/source_code_spec.rb +0 -79
  217. data/spec/reek/source/source_locator_spec.rb +0 -166
  218. data/spec/reek/spec/should_reek_of_spec.rb +0 -153
  219. data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
  220. data/spec/reek/spec/should_reek_spec.rb +0 -52
  221. data/spec/reek/spec/smell_matcher_spec.rb +0 -87
  222. data/spec/reek/tree_dresser_spec.rb +0 -46
  223. data/spec/spec_helper.rb +0 -110
  224. data/tasks/configuration.rake +0 -18
  225. data/tasks/console.rake +0 -5
  226. data/tasks/reek.rake +0 -6
  227. data/tasks/rubocop.rake +0 -11
  228. data/tasks/test.rake +0 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83760bf0344db6b8f65cd5bbb6e57f90ee4e1b54c10edb3920821a517e6649cd
4
- data.tar.gz: 258214d9022fda0ecbe287c4313719472c30f056c1ff6ffd4f7ff023b255b199
3
+ metadata.gz: f6445aae6ec59ea428c09872ffcf768e6b1df34f7c3860d2537ace1465c3f588
4
+ data.tar.gz: 81768ea8825add3341a059deba602ce5fd9d58093c4b53b37ede59c2256124b2
5
5
  SHA512:
6
- metadata.gz: 56c12a16cc200dd475d84a543fd9edf2ce888f550a5d4d22cbe813c3439ed0915263340d7c02654417666bcd728ee5e9ba976670cae46098293b58595589f36c
7
- data.tar.gz: 0f012f16ec237bdece4f797ea2977c0db5fa083df32ac86ce57b14911777eec0d832aff8e861df67c5cc80b847b0c3caf801a157b759724cc9f858ae4236ace9
6
+ metadata.gz: b27f1243970e103ea742582ae4f0ae517613b0a7465ff953818a069f1c5354626aa1dc2d72d42ad97d47ee930c294ddde5f6987e337f6314fd4f7c8598f75557
7
+ data.tar.gz: 2a036cd4900a2cc47aaef1fb3aec83c4793c4da44bdcffc6fe12134094fdfe5ede6dfe4509f251051d6703f52a37da0b7bf8e7b17cd6a3c2af616727d87a402f
@@ -0,0 +1,9 @@
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"
@@ -0,0 +1,52 @@
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: Ruby
6
+
7
+ on:
8
+ push:
9
+ branches: [ master ]
10
+ pull_request:
11
+ branches: [ master ]
12
+
13
+ jobs:
14
+ test:
15
+
16
+ runs-on: ubuntu-latest
17
+
18
+ strategy:
19
+ matrix:
20
+ ruby: [2.4, 2.5, 2.6, 2.7, jruby-9.2]
21
+
22
+ steps:
23
+ - uses: actions/checkout@v2
24
+ - name: Set up Ruby
25
+ uses: ruby/setup-ruby@v1
26
+ with:
27
+ ruby-version: ${{ matrix.ruby }}
28
+ bundler-cache: true
29
+ - name: Run specs
30
+ run: bundle exec rake test:spec
31
+ - name: Run performance tests
32
+ run: bundle exec rake test:performance
33
+ - name: Update default configuration
34
+ run: bundle exec rake configuration:update_default_configuration
35
+ - name: Run cucumber features
36
+ run: bundle exec rake test:features
37
+ - name: Run code quality specs
38
+ run: bundle exec rake test:quality
39
+
40
+ rubocop:
41
+
42
+ runs-on: ubuntu-latest
43
+
44
+ steps:
45
+ - uses: actions/checkout@v2
46
+ - name: Set up Ruby
47
+ uses: ruby/setup-ruby@v1
48
+ with:
49
+ ruby-version: 2.7
50
+ bundler-cache: true
51
+ - name: Run RuboCop
52
+ run: bundle exec rubocop -P
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,25 @@
1
1
  # Change log
2
2
 
3
+ ## 6.0.6 (2021-08-12)
4
+
5
+ * (mvz) Remove explicit dependency on psych. This fixes an issue where
6
+ installing Reek would unintentionally pull in psych 4.0
7
+
8
+ ## 6.0.5 (2021-08-01)
9
+
10
+ * (dependabot) Loosen dependency on psych
11
+ * (Nicolás Ferrari) Fix bugs when used by codeclimate
12
+
13
+ ## 6.0.4 (2021-04-27)
14
+
15
+ * (Nicolás Ferrari) Add build-base to Dockerfile
16
+ * (Masataka Pocke Kuwabara and Daniel Santos Dantas) Reduce gem package size
17
+
18
+ ## 6.0.3 (2021-01-11)
19
+
20
+ * (mvz) Require parser 3.0
21
+ * (mvz) In a refinement, assign smells to the refined module or class
22
+
3
23
  ## 6.0.2 (2020-10-17)
4
24
 
5
25
  * (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
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
@@ -7,16 +7,16 @@ ruby RUBY_VERSION
7
7
  group :development do
8
8
  gem 'aruba', '~> 1.0'
9
9
  gem 'codeclimate-engine-rb', '~> 0.4.0'
10
- gem 'cucumber', ['>= 4.0', '< 6.0']
10
+ gem 'cucumber', ['>= 4.0', '< 7.0']
11
11
  gem 'kramdown', '~> 2.1'
12
12
  gem 'kramdown-parser-gfm', '~> 1.0'
13
13
  gem 'rake', '~> 13.0'
14
14
  gem 'rspec', '~> 3.0'
15
15
  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']
16
+ gem 'rubocop', '~> 1.12.0'
17
+ gem 'rubocop-performance', '~> 1.10.1'
18
+ gem 'rubocop-rspec', '~> 2.2.0'
19
+ gem 'simplecov', ['>= 0.18.0', '< 0.22.0']
20
20
  gem 'yard', '~> 0.9.5'
21
21
 
22
22
  platforms :mri do
@@ -25,5 +25,5 @@ group :development do
25
25
  end
26
26
 
27
27
  group :debugging do
28
- gem 'pry', '~> 0.13.0'
28
+ gem 'pry', '~> 0.14.0'
29
29
  end
@@ -14,15 +14,14 @@ class CodeClimateToReek
14
14
  # we have to exit with a zero for both failure and success.
15
15
  ENGINE_CONFIGURATION = [
16
16
  '--failure-exit-code', '0',
17
- '--success-exit-code', '0',
18
- '.'
17
+ '--success-exit-code', '0'
19
18
  ].freeze
20
19
 
21
20
  attr_reader :configuration_file_path, :include_paths_key, :include_paths_default
22
21
 
23
22
  def initialize(configuration_file_path: '/config.json',
24
23
  include_paths_key: 'include_paths',
25
- include_paths_default: [])
24
+ include_paths_default: ['.'])
26
25
  @configuration_file_path = configuration_file_path
27
26
  @include_paths_key = include_paths_key
28
27
  @include_paths_default = include_paths_default
@@ -30,7 +30,7 @@ module Reek
30
30
  SexpExtensions.const_get(const)
31
31
  ]
32
32
  end
33
- Hash[assoc]
33
+ assoc.to_h
34
34
  end
35
35
  end
36
36
 
data/lib/reek/ast/node.rb CHANGED
@@ -60,7 +60,7 @@ module Reek
60
60
  #
61
61
  # Returns an array with all matching nodes.
62
62
  def each_node(target_types, ignoring = [], &blk)
63
- return enum_for(:each_node, target_types, ignoring) unless block_given?
63
+ return enum_for(:each_node, target_types, ignoring) unless blk
64
64
 
65
65
  look_for(Array(target_types), ignoring, &blk)
66
66
  end
@@ -39,13 +39,13 @@ module Reek
39
39
 
40
40
  @original_comment.scan(CONFIGURATION_REGEX) do |detector_name, separator, options|
41
41
  escalate_legacy_separator separator
42
- CodeCommentValidator.new(detector_name: detector_name,
43
- original_comment: original_comment,
44
- line: line,
45
- source: source,
46
- options: options).validate
47
- @config.merge! detector_name => YAML.safe_load(options || DISABLE_DETECTOR_CONFIGURATION,
48
- permitted_classes: [Regexp])
42
+ validator = CodeCommentValidator.new(detector_name: detector_name,
43
+ original_comment: original_comment,
44
+ line: line,
45
+ source: source,
46
+ options: options)
47
+ validator.validate
48
+ @config.merge! detector_name => validator.parsed_options
49
49
  end
50
50
  end
51
51
 
@@ -115,6 +115,21 @@ module Reek
115
115
  escalate_unknown_configuration_key
116
116
  end
117
117
 
118
+ def parsed_options
119
+ @parsed_options ||=
120
+ if Psych::VERSION < '3.1.0'
121
+ YAML.safe_load(options || CodeComment::DISABLE_DETECTOR_CONFIGURATION, [Regexp])
122
+ else
123
+ YAML.safe_load(options || CodeComment::DISABLE_DETECTOR_CONFIGURATION,
124
+ permitted_classes: [Regexp])
125
+ end
126
+ rescue Psych::SyntaxError
127
+ raise Errors::GarbageDetectorConfigurationInCommentError.new(detector_name: detector_name,
128
+ original_comment: original_comment,
129
+ source: source,
130
+ line: line)
131
+ end
132
+
118
133
  private
119
134
 
120
135
  attr_reader :detector_name,
@@ -124,16 +139,6 @@ module Reek
124
139
  :separator,
125
140
  :options
126
141
 
127
- def parsed_options
128
- @parsed_options ||= YAML.safe_load(options || CodeComment::DISABLE_DETECTOR_CONFIGURATION,
129
- permitted_classes: [Regexp])
130
- rescue Psych::SyntaxError
131
- raise Errors::GarbageDetectorConfigurationInCommentError.new(detector_name: detector_name,
132
- original_comment: original_comment,
133
- source: source,
134
- line: line)
135
- end
136
-
137
142
  def escalate_unknown_configuration_key
138
143
  return if given_keys_legit?
139
144
 
@@ -14,7 +14,8 @@ module Reek
14
14
  # @param paths [String]
15
15
  # @return [undefined]
16
16
  def add(paths)
17
- paths.each { |path| self << Pathname(path) }
17
+ paths.flat_map { |path| Dir[path] }.
18
+ each { |path| self << Pathname(path) }
18
19
  end
19
20
  end
20
21
  end
@@ -51,7 +51,7 @@ module Reek
51
51
  # @return [Enumerator]
52
52
  #
53
53
  def each(&block)
54
- return enum_for(:each) unless block_given?
54
+ return enum_for(:each) unless block
55
55
 
56
56
  yield self
57
57
  children.each do |child|
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'module_context'
4
+
5
+ module Reek
6
+ module Context
7
+ #
8
+ # A context wrapper for any refinement blocks found in a syntax tree.
9
+ #
10
+ class RefinementContext < ModuleContext
11
+ def full_name
12
+ exp.call.args.first.name
13
+ end
14
+ end
15
+ end
16
+ end
@@ -5,6 +5,7 @@ require_relative 'context/class_context'
5
5
  require_relative 'context/ghost_context'
6
6
  require_relative 'context/method_context'
7
7
  require_relative 'context/module_context'
8
+ require_relative 'context/refinement_context'
8
9
  require_relative 'context/root_context'
9
10
  require_relative 'context/send_context'
10
11
  require_relative 'context/singleton_attribute_context'
@@ -20,7 +21,7 @@ module Reek
20
21
  # counting. Ideally `ContextBuilder` would only build up the context tree and leave the
21
22
  # statement and reference counting to the contexts.
22
23
  #
23
- # @quality :reek:TooManyMethods { max_methods: 31 }
24
+ # @quality :reek:TooManyMethods { max_methods: 32 }
24
25
  # @quality :reek:UnusedPrivateMethod { exclude: [ !ruby/regexp /process_/ ] }
25
26
  # @quality :reek:DataClump
26
27
  class ContextBuilder
@@ -263,9 +264,16 @@ module Reek
263
264
  #
264
265
  # Counts non-empty blocks as one statement.
265
266
  #
267
+ # A refinement block is handled differently and causes a RefinementContext
268
+ # to be opened.
269
+ #
266
270
  def process_block(exp, _parent)
267
271
  increase_statement_count_by(exp.block)
268
- process(exp)
272
+ if exp.call.name == :refine
273
+ handle_refinement_block(exp)
274
+ else
275
+ process(exp)
276
+ end
269
277
  end
270
278
 
271
279
  # Handles `begin` and `kwbegin` nodes. `begin` nodes are created implicitly
@@ -508,6 +516,12 @@ module Reek
508
516
  end
509
517
  end
510
518
 
519
+ def handle_refinement_block(exp)
520
+ inside_new_context(Context::RefinementContext, exp) do
521
+ process(exp)
522
+ end
523
+ end
524
+
511
525
  def handle_send_for_modules(exp)
512
526
  arg_names = exp.args.map { |arg| arg.children.first }
513
527
  current_context.track_visibility(exp.name, arg_names)
@@ -57,9 +57,7 @@ module Reek
57
57
  end
58
58
 
59
59
  def configuration
60
- @configuration ||= begin
61
- CodeClimateConfiguration.load
62
- end
60
+ @configuration ||= CodeClimateConfiguration.load
63
61
  end
64
62
  end
65
63
  end
@@ -90,7 +90,7 @@ module Reek
90
90
 
91
91
  class << self
92
92
  def smell_type
93
- @smell_type ||= name.split(/::/).last
93
+ @smell_type ||= name.split('::').last
94
94
  end
95
95
 
96
96
  def contexts
@@ -59,7 +59,7 @@ module Reek
59
59
 
60
60
  # @public
61
61
  def to_hash
62
- stringified_params = Hash[parameters.map { |key, val| [key.to_s, val] }]
62
+ stringified_params = parameters.map { |key, val| [key.to_s, val] }.to_h
63
63
  base_hash.merge(stringified_params)
64
64
  end
65
65
 
@@ -62,10 +62,8 @@ module Reek
62
62
 
63
63
  false
64
64
  end
65
- elsif path_excluded?(path)
66
- true
67
65
  else
68
- false
66
+ path_excluded?(path)
69
67
  end
70
68
  end
71
69
 
data/lib/reek/version.rb CHANGED
@@ -3,11 +3,11 @@
3
3
  # @public
4
4
  module Reek
5
5
  #
6
- # This module holds the Reek version informations
6
+ # This module holds the Reek version information
7
7
  #
8
8
  # @public
9
9
  module Version
10
10
  # @public
11
- STRING = '6.0.2'
11
+ STRING = '6.0.6'
12
12
  end
13
13
  end
data/reek.gemspec CHANGED
@@ -12,7 +12,10 @@ Gem::Specification.new do |s|
12
12
  s.license = 'MIT'
13
13
  s.email = ['timo.roessner@googlemail.com']
14
14
  s.extra_rdoc_files = ['CHANGELOG.md', 'License.txt']
15
- s.files = `git ls-files -z`.split("\0")
15
+ s.files = Dir.chdir(File.expand_path(__dir__)) do
16
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|samples|docs|tasks)/}) }
17
+ end
18
+
16
19
  s.executables = s.files.grep(%r{^bin/}).map { |path| File.basename(path) }
17
20
  s.homepage = 'https://github.com/troessner/reek'
18
21
  s.rdoc_options = %w(--main README.md -x assets/|bin/|config/|features/|spec/|tasks/)
@@ -28,7 +31,6 @@ Gem::Specification.new do |s|
28
31
  }
29
32
 
30
33
  s.add_runtime_dependency 'kwalify', '~> 0.7.0'
31
- s.add_runtime_dependency 'parser', '< 2.8', '>= 2.5.0.0', '!= 2.5.1.1'
32
- s.add_runtime_dependency 'psych', '~> 3.1'
34
+ s.add_runtime_dependency 'parser', '~> 3.0.0'
33
35
  s.add_runtime_dependency 'rainbow', '>= 2.0', '< 4.0'
34
36
  end