Class: RuboCop::Cop::Layout::MultilineHashBraceLayout

Inherits:
Cop
  • Object
show all
Includes:
MultilineLiteralBraceLayout
Defined in:
lib/rubocop/cop/layout/multiline_hash_brace_layout.rb

Overview

This cop checks that the closing brace in a hash literal is either on the same line as the last hash element, or a new line.

When using the ‘symmetrical` (default) style:

If a hash’s opening brace is on the same line as the first element of the hash, then the closing brace should be on the same line as the last element of the hash.

If a hash’s opening brace is on the line above the first element of the hash, then the closing brace should be on the line below the last element of the hash.

When using the ‘new_line` style:

The closing brace of a multi-line hash literal must be on the line after the last element of the hash.

When using the ‘same_line` style:

The closing brace of a multi-line hash literal must be on the same line as the last element of the hash.

Examples:

EnforcedStyle: symmetrical (default)


# bad
{ a: 1,
  b: 2
}
# bad
{
  a: 1,
  b: 2 }

# good
{ a: 1,
  b: 2 }

# good
{
  a: 1,
  b: 2
}

EnforcedStyle: new_line

# bad
{
  a: 1,
  b: 2 }

# bad
{ a: 1,
  b: 2 }

# good
{ a: 1,
  b: 2
}

# good
{
  a: 1,
  b: 2
}

EnforcedStyle: same_line

# bad
{ a: 1,
  b: 2
}

# bad
{
  a: 1,
  b: 2
}

# good
{
  a: 1,
  b: 2 }

# good
{ a: 1,
  b: 2 }

Constant Summary collapse

SAME_LINE_MESSAGE =
'Closing hash brace must be on the same line as ' \
'the last hash element when opening brace is on the same line as ' \
'the first hash element.'.freeze
NEW_LINE_MESSAGE =
'Closing hash brace must be on the line after ' \
'the last hash element when opening brace is on a separate line ' \
'from the first hash element.'.freeze
ALWAYS_NEW_LINE_MESSAGE =
'Closing hash brace must be on the line ' \
'after the last hash element.'.freeze
ALWAYS_SAME_LINE_MESSAGE =
'Closing hash brace must be on the same ' \
'line as the last hash element.'.freeze

Constants included from Util

Util::ASGN_NODES, Util::CONDITIONAL_NODES, Util::EQUALS_ASGN_NODES, Util::LITERAL_REGEX, Util::LOGICAL_OPERATOR_NODES, Util::MODIFIER_NODES, Util::OPERATOR_METHODS, Util::SHORTHAND_ASGN_NODES

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Class Method Summary collapse

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, 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?, #message, #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, operator?, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens

Methods included from PathUtil

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

Constructor Details

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

Class Method Details

.autocorrect_incompatible_withObject



108
109
110
# File 'lib/rubocop/cop/layout/multiline_hash_brace_layout.rb', line 108

def self.autocorrect_incompatible_with
  [Style::BracesAroundHashParameters]
end

Instance Method Details

#autocorrect(node) ⇒ Object



116
117
118
# File 'lib/rubocop/cop/layout/multiline_hash_brace_layout.rb', line 116

def autocorrect(node)
  MultilineLiteralBraceCorrector.correct(processed_source, node)
end

#on_hash(node) ⇒ Object



112
113
114
# File 'lib/rubocop/cop/layout/multiline_hash_brace_layout.rb', line 112

def on_hash(node)
  check_brace_layout(node)
end