Sha256: 6ff78bd9e925cf5b0203ed2ff44c32e23f1e2d7841c0cea84b4fcd07bb534d6b

Contents?: true

Size: 1 KB

Versions: 65

Compression:

Stored size: 1 KB

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

      # @!method visibility_block?(node)
      def_node_matcher :visibility_block?, <<~PATTERN
        (send nil? { :private :protected :public })
      PATTERN
    end
  end
end

Version data entries

65 entries across 59 versions & 7 rubygems

Version Path
cm-admin-1.5.22 vendor/bundle/ruby/3.3.0/gems/rubocop-1.35.1/lib/rubocop/cop/mixin/visibility_help.rb
cm-admin-1.5.21 vendor/bundle/ruby/3.3.0/gems/rubocop-1.35.1/lib/rubocop/cop/mixin/visibility_help.rb
cm-admin-1.5.20 vendor/bundle/ruby/3.3.0/gems/rubocop-1.35.1/lib/rubocop/cop/mixin/visibility_help.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/rubocop-1.31.2/lib/rubocop/cop/mixin/visibility_help.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/rubocop-1.26.0/lib/rubocop/cop/mixin/visibility_help.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/rubocop-1.35.1/lib/rubocop/cop/mixin/visibility_help.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/rubocop-1.36.0/lib/rubocop/cop/mixin/visibility_help.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/rubocop-1.35.1/lib/rubocop/cop/mixin/visibility_help.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/rubocop-1.26.0/lib/rubocop/cop/mixin/visibility_help.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/rubocop-1.36.0/lib/rubocop/cop/mixin/visibility_help.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/rubocop-1.31.2/lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.38.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.37.1 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.37.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.36.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.35.1 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.35.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.34.1 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.34.0 lib/rubocop/cop/mixin/visibility_help.rb
rubocop-1.33.0 lib/rubocop/cop/mixin/visibility_help.rb