reek 6.1.0 → 6.2.0

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +4 -0
  3. data/.github/workflows/ruby.yml +7 -7
  4. data/.rubocop.yml +2 -10
  5. data/CHANGELOG.md +69 -0
  6. data/CONTRIBUTING.md +7 -10
  7. data/Gemfile +7 -6
  8. data/README.md +28 -28
  9. data/bin/code_climate_reek +54 -5
  10. data/lib/reek/ast/sexp_extensions/arguments.rb +9 -0
  11. data/lib/reek/ast/sexp_extensions/send.rb +21 -6
  12. data/lib/reek/cli/command/todo_list_command.rb +2 -2
  13. data/lib/reek/cli/options.rb +5 -5
  14. data/lib/reek/{report/code_climate → code_climate}/code_climate_configuration.rb +1 -1
  15. data/lib/reek/{report/code_climate → code_climate}/code_climate_configuration.yml +41 -41
  16. data/lib/reek/{report/code_climate → code_climate}/code_climate_fingerprint.rb +2 -2
  17. data/lib/reek/{report/code_climate → code_climate}/code_climate_formatter.rb +1 -1
  18. data/lib/reek/{report/code_climate → code_climate}/code_climate_report.rb +3 -3
  19. data/lib/reek/code_comment.rb +3 -3
  20. data/lib/reek/configuration/app_configuration.rb +5 -5
  21. data/lib/reek/configuration/configuration_converter.rb +1 -1
  22. data/lib/reek/configuration/configuration_file_finder.rb +5 -4
  23. data/lib/reek/configuration/default_directive.rb +1 -1
  24. data/lib/reek/configuration/directory_directives.rb +1 -1
  25. data/lib/reek/configuration/excluded_paths.rb +1 -1
  26. data/lib/reek/configuration/schema.rb +177 -0
  27. data/lib/reek/configuration/schema_validator.rb +12 -13
  28. data/lib/reek/context/attribute_context.rb +1 -1
  29. data/lib/reek/context/method_context.rb +1 -1
  30. data/lib/reek/context/module_context.rb +4 -0
  31. data/lib/reek/context/send_context.rb +7 -1
  32. data/lib/reek/documentation_link.rb +3 -5
  33. data/lib/reek/errors/bad_detector_configuration_key_in_comment_error.rb +2 -2
  34. data/lib/reek/errors/bad_detector_in_comment_error.rb +2 -2
  35. data/lib/reek/errors/encoding_error.rb +1 -1
  36. data/lib/reek/errors/garbage_detector_configuration_in_comment_error.rb +2 -2
  37. data/lib/reek/errors/incomprehensible_source_error.rb +1 -1
  38. data/lib/reek/errors/legacy_comment_separator_error.rb +2 -2
  39. data/lib/reek/errors/syntax_error.rb +1 -1
  40. data/lib/reek/rake/task.rb +5 -5
  41. data/lib/reek/smell_detectors/class_variable.rb +2 -2
  42. data/lib/reek/smell_detectors/control_parameter_helpers/candidate.rb +6 -6
  43. data/lib/reek/smell_detectors/control_parameter_helpers/control_parameter_finder.rb +1 -1
  44. data/lib/reek/smell_detectors/duplicate_method_call.rb +5 -5
  45. data/lib/reek/smell_detectors/instance_variable_assumption.rb +8 -8
  46. data/lib/reek/smell_detectors/nested_iterators.rb +4 -3
  47. data/lib/reek/smell_detectors/unused_private_method.rb +3 -2
  48. data/lib/reek/spec/should_reek_of.rb +7 -7
  49. data/lib/reek/spec.rb +1 -1
  50. data/lib/reek/version.rb +1 -1
  51. data/reek.gemspec +4 -3
  52. metadata +30 -16
  53. data/lib/reek/configuration/schema.yml +0 -210
  54. /data/lib/reek/{report/code_climate.rb → code_climate.rb} +0 -0
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'yaml'
4
- require_relative '../cli/silencer'
5
- Reek::CLI::Silencer.without_warnings { require 'kwalify' }
6
3
  require_relative '../errors/config_file_error'
4
+ require_relative 'schema'
7
5
 
8
6
  module Reek
9
7
  module Configuration
@@ -11,28 +9,29 @@ module Reek
11
9
  # Schema validator module.
12
10
  #
13
11
  class SchemaValidator
14
- SCHEMA_FILE_PATH = File.expand_path('./schema.yml', __dir__)
15
-
16
12
  def initialize(configuration)
17
13
  @configuration = configuration
18
- @validator = CLI::Silencer.without_warnings do
19
- schema_file = Kwalify::Yaml.load_file(SCHEMA_FILE_PATH)
20
- Kwalify::Validator.new(schema_file)
21
- end
14
+ config_directories = configuration['directories']&.keys || []
15
+ @validator = Reek::Configuration::Schema.schema(config_directories)
22
16
  end
23
17
 
24
18
  def validate
25
- errors = CLI::Silencer.without_warnings { @validator.validate @configuration }
26
- return if !errors || errors.empty?
19
+ result = @validator.call(@configuration)
20
+ return if result.success?
27
21
 
28
- raise Errors::ConfigFileError, error_message(errors)
22
+ raise Errors::ConfigFileError, error_message(result.errors)
23
+ rescue NoMethodError
24
+ raise Errors::ConfigFileError, 'unrecognized configuration data'
29
25
  end
30
26
 
31
27
  private
32
28
 
33
29
  # :reek:UtilityFunction
34
30
  def error_message(errors)
35
- "We found some problems with your configuration file: #{CLI::Silencer.silently { errors.join(', ') }}"
31
+ messages = errors.map do |error|
32
+ "[/#{error.path.join('/')}] #{error.text}."
33
+ end.join("\n")
34
+ "\n#{messages}"
36
35
  end
37
36
  end
38
37
  end
@@ -14,7 +14,7 @@ module Reek
14
14
  def initialize(exp, send_expression)
15
15
  @visibility = :public
16
16
  @send_expression = send_expression
17
- super exp
17
+ super(exp)
18
18
  end
19
19
 
20
20
  def full_comment
@@ -15,7 +15,7 @@ module Reek
15
15
  def initialize(exp, parent_exp)
16
16
  @parent_exp = parent_exp
17
17
  @visibility = :public
18
- super exp
18
+ super(exp)
19
19
  end
20
20
 
21
21
  def references_self?
@@ -55,6 +55,10 @@ module Reek
55
55
  end
56
56
  end
57
57
 
58
+ def instance_method_names_via_to_call
59
+ instance_method_calls.flat_map(&:method_name_called_to_call).compact
60
+ end
61
+
58
62
  #
59
63
  # @deprecated use `defined_instance_methods` instead
60
64
  #
@@ -12,7 +12,13 @@ module Reek
12
12
 
13
13
  def initialize(exp, name)
14
14
  @name = name
15
- super exp
15
+ super(exp)
16
+ end
17
+
18
+ def method_name_called_to_call
19
+ return unless @name == :method
20
+
21
+ local_nodes(:sym).map(&:name)
16
22
  end
17
23
  end
18
24
  end
@@ -17,12 +17,10 @@ module Reek
17
17
  Kernel.format(HELP_LINK_TEMPLATE, version: Version::STRING, item: name_to_param(subject))
18
18
  end
19
19
 
20
- # Convert the given subject name to a form that is acceptable in a URL.
20
+ # Convert the given subject name to a form that is acceptable in a URL, by
21
+ # dasherizeing it at the start of capitalized words. Spaces are discared.
21
22
  def name_to_param(name)
22
- # Splits the subject on the start of capitalized words, optionally
23
- # preceded by a space. The space is discarded, the start of the word is
24
- # not.
25
- name.split(/ *(?=[A-Z][a-z])/).join('-')
23
+ name.split(/([A-Z][a-z][a-z]*)/).map(&:strip).reject(&:empty?).join('-')
26
24
  end
27
25
  end
28
26
  end
@@ -8,7 +8,7 @@ module Reek
8
8
  # Gets raised when trying to configure a detector with an option
9
9
  # which is unknown to it.
10
10
  class BadDetectorConfigurationKeyInCommentError < BaseError
11
- UNKNOWN_SMELL_DETECTOR_MESSAGE = <<-MESSAGE
11
+ UNKNOWN_SMELL_DETECTOR_MESSAGE = <<-MESSAGE.freeze
12
12
 
13
13
  Error: You are trying to configure the smell detector '%<detector>s'
14
14
  in one of your source code comments with the unknown option %<option>s.
@@ -32,7 +32,7 @@ module Reek
32
32
  source: source,
33
33
  line: line,
34
34
  comment: original_comment)
35
- super message
35
+ super(message)
36
36
  end
37
37
  end
38
38
  end
@@ -9,7 +9,7 @@ module Reek
9
9
  # This might happen for multiple reasons. The users might have a typo in
10
10
  # his comment or he might use a detector that does not exist anymore.
11
11
  class BadDetectorInCommentError < BaseError
12
- UNKNOWN_SMELL_DETECTOR_MESSAGE = <<-MESSAGE
12
+ UNKNOWN_SMELL_DETECTOR_MESSAGE = <<-MESSAGE.freeze
13
13
 
14
14
  Error: You are trying to configure an unknown smell detector '%<detector>s' in one
15
15
  of your source code comments.
@@ -31,7 +31,7 @@ module Reek
31
31
  source: source,
32
32
  line: line,
33
33
  comment: original_comment)
34
- super message
34
+ super(message)
35
35
  end
36
36
  end
37
37
  end
@@ -29,7 +29,7 @@ module Reek
29
29
  MESSAGE
30
30
 
31
31
  def initialize(origin:)
32
- super format(TEMPLATE, source: origin)
32
+ super(format(TEMPLATE, source: origin))
33
33
  end
34
34
 
35
35
  def long_message
@@ -8,7 +8,7 @@ module Reek
8
8
  # Gets raised when trying to use a configuration for a detector
9
9
  # that can't be parsed into a hash.
10
10
  class GarbageDetectorConfigurationInCommentError < BaseError
11
- BAD_DETECTOR_CONFIGURATION_MESSAGE = <<-MESSAGE
11
+ BAD_DETECTOR_CONFIGURATION_MESSAGE = <<-MESSAGE.freeze
12
12
 
13
13
  Error: You are trying to configure the smell detector '%<detector>s'.
14
14
  Unfortunately we cannot parse the configuration you have given.
@@ -30,7 +30,7 @@ module Reek
30
30
  source: source,
31
31
  line: line,
32
32
  comment: original_comment)
33
- super message
33
+ super(message)
34
34
  end
35
35
  end
36
36
  end
@@ -32,7 +32,7 @@ module Reek
32
32
  MESSAGE
33
33
 
34
34
  def initialize(origin:)
35
- super format(TEMPLATE, source: origin)
35
+ super(format(TEMPLATE, source: origin))
36
36
  end
37
37
 
38
38
  def long_message
@@ -6,7 +6,7 @@ module Reek
6
6
  module Errors
7
7
  # Gets raised for old-style comment configuration format.
8
8
  class LegacyCommentSeparatorError < BaseError
9
- MESSAGE = <<-MESSAGE
9
+ MESSAGE = <<-MESSAGE.freeze
10
10
  Error: You are using the legacy configuration format (including three
11
11
  colons) to configure Reek in one your source code comments.
12
12
 
@@ -29,7 +29,7 @@ module Reek
29
29
  source: source,
30
30
  line: line,
31
31
  comment: original_comment)
32
- super message
32
+ super(message)
33
33
  end
34
34
  end
35
35
  end
@@ -31,7 +31,7 @@ module Reek
31
31
  MESSAGE
32
32
 
33
33
  def initialize(origin:)
34
- super format(TEMPLATE, source: origin)
34
+ super(format(TEMPLATE, source: origin))
35
35
  end
36
36
 
37
37
  def long_message
@@ -69,15 +69,15 @@ module Reek
69
69
 
70
70
  # @public
71
71
  def initialize(name = :reek)
72
- @config_file = ENV['REEK_CFG']
72
+ @config_file = ENV.fetch('REEK_CFG', nil)
73
73
  @name = name
74
- @reek_opts = ENV['REEK_OPTS'] || ''
74
+ @reek_opts = ENV.fetch('REEK_OPTS', '')
75
75
  @fail_on_error = true
76
76
  @verbose = false
77
77
 
78
78
  yield self if block_given?
79
79
 
80
- if (reek_src = ENV['REEK_SRC'])
80
+ if (reek_src = ENV.fetch('REEK_SRC', nil))
81
81
  @source_files = FileList[reek_src]
82
82
  end
83
83
  @source_files ||= FileList['lib/**/*.rb']
@@ -87,8 +87,8 @@ module Reek
87
87
  # @public
88
88
  def source_files=(files)
89
89
  unless files.is_a?(String) || files.is_a?(FileList)
90
- raise ArgumentError, 'File list should be a FileList or a String that can contain'\
91
- " a glob pattern, e.g. '{app,lib,spec}/**/*.rb'"
90
+ raise ArgumentError, 'File list should be a FileList or a String that can contain ' \
91
+ "a glob pattern, e.g. '{app,lib,spec}/**/*.rb'"
92
92
  end
93
93
  @source_files = FileList[files]
94
94
  end
@@ -25,8 +25,8 @@ module Reek
25
25
  # @return [Array<SmellWarning>]
26
26
  #
27
27
  def sniff
28
- class_variables_in_context.map do |variable, occurences|
29
- lines = occurences.map(&:line)
28
+ class_variables_in_context.map do |variable, occurrences|
29
+ lines = occurrences.map(&:line)
30
30
  smell_warning(
31
31
  lines: lines,
32
32
  message: "declares the class variable '#{variable}'",
@@ -9,20 +9,20 @@ module Reek
9
9
  class Candidate
10
10
  #
11
11
  # @param parameter [Symbol] the parameter name
12
- # @param occurences [Array<Reek::AST::Node>] the occurences of the ControlParameter smell
12
+ # @param occurrences [Array<Reek::AST::Node>] the occurrences of the ControlParameter smell
13
13
  # e.g. [s(:lvar, :bravo), s(:lvar, :bravo)]
14
14
  #
15
- def initialize(parameter, occurences)
15
+ def initialize(parameter, occurrences)
16
16
  @parameter = parameter
17
- @occurences = occurences
17
+ @occurrences = occurrences
18
18
  end
19
19
 
20
20
  def smells?
21
- occurences.any?
21
+ occurrences.any?
22
22
  end
23
23
 
24
24
  def lines
25
- occurences.map(&:line)
25
+ occurrences.map(&:line)
26
26
  end
27
27
 
28
28
  def name
@@ -31,7 +31,7 @@ module Reek
31
31
 
32
32
  private
33
33
 
34
- attr_reader :occurences, :parameter
34
+ attr_reader :occurrences, :parameter
35
35
  end
36
36
  end
37
37
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative './call_in_condition_finder'
3
+ require_relative 'call_in_condition_finder'
4
4
  require_relative '../../ast/node'
5
5
 
6
6
  module Reek
@@ -67,11 +67,11 @@ module Reek
67
67
  class FoundCall
68
68
  def initialize(call_node)
69
69
  @call_node = call_node
70
- @occurences = []
70
+ @occurrences = []
71
71
  end
72
72
 
73
73
  def record(occurence)
74
- occurences.push occurence
74
+ occurrences.push occurence
75
75
  end
76
76
 
77
77
  def call
@@ -79,16 +79,16 @@ module Reek
79
79
  end
80
80
 
81
81
  def occurs
82
- occurences.length
82
+ occurrences.length
83
83
  end
84
84
 
85
85
  def lines
86
- occurences.map(&:line)
86
+ occurrences.map(&:line)
87
87
  end
88
88
 
89
89
  private
90
90
 
91
- attr_reader :call_node, :occurences
91
+ attr_reader :call_node, :occurrences
92
92
  end
93
93
 
94
94
  private_constant :FoundCall
@@ -20,7 +20,7 @@ module Reek
20
20
  # @return [Array<SmellWarning>]
21
21
  #
22
22
  def sniff
23
- assumptions = (variables_from_context - variables_from_initialize).uniq
23
+ assumptions = (variables_from_context - variables_from_initializers).uniq
24
24
 
25
25
  assumptions.map do |assumption|
26
26
  build_smell_warning(assumption)
@@ -42,14 +42,14 @@ module Reek
42
42
  parameters: { assumption: assumption.to_s })
43
43
  end
44
44
 
45
- def variables_from_initialize
46
- initialize_exp = method_expressions.detect do |method|
47
- method.name == :initialize
48
- end
49
-
50
- return [] unless initialize_exp
45
+ def variables_from_initializers
46
+ variables_from_initialize.map do |method|
47
+ method.each_node(:ivasgn).map(&:name)
48
+ end.flatten
49
+ end
51
50
 
52
- initialize_exp.each_node(:ivasgn).map(&:name)
51
+ def variables_from_initialize
52
+ method_expressions.select { |method| method.name == :initialize }
53
53
  end
54
54
 
55
55
  def variables_from_context
@@ -26,7 +26,7 @@ module Reek
26
26
  # The name of the config field that sets the names of any
27
27
  # methods for which nesting should not be considered
28
28
  IGNORE_ITERATORS_KEY = 'ignore_iterators'
29
- DEFAULT_IGNORE_ITERATORS = ['tap'].freeze
29
+ DEFAULT_IGNORE_ITERATORS = ['tap', 'Tempfile.create'].freeze
30
30
 
31
31
  def self.default_config
32
32
  super.merge(
@@ -128,8 +128,9 @@ module Reek
128
128
 
129
129
  # @quality :reek:FeatureEnvy
130
130
  def ignored_iterator?(exp)
131
- ignore_iterators.any? { |pattern| /#{pattern}/ =~ exp.call.name } ||
132
- exp.without_block_arguments?
131
+ ignore_iterators.any? do |pattern|
132
+ /#{pattern}/ =~ exp.call.format_to_ruby
133
+ end || exp.without_block_arguments?
133
134
  end
134
135
  end
135
136
  end
@@ -50,9 +50,9 @@ module Reek
50
50
  # @return [Array<Hit>]
51
51
  #
52
52
  def hits
53
- unused_private_methods.map do |defined_method|
53
+ unused_private_methods.filter_map do |defined_method|
54
54
  Hit.new(defined_method) unless ignore_method?(defined_method)
55
- end.compact
55
+ end
56
56
  end
57
57
 
58
58
  #
@@ -61,6 +61,7 @@ module Reek
61
61
  def unused_private_methods
62
62
  defined_private_methods = context.defined_instance_methods(visibility: :private)
63
63
  called_method_names = context.instance_method_calls.map(&:name)
64
+ called_method_names.concat(context.instance_method_names_via_to_call)
64
65
 
65
66
  defined_private_methods.reject do |defined_method|
66
67
  called_method_names.include?(defined_method.name)
@@ -69,21 +69,21 @@ module Reek
69
69
  end
70
70
 
71
71
  def set_failure_messages_for_smell_type
72
- self.failure_message = "Expected #{origin} to reek of #{smell_type}, "\
72
+ self.failure_message = "Expected #{origin} to reek of #{smell_type}, " \
73
73
  'but it didn\'t'
74
- self.failure_message_when_negated = "Expected #{origin} not to reek "\
74
+ self.failure_message_when_negated = "Expected #{origin} not to reek " \
75
75
  "of #{smell_type}, but it did"
76
76
  end
77
77
 
78
78
  def set_failure_messages_for_smell_details
79
79
  self.failure_message =
80
- "Expected #{origin} to reek of #{smell_type} "\
81
- "(which it did) with smell details #{smell_details}, which it didn't.\n"\
82
- "The number of smell details I had to compare with the given one was #{matching_smell_types.count} "\
83
- "and here they are:\n"\
80
+ "Expected #{origin} to reek of #{smell_type} " \
81
+ "(which it did) with smell details #{smell_details}, which it didn't.\n" \
82
+ "The number of smell details I had to compare with the given one was #{matching_smell_types.count} " \
83
+ "and here they are:\n" \
84
84
  "#{all_relevant_smell_details_formatted}"
85
85
  self.failure_message_when_negated =
86
- "Expected #{origin} not to reek of "\
86
+ "Expected #{origin} not to reek of " \
87
87
  "#{smell_type} with smell details #{smell_details}, but it did"
88
88
  end
89
89
 
data/lib/reek/spec.rb CHANGED
@@ -92,7 +92,7 @@ module Reek
92
92
  end
93
93
 
94
94
  #
95
- # See the documentaton for "reek_of".
95
+ # See the documentation for "reek_of".
96
96
  #
97
97
  # Notable differences to reek_of:
98
98
  # 1.) "reek_of" doesn't mind if there are other smells of a different type.
data/lib/reek/version.rb CHANGED
@@ -8,6 +8,6 @@ module Reek
8
8
  # @public
9
9
  module Version
10
10
  # @public
11
- STRING = '6.1.0'
11
+ STRING = '6.2.0'
12
12
  end
13
13
  end
data/reek.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.executables = spec.files.grep(%r{^bin/}).map { |path| File.basename(path) }
22
22
  spec.rdoc_options = %w(--main README.md -x assets/|bin/|config/|features/|spec/|tasks/)
23
- spec.required_ruby_version = '>= 2.6.0'
23
+ spec.required_ruby_version = '>= 3.0.0'
24
24
 
25
25
  spec.metadata = {
26
26
  'homepage_uri' => 'https://github.com/troessner/reek',
@@ -31,7 +31,8 @@ Gem::Specification.new do |spec|
31
31
  'rubygems_mfa_required' => 'true'
32
32
  }
33
33
 
34
- spec.add_runtime_dependency 'kwalify', '~> 0.7.0'
35
- spec.add_runtime_dependency 'parser', '~> 3.1.0'
34
+ spec.add_runtime_dependency 'dry-schema', '~> 1.13.0'
35
+ spec.add_runtime_dependency 'parser', '~> 3.2.0'
36
36
  spec.add_runtime_dependency 'rainbow', '>= 2.0', '< 4.0'
37
+ spec.add_runtime_dependency 'rexml', '~> 3.1'
37
38
  end
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: 6.1.0
4
+ version: 6.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Rutherford
@@ -11,36 +11,36 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2022-01-14 00:00:00.000000000 Z
14
+ date: 2023-12-31 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
- name: kwalify
17
+ name: dry-schema
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
20
  - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: 0.7.0
22
+ version: 1.13.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: 0.7.0
29
+ version: 1.13.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: parser
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - "~>"
35
35
  - !ruby/object:Gem::Version
36
- version: 3.1.0
36
+ version: 3.2.0
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: 3.1.0
43
+ version: 3.2.0
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: rainbow
46
46
  requirement: !ruby/object:Gem::Requirement
@@ -61,6 +61,20 @@ dependencies:
61
61
  - - "<"
62
62
  - !ruby/object:Gem::Version
63
63
  version: '4.0'
64
+ - !ruby/object:Gem::Dependency
65
+ name: rexml
66
+ requirement: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '3.1'
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '3.1'
64
78
  description: Reek is a tool that examines Ruby classes, modules and methods and reports
65
79
  any code smells it finds.
66
80
  email:
@@ -124,6 +138,12 @@ files:
124
138
  - lib/reek/cli/options.rb
125
139
  - lib/reek/cli/silencer.rb
126
140
  - lib/reek/cli/status.rb
141
+ - lib/reek/code_climate.rb
142
+ - lib/reek/code_climate/code_climate_configuration.rb
143
+ - lib/reek/code_climate/code_climate_configuration.yml
144
+ - lib/reek/code_climate/code_climate_fingerprint.rb
145
+ - lib/reek/code_climate/code_climate_formatter.rb
146
+ - lib/reek/code_climate/code_climate_report.rb
127
147
  - lib/reek/code_comment.rb
128
148
  - lib/reek/configuration/app_configuration.rb
129
149
  - lib/reek/configuration/configuration_converter.rb
@@ -133,7 +153,7 @@ files:
133
153
  - lib/reek/configuration/directory_directives.rb
134
154
  - lib/reek/configuration/excluded_paths.rb
135
155
  - lib/reek/configuration/rake_task_converter.rb
136
- - lib/reek/configuration/schema.yml
156
+ - lib/reek/configuration/schema.rb
137
157
  - lib/reek/configuration/schema_validator.rb
138
158
  - lib/reek/context/attribute_context.rb
139
159
  - lib/reek/context/class_context.rb
@@ -165,12 +185,6 @@ files:
165
185
  - lib/reek/rake/task.rb
166
186
  - lib/reek/report.rb
167
187
  - lib/reek/report/base_report.rb
168
- - lib/reek/report/code_climate.rb
169
- - lib/reek/report/code_climate/code_climate_configuration.rb
170
- - lib/reek/report/code_climate/code_climate_configuration.yml
171
- - lib/reek/report/code_climate/code_climate_fingerprint.rb
172
- - lib/reek/report/code_climate/code_climate_formatter.rb
173
- - lib/reek/report/code_climate/code_climate_report.rb
174
188
  - lib/reek/report/documentation_link_warning_formatter.rb
175
189
  - lib/reek/report/heading_formatter.rb
176
190
  - lib/reek/report/html_report.rb
@@ -256,14 +270,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
256
270
  requirements:
257
271
  - - ">="
258
272
  - !ruby/object:Gem::Version
259
- version: 2.6.0
273
+ version: 3.0.0
260
274
  required_rubygems_version: !ruby/object:Gem::Requirement
261
275
  requirements:
262
276
  - - ">="
263
277
  - !ruby/object:Gem::Version
264
278
  version: '0'
265
279
  requirements: []
266
- rubygems_version: 3.3.3
280
+ rubygems_version: 3.5.3
267
281
  signing_key:
268
282
  specification_version: 4
269
283
  summary: Code smell detector for Ruby