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
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'pathname'
2
2
  require 'timeout'
3
- require 'active_support/core_ext/string/strip'
4
3
  require 'rspec-benchmark'
5
4
  require_relative '../lib/reek'
6
5
  require_relative '../lib/reek/spec'
@@ -14,9 +13,6 @@ begin
14
13
  rescue LoadError # rubocop:disable Lint/SuppressedException
15
14
  end
16
15
 
17
- require 'factory_bot'
18
- FactoryBot.find_definitions
19
-
20
16
  # Simple helpers for our specs.
21
17
  module Helpers
22
18
  def test_configuration_for(config)
@@ -70,14 +66,32 @@ module Helpers
70
66
  @klass_map ||= Reek::AST::ASTNodeClassMap.new
71
67
  @klass_map.klass_for(type).new(type, children)
72
68
  end
69
+
70
+ def build_smell_warning(smell_type: 'FeatureEnvy',
71
+ context: 'self',
72
+ lines: [42],
73
+ message: 'smell warning message',
74
+ source: 'dummy_file',
75
+ parameters: {})
76
+ Reek::SmellWarning.new(smell_type,
77
+ context: context,
78
+ lines: lines,
79
+ message: message,
80
+ source: source,
81
+ parameters: parameters)
82
+ end
83
+
84
+ def build_code_comment(comment: '', line: 1, source: 'string')
85
+ Reek::CodeComment.new(comment: comment, line: line, source: source)
86
+ end
73
87
  end
74
88
 
75
89
  RSpec.configure do |config|
76
90
  config.filter_run :focus
77
91
  config.run_all_when_everything_filtered = true
78
- config.include FactoryBot::Syntax::Methods
79
92
  config.include Helpers
80
93
  config.include RSpec::Benchmark::Matchers
94
+ config.example_status_persistence_file_path = 'spec/examples.txt'
81
95
 
82
96
  config.disable_monkey_patching!
83
97
 
@@ -8,11 +8,10 @@ require 'yaml'
8
8
  namespace :configuration do
9
9
  desc 'Updates the default configuration file when smell defaults change'
10
10
  task :update_default_configuration do
11
- DEFAULT_SMELL_CONFIGURATION = 'docs/defaults.reek.yml'.freeze
12
11
  content = Reek::DetectorRepository.smell_types.each_with_object({}) do |klass, hash|
13
12
  hash[klass.smell_type] = Reek::Configuration::RakeTaskConverter.convert klass.default_config
14
13
  end
15
- File.open(DEFAULT_SMELL_CONFIGURATION, 'w') do |file|
14
+ File.open(Reek::DEFAULT_SMELL_CONFIGURATION, 'w') do |file|
16
15
  YAML.dump({ Reek::DETECTORS_KEY => content }, file)
17
16
  end
18
17
  end
metadata CHANGED
@@ -1,32 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reek
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.0
4
+ version: 6.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Rutherford
8
8
  - Timo Roessner
9
9
  - Matijs van Zuijlen
10
10
  - Piotr Szotkowski
11
- autorequire:
11
+ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2020-01-20 00:00:00.000000000 Z
14
+ date: 2021-01-11 00:00:00.000000000 Z
15
15
  dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: codeclimate-engine-rb
18
- requirement: !ruby/object:Gem::Requirement
19
- requirements:
20
- - - "~>"
21
- - !ruby/object:Gem::Version
22
- version: 0.4.0
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: 0.4.0
30
16
  - !ruby/object:Gem::Dependency
31
17
  name: kwalify
32
18
  requirement: !ruby/object:Gem::Requirement
@@ -45,42 +31,30 @@ dependencies:
45
31
  name: parser
46
32
  requirement: !ruby/object:Gem::Requirement
47
33
  requirements:
48
- - - "<"
49
- - !ruby/object:Gem::Version
50
- version: '2.8'
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- version: 2.5.0.0
54
- - - "!="
34
+ - - "~>"
55
35
  - !ruby/object:Gem::Version
56
- version: 2.5.1.1
36
+ version: 3.0.0
57
37
  type: :runtime
58
38
  prerelease: false
59
39
  version_requirements: !ruby/object:Gem::Requirement
60
40
  requirements:
61
- - - "<"
62
- - !ruby/object:Gem::Version
63
- version: '2.8'
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: 2.5.0.0
67
- - - "!="
41
+ - - "~>"
68
42
  - !ruby/object:Gem::Version
69
- version: 2.5.1.1
43
+ version: 3.0.0
70
44
  - !ruby/object:Gem::Dependency
71
45
  name: psych
72
46
  requirement: !ruby/object:Gem::Requirement
73
47
  requirements:
74
48
  - - "~>"
75
49
  - !ruby/object:Gem::Version
76
- version: 3.1.0
50
+ version: '3.1'
77
51
  type: :runtime
78
52
  prerelease: false
79
53
  version_requirements: !ruby/object:Gem::Requirement
80
54
  requirements:
81
55
  - - "~>"
82
56
  - !ruby/object:Gem::Version
83
- version: 3.1.0
57
+ version: '3.1'
84
58
  - !ruby/object:Gem::Dependency
85
59
  name: rainbow
86
60
  requirement: !ruby/object:Gem::Requirement
@@ -114,12 +88,13 @@ extra_rdoc_files:
114
88
  - License.txt
115
89
  files:
116
90
  - ".dockerignore"
91
+ - ".github/dependabot.yml"
92
+ - ".github/workflows/ruby.yml"
117
93
  - ".gitignore"
118
94
  - ".reek.yml"
119
95
  - ".rubocop.yml"
120
96
  - ".rubocop_todo.yml"
121
97
  - ".simplecov"
122
- - ".travis.yml"
123
98
  - ".yardopts"
124
99
  - CHANGELOG.md
125
100
  - CONTRIBUTING.md
@@ -265,6 +240,7 @@ files:
265
240
  - lib/reek/context/ghost_context.rb
266
241
  - lib/reek/context/method_context.rb
267
242
  - lib/reek/context/module_context.rb
243
+ - lib/reek/context/refinement_context.rb
268
244
  - lib/reek/context/root_context.rb
269
245
  - lib/reek/context/send_context.rb
270
246
  - lib/reek/context/singleton_attribute_context.rb
@@ -281,6 +257,7 @@ files:
281
257
  - lib/reek/errors/encoding_error.rb
282
258
  - lib/reek/errors/garbage_detector_configuration_in_comment_error.rb
283
259
  - lib/reek/errors/incomprehensible_source_error.rb
260
+ - lib/reek/errors/legacy_comment_separator_error.rb
284
261
  - lib/reek/errors/syntax_error.rb
285
262
  - lib/reek/examiner.rb
286
263
  - lib/reek/logging_error_handler.rb
@@ -385,7 +362,6 @@ files:
385
362
  - samples/source_with_non_ruby_files/gibberish
386
363
  - samples/source_with_non_ruby_files/python_source.py
387
364
  - samples/source_with_non_ruby_files/ruby.rb
388
- - spec/factories/factories.rb
389
365
  - spec/performance/reek/smell_detectors/runtime_speed_spec.rb
390
366
  - spec/quality/documentation_spec.rb
391
367
  - spec/quality/reek_source_spec.rb
@@ -479,8 +455,13 @@ files:
479
455
  homepage: https://github.com/troessner/reek
480
456
  licenses:
481
457
  - MIT
482
- metadata: {}
483
- post_install_message:
458
+ metadata:
459
+ homepage_uri: https://github.com/troessner/reek
460
+ source_code_uri: https://github.com/troessner/reek
461
+ bug_tracker_uri: https://github.com/troessner/reek/issues
462
+ changelog_uri: https://github.com/troessner/reek/CHANGELOG.md
463
+ documentation_uri: https://www.rubydoc.info/gems/reek
464
+ post_install_message:
484
465
  rdoc_options:
485
466
  - "--main"
486
467
  - README.md
@@ -492,15 +473,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
492
473
  requirements:
493
474
  - - ">="
494
475
  - !ruby/object:Gem::Version
495
- version: 2.3.0
476
+ version: 2.4.0
496
477
  required_rubygems_version: !ruby/object:Gem::Requirement
497
478
  requirements:
498
479
  - - ">="
499
480
  - !ruby/object:Gem::Version
500
481
  version: '0'
501
482
  requirements: []
502
- rubygems_version: 3.1.2
503
- signing_key:
483
+ rubyforge_project:
484
+ rubygems_version: 2.7.7
485
+ signing_key:
504
486
  specification_version: 4
505
487
  summary: Code smell detector for Ruby
506
488
  test_files: []
data/.travis.yml DELETED
@@ -1,35 +0,0 @@
1
- dist: trusty
2
- cache: bundler
3
- language: ruby
4
- bundler_args: --without debugging
5
- before_script:
6
- # Avoid Java announcing _JAVA_OPTIONS environment variable
7
- # See https://github.com/travis-ci/travis-ci/issues/8408
8
- - unset _JAVA_OPTIONS
9
- script: bundle exec rake ci
10
- rvm:
11
- - 2.3
12
- - 2.4
13
- - 2.5
14
- - 2.6
15
- - 2.7
16
- - jruby-9.1.17.0
17
- - jruby-9.2.6.0
18
- - jruby-head
19
- - ruby-head
20
- - rubinius-3
21
- matrix:
22
- allow_failures:
23
- - rvm: jruby-head
24
- - rvm: ruby-head
25
- - rvm: rubinius-3
26
- fast_finish: true
27
- notifications:
28
- email:
29
- - timo.roessner@googlemail.com
30
- - matijs@matijs.net
31
- - chastell@chastell.net
32
- irc: irc.freenode.org#reek
33
- branches:
34
- only:
35
- - master
@@ -1,37 +0,0 @@
1
- require_relative '../../lib/reek/smell_detectors'
2
- require_relative '../../lib/reek/smell_detectors/base_detector'
3
- require_relative '../../lib/reek/smell_warning'
4
- require_relative '../../lib/reek/cli/options'
5
-
6
- FactoryBot.define do
7
- factory :smell_warning, class: 'Reek::SmellWarning' do
8
- skip_create
9
-
10
- smell_type { 'FeatureEnvy' }
11
- source { 'dummy_file' }
12
- lines { [42] }
13
- message { 'smell warning message' }
14
- parameters { {} }
15
- context { 'self' }
16
-
17
- initialize_with do
18
- new(smell_type,
19
- source: source,
20
- context: context,
21
- lines: lines,
22
- message: message,
23
- parameters: parameters)
24
- end
25
- end
26
-
27
- factory :code_comment, class: 'Reek::CodeComment' do
28
- comment { '' }
29
- line { 1 }
30
- source { 'string' }
31
- initialize_with do
32
- new comment: comment,
33
- line: line,
34
- source: source
35
- end
36
- end
37
- end