reek 5.4.0 → 5.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c7a7193dd76b11cd88c3e3f031784a0bb54f3bcaa35a4e3b430dd550749facc
4
- data.tar.gz: 0d2f96071b27301ebbd2b3ff82b8e1fbbde2aaf647125e3903d017074c4d061b
3
+ metadata.gz: 2cc4e5c07f939e121b14b1b9250411d0e83fce7e936271328731500cf8a93a8e
4
+ data.tar.gz: 167f4022f6d3120e9dffb9eb3828f756755790c13c1e70c09f46a20dd1dc23c7
5
5
  SHA512:
6
- metadata.gz: cc75695b17d58bf820bf6b874e747c3a7f81c43b0e8c80a33144118b1dbbbb0e0cd294ae386026937ee0799d0a7fa7cd12c65470bfd217faaa9c66dcbd22a03c
7
- data.tar.gz: cb9bfef6dd9f799c2f2733b020952909010f489b1cf621d64828a2982cc64ea912211a7bf0f9e21fc1246ce4068edb5bb1571acdd16445df6ddebca2c3c9a84b
6
+ metadata.gz: 540da16a41f3939e187389759bfb9893e56f0cdf9f9dee01b09e924ba412c6f42210584b07613122dfbaed26f75991ac2b411a7db78227e175b2aae2dc289db0
7
+ data.tar.gz: a354ce529e870797c32b2608f1e05facfbdeb52f8e4fe9de5280b42b769dd2ddbe740a0c374f2cbdc1cc32d5254eb51037861c9149cc4ef427545ea626137ea1
@@ -2,6 +2,7 @@ inherit_from: .rubocop_todo.yml
2
2
 
3
3
  require:
4
4
  - rubocop-rspec
5
+ - rubocop-performance
5
6
 
6
7
  AllCops:
7
8
  Exclude:
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 5.4.1 (2019-11-12)
6
+
7
+ * (Filipe Esperandio) Bump base image to a more recent ruby version
8
+ * (Fernando Contreras) Add quotes inside directory configuration
9
+
5
10
  ## 5.4.0 (2019-04-24)
6
11
 
7
12
  * (Philippe Bernery) Enable regex for directory directives.
data/Dockerfile CHANGED
@@ -3,7 +3,7 @@
3
3
  # Build and run via:
4
4
  # docker build -t codeclimate/codeclimate-reek . && docker run codeclimate/codeclimate-reek
5
5
 
6
- FROM ruby:2.3.3-alpine
6
+ FROM ruby:2.6.0-alpine
7
7
 
8
8
  MAINTAINER The Reek core team
9
9
 
data/Gemfile CHANGED
@@ -7,19 +7,20 @@ ruby RUBY_VERSION
7
7
  group :development do
8
8
  gem 'aruba', '~> 0.14.8'
9
9
  gem 'cucumber', '~> 3.0'
10
- gem 'factory_bot', '~> 5.0'
10
+ gem 'factory_bot', '~> 5.0', '!= 5.1.0'
11
11
  gem 'kramdown', '~> 2.1'
12
12
  gem 'kramdown-parser-gfm', '~> 1.0'
13
- gem 'rake', '~> 12.0'
13
+ gem 'rake', '~> 13.0'
14
14
  gem 'rspec', '~> 3.0'
15
15
  gem 'rspec-benchmark', '~> 0.5.0'
16
- gem 'rubocop', '~> 0.67.2'
17
- gem 'rubocop-rspec', '~> 1.32.0'
18
- gem 'simplecov', '~> 0.16.1'
16
+ gem 'rubocop', '~> 0.75.0'
17
+ gem 'rubocop-performance', '~> 1.5.0'
18
+ gem 'rubocop-rspec', '~> 1.36.0'
19
+ gem 'simplecov', '~> 0.17.0'
19
20
  gem 'yard', '~> 0.9.5'
20
21
 
21
22
  platforms :mri do
22
- gem 'redcarpet', '~> 3.4.0'
23
+ gem 'redcarpet', '~> 3.4'
23
24
  end
24
25
  end
25
26
 
data/README.md CHANGED
@@ -317,7 +317,7 @@ directories:
317
317
  "web_app/app/controllers":
318
318
  NestedIterators:
319
319
  enabled: false
320
- "web_app/app/helpers**:
320
+ "web_app/app/helpers**":
321
321
  UtilityFunction:
322
322
  enabled: false
323
323
  "web_app/lib/**/test/**":
@@ -43,7 +43,7 @@ Feature: Reek can be controlled using command-line options
43
43
  -c, --config FILE Read configuration options from FILE
44
44
  --smell SMELL Only look for a specific smell.
45
45
  Call it like this: reek --smell MissingSafeMethod source.rb
46
- Check out https://github.com/troessner/reek/blob/v5.4.0/docs/Code-Smells.md for a list of smells
46
+ Check out https://github.com/troessner/reek/blob/v5.4.1/docs/Code-Smells.md for a list of smells
47
47
  --stdin-filename FILE When passing code in via pipe, assume this filename when checking file or directory rules in the config.
48
48
 
49
49
  Generate a todo list:
@@ -120,5 +120,5 @@ Feature: Reek can be controlled using command-line options
120
120
  UnusedPrivateMethod
121
121
  UtilityFunction
122
122
 
123
- Check out https://github.com/troessner/reek/blob/v5.4.0/docs/Code-Smells.md for a details on each detector
123
+ Check out https://github.com/troessner/reek/blob/v5.4.1/docs/Code-Smells.md for a details on each detector
124
124
  """
@@ -24,7 +24,7 @@ Feature: Report smells using simple JSON layout
24
24
  "context": "Smelly#x",
25
25
  "lines": [ 4 ],
26
26
  "message": "has the name 'x'",
27
- "documentation_link": "https://github.com/troessner/reek/blob/v5.4.0/docs/Uncommunicative-Method-Name.md",
27
+ "documentation_link": "https://github.com/troessner/reek/blob/v5.4.1/docs/Uncommunicative-Method-Name.md",
28
28
  "name": "x"
29
29
  },
30
30
  {
@@ -33,7 +33,7 @@ Feature: Report smells using simple JSON layout
33
33
  "context": "Smelly#x",
34
34
  "lines": [ 5 ],
35
35
  "message": "has the variable name 'y'",
36
- "documentation_link": "https://github.com/troessner/reek/blob/v5.4.0/docs/Uncommunicative-Variable-Name.md",
36
+ "documentation_link": "https://github.com/troessner/reek/blob/v5.4.1/docs/Uncommunicative-Variable-Name.md",
37
37
  "name": "y"
38
38
  }
39
39
  ]
@@ -53,7 +53,7 @@ Feature: Report smells using simple JSON layout
53
53
  1
54
54
  ],
55
55
  "message": "has no descriptive comment",
56
- "documentation_link": "https://github.com/troessner/reek/blob/v5.4.0/docs/Irresponsible-Module.md"
56
+ "documentation_link": "https://github.com/troessner/reek/blob/v5.4.1/docs/Irresponsible-Module.md"
57
57
  }
58
58
  ]
59
59
  """
@@ -182,8 +182,8 @@ Feature: Correctly formatted reports
182
182
  And it reports:
183
183
  """
184
184
  smelly.rb -- 2 warnings:
185
- [4]:UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v5.4.0/docs/Uncommunicative-Method-Name.md]
186
- [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v5.4.0/docs/Uncommunicative-Variable-Name.md]
185
+ [4]:UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v5.4.1/docs/Uncommunicative-Method-Name.md]
186
+ [5]:UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v5.4.1/docs/Uncommunicative-Variable-Name.md]
187
187
  """
188
188
 
189
189
  Examples:
@@ -209,8 +209,8 @@ Feature: Correctly formatted reports
209
209
  And it reports:
210
210
  """
211
211
  smelly.rb -- 2 warnings:
212
- UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v5.4.0/docs/Uncommunicative-Method-Name.md]
213
- UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v5.4.0/docs/Uncommunicative-Variable-Name.md]
212
+ UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v5.4.1/docs/Uncommunicative-Method-Name.md]
213
+ UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v5.4.1/docs/Uncommunicative-Variable-Name.md]
214
214
  """
215
215
 
216
216
  Examples:
@@ -25,7 +25,7 @@ Feature: Report smells using simple YAML layout
25
25
  smell_type: UncommunicativeMethodName
26
26
  source: smelly.rb
27
27
  name: x
28
- documentation_link: https://github.com/troessner/reek/blob/v5.4.0/docs/Uncommunicative-Method-Name.md
28
+ documentation_link: https://github.com/troessner/reek/blob/v5.4.1/docs/Uncommunicative-Method-Name.md
29
29
  - context: Smelly#x
30
30
  lines:
31
31
  - 5
@@ -33,7 +33,7 @@ Feature: Report smells using simple YAML layout
33
33
  smell_type: UncommunicativeVariableName
34
34
  source: smelly.rb
35
35
  name: y
36
- documentation_link: https://github.com/troessner/reek/blob/v5.4.0/docs/Uncommunicative-Variable-Name.md
36
+ documentation_link: https://github.com/troessner/reek/blob/v5.4.1/docs/Uncommunicative-Variable-Name.md
37
37
  """
38
38
 
39
39
  Scenario: Indicate smells and print them as yaml when using STDIN
@@ -48,5 +48,5 @@ Feature: Report smells using simple YAML layout
48
48
  lines:
49
49
  - 1
50
50
  message: has no descriptive comment
51
- documentation_link: https://github.com/troessner/reek/blob/v5.4.0/docs/Irresponsible-Module.md
51
+ documentation_link: https://github.com/troessner/reek/blob/v5.4.1/docs/Irresponsible-Module.md
52
52
  """
@@ -40,13 +40,18 @@ module Reek
40
40
  def groups
41
41
  @groups ||=
42
42
  begin
43
- todos = smells.group_by(&:smell_class).map do |smell_class, smells_for_class|
43
+ todos = DetectorRepository.smell_types.map do |smell_class|
44
+ smells_for_class = grouped_smells[smell_class.smell_type] or next
44
45
  smell_class.todo_configuration_for(smells_for_class)
45
46
  end
46
- todos.inject(&:merge)
47
+ todos.compact.inject(&:merge)
47
48
  end
48
49
  end
49
50
 
51
+ def grouped_smells
52
+ @grouped_smells ||= smells.group_by(&:smell_type)
53
+ end
54
+
50
55
  # :reek:FeatureEnvy
51
56
  def write_to_file
52
57
  File.open(DEFAULT_CONFIGURATION_FILE_NAME, 'w') do |configuration_file|
@@ -79,7 +79,7 @@ module Reek
79
79
  end
80
80
 
81
81
  def smell_warning(**options)
82
- SmellWarning.new(self,
82
+ SmellWarning.new(smell_type,
83
83
  source: expression.source,
84
84
  context: context.full_name,
85
85
  lines: options.fetch(:lines),
@@ -35,7 +35,7 @@ module Reek
35
35
  # @return [Array<SmellWarning>]
36
36
  #
37
37
  def sniff
38
- count = context.local_nodes(:casgn).reject(&:defines_module?).length
38
+ count = context.local_nodes(:casgn).count { |it| !it.defines_module? }
39
39
 
40
40
  return [] if count <= max_allowed_constants
41
41
 
@@ -15,22 +15,30 @@ module Reek
15
15
  extend Forwardable
16
16
 
17
17
  # @public
18
- attr_reader :context, :lines, :message, :parameters, :smell_detector, :source
19
- def_delegators :smell_detector, :smell_type
20
-
18
+ attr_reader :context, :lines, :message, :parameters, :smell_type, :source
19
+
20
+ # @param smell_type [String] type of detected smell; corresponds to
21
+ # detector#smell_type
22
+ # @param context [String] name of the context in which the smell occured
23
+ # @param lines [Array<Integer>] list of lines on which the smell occured
24
+ # @param message [String] text describing the smell in more detail
25
+ # @param source [String] name of the source (e.g., the file name) in which
26
+ # the smell occured
27
+ # @param parameters [Hash] smell-specific parameters
28
+ #
21
29
  # @note When using Reek's public API, you should not create SmellWarning
22
30
  # objects yourself. This is why the initializer is not part of the
23
31
  # public API.
24
32
  #
25
33
  # @quality :reek:LongParameterList { max_params: 6 }
26
- def initialize(smell_detector, context: '', lines:, message:,
34
+ def initialize(smell_type, context: '', lines:, message:,
27
35
  source:, parameters: {})
28
- @smell_detector = smell_detector
29
- @source = source
30
- @context = context.to_s
31
- @lines = lines
32
- @message = message
33
- @parameters = parameters
36
+ @smell_type = smell_type
37
+ @source = source
38
+ @context = context.to_s
39
+ @lines = lines
40
+ @message = message
41
+ @parameters = parameters
34
42
 
35
43
  freeze
36
44
  end
@@ -64,10 +72,6 @@ module Reek
64
72
  "#{smell_type}: #{context} #{message}"
65
73
  end
66
74
 
67
- def smell_class
68
- smell_detector.class
69
- end
70
-
71
75
  def explanatory_link
72
76
  DocumentationLink.build(smell_type)
73
77
  end
@@ -8,6 +8,6 @@ module Reek
8
8
  # @public
9
9
  module Version
10
10
  # @public
11
- STRING = '5.4.0'
11
+ STRING = '5.4.1'
12
12
  end
13
13
  end
@@ -4,29 +4,18 @@ require_relative '../../lib/reek/smell_warning'
4
4
  require_relative '../../lib/reek/cli/options'
5
5
 
6
6
  FactoryBot.define do
7
- factory :smell_detector, class: Reek::SmellDetectors::BaseDetector do
8
- skip_create
9
- transient do
10
- smell_type { 'FeatureEnvy' }
11
- end
12
-
13
- initialize_with do
14
- ::Reek::SmellDetectors.const_get(smell_type).new
15
- end
16
- end
17
-
18
7
  factory :smell_warning, class: Reek::SmellWarning do
19
8
  skip_create
20
- smell_detector
21
- context { 'self' }
22
9
 
10
+ smell_type { 'FeatureEnvy' }
23
11
  source { 'dummy_file' }
24
12
  lines { [42] }
25
13
  message { 'smell warning message' }
26
14
  parameters { {} }
15
+ context { 'self' }
27
16
 
28
17
  initialize_with do
29
- new(smell_detector,
18
+ new(smell_type,
30
19
  source: source,
31
20
  context: context,
32
21
  lines: lines,
@@ -9,7 +9,7 @@ RSpec.describe Reek::CLI::Application do
9
9
  described_class.new ['--foo']
10
10
  end
11
11
  end
12
- expect(call).to raise_error(SystemExit) do |error|
12
+ expect(&call).to raise_error(SystemExit) do |error|
13
13
  expect(error.status).to eq Reek::CLI::Status::DEFAULT_ERROR_EXIT_CODE
14
14
  end
15
15
  end
@@ -6,6 +6,7 @@ RSpec.shared_examples_for 'no smells found' do
6
6
  it 'is not smelly' do
7
7
  expect(examiner).not_to be_smelly
8
8
  end
9
+
9
10
  it 'finds no smells' do
10
11
  expect(examiner.smells.length).to eq(0)
11
12
  end
@@ -9,11 +9,11 @@ RSpec.describe Reek::Report::CodeClimateFingerprint do
9
9
  let(:expected_fingerprint) { 'e68badd29db51c92363a7c6a2438d722' }
10
10
  let(:warning) do
11
11
  build(:smell_warning,
12
- smell_detector: Reek::SmellDetectors::UtilityFunction.new,
13
- context: 'alfa',
14
- message: "doesn't depend on instance state (maybe move it to another class?)",
15
- lines: lines,
16
- source: 'a/ruby/source/file.rb')
12
+ smell_type: 'UtilityFunction',
13
+ context: 'alfa',
14
+ message: "doesn't depend on instance state (maybe move it to another class?)",
15
+ lines: lines,
16
+ source: 'a/ruby/source/file.rb')
17
17
  end
18
18
 
19
19
  context 'with code at a specific location' do
@@ -36,11 +36,11 @@ RSpec.describe Reek::Report::CodeClimateFingerprint do
36
36
  context 'when the fingerprint should not be computed' do
37
37
  let(:warning) do
38
38
  build(:smell_warning,
39
- smell_detector: Reek::SmellDetectors::ManualDispatch.new,
40
- context: 'Alfa#bravo',
41
- message: 'manually dispatches method call',
42
- lines: [4],
43
- source: 'a/ruby/source/file.rb')
39
+ smell_type: 'ManualDispatch',
40
+ context: 'Alfa#bravo',
41
+ message: 'manually dispatches method call',
42
+ lines: [4],
43
+ source: 'a/ruby/source/file.rb')
44
44
  end
45
45
 
46
46
  it 'returns nil' do
@@ -51,12 +51,12 @@ RSpec.describe Reek::Report::CodeClimateFingerprint do
51
51
  context 'when the smell warning has only identifying parameters' do
52
52
  let(:warning) do
53
53
  build(:smell_warning,
54
- smell_detector: Reek::SmellDetectors::ClassVariable.new,
55
- context: 'Alfa',
56
- message: "declares the class variable '@@#{name}'",
57
- lines: [4],
58
- parameters: { name: "@@#{name}" },
59
- source: 'a/ruby/source/file.rb')
54
+ smell_type: 'ClassVariable',
55
+ context: 'Alfa',
56
+ message: "declares the class variable '@@#{name}'",
57
+ lines: [4],
58
+ parameters: { name: "@@#{name}" },
59
+ source: 'a/ruby/source/file.rb')
60
60
  end
61
61
 
62
62
  context 'when the name is one thing' do
@@ -81,12 +81,12 @@ RSpec.describe Reek::Report::CodeClimateFingerprint do
81
81
  context 'when the smell warning has identifying and non-identifying parameters' do
82
82
  let(:warning) do
83
83
  build(:smell_warning,
84
- smell_detector: Reek::SmellDetectors::DuplicateMethodCall.new,
85
- context: "Alfa##{name}",
86
- message: "calls '#{name}' #{count} times",
87
- lines: lines,
88
- parameters: { name: "@@#{name}", count: count },
89
- source: 'a/ruby/source/file.rb')
84
+ smell_type: 'DuplicateMethodCall',
85
+ context: "Alfa##{name}",
86
+ message: "calls '#{name}' #{count} times",
87
+ lines: lines,
88
+ parameters: { name: "@@#{name}", count: count },
89
+ source: 'a/ruby/source/file.rb')
90
90
  end
91
91
 
92
92
  context 'when the parameters are provided' do
@@ -5,11 +5,11 @@ RSpec.describe Reek::Report::CodeClimateFormatter do
5
5
  describe '#render' do
6
6
  let(:warning) do
7
7
  build(:smell_warning,
8
- smell_detector: Reek::SmellDetectors::UtilityFunction.new,
9
- context: 'context foo',
10
- message: 'message bar',
11
- lines: [1, 2],
12
- source: 'a/ruby/source/file.rb')
8
+ smell_type: 'UtilityFunction',
9
+ context: 'context foo',
10
+ message: 'message bar',
11
+ lines: [1, 2],
12
+ source: 'a/ruby/source/file.rb')
13
13
  end
14
14
  let(:rendered) { described_class.new(warning).render }
15
15
  let(:json) { JSON.parse rendered.chop }
@@ -18,10 +18,12 @@ RSpec.describe Reek::SmellConfiguration do
18
18
  it { expect(smell_config.merge('enabled' => true)).to eq(base_config) }
19
19
  it { expect(smell_config.merge('exclude' => [])).to eq(base_config) }
20
20
  it { expect(smell_config.merge('accept' => ['_'])).to eq(base_config) }
21
+
21
22
  it do
22
23
  updated = smell_config.merge('reject' => [/^.$/, /[0-9]$/, /[A-Z]/])
23
24
  expect(updated).to eq(base_config)
24
25
  end
26
+
25
27
  it do
26
28
  updated = smell_config.merge('accept' => ['_'], 'enabled' => true)
27
29
  expect(updated).to eq(base_config)
@@ -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 = create(: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 = create(: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 = create(:smell_warning, smell_type: 'TooManyStatements', context: 'Foo#bar')
27
24
  result = subclass.todo_configuration_for([smell])
28
25
 
29
26
  aggregate_failures do
@@ -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
 
@@ -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
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: 5.4.1
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: 2019-04-24 00:00:00.000000000 Z
14
+ date: 2019-11-12 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: codeclimate-engine-rb