Class: RuboCop::Cop::Style::MethodCallWithArgsParentheses

Inherits:
Cop
  • Object
show all
Includes:
ConfigurableEnforcedStyle, IgnoredMethods
Defined in:
lib/rubocop/cop/style/method_call_with_args_parentheses.rb

Overview

This cop enforces the presence (default) or absence of parentheses in method calls containing parameters.

In the default style (require_parentheses), macro methods are ignored. Additional methods can be added to the IgnoredMethods list. This option is valid only in the default style.

In the alternative style (omit_parentheses), there are two additional options.

  1. AllowParenthesesInChaining is false by default. Setting it to true allows the presence of parentheses in the last call during method chaining.

  2. AllowParenthesesInMultilineCall is false by default. Setting it

    to `true` allows the presence of parentheses in multi-line method
    calls.
    

Examples:

EnforcedStyle: require_parentheses


# bad
array.delete e

# good
array.delete(e)

# good
# Operators don't need parens
foo == bar

# good
# Setter methods don't need parens
foo.bar = baz

# okay with `puts` listed in `IgnoredMethods`
puts 'test'

# IgnoreMacros: true (default)

# good
class Foo
  bar :baz
end

# IgnoreMacros: false

# bad
class Foo
  bar :baz
end

EnforcedStyle: omit_parentheses


# bad
array.delete(e)

# good
array.delete e

# bad
foo.enforce(strict: true)

# good
foo.enforce strict: true

# AllowParenthesesInMultilineCall: false (default)

# bad
foo.enforce(
  strict: true
)

# good
foo.enforce \
  strict: true

# AllowParenthesesInMultilineCall: true

# good
foo.enforce(
  strict: true
)

# good
foo.enforce \
  strict: true

# AllowParenthesesInChaining: false (default)

# bad
foo().bar(1)

# good
foo().bar 1

# AllowParenthesesInChaining: true

# good
foo().bar(1)

# good
foo().bar 1

Constant Summary collapse

TRAILING_WHITESPACE_REGEX =
/\s+\Z/.freeze

Constants included from Util

Util::LITERAL_REGEX

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Instance Method Summary collapse

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_detected, #style_parameter_name, #supported_styles, #unexpected_style_detected

Methods inherited from Cop

#add_offense, all, autocorrect_incompatible_with, badge, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, #correct, department, #duplicate_location?, #excluded_file?, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #messages, non_rails, #parse, qualified_cop_name, #relevant_file?, #target_rails_version, #target_ruby_version

Methods included from AST::Sexp

#s

Methods included from NodePattern::Macros

#def_node_matcher, #def_node_search, #node_search, #node_search_all, #node_search_body, #node_search_first

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

begins_its_line?, comment_line?, double_quotes_required?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, needs_escaping?, on_node, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens

Methods included from PathUtil

absolute?, hidden_dir?, hidden_file_in_not_hidden_dir?, match_path?, pwd, relative_path, reset_pwd, smart_path

Constructor Details

This class inherits a constructor from RuboCop::Cop::Cop

Instance Method Details

#autocorrect(node) ⇒ Object



126
127
128
129
130
131
132
133
# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 126

def autocorrect(node)
  case style
  when :require_parentheses
    autocorrect_for_require_parentheses(node)
  when :omit_parentheses
    autocorrect_for_omit_parentheses(node)
  end
end

#message(_node = nil) ⇒ Object



135
136
137
138
139
140
141
142
# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 135

def message(_node = nil)
  case style
  when :require_parentheses
    'Use parentheses for method calls with arguments.'.freeze
  when :omit_parentheses
    'Omit parentheses for method calls with arguments.'.freeze
  end
end

#on_send(node) ⇒ Object Also known as: on_super, on_yield



115
116
117
118
119
120
121
122
# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 115

def on_send(node)
  case style
  when :require_parentheses
    add_offense_for_require_parentheses(node)
  when :omit_parentheses
    add_offense_for_omit_parentheses(node)
  end
end