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

Inherits:
Cop
  • Object
show all
Includes:
ConfigurableEnforcedStyle, IgnoredMethods, IgnoredPattern
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

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 or IgnoredPatterns 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 all follows:

  1. IgnoredMethods

  2. IgnoredPatterns

  3. IncludedMacros

eg. If a method is listed in both IncludedMacros and IgnoredMethods, then the latter takes precedence (that is, the method is ignored).

In the alternative style (omit_parentheses), there are three 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.
    
  3. AllowParenthesesInCamelCaseMethod is false 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
    to `true` allows the presence of parentheses in such a method call
    even with arguments.
    

Examples:

EnforcedStyle: require_parentheses (default)


# 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'

# okay with `^assert` listed in `IgnoredPatterns`
assert_equal 'test', x

EnforcedStyle: omit_parentheses


# bad
array.delete(e)

# good
array.delete e

# bad
foo.enforce(strict: true)

# good
foo.enforce strict: true

IgnoreMacros: true (default)


# good
class Foo
  bar :baz
end

IgnoreMacros: false


# bad
class Foo
  bar :baz
end

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

AllowParenthesesInCamelCaseMethod: false (default)


# bad
Array(1)

# good
Array 1

AllowParenthesesInCamelCaseMethod: true


# good
Array(1)

# good
Array 1

Defined Under Namespace

Modules: OmitParentheses, RequireParentheses

Constant Summary

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_configured?, #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, #disable_uncorrectable, #duplicate_location?, #excluded_file?, #external_dependency_checksum, #find_location, #highlights, inherited, #join_force?, lint?, match?, #message, #messages, #parse, qualified_cop_name, #reason_to_not_correct, #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?, #correctable?, #disable_offense, #disable_uncorrectable?, #safe_autocorrect?, #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, trim_string_interporation_escape_character

Methods included from PathUtil

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

Constructor Details

#initializeMethodCallWithArgsParentheses

Returns a new instance of MethodCallWithArgsParentheses.



151
152
153
154
155
156
157
158
159
160
161
# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 151

def initialize(*)
  super
  return unless style_configured?

  case style
  when :require_parentheses
    extend RequireParentheses
  when :omit_parentheses
    extend OmitParentheses
  end
end

Instance Method Details

#autocorrect(_node) ⇒ Object

This method is abstract.

Overridden in style modules



164
# File 'lib/rubocop/cop/style/method_call_with_args_parentheses.rb', line 164

def autocorrect(_node); end