Class: RuboCop::Cop::Metrics::ParameterLists
- Includes:
- ConfigurableMax
- Defined in:
- lib/rubocop/cop/metrics/parameter_lists.rb
Overview
This cop checks for methods with too many parameters.
The maximum number of parameters is configurable. Keyword arguments can optionally be excluded from the total count, as they add less complexity than positional or optional parameters.
This cop also checks for the maximum number of optional parameters. This can be configured using the `MaxOptionalParameters` config option.
Constant Summary collapse
- MSG =
'Avoid parameter lists longer than %<max>d parameters. ' \ '[%<count>d/%<max>d]'
- OPTIONAL_PARAMETERS_MSG =
'Method has too many optional parameters. [%<count>d/%<max>d]'
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #on_args(node) ⇒ Object
- #on_def(node) ⇒ Object (also: #on_defs)
Methods inherited from Base
#add_global_offense, #add_offense, autocorrect_incompatible_with, badge, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
Constructor Details
This class inherits a constructor from RuboCop::Cop::Base
Instance Method Details
#on_args(node) ⇒ Object
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/rubocop/cop/metrics/parameter_lists.rb', line 77 def on_args(node) count = args_count(node) return unless count > max_params return if argument_to_lambda_or_proc?(node) add_offense(node, message: format(MSG, max: max_params, count: args_count(node))) do self.max = count end end |
#on_def(node) ⇒ Object Also known as: on_defs
63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/rubocop/cop/metrics/parameter_lists.rb', line 63 def on_def(node) optargs = node.arguments.select(&:optarg_type?) return if optargs.count <= max_optional_parameters = format( OPTIONAL_PARAMETERS_MSG, max: max_optional_parameters, count: optargs.count ) add_offense(node, message: ) end |