class Rubocop::Cop::Style::AccessControl

A couple of checks related to the use method visibility modifiers. Modifiers should be indented as deeps are method definitions and surrounded by blank lines.

Constants

BLANK_MSG
INDENT_MSG
PRIVATE_NODE
PROTECTED_NODE
PUBLIC_NODE

Public Instance Methods

inspect(source_buffer, source, tokens, ast, comments) click to toggle source
# File lib/rubocop/cop/style/access_control.rb, line 17
def inspect(source_buffer, source, tokens, ast, comments)
  return unless ast
  on_node([:class, :module, :sclass], ast) do |class_node|
    class_start_col = class_node.loc.expression.column

    # we'll have to walk all class children nodes
    # except other class/module nodes
    class_node.children.compact.each do |node|
      on_node(:send, node, [:class, :module, :sclass]) do |send_node|
        if modifier_node?(send_node)
          send_start_col = send_node.loc.expression.column
          selector = send_node.loc.selector.source

          if send_start_col - 2 != class_start_col
            add_offence(:convention,
                        send_node.loc.expression,
                        format(INDENT_MSG, selector))
          end

          send_line = send_node.loc.line

          unless source[send_line].chomp.empty? &&
              source[send_line - 2].chomp.empty?
            add_offence(:convention,
                        send_node.loc.expression,
                        format(BLANK_MSG, selector))
          end
        end
      end
    end
  end
end

Private Instance Methods

modifier_node?(node) click to toggle source
# File lib/rubocop/cop/style/access_control.rb, line 52
def modifier_node?(node)
  [PRIVATE_NODE, PROTECTED_NODE, PUBLIC_NODE].include?(node)
end