reek 5.6.0 → 6.0.3

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +9 -0
  3. data/.github/workflows/ruby.yml +52 -0
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +3 -1
  6. data/.rubocop_todo.yml +27 -20
  7. data/.simplecov +1 -0
  8. data/CHANGELOG.md +24 -0
  9. data/Dockerfile +1 -0
  10. data/Gemfile +14 -17
  11. data/README.md +11 -11
  12. data/bin/code_climate_reek +12 -2
  13. data/docs/Attribute.md +1 -1
  14. data/docs/Boolean-Parameter.md +2 -2
  15. data/docs/Control-Couple.md +1 -1
  16. data/docs/Nil-Check.md +4 -1
  17. data/docs/templates/default/docstring/setup.rb +1 -3
  18. data/features/command_line_interface/options.feature +2 -3
  19. data/features/configuration_files/schema_validation.feature +1 -1
  20. data/features/reports/codeclimate.feature +2 -2
  21. data/features/reports/json.feature +3 -3
  22. data/features/reports/reports.feature +4 -4
  23. data/features/reports/yaml.feature +3 -3
  24. data/features/step_definitions/reek_steps.rb +5 -1
  25. data/features/step_definitions/sample_file_steps.rb +2 -2
  26. data/features/support/env.rb +0 -1
  27. data/lib/reek/ast/node.rb +1 -1
  28. data/lib/reek/ast/sexp_extensions/arguments.rb +11 -0
  29. data/lib/reek/cli/options.rb +3 -3
  30. data/lib/reek/code_comment.rb +36 -29
  31. data/lib/reek/configuration/app_configuration.rb +4 -3
  32. data/lib/reek/configuration/configuration_converter.rb +2 -2
  33. data/lib/reek/configuration/directory_directives.rb +9 -3
  34. data/lib/reek/configuration/excluded_paths.rb +2 -1
  35. data/lib/reek/context/code_context.rb +1 -1
  36. data/lib/reek/context/module_context.rb +3 -1
  37. data/lib/reek/context/refinement_context.rb +16 -0
  38. data/lib/reek/context_builder.rb +16 -2
  39. data/lib/reek/errors/legacy_comment_separator_error.rb +36 -0
  40. data/lib/reek/report/code_climate/code_climate_configuration.yml +1 -1
  41. data/lib/reek/report/code_climate/code_climate_report.rb +2 -1
  42. data/lib/reek/report/simple_warning_formatter.rb +0 -7
  43. data/lib/reek/report.rb +5 -7
  44. data/lib/reek/smell_detectors/base_detector.rb +1 -9
  45. data/lib/reek/smell_detectors/boolean_parameter.rb +3 -1
  46. data/lib/reek/smell_detectors/data_clump.rb +23 -56
  47. data/lib/reek/smell_detectors/nil_check.rb +1 -12
  48. data/lib/reek/smell_detectors/uncommunicative_variable_name.rb +1 -1
  49. data/lib/reek/smell_warning.rb +1 -2
  50. data/lib/reek/source/source_locator.rb +13 -10
  51. data/lib/reek/spec/smell_matcher.rb +2 -1
  52. data/lib/reek/version.rb +1 -1
  53. data/lib/reek.rb +1 -0
  54. data/reek.gemspec +13 -6
  55. data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +2 -4
  56. data/spec/quality/documentation_spec.rb +2 -1
  57. data/spec/reek/ast/sexp_extensions_spec.rb +15 -33
  58. data/spec/reek/code_comment_spec.rb +41 -42
  59. data/spec/reek/configuration/directory_directives_spec.rb +6 -0
  60. data/spec/reek/configuration/excluded_paths_spec.rb +12 -3
  61. data/spec/reek/context_builder_spec.rb +110 -113
  62. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +1 -3
  63. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +26 -26
  64. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +6 -6
  65. data/spec/reek/report/location_formatter_spec.rb +3 -3
  66. data/spec/reek/smell_detectors/base_detector_spec.rb +3 -13
  67. data/spec/reek/smell_detectors/data_clump_spec.rb +14 -0
  68. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +8 -2
  69. data/spec/reek/smell_detectors/nil_check_spec.rb +3 -3
  70. data/spec/reek/smell_detectors/utility_function_spec.rb +16 -0
  71. data/spec/reek/smell_warning_spec.rb +12 -12
  72. data/spec/reek/source/source_code_spec.rb +13 -0
  73. data/spec/reek/spec/should_reek_of_spec.rb +0 -1
  74. data/spec/reek/spec/should_reek_only_of_spec.rb +6 -6
  75. data/spec/reek/spec/smell_matcher_spec.rb +1 -1
  76. data/spec/spec_helper.rb +19 -5
  77. data/tasks/configuration.rake +1 -2
  78. metadata +24 -42
  79. data/.travis.yml +0 -35
  80. data/spec/factories/factories.rb +0 -37
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da76dfc3aa1c997bffe832e526907dcf847cb5d86e04bc7c084abe074247e5d7
4
- data.tar.gz: 7abc545f4176d0f561797c092bea15f1630b824a3d3ba37b99975450eb3ec3df
3
+ metadata.gz: 967e95555fe823e1924a78ff2a8c94c40bdb4d16d031bacd51b885d1475bce30
4
+ data.tar.gz: c9760389b64b3bb9f96f1896192a540a4de8b7f395808299b9a67e47238e8c42
5
5
  SHA512:
6
- metadata.gz: 7fe6f93cf2fe75c232327e1250c4e72c10c88707ce57879341f43b5a8a195ddb0282d9433e60cb19f635923edcb3fa52bbaadb187b5ee67d4b4cea7fc72ce901
7
- data.tar.gz: a55abca10a6875077fda0b873667407f1dddf1840963fd6463ed918db9d9e58408fa93acf5a7e4741d9d488dede75963ad422c2150953e3d69f7af840a563dfd
6
+ metadata.gz: ea4c588166903c10bed44c2a459e43e4db479943f8f489ca1eaefbb6db375605e06ff678f5411def292e19ef8c2754245bca78eb24373532474091b0ab8eadbe
7
+ data.tar.gz: 9e0804841d54d4278149422d66c7e379597e3f99275ba8b9ab4aef6e7041bde6c928db5f3c62a3b5c3d1d6fc4da0216ba5d13aa5562f9e0b565ec31bb115d0fe
@@ -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/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  pkg
2
+ spec/examples.txt
2
3
  spec/output
3
4
  tmp
4
5
  doc
data/.rubocop.yml CHANGED
@@ -9,7 +9,8 @@ AllCops:
9
9
  - 'samples/**/*'
10
10
  - 'tmp/**/*'
11
11
  - 'vendor/**/*'
12
- TargetRubyVersion: 2.3
12
+ NewCops: enable
13
+ TargetRubyVersion: 2.4
13
14
 
14
15
  # Tables are nice
15
16
  Layout/HashAlignment:
@@ -57,6 +58,7 @@ Lint/BooleanSymbol:
57
58
  # Spec blocks can be any size
58
59
  Metrics/BlockLength:
59
60
  Exclude:
61
+ - '**/*.gemspec'
60
62
  - 'spec/**/*'
61
63
 
62
64
  # Keyword arguments make long parameter lists readable
data/.rubocop_todo.yml CHANGED
@@ -1,22 +1,36 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2019-12-22 13:19:30 +0100 using RuboCop version 0.78.0.
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
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 3
9
+ # Offense count: 2
10
+ Lint/MissingSuper:
11
+ Exclude:
12
+ - 'lib/reek/rake/task.rb'
13
+ - 'lib/reek/smell_detectors/base_detector.rb'
14
+
15
+ # Offense count: 2
16
+ # Configuration parameters: IgnoredPatterns.
17
+ # IgnoredPatterns: (?-mix:(exactly|at_least|at_most)\(\d+\)\.times)
18
+ Lint/UnreachableLoop:
19
+ Exclude:
20
+ - 'spec/reek/ast/node_spec.rb'
21
+
22
+ # Offense count: 2
23
+ # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
10
24
  Metrics/AbcSize:
11
25
  Max: 21
12
26
 
13
27
  # Offense count: 1
14
- # Configuration parameters: CountComments.
28
+ # Configuration parameters: CountComments, CountAsOne.
15
29
  Metrics/ClassLength:
16
- Max: 161
30
+ Max: 170
17
31
 
18
- # Offense count: 14
19
- # Configuration parameters: CountComments, ExcludedMethods.
32
+ # Offense count: 13
33
+ # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
20
34
  Metrics/MethodLength:
21
35
  Max: 16
22
36
 
@@ -25,17 +39,6 @@ RSpec/AnyInstance:
25
39
  Exclude:
26
40
  - 'spec/reek/cli/application_spec.rb'
27
41
 
28
- # Offense count: 1
29
- # Configuration parameters: CustomIncludeMethods.
30
- RSpec/EmptyExampleGroup:
31
- Exclude:
32
- - 'spec/factories/factories.rb'
33
-
34
- # Offense count: 1
35
- RSpec/MissingExampleGroupArgument:
36
- Exclude:
37
- - 'spec/factories/factories.rb'
38
-
39
42
  # Offense count: 4
40
43
  RSpec/MultipleDescribes:
41
44
  Exclude:
@@ -44,12 +47,16 @@ RSpec/MultipleDescribes:
44
47
  - 'spec/reek/report/location_formatter_spec.rb'
45
48
  - 'spec/reek/report/progress_formatter_spec.rb'
46
49
 
47
- # Offense count: 32
48
- # Configuration parameters: AggregateFailuresByDefault.
50
+ # Offense count: 30
49
51
  RSpec/MultipleExpectations:
50
52
  Max: 5
51
53
 
52
- # Offense count: 25
54
+ # Offense count: 16
55
+ # Configuration parameters: AllowSubject.
56
+ RSpec/MultipleMemoizedHelpers:
57
+ Max: 9
58
+
59
+ # Offense count: 27
53
60
  RSpec/NestedGroups:
54
61
  Max: 5
55
62
 
data/.simplecov CHANGED
@@ -5,6 +5,7 @@ SimpleCov.start do
5
5
  add_filter 'spec/'
6
6
  add_filter 'samples/'
7
7
  coverage_dir 'tmp/coverage'
8
+ enable_coverage :branch
8
9
  end
9
10
 
10
11
  SimpleCov.at_exit do
data/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Change log
2
2
 
3
+ ## 6.0.3 (2021-01-11)
4
+
5
+ * (mvz) Require parser 3.0
6
+ * (mvz) In a refinement, assign smells to the refined module or class
7
+
8
+ ## 6.0.3 (2020-10-17)
9
+
10
+ * (mvz) Loosen dependency on psych. This should resolve installation problems on
11
+ mingw32
12
+ * (Cesario Uy) Fix typo in docs for "Boolean Parameter" smell
13
+ * (mvz) Set link metadata in gemspec
14
+
15
+ ## 6.0.1 (2020-05-26)
16
+
17
+ * (Maxim Pertsov) Handle absolute paths for directories correctly
18
+
19
+ ## 6.0.0 (2020-03-30)
20
+
21
+ * (mvz) Make codeclimate-engine-rb a development dependency
22
+ * (mvz) Drop support for Ruby 2.3
23
+ * (mvz) Raise error when legacy code comment format is used
24
+ * (mvz) Stop reporting NilCheck for safe navigation
25
+ * (likeath) Properly handle "Forward all" syntax
26
+
3
27
  ## 5.6.0 (2020-01-20)
4
28
 
5
29
  * (mvz) Support Ruby 2.7
data/Dockerfile CHANGED
@@ -22,6 +22,7 @@ WORKDIR ${app_dir}
22
22
 
23
23
  RUN gem install rake
24
24
  RUN bundle install --without debugging development
25
+ RUN gem install codeclimate-engine-rb
25
26
 
26
27
  VOLUME ${code_dir}
27
28
  WORKDIR ${code_dir}
data/Gemfile CHANGED
@@ -5,19 +5,19 @@ gemspec
5
5
  ruby RUBY_VERSION
6
6
 
7
7
  group :development do
8
- gem 'aruba', '~> 0.14.8'
9
- gem 'cucumber', '~> 3.0'
10
- gem 'factory_bot', '~> 5.0', '!= 5.1.0'
11
- gem 'kramdown', '~> 2.1'
12
- gem 'kramdown-parser-gfm', '~> 1.0'
13
- gem 'rake', '~> 13.0'
14
- gem 'rspec', '~> 3.0'
15
- gem 'rspec-benchmark', '~> 0.5.0'
16
- gem 'rubocop', '~> 0.79.0'
17
- gem 'rubocop-performance', '~> 1.5.0'
18
- gem 'rubocop-rspec', '~> 1.37.0'
19
- gem 'simplecov', '~> 0.17.0'
20
- gem 'yard', '~> 0.9.5'
8
+ gem 'aruba', '~> 1.0'
9
+ gem 'codeclimate-engine-rb', '~> 0.4.0'
10
+ gem 'cucumber', ['>= 4.0', '< 6.0']
11
+ gem 'kramdown', '~> 2.1'
12
+ gem 'kramdown-parser-gfm', '~> 1.0'
13
+ gem 'rake', '~> 13.0'
14
+ gem 'rspec', '~> 3.0'
15
+ gem 'rspec-benchmark', '~> 0.6.0'
16
+ gem 'rubocop', '~> 1.7.0'
17
+ gem 'rubocop-performance', '~> 1.9.1'
18
+ gem 'rubocop-rspec', '~> 2.1.0'
19
+ gem 'simplecov', ['>= 0.18.0', '< 0.21.0']
20
+ gem 'yard', '~> 0.9.5'
21
21
 
22
22
  platforms :mri do
23
23
  gem 'redcarpet', '~> 3.4'
@@ -25,8 +25,5 @@ group :development do
25
25
  end
26
26
 
27
27
  group :debugging do
28
- gem 'pry'
29
- platforms :mri do
30
- gem 'pry-byebug'
31
- end
28
+ gem 'pry', '~> 0.13.0'
32
29
  end
data/README.md CHANGED
@@ -45,12 +45,6 @@
45
45
  * ![](http://ruby-gem-downloads-badge.herokuapp.com/reek?type=total)
46
46
  * ![](http://ruby-gem-downloads-badge.herokuapp.com/reek?label=downloads-current-version)
47
47
 
48
- ## Reek 5 is out!
49
-
50
- Reek 5 is out and with it a bunch of breaking changes. If you're a new user you can just
51
- continue with the quickstart below. If you're a Reek 4 user and would like to upgrade to 5, don't
52
- worry, this shouldn't take you more than 10 minutes. Check out our [Upgrade Guide](docs/Reek-4-to-Reek-5-migration.md).
53
-
54
48
  ## Quickstart
55
49
 
56
50
  Reek is a tool that examines Ruby classes, modules and methods and reports any
@@ -100,7 +94,7 @@ demo.rb -- 2 warnings:
100
94
 
101
95
  ## Supported Ruby versions
102
96
 
103
- Reek is officially supported for CRuby 2.3 to 2.6 and for JRuby 9.1 and 9.2.
97
+ Reek is officially supported for CRuby 2.4 to 2.7 and for JRuby 9.2.
104
98
  Other Ruby implementations (like Rubinius) are not officially supported but
105
99
  should work as well.
106
100
 
@@ -292,7 +286,7 @@ detectors:
292
286
  # You can disable smells completely
293
287
  IrresponsibleModule:
294
288
  enabled: false
295
-
289
+
296
290
  # You can use filters to silence Reek warnings.
297
291
  # Either because you simply disagree with Reek (we are not the police) or
298
292
  # because you want to fix this at a later point in time.
@@ -300,7 +294,7 @@ detectors:
300
294
  exclude:
301
295
  - "MyWorker#self.class_method" # should be refactored
302
296
  - "AnotherWorker#instance_method" # should be refactored as well
303
-
297
+
304
298
  # A lot of smells allow fine tuning their configuration. You can look up all available options
305
299
  # in the corresponding smell documentation in /docs. In most cases you probably can just go
306
300
  # with the defaults as documented in defaults.reek.yml.
@@ -355,9 +349,14 @@ This configuration for instance:
355
349
  detectors:
356
350
  IrresponsibleModule:
357
351
  enabled: false
358
-
352
+
359
353
  TooManyStatements:
360
354
  max_statements: 5
355
+
356
+ directories:
357
+ "app/controllers":
358
+ TooManyStatements:
359
+ max_statements: 10
361
360
  ```
362
361
 
363
362
  translates to:
@@ -374,7 +373,7 @@ are documented in the corresponding smell type /docs page (if you want to get a
374
373
  configurations you can also check out [the `defaults.reek.yml` file in this repository](docs/defaults.reek.yml).
375
374
 
376
375
  Note that you do not need a configuration file at all.
377
- If you're fine with all the [defaults.reek.yml](docs/defaults.reek.yml) we set you can skip this completely.
376
+ If you're fine with all the [defaults](docs/defaults.reek.yml) we set you can skip this completely.
378
377
 
379
378
  Don't worry about introducing a mistake in your configuration file that might go unnoticed - Reek uses a
380
379
  schema to validate your configuration against on start up and will faily loudly in case you
@@ -613,6 +612,7 @@ Be careful though, Reek does not merge your configuration entries, so if you alr
613
612
  Reek
614
613
  * [ruby-critic](https://github.com/whitesmith/rubycritic) - gem that wraps around static analysis gems such as Reek, [flay](https://github.com/seattlerb/flay) and [flog](https://github.com/seattlerb/flog)
615
614
  * [pronto-reek](https://github.com/mmozuras/pronto-reek) - Reek integration for [pronto](https://github.com/mmozuras/pronto)
615
+ * [action-reek](https://github.com/reviewdog/action-reek) - GitHub Action to run reek with [reviewdog](https://github.com/reviewdog/reviewdog) 🐶
616
616
 
617
617
  ### Misc
618
618
 
@@ -6,15 +6,16 @@
6
6
 
7
7
  require_relative '../lib/reek'
8
8
  require_relative '../lib/reek/cli/application'
9
+ require_relative '../lib/reek/report/code_climate'
9
10
 
10
11
  # Map input coming from CodeClimate to Reek.
11
12
  class CodeClimateToReek
12
13
  # Following the spec (https://github.com/codeclimate/spec/blob/master/SPEC.md)
13
14
  # we have to exit with a zero for both failure and success.
14
15
  ENGINE_CONFIGURATION = [
15
- '-f', 'code_climate',
16
16
  '--failure-exit-code', '0',
17
- '--success-exit-code', '0'
17
+ '--success-exit-code', '0',
18
+ '.'
18
19
  ].freeze
19
20
 
20
21
  attr_reader :configuration_file_path, :include_paths_key, :include_paths_default
@@ -54,6 +55,15 @@ class CodeClimateToReek
54
55
  end
55
56
  end
56
57
 
58
+ # Override for ReportCommand to force the use of CodeClimateReport.
59
+ module ReportClassOverride
60
+ def report_class
61
+ Reek::Report::CodeClimateReport
62
+ end
63
+ end
64
+
65
+ Reek::CLI::Command::ReportCommand.prepend ReportClassOverride
66
+
57
67
  application = Reek::CLI::Application.new(CodeClimateToReek.new.cli_arguments)
58
68
 
59
69
  exit application.execute
data/docs/Attribute.md CHANGED
@@ -29,7 +29,7 @@ test.rb -- 1 warning:
29
29
 
30
30
  ## Support in Reek
31
31
 
32
- This detector it raises a warning for every public `attr_writer`,
32
+ This detector raises a warning for every public `attr_writer`,
33
33
  `attr_accessor`, and `attr` with the writable flag set to `true`.
34
34
 
35
35
  Reek does not raise warnings for read-only attributes.
@@ -38,11 +38,11 @@ Note that both smells are reported, _Boolean Parameter_ and _Control Parameter_.
38
38
 
39
39
  ## Getting rid of the smell
40
40
 
41
- This is highly dependant on your exact architecture, but looking at the example above what you could do is:
41
+ This is highly dependent on your exact architecture, but looking at the example above what you could do is:
42
42
 
43
43
  * Move everything in the `if` branch into a separate method
44
44
  * Move everything in the `else` branch into a separate method
45
- * Get rid of the `hit_the_switch` method alltogether
45
+ * Get rid of the `hit_the_switch` method altogether
46
46
  * Make the decision what method to call in the initial caller of `hit_the_switch`
47
47
 
48
48
  ## Current support in Reek
@@ -14,7 +14,7 @@ controlling parameter must be reflected on both sides of the call. A _Control
14
14
  Couple_ also reveals a loss of simplicity: the called method probably has more
15
15
  than one responsibility, because it includes at least two different code paths.
16
16
 
17
- You can find a good write-up regarding this problem [here](http://solnic.eu/2012/04/11/get-rid-of-that-code-smell-control-couple.html).
17
+ You can find a good write-up regarding this problem [here](https://solnic.codes/2012/04/11/get-rid-of-that-code-smell-control-couple/).
18
18
 
19
19
  ## Current Support in Reek
20
20
 
data/docs/Nil-Check.md CHANGED
@@ -37,7 +37,10 @@ _Nil Check_ reports use of
37
37
  * <code>.nil?</code> method
38
38
  * <code>==</code> and <code>===</code> operators when checking vs. <code>nil</code>
39
39
  * case statements that use syntax like <code>when nil</code>
40
- * use of the safe navigation operator like `foo&.bar`
40
+
41
+ _Nil Check_ allows use of
42
+
43
+ * the safe navigation operator like `foo&.bar`
41
44
 
42
45
  ## Configuration
43
46
 
@@ -27,9 +27,7 @@ def show_api_marker_section?
27
27
  return false if object.type == :root
28
28
 
29
29
  case api_text
30
- when 'public'
31
- false
32
- when 'private'
30
+ when 'public', 'private'
33
31
  false
34
32
  else
35
33
  true
@@ -43,7 +43,7 @@ Feature: Reek can be controlled using command-line options
43
43
  -c, --config FILE Read configuration options from FILE
44
44
  --smell SMELL Only look for a specific smell.
45
45
  Call it like this: reek --smell MissingSafeMethod source.rb
46
- Check out https://github.com/troessner/reek/blob/v5.6.0/docs/Code-Smells.md for a list of smells
46
+ Check out https://github.com/troessner/reek/blob/v6.0.3/docs/Code-Smells.md for a list of smells
47
47
  --stdin-filename FILE When passing code in via pipe, assume this filename when checking file or directory rules in the config.
48
48
 
49
49
  Generate a todo list:
@@ -56,7 +56,6 @@ Feature: Reek can be controlled using command-line options
56
56
  yaml
57
57
  json
58
58
  xml
59
- code_climate
60
59
 
61
60
  Text format options:
62
61
  --[no-]color Use colors for the output (default: true)
@@ -120,5 +119,5 @@ Feature: Reek can be controlled using command-line options
120
119
  UnusedPrivateMethod
121
120
  UtilityFunction
122
121
 
123
- Check out https://github.com/troessner/reek/blob/v5.6.0/docs/Code-Smells.md for a details on each detector
122
+ Check out https://github.com/troessner/reek/blob/v6.0.3/docs/Code-Smells.md for a details on each detector
124
123
  """
@@ -6,7 +6,7 @@ Feature: Validate schema
6
6
  Scenario: Our generated default configuration
7
7
  Given our default configuration file
8
8
  And the clean file "clean.rb"
9
- When I run reek -c defaults.reek clean.rb
9
+ When I run reek -c defaults.reek.yml clean.rb
10
10
  Then it succeeds
11
11
  And it reports nothing
12
12
 
@@ -4,7 +4,7 @@ Feature: Report smells using Code Climate format
4
4
 
5
5
  Scenario: output is empty when there are no smells
6
6
  Given a directory called 'clean' containing two clean files
7
- When I run reek --format code_climate clean
7
+ When I run the code climate reek runner
8
8
  Then it succeeds
9
9
  And it reports this Code Climate output:
10
10
  """
@@ -12,7 +12,7 @@ Feature: Report smells using Code Climate format
12
12
 
13
13
  Scenario: Indicate smells and print them as JSON when using files
14
14
  Given the smelly file 'smelly.rb'
15
- When I run reek --format code_climate smelly.rb
15
+ When I run the code climate reek runner
16
16
  Then it reports this Code Climate output:
17
17
  """
18
18
  {
@@ -24,7 +24,7 @@ Feature: Report smells using simple JSON layout
24
24
  "context": "Smelly#x",
25
25
  "lines": [ 4 ],
26
26
  "message": "has the name 'x'",
27
- "documentation_link": "https://github.com/troessner/reek/blob/v5.6.0/docs/Uncommunicative-Method-Name.md",
27
+ "documentation_link": "https://github.com/troessner/reek/blob/v6.0.3/docs/Uncommunicative-Method-Name.md",
28
28
  "name": "x"
29
29
  },
30
30
  {
@@ -33,7 +33,7 @@ Feature: Report smells using simple JSON layout
33
33
  "context": "Smelly#x",
34
34
  "lines": [ 5 ],
35
35
  "message": "has the variable name 'y'",
36
- "documentation_link": "https://github.com/troessner/reek/blob/v5.6.0/docs/Uncommunicative-Variable-Name.md",
36
+ "documentation_link": "https://github.com/troessner/reek/blob/v6.0.3/docs/Uncommunicative-Variable-Name.md",
37
37
  "name": "y"
38
38
  }
39
39
  ]
@@ -53,7 +53,7 @@ Feature: Report smells using simple JSON layout
53
53
  1
54
54
  ],
55
55
  "message": "has no descriptive comment",
56
- "documentation_link": "https://github.com/troessner/reek/blob/v5.6.0/docs/Irresponsible-Module.md"
56
+ "documentation_link": "https://github.com/troessner/reek/blob/v6.0.3/docs/Irresponsible-Module.md"
57
57
  }
58
58
  ]
59
59
  """
@@ -182,8 +182,8 @@ Feature: Correctly formatted reports
182
182
  And it reports:
183
183
  """
184
184
  smelly.rb -- 2 warnings:
185
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v5.6.0/docs/Uncommunicative-Method-Name.md]
186
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v5.6.0/docs/Uncommunicative-Variable-Name.md]
185
+ [4]:UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v6.0.3/docs/Uncommunicative-Method-Name.md]
186
+ [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v6.0.3/docs/Uncommunicative-Variable-Name.md]
187
187
  """
188
188
 
189
189
  Examples:
@@ -209,8 +209,8 @@ Feature: Correctly formatted reports
209
209
  And it reports:
210
210
  """
211
211
  smelly.rb -- 2 warnings:
212
- UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v5.6.0/docs/Uncommunicative-Method-Name.md]
213
- UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v5.6.0/docs/Uncommunicative-Variable-Name.md]
212
+ UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v6.0.3/docs/Uncommunicative-Method-Name.md]
213
+ UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v6.0.3/docs/Uncommunicative-Variable-Name.md]
214
214
  """
215
215
 
216
216
  Examples:
@@ -25,7 +25,7 @@ Feature: Report smells using simple YAML layout
25
25
  smell_type: UncommunicativeMethodName
26
26
  source: smelly.rb
27
27
  name: x
28
- documentation_link: https://github.com/troessner/reek/blob/v5.6.0/docs/Uncommunicative-Method-Name.md
28
+ documentation_link: https://github.com/troessner/reek/blob/v6.0.3/docs/Uncommunicative-Method-Name.md
29
29
  - context: Smelly#x
30
30
  lines:
31
31
  - 5
@@ -33,7 +33,7 @@ Feature: Report smells using simple YAML layout
33
33
  smell_type: UncommunicativeVariableName
34
34
  source: smelly.rb
35
35
  name: y
36
- documentation_link: https://github.com/troessner/reek/blob/v5.6.0/docs/Uncommunicative-Variable-Name.md
36
+ documentation_link: https://github.com/troessner/reek/blob/v6.0.3/docs/Uncommunicative-Variable-Name.md
37
37
  """
38
38
 
39
39
  Scenario: Indicate smells and print them as yaml when using STDIN
@@ -48,5 +48,5 @@ Feature: Report smells using simple YAML layout
48
48
  lines:
49
49
  - 1
50
50
  message: has no descriptive comment
51
- documentation_link: https://github.com/troessner/reek/blob/v5.6.0/docs/Irresponsible-Module.md
51
+ documentation_link: https://github.com/troessner/reek/blob/v6.0.3/docs/Irresponsible-Module.md
52
52
  """
@@ -2,7 +2,11 @@ When /^I run reek (.*)$/ do |args|
2
2
  reek(args)
3
3
  end
4
4
 
5
- When /^I pass "([^\"]*)" to reek *(.*)$/ do |stdin, args|
5
+ When 'I run the code climate reek runner' do
6
+ run_command_and_stop 'code_climate_reek'
7
+ end
8
+
9
+ When /^I pass "([^"]*)" to reek *(.*)$/ do |stdin, args|
6
10
  reek_with_pipe(stdin, args)
7
11
  end
8
12
 
@@ -44,8 +44,8 @@ Given(/^a configuration file '(.+)'$/) do |filename|
44
44
  end
45
45
 
46
46
  Given(/^our default configuration file$/) do
47
- default_configuration = File.read SAMPLES_DIR.join('..').join('docs').join('defaults.reek.yml')
48
- write_file('defaults.reek', default_configuration)
47
+ default_configuration = File.read Reek::DEFAULT_SMELL_CONFIGURATION
48
+ write_file('defaults.reek.yml', default_configuration)
49
49
  end
50
50
 
51
51
  When(/^I run "reek (.*?)" in a subdirectory$/) do |args|
@@ -1,7 +1,6 @@
1
1
  require_relative '../../lib/reek'
2
2
  require_relative '../../lib/reek/cli/application'
3
3
  require 'aruba/cucumber'
4
- require 'active_support/core_ext/string/strip'
5
4
 
6
5
  begin
7
6
  require 'pry-byebug'
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
@@ -93,6 +93,17 @@ module Reek
93
93
  module ShadowargNode
94
94
  include ArgNodeBase
95
95
  end
96
+
97
+ # Utility methods for :forward_args nodes.
98
+ # rubocop:disable Naming/ClassAndModuleCamelCase
99
+ module Forward_ArgsNode
100
+ include ArgNodeBase
101
+
102
+ def anonymous_splat?
103
+ true
104
+ end
105
+ end
106
+ # rubocop:enable Naming/ClassAndModuleCamelCase
96
107
  end
97
108
  end
98
109
  end