Sha256: 7a02fc409db4c0d3ed4d97b5a676dcbdd4389df1aa4cdb9f94ab6add8630d785

Contents?: true

Size: 1.36 KB

Versions: 10

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    # Common functionality for checking modifier nodes.
    module AccessModifierNode
      extend NodePattern::Macros

      def_node_matcher :private_node?, '(send nil :private)'
      def_node_matcher :protected_node?, '(send nil :protected)'
      def_node_matcher :public_node?, '(send nil :public)'
      def_node_matcher :module_function_node?, '(send nil :module_function)'

      # Returns true when the node is an access modifier.
      def modifier_node?(node)
        modifier_structure?(node) && class_or_module_parent?(node)
      end

      # Returns true when the node looks like an access modifier.
      def modifier_structure?(node)
        private_node?(node) ||
          protected_node?(node) ||
          public_node?(node) ||
          module_function_node?(node)
      end

      # Returns true when the parent of what looks like an access modifier
      # is a Class or Module. Filters out simple method calls to similarly
      # named private, protected or public.
      def class_or_module_parent?(node)
        node.each_ancestor do |ancestor|
          if ancestor.block_type?
            return true if ancestor.class_constructor?
          elsif !ancestor.begin_type?
            return [:casgn, :sclass, :class, :module].include?(ancestor.type)
          end
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
dirwatch-0.0.9 vendor/bundle/ruby/2.5.0/gems/rubocop-0.46.0/lib/rubocop/cop/mixin/access_modifier_node.rb
dirwatch-0.0.8 vendor/bundle/ruby/2.5.0/gems/rubocop-0.46.0/lib/rubocop/cop/mixin/access_modifier_node.rb
dirwatch-0.0.6 vendor/bundle/ruby/2.3.0/gems/rubocop-0.46.0/lib/rubocop/cop/mixin/access_modifier_node.rb
dirwatch-0.0.5 vendor/bundle/ruby/2.3.0/gems/rubocop-0.46.0/lib/rubocop/cop/mixin/access_modifier_node.rb
dirwatch-0.0.4 vendor/bundle/ruby/2.3.0/gems/rubocop-0.46.0/lib/rubocop/cop/mixin/access_modifier_node.rb
dirwatch-0.0.3 vendor/bundle/ruby/2.3.0/gems/rubocop-0.46.0/lib/rubocop/cop/mixin/access_modifier_node.rb
dirwatch-0.0.2 vendor/bundle/ruby/2.3.0/gems/rubocop-0.46.0/lib/rubocop/cop/mixin/access_modifier_node.rb
rubocop-0.47.1 lib/rubocop/cop/mixin/access_modifier_node.rb
rubocop-0.47.0 lib/rubocop/cop/mixin/access_modifier_node.rb
rubocop-0.46.0 lib/rubocop/cop/mixin/access_modifier_node.rb