Skip to content

Commit

Permalink
Store smell type instead of full detector in each SmellWarning
Browse files Browse the repository at this point in the history
  • Loading branch information
mvz committed Aug 25, 2019
1 parent dc9e99f commit b02f2b7
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 22 deletions.
2 changes: 1 addition & 1 deletion lib/reek/smell_detectors/base_detector.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def config_for(ctx)
end

def smell_warning(**options)
SmellWarning.new(self,
SmellWarning.new(smell_type,
source: expression.source,
context: context.full_name,
lines: options.fetch(:lines),
Expand Down
17 changes: 8 additions & 9 deletions lib/reek/smell_warning.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,21 @@ class SmellWarning
extend Forwardable

# @public
attr_reader :context, :lines, :message, :parameters, :smell_detector, :source
def_delegators :smell_detector, :smell_type
attr_reader :context, :lines, :message, :parameters, :smell_type, :source

# @note When using Reek's public API, you should not create SmellWarning
# objects yourself. This is why the initializer is not part of the
# public API.
#
# @quality :reek:LongParameterList { max_params: 6 }
def initialize(smell_detector, context: '', lines:, message:,
def initialize(smell_type, context: '', lines:, message:,
source:, parameters: {})
@smell_detector = smell_detector
@source = source
@context = context.to_s
@lines = lines
@message = message
@parameters = parameters
@smell_type = smell_type
@source = source
@context = context.to_s
@lines = lines
@message = message
@parameters = parameters

freeze
end
Expand Down
8 changes: 2 additions & 6 deletions spec/factories/factories.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,15 @@
factory :smell_warning, class: Reek::SmellWarning do
skip_create

transient do
smell_type { 'FeatureEnvy' }
end

smell_detector { ::Reek::SmellDetectors.const_get(smell_type).new }
smell_type { 'FeatureEnvy' }
source { 'dummy_file' }
lines { [42] }
message { 'smell warning message' }
parameters { {} }
context { 'self' }

initialize_with do
new(smell_detector,
new(smell_type,
source: source,
context: context,
lines: lines,
Expand Down
11 changes: 5 additions & 6 deletions spec/reek/smell_warning_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -91,17 +91,16 @@
let(:context_name) { 'Module::Class#method/block' }
let(:lines) { [24, 513] }
let(:message) { 'test message' }
let(:detector) { Reek::SmellDetectors::FeatureEnvy.new }
let(:parameters) { { 'one' => 34, 'two' => 'second' } }
let(:smell_type) { 'FeatureEnvy' }
let(:source) { 'a/ruby/source/file.rb' }

let(:yaml) do
warning = described_class.new(detector, source: source,
context: context_name,
lines: lines,
message: message,
parameters: parameters)
warning = described_class.new(smell_type, source: source,
context: context_name,
lines: lines,
message: message,
parameters: parameters)
warning.yaml_hash
end

Expand Down

0 comments on commit b02f2b7

Please sign in to comment.