Class: Reek::Smells::LongParameterList

Inherits:
SmellDetector show all
Defined in:
lib/reek/smells/long_parameter_list.rb

Overview

A Long Parameter List occurs when a method has more than one or two parameters, or when a method yields more than one or two objects to an associated block.

Currently LongParameterList reports any method or block with too many parameters.

Constant Summary collapse

MAX_ALLOWED_PARAMS_KEY =

The name of the config field that sets the maximum number of parameters permitted in any method or block.

'max_params'
DEFAULT_MAX_ALLOWED_PARAMS =
3

Constants inherited from SmellDetector

SmellDetector::DEFAULT_EXCLUDE_SET, SmellDetector::EXCLUDE_KEY

Instance Attribute Summary

Attributes inherited from SmellDetector

#smell_category, #smell_type, #smells_found, #source

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from SmellDetector

#config_for, #configure_with, contexts, default_smell_category, #enabled?, #enabled_for?, #examine, #exception?, #initialize, #register, #report_on, smell_category, smell_type, #value

Constructor Details

This class inherits a constructor from Reek::Smells::SmellDetector

Class Method Details

.default_configObject



21
22
23
24
25
26
27
28
# File 'lib/reek/smells/long_parameter_list.rb', line 21

def self.default_config
  super.merge(
    MAX_ALLOWED_PARAMS_KEY => DEFAULT_MAX_ALLOWED_PARAMS,
    Core::SmellConfiguration::OVERRIDES_KEY => {
      'initialize' => { MAX_ALLOWED_PARAMS_KEY => 5 }
    }
  )
end

Instance Method Details

#examine_context(ctx) ⇒ Array<SmellWarning>

Checks the number of parameters in the given method.



35
36
37
38
39
40
41
42
43
44
# File 'lib/reek/smells/long_parameter_list.rb', line 35

def examine_context(ctx)
  @max_allowed_params = value(MAX_ALLOWED_PARAMS_KEY, ctx, DEFAULT_MAX_ALLOWED_PARAMS)
  count = ctx.exp.arg_names.length
  return [] if count <= @max_allowed_params
  [SmellWarning.new(self,
                    context: ctx.full_name,
                    lines: [ctx.exp.line],
                    message: "has #{count} parameters",
                    parameters: { count: count })]
end