Class: RuboCop::Cop::Style::MethodCallWithArgsParentheses
- Extended by:
- AutoCorrector
- Includes:
- AllowedMethods, AllowedPattern, ConfigurableEnforcedStyle, OmitParentheses, RequireParentheses
- Defined in:
- lib/rubocop/cop/style/method_call_with_args_parentheses.rb,
lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb,
lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb
Overview
Enforces the presence (default) or absence of parentheses in method calls containing arguments.
In the default style (require_parentheses), macro methods are allowed. Additional methods can be added to the AllowedMethods or AllowedPatterns list. These options are valid only in the default style. Macros can be included by either setting IgnoreMacros to false, adding specific macros to the IncludedMacros list, or using IncludedMacroPatterns for pattern-based matching.
Precedence of options is as follows:
-
AllowedMethods -
AllowedPatterns -
IncludedMacros -
IncludedMacroPatterns
If a method is listed in both IncludedMacros/IncludedMacroPatterns and AllowedMethods, then the latter takes precedence (that is, the method is allowed).
In the alternative style (omit_parentheses), there are three additional options.
-
AllowParenthesesInChainingisfalseby default. Setting it totrueallows the presence of parentheses in the last call during method chaining. -
AllowParenthesesInMultilineCallisfalseby default. Setting itto `true` allows the presence of parentheses in multi-line method calls. -
AllowParenthesesInCamelCaseMethodisfalseby default. Thisallows the presence of parentheses when calling a method whose name begins with a capital letter and which has no arguments. Setting it to `true` allows the presence of parentheses in such a method call even with arguments.
NOTE: The style of omit_parentheses allows parentheses in cases where omitting them results in ambiguous or syntactically incorrect code.
Non-exhaustive list of examples:
-
Parentheses are required allowed in method calls with arguments inside literals, logical operators, setting default values in position and keyword arguments, chaining and more.
-
Parentheses are allowed in method calls with arguments inside operators to avoid ambiguity. triple-dot syntax introduced in Ruby 2.7 as omitting them starts an endless range.
-
Parentheses are allowed when forwarding arguments with the triple-dot syntax introduced in Ruby 2.7 as omitting them starts an endless range.
-
Parentheses are required in calls with arguments when inside an endless method definition introduced in Ruby 3.0.
-
Ruby 3.1’s hash omission syntax allows parentheses if the method call is in conditionals and requires parentheses if the call is not the value-returning expression. See bugs.ruby-lang.org/issues/18396.
-
Parentheses are required in anonymous arguments, keyword arguments and block passing in Ruby 3.2.
-
Parentheses are required when the first argument is a beginless range or the last argument is an endless range.
Defined Under Namespace
Modules: OmitParentheses, RequireParentheses
Constant Summary
Constants included from OmitParentheses
OmitParentheses::TRAILING_WHITESPACE_REGEX
Constants included from RangeHelp
RangeHelp::BYTE_ORDER_MARK, RangeHelp::NOT_GIVEN
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Class Method Summary collapse
Instance Method Summary collapse
- #on_send(node) ⇒ Object (also: #on_csend, #on_yield)
Methods included from AutoCorrector
Methods included from ConfigurableEnforcedStyle
#alternative_style, #alternative_styles, #ambiguous_style_detected, #correct_style_detected, #detected_style, #detected_style=, #no_acceptable_style!, #no_acceptable_style?, #opposite_style_detected, #style, #style_configured?, #style_detected, #style_parameter_name, #supported_styles, #unexpected_style_detected
Methods inherited from Base
#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, badge, #begin_investigation, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_gem_version, #target_rails_version, #target_ruby_version
Methods included from ExcludeLimit
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #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
Class Method Details
.autocorrect_incompatible_with ⇒ Object
244 245 246 |
# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 244 def self.autocorrect_incompatible_with [Style::NestedParenthesizedCalls, Style::RescueModifier] end |
Instance Method Details
#on_send(node) ⇒ Object Also known as: on_csend, on_yield
248 249 250 |
# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 248 def on_send(node) send(style, node) # call require_parentheses or omit_parentheses end |