reek 4.6.1 → 4.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +20 -0
  3. data/CHANGELOG.md +5 -0
  4. data/Gemfile +2 -2
  5. data/README.md +3 -2
  6. data/bin/code_climate_reek +1 -0
  7. data/bin/reek +1 -0
  8. data/lib/reek.rb +1 -0
  9. data/lib/reek/ast/ast_node_class_map.rb +1 -0
  10. data/lib/reek/ast/builder.rb +16 -0
  11. data/lib/reek/ast/node.rb +1 -0
  12. data/lib/reek/ast/object_refs.rb +1 -0
  13. data/lib/reek/ast/reference_collector.rb +1 -0
  14. data/lib/reek/ast/sexp_extensions.rb +1 -0
  15. data/lib/reek/ast/sexp_extensions/arguments.rb +1 -0
  16. data/lib/reek/ast/sexp_extensions/attribute_assignments.rb +1 -0
  17. data/lib/reek/ast/sexp_extensions/block.rb +1 -0
  18. data/lib/reek/ast/sexp_extensions/case.rb +1 -0
  19. data/lib/reek/ast/sexp_extensions/constant.rb +1 -0
  20. data/lib/reek/ast/sexp_extensions/if.rb +1 -0
  21. data/lib/reek/ast/sexp_extensions/lambda.rb +1 -0
  22. data/lib/reek/ast/sexp_extensions/literal.rb +1 -0
  23. data/lib/reek/ast/sexp_extensions/logical_operators.rb +1 -0
  24. data/lib/reek/ast/sexp_extensions/methods.rb +1 -0
  25. data/lib/reek/ast/sexp_extensions/module.rb +1 -0
  26. data/lib/reek/ast/sexp_extensions/nested_assignables.rb +1 -0
  27. data/lib/reek/ast/sexp_extensions/self.rb +1 -0
  28. data/lib/reek/ast/sexp_extensions/send.rb +1 -0
  29. data/lib/reek/ast/sexp_extensions/super.rb +1 -0
  30. data/lib/reek/ast/sexp_extensions/symbols.rb +1 -0
  31. data/lib/reek/ast/sexp_extensions/variables.rb +1 -0
  32. data/lib/reek/ast/sexp_extensions/when.rb +1 -0
  33. data/lib/reek/ast/sexp_extensions/yield.rb +1 -0
  34. data/lib/reek/cli/application.rb +1 -0
  35. data/lib/reek/cli/command/base_command.rb +1 -0
  36. data/lib/reek/cli/command/report_command.rb +1 -0
  37. data/lib/reek/cli/command/todo_list_command.rb +1 -0
  38. data/lib/reek/cli/options.rb +1 -0
  39. data/lib/reek/cli/silencer.rb +1 -0
  40. data/lib/reek/cli/status.rb +1 -0
  41. data/lib/reek/configuration/app_configuration.rb +1 -0
  42. data/lib/reek/configuration/configuration_file_finder.rb +1 -0
  43. data/lib/reek/configuration/configuration_validator.rb +1 -0
  44. data/lib/reek/configuration/default_directive.rb +1 -0
  45. data/lib/reek/configuration/directory_directives.rb +1 -0
  46. data/lib/reek/configuration/excluded_paths.rb +1 -0
  47. data/lib/reek/context/attribute_context.rb +1 -0
  48. data/lib/reek/context/class_context.rb +1 -0
  49. data/lib/reek/context/code_context.rb +2 -1
  50. data/lib/reek/context/ghost_context.rb +1 -0
  51. data/lib/reek/context/method_context.rb +5 -4
  52. data/lib/reek/context/module_context.rb +1 -0
  53. data/lib/reek/context/root_context.rb +1 -0
  54. data/lib/reek/context/send_context.rb +1 -0
  55. data/lib/reek/context/singleton_attribute_context.rb +1 -0
  56. data/lib/reek/context/singleton_method_context.rb +1 -0
  57. data/lib/reek/context/statement_counter.rb +1 -0
  58. data/lib/reek/context/visibility_tracker.rb +1 -0
  59. data/lib/reek/context_builder.rb +1 -0
  60. data/lib/reek/detector_repository.rb +1 -0
  61. data/lib/reek/errors/bad_detector_configuration_key_in_comment_error.rb +1 -0
  62. data/lib/reek/errors/bad_detector_in_comment_error.rb +1 -0
  63. data/lib/reek/errors/garbage_detector_configuration_in_comment_error.rb +1 -0
  64. data/lib/reek/errors/incomprehensible_source_error.rb +1 -0
  65. data/lib/reek/errors/parse_error.rb +1 -0
  66. data/lib/reek/examiner.rb +1 -0
  67. data/lib/reek/logging_error_handler.rb +1 -0
  68. data/lib/reek/report.rb +1 -0
  69. data/lib/reek/report/base_report.rb +1 -0
  70. data/lib/reek/report/code_climate.rb +1 -0
  71. data/lib/reek/report/code_climate/code_climate_configuration.rb +1 -0
  72. data/lib/reek/report/code_climate/code_climate_fingerprint.rb +1 -0
  73. data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -0
  74. data/lib/reek/report/code_climate/code_climate_report.rb +1 -0
  75. data/lib/reek/report/formatter.rb +1 -0
  76. data/lib/reek/report/formatter/heading_formatter.rb +1 -0
  77. data/lib/reek/report/formatter/location_formatter.rb +1 -0
  78. data/lib/reek/report/formatter/progress_formatter.rb +1 -0
  79. data/lib/reek/report/formatter/wiki_link_warning_formatter.rb +1 -0
  80. data/lib/reek/report/html_report.rb +1 -0
  81. data/lib/reek/report/json_report.rb +1 -0
  82. data/lib/reek/report/text_report.rb +1 -0
  83. data/lib/reek/report/xml_report.rb +1 -0
  84. data/lib/reek/report/yaml_report.rb +1 -0
  85. data/lib/reek/smell_configuration.rb +1 -0
  86. data/lib/reek/smell_detectors.rb +1 -0
  87. data/lib/reek/smell_detectors/attribute.rb +1 -0
  88. data/lib/reek/smell_detectors/base_detector.rb +1 -0
  89. data/lib/reek/smell_detectors/boolean_parameter.rb +1 -0
  90. data/lib/reek/smell_detectors/class_variable.rb +1 -0
  91. data/lib/reek/smell_detectors/control_parameter.rb +1 -0
  92. data/lib/reek/smell_detectors/data_clump.rb +1 -0
  93. data/lib/reek/smell_detectors/duplicate_method_call.rb +1 -0
  94. data/lib/reek/smell_detectors/feature_envy.rb +1 -0
  95. data/lib/reek/smell_detectors/instance_variable_assumption.rb +1 -0
  96. data/lib/reek/smell_detectors/irresponsible_module.rb +1 -0
  97. data/lib/reek/smell_detectors/long_parameter_list.rb +1 -0
  98. data/lib/reek/smell_detectors/long_yield_list.rb +1 -0
  99. data/lib/reek/smell_detectors/manual_dispatch.rb +1 -0
  100. data/lib/reek/smell_detectors/module_initialize.rb +1 -0
  101. data/lib/reek/smell_detectors/nested_iterators.rb +1 -0
  102. data/lib/reek/smell_detectors/nil_check.rb +1 -0
  103. data/lib/reek/smell_detectors/prima_donna_method.rb +1 -0
  104. data/lib/reek/smell_detectors/repeated_conditional.rb +1 -0
  105. data/lib/reek/smell_detectors/subclassed_from_core_class.rb +1 -0
  106. data/lib/reek/smell_detectors/too_many_constants.rb +1 -0
  107. data/lib/reek/smell_detectors/too_many_instance_variables.rb +1 -0
  108. data/lib/reek/smell_detectors/too_many_methods.rb +1 -0
  109. data/lib/reek/smell_detectors/too_many_statements.rb +1 -0
  110. data/lib/reek/smell_detectors/uncommunicative_method_name.rb +1 -0
  111. data/lib/reek/smell_detectors/uncommunicative_module_name.rb +1 -0
  112. data/lib/reek/smell_detectors/uncommunicative_parameter_name.rb +1 -0
  113. data/lib/reek/smell_detectors/uncommunicative_variable_name.rb +1 -0
  114. data/lib/reek/smell_detectors/unused_parameters.rb +1 -0
  115. data/lib/reek/smell_detectors/unused_private_method.rb +3 -2
  116. data/lib/reek/smell_detectors/utility_function.rb +1 -0
  117. data/lib/reek/smell_warning.rb +1 -0
  118. data/lib/reek/source/source_code.rb +17 -3
  119. data/lib/reek/source/source_locator.rb +1 -0
  120. data/lib/reek/spec.rb +1 -0
  121. data/lib/reek/spec/should_reek.rb +1 -0
  122. data/lib/reek/spec/should_reek_of.rb +1 -0
  123. data/lib/reek/spec/should_reek_only_of.rb +1 -0
  124. data/lib/reek/spec/smell_matcher.rb +2 -1
  125. data/lib/reek/tree_dresser.rb +1 -0
  126. data/lib/reek/version.rb +2 -1
  127. data/reek.gemspec +2 -1
  128. data/spec/reek/ast/sexp_extensions_spec.rb +1 -0
  129. data/spec/reek/context/statement_counter_spec.rb +1 -0
  130. data/spec/reek/examiner_spec.rb +1 -0
  131. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +2 -0
  132. data/spec/reek/report/code_climate/code_climate_report_spec.rb +22 -22
  133. data/spec/reek/report/yaml_report_spec.rb +32 -32
  134. data/spec/reek/source/source_code_spec.rb +8 -1
  135. metadata +5 -4
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative '../ast/reference_collector'
3
4
  require_relative 'base_detector'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'forwardable'
3
4
 
4
5
  module Reek
@@ -1,10 +1,12 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative '../cli/silencer'
3
4
  Reek::CLI::Silencer.silently do
4
- require 'parser/ruby23'
5
+ require 'parser/ruby24'
5
6
  end
6
7
  require_relative '../tree_dresser'
7
8
  require_relative '../ast/node'
9
+ require_relative '../ast/builder'
8
10
  require_relative '../errors/parse_error'
9
11
 
10
12
  # Opt in to new way of representing lambdas
@@ -26,7 +28,7 @@ module Reek
26
28
  # code - Ruby code as String
27
29
  # origin - 'STDIN', 'string' or a filepath as String
28
30
  # parser - the parser to use for generating AST's out of the given source
29
- def initialize(code:, origin:, parser: Parser::Ruby23)
31
+ def initialize(code:, origin:, parser: default_parser)
30
32
  @source = code
31
33
  @origin = origin
32
34
  @parser = parser
@@ -82,11 +84,14 @@ module Reek
82
84
  #
83
85
  # @return [Anonymous subclass of Reek::AST::Node] the AST presentation
84
86
  # for the given source
87
+ # :reek:TooManyStatements: { max_statements: 7 }
85
88
  def syntax_tree
86
89
  @syntax_tree ||=
87
90
  begin
91
+ buffer = Parser::Source::Buffer.new(origin, 1)
92
+ buffer.source = source
88
93
  begin
89
- ast, comments = parser.parse_with_comments(source, origin)
94
+ ast, comments = parser.parse_with_comments(buffer)
90
95
  rescue Racc::ParseError, Parser::SyntaxError => error
91
96
  raise Errors::ParseError, origin: origin, original_exception: error
92
97
  end
@@ -100,6 +105,15 @@ module Reek
100
105
  private
101
106
 
102
107
  attr_reader :parser, :source
108
+
109
+ # :reek:UtilityFunction
110
+ def default_parser
111
+ Parser::Ruby24.new(AST::Builder.new).tap do |parser|
112
+ diagnostics = parser.diagnostics
113
+ diagnostics.all_errors_are_fatal = true
114
+ diagnostics.ignore_warnings = true
115
+ end
116
+ end
103
117
  end
104
118
  end
105
119
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'find'
3
4
  require 'pathname'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative 'spec/should_reek'
3
4
  require_relative 'spec/should_reek_of'
4
5
  require_relative 'spec/should_reek_only_of'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative '../examiner'
3
4
  require_relative '../report/formatter'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative '../examiner'
3
4
  require_relative 'smell_matcher'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative '../examiner'
3
4
  require_relative '../report/formatter'
4
5
  require_relative 'should_reek_of'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Reek
3
4
  module Spec
4
5
  #
@@ -7,7 +8,7 @@ module Reek
7
8
  class SmellMatcher
8
9
  attr_reader :smell_warning
9
10
 
10
- COMPARABLE_ATTRIBUTES = %i(message lines context source).freeze
11
+ COMPARABLE_ATTRIBUTES = [:message, :lines, :context, :source].freeze
11
12
 
12
13
  def initialize(smell_warning)
13
14
  @smell_warning = smell_warning
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative 'ast/ast_node_class_map'
3
4
 
4
5
  module Reek
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # @public
3
4
  module Reek
4
5
  #
@@ -7,6 +8,6 @@ module Reek
7
8
  # @public
8
9
  module Version
9
10
  # @public
10
- STRING = '4.6.1'.freeze
11
+ STRING = '4.6.2'.freeze
11
12
  end
12
13
  end
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+
2
3
  require File.join(File.dirname(__FILE__), 'lib/reek/version')
3
4
 
4
5
  Gem::Specification.new do |s|
@@ -22,6 +23,6 @@ Gem::Specification.new do |s|
22
23
  s.summary = 'Code smell detector for Ruby'
23
24
 
24
25
  s.add_runtime_dependency 'codeclimate-engine-rb', '~> 0.4.0'
25
- s.add_runtime_dependency 'parser', '< 2.5', '>= 2.3.1.2'
26
+ s.add_runtime_dependency 'parser', '< 2.5', '>= 2.4.0.0'
26
27
  s.add_runtime_dependency 'rainbow', '~> 2.0'
27
28
  end
@@ -253,6 +253,7 @@ end
253
253
 
254
254
  RSpec.describe Reek::AST::SexpExtensions::LvarNode do
255
255
  let(:node) { sexp(:lvar, :foo) }
256
+
256
257
  describe '#var_name' do
257
258
  it 'returns the lvar’s name' do
258
259
  expect(node.var_name).to eq(:foo)
@@ -3,6 +3,7 @@ require_lib 'reek/context/statement_counter'
3
3
 
4
4
  RSpec.describe Reek::Context::StatementCounter do
5
5
  let(:counter) { described_class.new }
6
+
6
7
  describe '#increase_by' do
7
8
  it 'does not increase if passed a falsy value' do
8
9
  counter.increase_by(nil)
@@ -145,6 +145,7 @@ RSpec.describe Reek::Examiner do
145
145
 
146
146
  describe 'bad comment config' do
147
147
  let(:examiner) { described_class.new(source) }
148
+
148
149
  context 'unknown smell detector' do
149
150
  let(:source) do
150
151
  <<-EOS
@@ -23,11 +23,13 @@ RSpec.describe Reek::Report::CodeClimateFingerprint do
23
23
 
24
24
  context 'with code at a specific location' do
25
25
  let(:lines) { [1] }
26
+
26
27
  it_behaves_like 'computes a fingerprint with no parameters'
27
28
  end
28
29
 
29
30
  context 'with code at a different location' do
30
31
  let(:lines) { [5] }
32
+
31
33
  it_behaves_like 'computes a fingerprint with no parameters'
32
34
  end
33
35
 
@@ -26,28 +26,28 @@ RSpec.describe Reek::Report::CodeClimateReport do
26
26
  let(:source) { 'def simple(a) a[3] end' }
27
27
 
28
28
  it 'prints smells as json' do
29
- expected = <<-EOS.delete("\n")
30
- {\"type\":\"issue\",
31
- \"check_name\":\"UncommunicativeParameterName\",
32
- \"description\":\"simple has the parameter name 'a'\",
33
- \"categories\":[\"Complexity\"],
34
- \"location\":{\"path\":\"string\",\"lines\":{\"begin\":1,\"end\":1}},
35
- \"remediation_points\":150000,
36
- \"content\":{\"body\":\"An `Uncommunicative Parameter Name` is a parameter name that
37
- doesn't communicate its intent well enough.\\n\\nPoor names make it hard for the reader
38
- to build a mental picture of what's going on in the code. They can also be
39
- mis-interpreted; and they hurt the flow of reading, because the reader must slow down
40
- to interpret the names.\\n\"},
41
- \"fingerprint\":\"09970037d92b5a628bf682a3e2bb126d\"}\u0000
42
- {\"type\":\"issue\",
43
- \"check_name\":\"UtilityFunction\",
44
- \"description\":\"simple doesn't depend on instance state (maybe move it to another class?)\",
45
- \"categories\":[\"Complexity\"],
46
- \"location\":{\"path\":\"string\",\"lines\":{\"begin\":1,\"end\":1}},
47
- \"remediation_points\":250000,
48
- \"content\":{\"body\":\"A _Utility Function_ is any instance method that has no
49
- dependency on the state of the instance.\\n\"},
50
- \"fingerprint\":\"db456db7cb344bb5a98b8fc54a2f382e\"}\u0000
29
+ expected = <<-EOS.strip_heredoc.delete("\n")
30
+ {\"type\":\"issue\",
31
+ \"check_name\":\"UncommunicativeParameterName\",
32
+ \"description\":\"simple has the parameter name 'a'\",
33
+ \"categories\":[\"Complexity\"],
34
+ \"location\":{\"path\":\"string\",\"lines\":{\"begin\":1,\"end\":1}},
35
+ \"remediation_points\":150000,
36
+ \"content\":{\"body\":\"An `Uncommunicative Parameter Name` is a parameter name that
37
+ doesn't communicate its intent well enough.\\n\\nPoor names make it hard for the reader
38
+ to build a mental picture of what's going on in the code. They can also be
39
+ mis-interpreted; and they hurt the flow of reading, because the reader must slow down
40
+ to interpret the names.\\n\"},
41
+ \"fingerprint\":\"09970037d92b5a628bf682a3e2bb126d\"}\u0000
42
+ {\"type\":\"issue\",
43
+ \"check_name\":\"UtilityFunction\",
44
+ \"description\":\"simple doesn't depend on instance state (maybe move it to another class?)\",
45
+ \"categories\":[\"Complexity\"],
46
+ \"location\":{\"path\":\"string\",\"lines\":{\"begin\":1,\"end\":1}},
47
+ \"remediation_points\":250000,
48
+ \"content\":{\"body\":\"A _Utility Function_ is any instance method that has no
49
+ dependency on the state of the instance.\\n\"},
50
+ \"fingerprint\":\"db456db7cb344bb5a98b8fc54a2f382e\"}\u0000
51
51
  EOS
52
52
 
53
53
  expect { instance.show }.to output(expected).to_stdout
@@ -31,21 +31,21 @@ RSpec.describe Reek::Report::YAMLReport do
31
31
  instance.show(out)
32
32
  out.rewind
33
33
  result = YAML.safe_load(out.read)
34
- expected = YAML.safe_load <<-EOS
35
- ---
36
- - context: "simple"
37
- lines:
38
- - 1
39
- message: "has the parameter name 'a'"
40
- smell_type: "UncommunicativeParameterName"
41
- source: "string"
42
- name: "a"
43
- - context: "simple"
44
- lines:
45
- - 1
46
- message: "doesn't depend on instance state (maybe move it to another class?)"
47
- smell_type: "UtilityFunction"
48
- source: "string"
34
+ expected = YAML.safe_load <<-EOS.strip_heredoc
35
+ ---
36
+ - context: "simple"
37
+ lines:
38
+ - 1
39
+ message: "has the parameter name 'a'"
40
+ smell_type: "UncommunicativeParameterName"
41
+ source: "string"
42
+ name: "a"
43
+ - context: "simple"
44
+ lines:
45
+ - 1
46
+ message: "doesn't depend on instance state (maybe move it to another class?)"
47
+ smell_type: "UtilityFunction"
48
+ source: "string"
49
49
  EOS
50
50
 
51
51
  expect(result).to eq expected
@@ -58,23 +58,23 @@ RSpec.describe Reek::Report::YAMLReport do
58
58
  instance.show(out)
59
59
  out.rewind
60
60
  result = YAML.safe_load(out.read)
61
- expected = YAML.safe_load <<-EOS
62
- ---
63
- - context: "simple"
64
- lines:
65
- - 1
66
- message: "has the parameter name 'a'"
67
- smell_type: "UncommunicativeParameterName"
68
- source: "string"
69
- name: "a"
70
- wiki_link: "https://github.com/troessner/reek/blob/master/docs/Uncommunicative-Parameter-Name.md"
71
- - context: "simple"
72
- lines:
73
- - 1
74
- message: "doesn't depend on instance state (maybe move it to another class?)"
75
- smell_type: "UtilityFunction"
76
- source: "string"
77
- wiki_link: "https://github.com/troessner/reek/blob/master/docs/Utility-Function.md"
61
+ expected = YAML.safe_load <<-EOS.strip_heredoc
62
+ ---
63
+ - context: "simple"
64
+ lines:
65
+ - 1
66
+ message: "has the parameter name 'a'"
67
+ smell_type: "UncommunicativeParameterName"
68
+ source: "string"
69
+ name: "a"
70
+ wiki_link: "https://github.com/troessner/reek/blob/master/docs/Uncommunicative-Parameter-Name.md"
71
+ - context: "simple"
72
+ lines:
73
+ - 1
74
+ message: "doesn't depend on instance state (maybe move it to another class?)"
75
+ smell_type: "UtilityFunction"
76
+ source: "string"
77
+ wiki_link: "https://github.com/troessner/reek/blob/master/docs/Utility-Function.md"
78
78
  EOS
79
79
 
80
80
  expect(result).to eq expected
@@ -23,12 +23,19 @@ RSpec.describe Reek::Source::SourceCode do
23
23
  result = source_code.syntax_tree
24
24
  expect(result).to be_nil
25
25
  end
26
+
27
+ it 'does not crash with sequences incompatible with UTF-8' do
28
+ source = '"\xFF"'
29
+ source_code = described_class.new(code: source, origin: '(string)')
30
+ result = source_code.syntax_tree
31
+ expect(result.children.first).to eq "\xFF"
32
+ end
26
33
  end
27
34
 
28
35
  context 'when the parser fails' do
29
36
  let(:source_name) { 'Test source' }
30
37
  let(:error_message) { 'Error message' }
31
- let(:parser) { class_double(Parser::Ruby23) }
38
+ let(:parser) { instance_double('Parser::Ruby24') }
32
39
  let(:src) { described_class.new(code: '', origin: source_name, parser: parser) }
33
40
 
34
41
  shared_examples_for 'handling and recording the error' do
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: 4.6.1
4
+ version: 4.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Rutherford
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-04-05 00:00:00.000000000 Z
14
+ date: 2017-04-27 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: codeclimate-engine-rb
@@ -36,7 +36,7 @@ dependencies:
36
36
  version: '2.5'
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 2.3.1.2
39
+ version: 2.4.0.0
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '2.5'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 2.3.1.2
49
+ version: 2.4.0.0
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: rainbow
52
52
  requirement: !ruby/object:Gem::Requirement
@@ -173,6 +173,7 @@ files:
173
173
  - features/todo_list.feature
174
174
  - lib/reek.rb
175
175
  - lib/reek/ast/ast_node_class_map.rb
176
+ - lib/reek/ast/builder.rb
176
177
  - lib/reek/ast/node.rb
177
178
  - lib/reek/ast/object_refs.rb
178
179
  - lib/reek/ast/reference_collector.rb