Class: RuboCop::Cop::Style::IndentationWidth
- Includes:
- AccessModifierNode, AutocorrectAlignment, CheckAssignment, IfNode, OnMethodDef
- Defined in:
- lib/rubocop/cop/style/indentation_width.rb
Overview
This cops checks for indentation that doesn't use two spaces.
class A def test puts 'hello' end end
Constant Summary
Constants included from AccessModifierNode
AccessModifierNode::MODUDULE_FUNCTION_NODE, AccessModifierNode::PRIVATE_NODE, AccessModifierNode::PROTECTED_NODE, AccessModifierNode::PUBLIC_NODE
Constants included from CheckAssignment
Constants included from Util
Util::ASGN_NODES, Util::EQUALS_ASGN_NODES, Util::OPERATOR_METHODS, Util::PROC_NEW_NODE, Util::SHORTHAND_ASGN_NODES
Instance Attribute Summary
Attributes inherited from Cop
#config, #corrections, #offenses, #processed_source
Instance Method Summary collapse
- #on_block(node) ⇒ Object
- #on_case(node) ⇒ Object
- #on_class(node) ⇒ Object
- #on_ensure(node) ⇒ Object
- #on_for(node) ⇒ Object
- #on_if(node, base = node) ⇒ Object
- #on_kwbegin(node) ⇒ Object
- #on_method_def(node, _method_name, _args, body) ⇒ Object
- #on_module(node) ⇒ Object
- #on_rescue(node) ⇒ Object
- #on_send(node) ⇒ Object
- #on_while(node, base = node) ⇒ Object (also: #on_until)
Methods included from AccessModifierNode
Methods included from IfNode
#elsif?, #if_else?, #modifier_if?, #ternary_op?
Methods included from CheckAssignment
Methods included from OnMethodDef
Methods included from AutocorrectAlignment
#autocorrect, #check_alignment, #start_of_line?
Methods inherited from Cop
#add_offense, all, #autocorrect?, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, cop_name_with_namespace, cop_type, #debug?, #display_cop_names?, inherited, #initialize, #join_force?, lint?, #message, non_rails, qualified_cop_name, rails?, #relevant_file?, #support_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
begins_its_line?, block_length, command?, comment_line?, const_name, first_part_of_call_chain, lambda?, lambda_or_proc?, line_range, numeric_range_size, on_node, operator?, parentheses?, proc?, range_with_surrounding_space, source_range, strip_quotes, within_node?
Methods included from PathUtil
issue_deprecation_warning, match_path?, relative_path
Constructor Details
This class inherits a constructor from RuboCop::Cop::Cop
Instance Method Details
#on_block(node) ⇒ Object
43 44 45 46 47 48 49 50 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 43 def on_block(node) _method, _args, body = *node # Check body against end/} indentation. Checking against variable # assignments, etc, would be more difficult. The end/} must be at the # beginning of its line. loc = node.loc check_indentation(loc.end, body) if begins_its_line?(loc.end) end |
#on_case(node) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 92 def on_case(node) _condition, *branches = *node latest_when = nil branches.compact.each do |b| if b.type == :when # TODO: Revert to the original expresson once the fix in Rubinius # is released. # # Originally this expression was: # # *_conditions, body = *b # # However it fails on Rubinius 2.2.9 due to its bug: # # RuntimeError: # can't modify frozen instance of Array # # kernel/common/array.rb:988:in `pop' # # ./lib/rubocop/cop/style/indentation_width.rb:99:in `on_case' # # It seems to be fixed on the current master (0a92c3c). body = b.children.last # Check "when" body against "when" keyword indentation. check_indentation(b.loc.keyword, body) latest_when = b else # Since it's not easy to get the position of the "else" keyword, # we check "else" body against latest "when" keyword indentation. check_indentation(latest_when.loc.keyword, b) end end end |
#on_class(node) ⇒ Object
57 58 59 60 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 57 def on_class(node) _class_name, _base_class, *members = *node members.each { |m| check_indentation(node.loc.keyword, m) } end |
#on_ensure(node) ⇒ Object
31 32 33 34 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 31 def on_ensure(node) _body, ensure_body = *node check_indentation(node.loc.keyword, ensure_body) end |
#on_for(node) ⇒ Object
77 78 79 80 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 77 def on_for(node) _variable, _collection, body = *node check_indentation(node.loc.keyword, body) end |
#on_if(node, base = node) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 125 def on_if(node, base = node) return if ignored_node?(node) return if ternary_op?(node) return if modifier_if?(node) case node.loc.keyword.source when 'if' then _condition, body, else_clause = *node when 'unless' then _condition, else_clause, body = *node else _condition, body = *node end check_if(node, body, else_clause, base.loc) if body end |
#on_kwbegin(node) ⇒ Object
36 37 38 39 40 41 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 36 def on_kwbegin(node) # Check indentation against end keyword but only if it's first on its # line. return unless begins_its_line?(node.loc.end) check_indentation(node.loc.end, node.children.first) end |
#on_method_def(node, _method_name, _args, body) ⇒ Object
73 74 75 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 73 def on_method_def(node, _method_name, _args, body) check_indentation(node.loc.keyword, body) unless ignored_node?(node) end |
#on_module(node) ⇒ Object
52 53 54 55 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 52 def on_module(node) _module_name, *members = *node members.each { |m| check_indentation(node.loc.keyword, m) } end |
#on_rescue(node) ⇒ Object
22 23 24 25 26 27 28 29 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 22 def on_rescue(node) _begin_node, *rescue_nodes, else_node = *node rescue_nodes.each do |rescue_node| _, _, body = *rescue_node check_indentation(rescue_node.loc.keyword, body) end check_indentation(node.loc.else, else_node) end |
#on_send(node) ⇒ Object
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 62 def on_send(node) super receiver, method_name, *args = *node return unless visibility_and_def_on_same_line?(receiver, method_name, args) _method_name, _args, body = *args.first check_indentation(node.loc.expression, body) ignore_node(args.first) end |
#on_while(node, base = node) ⇒ Object Also known as: on_until
82 83 84 85 86 87 88 |
# File 'lib/rubocop/cop/style/indentation_width.rb', line 82 def on_while(node, base = node) _condition, body = *node return unless node.loc.keyword.begin_pos == node.loc.expression.begin_pos check_indentation(base.loc, body) end |