reek 5.4.0 → 6.0.1

Sign up to get free protection for your applications and to get access to all the features.
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