reek 6.0.2 → 6.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) 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 +10 -0
  6. data/CONTRIBUTING.md +3 -0
  7. data/Dockerfile +1 -1
  8. data/Gemfile +6 -6
  9. data/lib/reek/ast/ast_node_class_map.rb +1 -1
  10. data/lib/reek/ast/node.rb +1 -1
  11. data/lib/reek/configuration/excluded_paths.rb +2 -1
  12. data/lib/reek/context/code_context.rb +1 -1
  13. data/lib/reek/context/refinement_context.rb +16 -0
  14. data/lib/reek/context_builder.rb +16 -2
  15. data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -3
  16. data/lib/reek/smell_detectors/base_detector.rb +1 -1
  17. data/lib/reek/smell_warning.rb +1 -1
  18. data/lib/reek/source/source_locator.rb +1 -3
  19. data/lib/reek/version.rb +1 -1
  20. data/reek.gemspec +5 -2
  21. metadata +13 -227
  22. data/.travis.yml +0 -40
  23. data/docs/API.md +0 -174
  24. data/docs/Attribute.md +0 -39
  25. data/docs/Basic-Smell-Options.md +0 -85
  26. data/docs/Boolean-Parameter.md +0 -54
  27. data/docs/Class-Variable.md +0 -40
  28. data/docs/Code-Smells.md +0 -39
  29. data/docs/Command-Line-Options.md +0 -119
  30. data/docs/Control-Couple.md +0 -26
  31. data/docs/Control-Parameter.md +0 -32
  32. data/docs/Data-Clump.md +0 -46
  33. data/docs/Duplicate-Method-Call.md +0 -264
  34. data/docs/Feature-Envy.md +0 -93
  35. data/docs/How-To-Write-New-Detectors.md +0 -132
  36. data/docs/How-reek-works-internally.md +0 -114
  37. data/docs/Instance-Variable-Assumption.md +0 -163
  38. data/docs/Irresponsible-Module.md +0 -47
  39. data/docs/Large-Class.md +0 -16
  40. data/docs/Long-Parameter-List.md +0 -39
  41. data/docs/Long-Yield-List.md +0 -37
  42. data/docs/Manual-Dispatch.md +0 -30
  43. data/docs/Missing-Safe-Method.md +0 -92
  44. data/docs/Module-Initialize.md +0 -62
  45. data/docs/Nested-Iterators.md +0 -59
  46. data/docs/Nil-Check.md +0 -47
  47. data/docs/RSpec-matchers.md +0 -129
  48. data/docs/Rake-Task.md +0 -66
  49. data/docs/Reek-4-to-Reek-5-migration.md +0 -188
  50. data/docs/Reek-Driven-Development.md +0 -46
  51. data/docs/Repeated-Conditional.md +0 -47
  52. data/docs/Simulated-Polymorphism.md +0 -16
  53. data/docs/Smell-Suppression.md +0 -96
  54. data/docs/Style-Guide.md +0 -19
  55. data/docs/Subclassed-From-Core-Class.md +0 -79
  56. data/docs/Too-Many-Constants.md +0 -37
  57. data/docs/Too-Many-Instance-Variables.md +0 -43
  58. data/docs/Too-Many-Methods.md +0 -56
  59. data/docs/Too-Many-Statements.md +0 -54
  60. data/docs/Uncommunicative-Method-Name.md +0 -94
  61. data/docs/Uncommunicative-Module-Name.md +0 -92
  62. data/docs/Uncommunicative-Name.md +0 -18
  63. data/docs/Uncommunicative-Parameter-Name.md +0 -90
  64. data/docs/Uncommunicative-Variable-Name.md +0 -96
  65. data/docs/Unused-Parameters.md +0 -28
  66. data/docs/Unused-Private-Method.md +0 -101
  67. data/docs/Utility-Function.md +0 -56
  68. data/docs/Versioning-Policy.md +0 -7
  69. data/docs/YAML-Reports.md +0 -93
  70. data/docs/defaults.reek.yml +0 -129
  71. data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
  72. data/docs/templates/default/docstring/setup.rb +0 -37
  73. data/docs/templates/default/fulldoc/html/css/common.css +0 -1
  74. data/docs/yard_plugin.rb +0 -17
  75. data/features/command_line_interface/basic_usage.feature +0 -15
  76. data/features/command_line_interface/options.feature +0 -123
  77. data/features/command_line_interface/show_progress.feature +0 -33
  78. data/features/command_line_interface/smell_selection.feature +0 -15
  79. data/features/command_line_interface/smells_count.feature +0 -38
  80. data/features/command_line_interface/stdin.feature +0 -65
  81. data/features/configuration_files/accept_setting.feature +0 -87
  82. data/features/configuration_files/directory_specific_directives.feature +0 -274
  83. data/features/configuration_files/exclude_directives.feature +0 -35
  84. data/features/configuration_files/exclude_paths_directives.feature +0 -42
  85. data/features/configuration_files/masking_smells.feature +0 -94
  86. data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
  87. data/features/configuration_files/reject_setting.feature +0 -89
  88. data/features/configuration_files/schema_validation.feature +0 -59
  89. data/features/configuration_files/show_configuration_file.feature +0 -44
  90. data/features/configuration_files/unused_private_method.feature +0 -68
  91. data/features/configuration_loading.feature +0 -91
  92. data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
  93. data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
  94. data/features/locales.feature +0 -32
  95. data/features/programmatic_access.feature +0 -41
  96. data/features/rake_task/rake_task.feature +0 -138
  97. data/features/reports/codeclimate.feature +0 -59
  98. data/features/reports/json.feature +0 -59
  99. data/features/reports/reports.feature +0 -219
  100. data/features/reports/yaml.feature +0 -52
  101. data/features/rspec_matcher.feature +0 -41
  102. data/features/samples.feature +0 -305
  103. data/features/step_definitions/.rubocop.yml +0 -5
  104. data/features/step_definitions/reek_steps.rb +0 -102
  105. data/features/step_definitions/sample_file_steps.rb +0 -63
  106. data/features/support/env.rb +0 -33
  107. data/features/todo_list.feature +0 -108
  108. data/samples/checkstyle.xml +0 -7
  109. data/samples/clean_source/clean.rb +0 -6
  110. data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
  111. data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
  112. data/samples/configuration/corrupt.reek +0 -1
  113. data/samples/configuration/empty.reek +0 -0
  114. data/samples/configuration/full_configuration.reek +0 -13
  115. data/samples/configuration/full_mask.reek +0 -6
  116. data/samples/configuration/home/home.reek.yml +0 -4
  117. data/samples/configuration/partial_mask.reek +0 -4
  118. data/samples/configuration/regular_configuration/.reek.yml +0 -4
  119. data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
  120. data/samples/configuration/with_excluded_paths.reek +0 -5
  121. data/samples/no_config_file/.keep +0 -0
  122. data/samples/paths.rb +0 -5
  123. data/samples/smelly_source/inline.rb +0 -704
  124. data/samples/smelly_source/optparse.rb +0 -1788
  125. data/samples/smelly_source/redcloth.rb +0 -1130
  126. data/samples/smelly_source/ruby.rb +0 -368
  127. data/samples/smelly_source/smelly.rb +0 -7
  128. data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
  129. data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
  130. data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
  131. data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
  132. data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
  133. data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
  134. data/samples/source_with_non_ruby_files/gibberish +0 -1
  135. data/samples/source_with_non_ruby_files/python_source.py +0 -1
  136. data/samples/source_with_non_ruby_files/ruby.rb +0 -6
  137. data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
  138. data/spec/quality/documentation_spec.rb +0 -41
  139. data/spec/quality/reek_source_spec.rb +0 -11
  140. data/spec/reek/ast/node_spec.rb +0 -211
  141. data/spec/reek/ast/object_refs_spec.rb +0 -83
  142. data/spec/reek/ast/reference_collector_spec.rb +0 -47
  143. data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
  144. data/spec/reek/cli/application_spec.rb +0 -168
  145. data/spec/reek/cli/command/report_command_spec.rb +0 -44
  146. data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
  147. data/spec/reek/cli/options_spec.rb +0 -51
  148. data/spec/reek/cli/silencer_spec.rb +0 -28
  149. data/spec/reek/code_comment_spec.rb +0 -184
  150. data/spec/reek/configuration/app_configuration_spec.rb +0 -195
  151. data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
  152. data/spec/reek/configuration/default_directive_spec.rb +0 -13
  153. data/spec/reek/configuration/directory_directives_spec.rb +0 -122
  154. data/spec/reek/configuration/excluded_paths_spec.rb +0 -16
  155. data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
  156. data/spec/reek/configuration/schema_validator_spec.rb +0 -165
  157. data/spec/reek/context/code_context_spec.rb +0 -192
  158. data/spec/reek/context/ghost_context_spec.rb +0 -60
  159. data/spec/reek/context/method_context_spec.rb +0 -72
  160. data/spec/reek/context/module_context_spec.rb +0 -55
  161. data/spec/reek/context/root_context_spec.rb +0 -12
  162. data/spec/reek/context/statement_counter_spec.rb +0 -24
  163. data/spec/reek/context_builder_spec.rb +0 -457
  164. data/spec/reek/detector_repository_spec.rb +0 -22
  165. data/spec/reek/documentation_link_spec.rb +0 -20
  166. data/spec/reek/errors/base_error_spec.rb +0 -13
  167. data/spec/reek/examiner_spec.rb +0 -309
  168. data/spec/reek/logging_error_handler_spec.rb +0 -24
  169. data/spec/reek/rake/task_spec.rb +0 -56
  170. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
  171. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
  172. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
  173. data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
  174. data/spec/reek/report/html_report_spec.rb +0 -19
  175. data/spec/reek/report/json_report_spec.rb +0 -58
  176. data/spec/reek/report/location_formatter_spec.rb +0 -32
  177. data/spec/reek/report/progress_formatter_spec.rb +0 -68
  178. data/spec/reek/report/text_report_spec.rb +0 -89
  179. data/spec/reek/report/xml_report_spec.rb +0 -24
  180. data/spec/reek/report/yaml_report_spec.rb +0 -55
  181. data/spec/reek/report_spec.rb +0 -28
  182. data/spec/reek/smell_configuration_spec.rb +0 -56
  183. data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
  184. data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
  185. data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
  186. data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
  187. data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
  188. data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
  189. data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
  190. data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
  191. data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
  192. data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
  193. data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
  194. data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
  195. data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
  196. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
  197. data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
  198. data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
  199. data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
  200. data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
  201. data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
  202. data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
  203. data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
  204. data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
  205. data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
  206. data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
  207. data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
  208. data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
  209. data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
  210. data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
  211. data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
  212. data/spec/reek/smell_detectors/utility_function_spec.rb +0 -293
  213. data/spec/reek/smell_warning_spec.rb +0 -137
  214. data/spec/reek/source/source_code_spec.rb +0 -79
  215. data/spec/reek/source/source_locator_spec.rb +0 -166
  216. data/spec/reek/spec/should_reek_of_spec.rb +0 -153
  217. data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
  218. data/spec/reek/spec/should_reek_spec.rb +0 -52
  219. data/spec/reek/spec/smell_matcher_spec.rb +0 -87
  220. data/spec/reek/tree_dresser_spec.rb +0 -46
  221. data/spec/spec_helper.rb +0 -110
  222. data/tasks/configuration.rake +0 -18
  223. data/tasks/console.rake +0 -5
  224. data/tasks/reek.rake +0 -6
  225. data/tasks/rubocop.rake +0 -11
  226. 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: 2d0bbc58b8f9e593e64fd19b18b70cb63f776cbb69dba486b94ff7c53d449683
4
+ data.tar.gz: d7773c82aebfc8cf43cad4d6158fb977e3a84d1a02d87356b86f0b7abb017b8b
5
5
  SHA512:
6
- metadata.gz: 56c12a16cc200dd475d84a543fd9edf2ce888f550a5d4d22cbe813c3439ed0915263340d7c02654417666bcd728ee5e9ba976670cae46098293b58595589f36c
7
- data.tar.gz: 0f012f16ec237bdece4f797ea2977c0db5fa083df32ac86ce57b14911777eec0d832aff8e861df67c5cc80b847b0c3caf801a157b759724cc9f858ae4236ace9
6
+ metadata.gz: 36f145207e147be9793009f9db478086267298aff71b3ef35235c80235c3f2d1d9d66737bfb6b2f91b254cb20319ddec63c19012744f654ebe3f492a4c728019
7
+ data.tar.gz: 00a48adb00260ae7b48e8616b96c2ec1f08e20fe34594922213aa668cc3eabce37a0814eb53a5abb41546e6877c1baa1d1245b695306d8dbd81851ddb4655761
@@ -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,15 @@
1
1
  # Change log
2
2
 
3
+ ## 6.0.4 (2021-04-27)
4
+
5
+ * (Nicolas Ferrari) Add build-base to Dockerfile
6
+ * (Masataka Pocke Kuwabara and Daniel Santos Dantas) Reduce gem package size
7
+
8
+ ## 6.0.3 (2021-01-11)
9
+
10
+ * (mvz) Require parser 3.0
11
+ * (mvz) In a refinement, assign smells to the refined module or class
12
+
3
13
  ## 6.0.2 (2020-10-17)
4
14
 
5
15
  * (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
@@ -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
@@ -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
@@ -8,6 +8,6 @@ module Reek
8
8
  # @public
9
9
  module Version
10
10
  # @public
11
- STRING = '6.0.2'
11
+ STRING = '6.0.4'
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,7 @@ 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'
34
+ s.add_runtime_dependency 'parser', '~> 3.0.0'
32
35
  s.add_runtime_dependency 'psych', '~> 3.1'
33
36
  s.add_runtime_dependency 'rainbow', '>= 2.0', '< 4.0'
34
37
  end