reek 5.4.0 → 6.0.1

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +27 -6
  4. data/.rubocop_todo.yml +4 -4
  5. data/.simplecov +1 -0
  6. data/.travis.yml +13 -11
  7. data/CHANGELOG.md +27 -1
  8. data/Dockerfile +2 -1
  9. data/Gemfile +15 -17
  10. data/README.md +15 -11
  11. data/bin/code_climate_reek +12 -2
  12. data/docs/Attribute.md +1 -1
  13. data/docs/Control-Couple.md +1 -1
  14. data/docs/Nil-Check.md +4 -1
  15. data/features/command_line_interface/options.feature +2 -3
  16. data/features/reports/codeclimate.feature +2 -2
  17. data/features/reports/json.feature +3 -3
  18. data/features/reports/reports.feature +4 -4
  19. data/features/reports/yaml.feature +3 -3
  20. data/features/step_definitions/reek_steps.rb +4 -0
  21. data/features/support/env.rb +1 -2
  22. data/lib/reek/ast/sexp_extensions/arguments.rb +11 -0
  23. data/lib/reek/cli/command/todo_list_command.rb +7 -2
  24. data/lib/reek/cli/options.rb +2 -2
  25. data/lib/reek/code_comment.rb +45 -38
  26. data/lib/reek/configuration/configuration_converter.rb +2 -2
  27. data/lib/reek/configuration/directory_directives.rb +7 -1
  28. data/lib/reek/errors/legacy_comment_separator_error.rb +36 -0
  29. data/lib/reek/examiner.rb +3 -3
  30. data/lib/reek/report.rb +5 -7
  31. data/lib/reek/report/code_climate/code_climate_report.rb +2 -1
  32. data/lib/reek/report/simple_warning_formatter.rb +0 -7
  33. data/lib/reek/report/text_report.rb +2 -2
  34. data/lib/reek/smell_detectors/base_detector.rb +2 -10
  35. data/lib/reek/smell_detectors/data_clump.rb +23 -56
  36. data/lib/reek/smell_detectors/nil_check.rb +1 -12
  37. data/lib/reek/smell_detectors/subclassed_from_core_class.rb +3 -7
  38. data/lib/reek/smell_detectors/too_many_constants.rb +1 -1
  39. data/lib/reek/smell_warning.rb +18 -14
  40. data/lib/reek/source/source_code.rb +3 -2
  41. data/lib/reek/spec/smell_matcher.rb +2 -1
  42. data/lib/reek/version.rb +1 -1
  43. data/reek.gemspec +5 -6
  44. data/spec/reek/ast/sexp_extensions_spec.rb +15 -33
  45. data/spec/reek/cli/application_spec.rb +1 -1
  46. data/spec/reek/code_comment_spec.rb +41 -42
  47. data/spec/reek/configuration/directory_directives_spec.rb +6 -0
  48. data/spec/reek/context_builder_spec.rb +110 -113
  49. data/spec/reek/examiner_spec.rb +1 -0
  50. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +1 -3
  51. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +26 -26
  52. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +6 -6
  53. data/spec/reek/report/code_climate/code_climate_report_spec.rb +1 -1
  54. data/spec/reek/report/json_report_spec.rb +1 -1
  55. data/spec/reek/report/location_formatter_spec.rb +3 -3
  56. data/spec/reek/report/text_report_spec.rb +1 -7
  57. data/spec/reek/report/yaml_report_spec.rb +1 -1
  58. data/spec/reek/smell_configuration_spec.rb +2 -0
  59. data/spec/reek/smell_detectors/base_detector_spec.rb +3 -16
  60. data/spec/reek/smell_detectors/data_clump_spec.rb +14 -0
  61. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +8 -2
  62. data/spec/reek/smell_detectors/nil_check_spec.rb +3 -3
  63. data/spec/reek/smell_warning_spec.rb +17 -28
  64. data/spec/reek/source/source_code_spec.rb +13 -0
  65. data/spec/reek/spec/should_reek_of_spec.rb +0 -1
  66. data/spec/reek/spec/should_reek_only_of_spec.rb +6 -13
  67. data/spec/reek/spec/smell_matcher_spec.rb +1 -2
  68. data/spec/spec_helper.rb +20 -6
  69. metadata +11 -26
  70. data/spec/factories/factories.rb +0 -48
@@ -5,15 +5,13 @@ require_lib 'reek/smell_detectors/duplicate_method_call'
5
5
  RSpec.describe Reek::SmellDetectors::BaseDetector do
6
6
  describe '.todo_configuration_for' do
7
7
  it 'returns exclusion configuration for the given smells' do
8
- detector = described_class.new
9
- smell = create(:smell_warning, smell_detector: detector, context: 'Foo#bar')
8
+ smell = build_smell_warning(smell_type: 'Foo', context: 'Foo#bar')
10
9
  result = described_class.todo_configuration_for([smell])
11
10
  expect(result).to eq('BaseDetector' => { 'exclude' => ['Foo#bar'] })
12
11
  end
13
12
 
14
13
  it 'merges identical contexts' do
15
- detector = described_class.new
16
- smell = create(:smell_warning, smell_detector: detector, context: 'Foo#bar')
14
+ smell = build_smell_warning(smell_type: 'Foo', context: 'Foo#bar')
17
15
  result = described_class.todo_configuration_for([smell, smell])
18
16
  expect(result).to eq('BaseDetector' => { 'exclude' => ['Foo#bar'] })
19
17
  end
@@ -22,8 +20,7 @@ RSpec.describe Reek::SmellDetectors::BaseDetector do
22
20
  let(:subclass) { Reek::SmellDetectors::TooManyStatements }
23
21
 
24
22
  it 'includes default exclusions' do
25
- detector = subclass.new
26
- smell = create(:smell_warning, smell_detector: detector, context: 'Foo#bar')
23
+ smell = build_smell_warning(smell_type: 'TooManyStatements', context: 'Foo#bar')
27
24
  result = subclass.todo_configuration_for([smell])
28
25
 
29
26
  aggregate_failures do
@@ -34,16 +31,6 @@ RSpec.describe Reek::SmellDetectors::BaseDetector do
34
31
  end
35
32
  end
36
33
 
37
- describe '.valid_detector?' do
38
- it 'returns true for a valid detector' do
39
- expect(described_class.valid_detector?('DuplicateMethodCall')).to be true
40
- end
41
-
42
- it 'returns false for an invalid detector' do
43
- expect(described_class.valid_detector?('Unknown')).to be false
44
- end
45
- end
46
-
47
34
  describe '.to_detector' do
48
35
  it 'returns the right detector' do
49
36
  expect(described_class.to_detector('DuplicateMethodCall')).to eq(Reek::SmellDetectors::DuplicateMethodCall)
@@ -76,6 +76,20 @@ RSpec.describe Reek::SmellDetectors::DataClump do
76
76
  parameters: ['echo', 'foxtrot'])
77
77
  end
78
78
 
79
+ it 'reports arguments in alphabetical order even if they are never used that way' do
80
+ src = <<-RUBY
81
+ #{scope} Alfa
82
+ def bravo (foxtrot, echo); end
83
+ def charlie(foxtrot, echo); end
84
+ def delta (foxtrot, echo); end
85
+ end
86
+ RUBY
87
+
88
+ expect(src).to reek_of(:DataClump,
89
+ count: 3,
90
+ parameters: ['echo', 'foxtrot'])
91
+ end
92
+
79
93
  it 'reports parameter sets that are > 2' do
80
94
  src = <<-RUBY
81
95
  #{scope} Alfa
@@ -50,13 +50,19 @@ RSpec.describe Reek::SmellDetectors::MissingSafeMethod do
50
50
 
51
51
  it 'does not report methods we excluded via comment' do
52
52
  source = <<-RUBY
53
- # :reek:MissingSafeMethod: { exclude: [ bravo! ] }
53
+ # :reek:MissingSafeMethod { exclude: [ bravo! ] }
54
54
  class Alfa
55
55
  def bravo!
56
56
  end
57
+
58
+ def charlie!
59
+ end
57
60
  end
58
61
  RUBY
59
62
 
60
- expect(source).not_to reek_of(:MissingSafeMethod)
63
+ aggregate_failures do
64
+ expect(source).not_to reek_of(:MissingSafeMethod, name: 'bravo!')
65
+ expect(source).to reek_of(:MissingSafeMethod, name: 'charlie!')
66
+ end
61
67
  end
62
68
  end
@@ -76,14 +76,14 @@ RSpec.describe Reek::SmellDetectors::NilCheck do
76
76
  expect(src).to reek_of(:NilCheck)
77
77
  end
78
78
 
79
- it 'reports when scope uses &.' do
79
+ it 'does not report when scope uses &.' do
80
80
  src = <<-RUBY
81
81
  def alfa(bravo)
82
82
  bravo&.charlie
83
83
  end
84
84
  RUBY
85
85
 
86
- expect(src).to reek_of(:NilCheck)
86
+ expect(src).not_to reek_of(:NilCheck)
87
87
  end
88
88
 
89
89
  it 'reports all lines when scope uses multiple nilchecks' do
@@ -95,6 +95,6 @@ RSpec.describe Reek::SmellDetectors::NilCheck do
95
95
  end
96
96
  RUBY
97
97
 
98
- expect(src).to reek_of(:NilCheck, lines: [2, 3, 4])
98
+ expect(src).to reek_of(:NilCheck, lines: [2, 3])
99
99
  end
100
100
  end
@@ -2,9 +2,6 @@ require_relative '../spec_helper'
2
2
  require_lib 'reek/smell_warning'
3
3
 
4
4
  RSpec.describe Reek::SmellWarning do
5
- let(:duplication_detector) { build(:smell_detector, smell_type: 'DuplicateMethodCall') }
6
- let(:feature_envy_detector) { build(:smell_detector, smell_type: 'FeatureEnvy') }
7
- let(:utility_function_detector) { build(:smell_detector, smell_type: 'UtilityFunction') }
8
5
  let(:uncommunicative_name_detector) { build(:smell_detector, smell_type: 'UncommunicativeVariableName') }
9
6
 
10
7
  describe 'sort order' do
@@ -27,23 +24,23 @@ RSpec.describe Reek::SmellWarning do
27
24
  end
28
25
 
29
26
  context 'when smells differ only by detector' do
30
- let(:first) { build(:smell_warning, smell_detector: duplication_detector) }
31
- let(:second) { build(:smell_warning, smell_detector: feature_envy_detector) }
27
+ let(:first) { build_smell_warning(smell_type: 'DuplicateMethodCall') }
28
+ let(:second) { build_smell_warning(smell_type: 'FeatureEnvy') }
32
29
 
33
30
  it_behaves_like 'first sorts ahead of second'
34
31
  end
35
32
 
36
33
  context 'when smells differ only by lines' do
37
- let(:first) { build(:smell_warning, smell_detector: feature_envy_detector, lines: [2]) }
38
- let(:second) { build(:smell_warning, smell_detector: feature_envy_detector, lines: [3]) }
34
+ let(:first) { build_smell_warning(smell_type: 'FeatureEnvy', lines: [2]) }
35
+ let(:second) { build_smell_warning(smell_type: 'FeatureEnvy', lines: [3]) }
39
36
 
40
37
  it_behaves_like 'first sorts ahead of second'
41
38
  end
42
39
 
43
40
  context 'when smells differ only by context' do
44
- let(:first) { build(:smell_warning, smell_detector: duplication_detector, context: 'first') }
41
+ let(:first) { build_smell_warning(smell_type: 'DuplicateMethodCall', context: 'first') }
45
42
  let(:second) do
46
- build(:smell_warning, smell_detector: duplication_detector, context: 'second')
43
+ build_smell_warning(smell_type: 'DuplicateMethodCall', context: 'second')
47
44
  end
48
45
 
49
46
  it_behaves_like 'first sorts ahead of second'
@@ -51,11 +48,11 @@ RSpec.describe Reek::SmellWarning do
51
48
 
52
49
  context 'when smells differ only by message' do
53
50
  let(:first) do
54
- build(:smell_warning, smell_detector: duplication_detector,
51
+ build_smell_warning(smell_type: 'DuplicateMethodCall',
55
52
  context: 'ctx', message: 'first message')
56
53
  end
57
54
  let(:second) do
58
- build(:smell_warning, smell_detector: duplication_detector,
55
+ build_smell_warning(smell_type: 'DuplicateMethodCall',
59
56
  context: 'ctx', message: 'second message')
60
57
  end
61
58
 
@@ -64,10 +61,10 @@ RSpec.describe Reek::SmellWarning do
64
61
 
65
62
  context 'when smells differ by name and message' do
66
63
  let(:first) do
67
- build(:smell_warning, smell_detector: feature_envy_detector, message: 'second message')
64
+ build_smell_warning(smell_type: 'FeatureEnvy', message: 'second message')
68
65
  end
69
66
  let(:second) do
70
- build(:smell_warning, smell_detector: utility_function_detector, message: 'first message')
67
+ build_smell_warning(smell_type: 'UtilityFunction', message: 'first message')
71
68
  end
72
69
 
73
70
  it_behaves_like 'first sorts ahead of second'
@@ -75,13 +72,13 @@ RSpec.describe Reek::SmellWarning do
75
72
 
76
73
  context 'when smells differ everywhere' do
77
74
  let(:first) do
78
- build(:smell_warning, smell_detector: duplication_detector,
75
+ build_smell_warning(smell_type: 'DuplicateMethodCall',
79
76
  context: 'Dirty#a',
80
77
  message: 'calls @s.title twice')
81
78
  end
82
79
 
83
80
  let(:second) do
84
- build(:smell_warning, smell_detector: uncommunicative_name_detector,
81
+ build_smell_warning(smell_type: 'UncommunicativeVariableName',
85
82
  context: 'Dirty',
86
83
  message: "has the variable name '@s'")
87
84
  end
@@ -90,28 +87,20 @@ RSpec.describe Reek::SmellWarning do
90
87
  end
91
88
  end
92
89
 
93
- describe '#smell_class' do
94
- it "returns the dectector's class" do
95
- warning = build(:smell_warning, smell_detector: duplication_detector)
96
- expect(warning.smell_class).to eq duplication_detector.class
97
- end
98
- end
99
-
100
90
  describe '#yaml_hash' do
101
91
  let(:context_name) { 'Module::Class#method/block' }
102
92
  let(:lines) { [24, 513] }
103
93
  let(:message) { 'test message' }
104
- let(:detector) { Reek::SmellDetectors::FeatureEnvy.new }
105
94
  let(:parameters) { { 'one' => 34, 'two' => 'second' } }
106
95
  let(:smell_type) { 'FeatureEnvy' }
107
96
  let(:source) { 'a/ruby/source/file.rb' }
108
97
 
109
98
  let(:yaml) do
110
- warning = described_class.new(detector, source: source,
111
- context: context_name,
112
- lines: lines,
113
- message: message,
114
- parameters: parameters)
99
+ warning = described_class.new(smell_type, source: source,
100
+ context: context_name,
101
+ lines: lines,
102
+ message: message,
103
+ parameters: parameters)
115
104
  warning.yaml_hash
116
105
  end
117
106
 
@@ -62,5 +62,18 @@ RSpec.describe Reek::Source::SourceCode do
62
62
  expect { src.syntax_tree }.to raise_error error_class, error_message
63
63
  end
64
64
  end
65
+
66
+ if RUBY_VERSION >= '2.7'
67
+ context 'with ruby 2.7 syntax' do
68
+ context 'with forward_args (`...`)' do
69
+ let(:source_code) { described_class.new(source: 'def alpha(...) bravo(...); end') }
70
+
71
+ it 'returns a :forward_args node' do
72
+ result = source_code.syntax_tree
73
+ expect(result.children[1].type).to eq(:forward_args)
74
+ end
75
+ end
76
+ end
77
+ end
65
78
  end
66
79
  end
@@ -1,7 +1,6 @@
1
1
  require 'pathname'
2
2
  require_relative '../../spec_helper'
3
3
  require_lib 'reek/spec'
4
- require 'active_support/core_ext/hash/except'
5
4
 
6
5
  RSpec.describe Reek::Spec::ShouldReekOf do
7
6
  describe 'smell type selection' do
@@ -40,19 +40,16 @@ RSpec.describe Reek::Spec::ShouldReekOnlyOf do
40
40
  end
41
41
 
42
42
  context 'with 1 non-matching smell' do
43
- let(:control_couple_detector) { build(:smell_detector, smell_type: 'ControlParameter') }
44
- let(:smells) { [build(:smell_warning, smell_detector: control_couple_detector)] }
43
+ let(:smells) { [build_smell_warning(smell_type: 'ControlParameter')] }
45
44
 
46
45
  it_behaves_like 'no match'
47
46
  end
48
47
 
49
48
  context 'with 2 non-matching smells' do
50
- let(:control_couple_detector) { build(:smell_detector, smell_type: 'ControlParameter') }
51
- let(:feature_envy_detector) { build(:smell_detector, smell_type: 'FeatureEnvy') }
52
49
  let(:smells) do
53
50
  [
54
- build(:smell_warning, smell_detector: control_couple_detector),
55
- build(:smell_warning, smell_detector: feature_envy_detector)
51
+ build_smell_warning(smell_type: 'ControlParameter'),
52
+ build_smell_warning(smell_type: 'FeatureEnvy')
56
53
  ]
57
54
  end
58
55
 
@@ -60,12 +57,10 @@ RSpec.describe Reek::Spec::ShouldReekOnlyOf do
60
57
  end
61
58
 
62
59
  context 'with 1 non-matching and 1 matching smell' do
63
- let(:control_couple_detector) { build(:smell_detector, smell_type: 'ControlParameter') }
64
60
  let(:smells) do
65
- detector = build(:smell_detector, smell_type: expected_smell_type.to_s)
66
61
  [
67
- build(:smell_warning, smell_detector: control_couple_detector),
68
- build(:smell_warning, smell_detector: detector,
62
+ build_smell_warning(smell_type: 'ControlParameter'),
63
+ build_smell_warning(smell_type: expected_smell_type.to_s,
69
64
  message: "message mentioning #{expected_context_name}")
70
65
  ]
71
66
  end
@@ -75,9 +70,7 @@ RSpec.describe Reek::Spec::ShouldReekOnlyOf do
75
70
 
76
71
  context 'with 1 matching smell' do
77
72
  let(:smells) do
78
- detector = build(:smell_detector, smell_type: expected_smell_type.to_s)
79
-
80
- [build(:smell_warning, smell_detector: detector,
73
+ [build_smell_warning(smell_type: expected_smell_type.to_s,
81
74
  message: "message mentioning #{expected_context_name}")]
82
75
  end
83
76
 
@@ -2,9 +2,8 @@ require_relative '../../spec_helper'
2
2
  require_lib 'reek/spec/smell_matcher'
3
3
 
4
4
  RSpec.describe Reek::Spec::SmellMatcher do
5
- let(:detector) { build(:smell_detector, smell_type: 'UncommunicativeVariableName') }
6
5
  let(:smell_warning) do
7
- build(:smell_warning, smell_detector: detector,
6
+ build_smell_warning(smell_type: 'UncommunicativeVariableName',
8
7
  message: "has the variable name '@s'",
9
8
  parameters: { test: 'something' })
10
9
  end
@@ -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'
@@ -11,12 +10,9 @@ require_relative '../samples/paths'
11
10
 
12
11
  begin
13
12
  Reek::CLI::Silencer.without_warnings { require 'pry-byebug' }
14
- rescue LoadError # rubocop:disable Lint/HandleExceptions
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
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reek
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.4.0
4
+ version: 6.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Rutherford
@@ -11,22 +11,8 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2019-04-24 00:00:00.000000000 Z
14
+ date: 2020-05-26 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,28 +31,28 @@ dependencies:
45
31
  name: parser
46
32
  requirement: !ruby/object:Gem::Requirement
47
33
  requirements:
48
- - - "<"
49
- - !ruby/object:Gem::Version
50
- version: '2.7'
51
34
  - - ">="
52
35
  - !ruby/object:Gem::Version
53
36
  version: 2.5.0.0
54
37
  - - "!="
55
38
  - !ruby/object:Gem::Version
56
39
  version: 2.5.1.1
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.8'
57
43
  type: :runtime
58
44
  prerelease: false
59
45
  version_requirements: !ruby/object:Gem::Requirement
60
46
  requirements:
61
- - - "<"
62
- - !ruby/object:Gem::Version
63
- version: '2.7'
64
47
  - - ">="
65
48
  - !ruby/object:Gem::Version
66
49
  version: 2.5.0.0
67
50
  - - "!="
68
51
  - !ruby/object:Gem::Version
69
52
  version: 2.5.1.1
53
+ - - "<"
54
+ - !ruby/object:Gem::Version
55
+ version: '2.8'
70
56
  - !ruby/object:Gem::Dependency
71
57
  name: psych
72
58
  requirement: !ruby/object:Gem::Requirement
@@ -281,6 +267,7 @@ files:
281
267
  - lib/reek/errors/encoding_error.rb
282
268
  - lib/reek/errors/garbage_detector_configuration_in_comment_error.rb
283
269
  - lib/reek/errors/incomprehensible_source_error.rb
270
+ - lib/reek/errors/legacy_comment_separator_error.rb
284
271
  - lib/reek/errors/syntax_error.rb
285
272
  - lib/reek/examiner.rb
286
273
  - lib/reek/logging_error_handler.rb
@@ -385,7 +372,6 @@ files:
385
372
  - samples/source_with_non_ruby_files/gibberish
386
373
  - samples/source_with_non_ruby_files/python_source.py
387
374
  - samples/source_with_non_ruby_files/ruby.rb
388
- - spec/factories/factories.rb
389
375
  - spec/performance/reek/smell_detectors/runtime_speed_spec.rb
390
376
  - spec/quality/documentation_spec.rb
391
377
  - spec/quality/reek_source_spec.rb
@@ -492,15 +478,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
492
478
  requirements:
493
479
  - - ">="
494
480
  - !ruby/object:Gem::Version
495
- version: 2.3.0
481
+ version: 2.4.0
496
482
  required_rubygems_version: !ruby/object:Gem::Requirement
497
483
  requirements:
498
484
  - - ">="
499
485
  - !ruby/object:Gem::Version
500
486
  version: '0'
501
487
  requirements: []
502
- rubyforge_project:
503
- rubygems_version: 2.7.7
488
+ rubygems_version: 3.0.3
504
489
  signing_key:
505
490
  specification_version: 4
506
491
  summary: Code smell detector for Ruby