Sha256: 0532097ea36bd28e4a876a98dc8ba2dc006a4b42e6108efe7403b24dc880b63c

Contents?: true

Size: 983 Bytes

Versions: 14

Compression:

Stored size: 983 Bytes

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    # Help methods for determining node visibility.
    module VisibilityHelp
      extend NodePattern::Macros

      VISIBILITY_SCOPES = %i[private protected public].freeze

      private

      def node_visibility(node)
        scope = find_visibility_start(node)
        scope&.method_name || :public
      end

      def find_visibility_start(node)
        node.left_siblings.reverse.find { |sibling| visibility_block?(sibling) }
      end

      # Navigate to find the last protected method
      def find_visibility_end(node)
        possible_visibilities = VISIBILITY_SCOPES - [node_visibility(node)]
        right = node.right_siblings
        right.find do |child_node|
          possible_visibilities.include?(node_visibility(child_node))
        end || right.last
      end

      def_node_matcher :visibility_block?, <<~PATTERN
        (send nil? { :private :protected :public })
      PATTERN
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
rubocop-1.10.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.9.1 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.9.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.8.1 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.8.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.7.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.6.1 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.6.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.5.2 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.5.1 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.5.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.4.2 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.4.1 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.4.0 lib/rubocop/cop/mixin/visibility_help.rb