Class: RuboCop::Cop::Style::MethodCallWithArgsParentheses
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::RuboCop::Cop::AutoCorrector ,
::RuboCop::Cop::Base ,
::RuboCop::ExcludeLimit ,
NodePattern::Macros,
RuboCop::AST::Sexp
|
|
Instance Chain:
|
|
Inherits: |
RuboCop::Cop::Base
|
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 ::RuboCop::Cop::AllowedMethods
or
AllowedPatterns
list. These options are valid only in the default
style. Macros can be included by either setting IgnoreMacros
to false
or adding specific macros to the IncludedMacros
list.
Precedence of options is as follows:
-
AllowedPatterns
-
IncludedMacros
If a method is listed in both IncludedMacros
and ::RuboCop::Cop::AllowedMethods
,
then the latter takes precedence (that is, the method is allowed).
In the alternative style (omit_parentheses), there are three additional options.
-
AllowParenthesesInChaining
isfalse
by default. Setting it totrue
allows the presence of parentheses in the last call during method chaining. -
AllowParenthesesInMultilineCall
isfalse
by default. Setting it totrue
allows the presence of parentheses in multi-line method calls. -
AllowParenthesesInCamelCaseMethod
isfalse
by default. This allows the presence of parentheses when calling a method whose name begins with a capital letter and which has no arguments. Setting it totrue
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 https://bugs.ruby-lang.org/issues/18396.
-
Parentheses are required in anonymous arguments, keyword arguments and block passing in Ruby 3.2.
Constant Summary
::RuboCop::Cop::Base
- Inherited
EMPTY_OFFENSES, RESTRICT_ON_SEND
::RuboCop::Cop::ConfigurableEnforcedStyle
- Included
RequireParentheses
- Included
::RuboCop::Cop::RangeHelp
- Included
OmitParentheses
- Included
Class Attribute Summary
::RuboCop::Cop::AutoCorrector
- Extended
::RuboCop::Cop::Base
- Inherited
.gem_requirements, .lint?, | |
.support_autocorrect? | Returns if class supports autocorrect. |
.support_multiple_source? | Override if your cop should be called repeatedly for multiple investigations Between calls to |
Class Method Summary
::RuboCop::Cop::Base
- Inherited
.autocorrect_incompatible_with | List of cops that should not try to autocorrect at the same time as this cop. |
.badge | Naming. |
.callbacks_needed, .cop_name, .department, | |
.documentation_url | Returns a url to view this cops documentation online. |
.exclude_from_registry | Call for abstract Cop classes. |
.inherited, | |
.joining_forces | Override and return the Force class(es) you need to join. |
.match? | Returns true if the cop name or the cop namespace matches any of the given names. |
.new, | |
.requires_gem | Register a version requirement for the given gem name. |
.restrict_on_send |
::RuboCop::ExcludeLimit
- Extended
exclude_limit | Sets up a configuration option to have an exclude limit tracked. |
transform |
Instance Attribute Summary
::RuboCop::Cop::AllowedPattern
- Included
::RuboCop::Cop::AllowedMethods
- Included
::RuboCop::Cop::ConfigurableEnforcedStyle
- Included
::RuboCop::Cop::Base
- Inherited
::RuboCop::Cop::AutocorrectLogic
- Included
Instance Method Summary
-
#on_csend(node)
Alias for #on_send.
- #on_send(node) (also: #on_csend, #on_yield)
-
#on_yield(node)
Alias for #on_send.
- #args_begin(node) private
- #args_end(node) private
- #args_parenthesized?(node) ⇒ Boolean private
OmitParentheses
- Included
::RuboCop::Cop::RangeHelp
- Included
#add_range, #column_offset_between, | |
#contents_range | A range containing only the contents of a literal with delimiters (e.g. |
#directions, | |
#effective_column | Returns the column attribute of the range, except if the range is on the first line and there’s a byte order mark at the beginning of that line, in which case 1 is subtracted from the column value. |
#final_pos, #move_pos, #move_pos_str, #range_between, #range_by_whole_lines, #range_with_comments, #range_with_comments_and_lines, #range_with_surrounding_comma, #range_with_surrounding_space, #source_range |
RequireParentheses
- Included
#allowed_method_name?, #eligible_for_parentheses_omission?, #ignored_macro?, #included_macros_list, #require_parentheses |
::RuboCop::Cop::AllowedPattern
- Included
#allowed_line?, #allowed_patterns, #cop_config_deprecated_methods_values, #cop_config_patterns_values, #matches_allowed_pattern? |
::RuboCop::Cop::AllowedMethods
- Included
::RuboCop::Cop::ConfigurableEnforcedStyle
- Included
::RuboCop::Cop::Base
- Inherited
#add_global_offense | Adds an offense that has no particular location. |
#add_offense | Adds an offense on the specified range (or node with an expression) Unless that offense is disabled for this range, a corrector will be yielded to provide the cop the opportunity to autocorrect the offense. |
#begin_investigation | Called before any investigation. |
#callbacks_needed, | |
#cop_config | Configuration Helpers. |
#cop_name, #excluded_file?, | |
#external_dependency_checksum | This method should be overridden when a cop’s behavior depends on state that lives outside of these locations: |
#inspect, | |
#message | Gets called if no message is specified when calling |
#name | Alias for Base#cop_name. |
#offenses, | |
#on_investigation_end | Called after all on_… |
#on_new_investigation | Called before all on_… |
#on_other_file | Called instead of all on_… |
#parse | There should be very limited reasons for a Cop to do it’s own parsing. |
#parser_engine, | |
#ready | Called between investigations. |
#relevant_file?, | |
#target_gem_version | Returns a gems locked versions (i.e. |
#target_rails_version, #target_ruby_version, #annotate, #apply_correction, #attempt_correction, | |
#callback_argument | Reserved for Cop::Cop. |
#complete_investigation | Called to complete an investigation. |
#correct, #current_corrector, | |
#current_offense_locations | Reserved for Commissioner: |
#current_offenses, #currently_disabled_lines, #custom_severity, #default_severity, #disable_uncorrectable, #enabled_line?, #file_name_matches_any?, #find_message, #find_severity, #range_for_original, #range_from_node_or_range, | |
#reset_investigation | Actually private methods. |
#use_corrector |
::RuboCop::Cop::AutocorrectLogic
- Included
#disable_offense, #disable_offense_at_end_of_line, #disable_offense_before_and_after, #disable_offense_with_eol_or_surround_comment, #heredoc_range, #max_line_length, #multiline_ranges, #multiline_string?, | |
#range_by_lines | Expand the given range to include all of any lines it covers. |
#range_of_first_line, #range_overlaps_offense?, #string_continuation?, #surrounding_heredoc?, #surrounding_percent_array? |
::RuboCop::Cop::IgnoredNode
- Included
Constructor Details
This class inherits a constructor from RuboCop::Cop::Base
Class Method Details
.autocorrect_incompatible_with
[ GitHub ]# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 213
def self.autocorrect_incompatible_with [Style::NestedParenthesizedCalls, Style::RescueModifier] end
Instance Method Details
#args_begin(node) (private)
[ GitHub ]# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 225
def args_begin(node) loc = node.loc selector = node.yield_type? ? loc.keyword : loc.selector resize_by = args_parenthesized?(node) ? 2 : 1 selector.end.resize(resize_by) end
#args_end(node) (private)
[ GitHub ]# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 233
def args_end(node) node.source_range.end end
#args_parenthesized?(node) ⇒ Boolean
(private)
# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 237
def args_parenthesized?(node) return false unless node.arguments.one? first_node = node.first_argument first_node.begin_type? && first_node.parenthesized_call? end
#on_csend(node)
Alias for #on_send.
# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 220
alias on_csend on_send
#on_send(node) Also known as: #on_csend, #on_yield
[ GitHub ]# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 217
def on_send(node) send(style, node) # call require_parentheses or omit_parentheses end
#on_yield(node)
Alias for #on_send.
# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 221
alias on_yield on_send