Sha256: 6e4c39ecce59138d964ddcf73be4b0768993173dc01658d5ca89becdd28a5fab

Contents?: true

Size: 1.64 KB

Versions: 16

Compression:

Stored size: 1.64 KB

Contents

# frozen_string_literal: true

module RuboCop
  module AST
    # Common functionality for nodes that deal with constants:
    # `const`, `casgn`.
    module ConstantNode
      # @return [Node, nil] the node associated with the scope (e.g. cbase, const, ...)
      def namespace
        children[0]
      end

      # @return [Symbol] the demodulized name of the constant: "::Foo::Bar" => :Bar
      def short_name
        children[1]
      end

      # @return [Boolean] if the constant is a Module / Class, according to the standard convention.
      #                   Note: some classes might have uppercase in which case this method
      #                         returns false
      def module_name?
        short_name.match?(/[[:lower:]]/)
      end
      alias class_name? module_name?

      # @return [Boolean] if the constant starts with `::` (aka s(:cbase))
      def absolute?
        return false unless namespace

        each_path.first.cbase_type?
      end

      # @return [Boolean] if the constant does not start with `::` (aka s(:cbase))
      def relative?
        !absolute?
      end

      # Yield nodes for the namespace
      #
      #   For `::Foo::Bar::BAZ` => yields:
      #      s(:cbase), then
      #      s(:const, :Foo), then
      #      s(:const, s(:const, :Foo), :Bar)
      def each_path(&block)
        return to_enum(__method__) unless block

        descendants = []
        last = self
        loop do
          last = last.children.first
          break if last.nil?

          descendants << last
          break unless last.const_type?
        end
        descendants.reverse_each(&block)

        self
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 3 rubygems

Version Path
rubocop-ast-1.41.0 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.40.0 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.39.0 lib/rubocop/ast/node/mixin/constant_node.rb
siteimprove_api_client-1.0.1 vendor/bundle/ruby/3.2.0/gems/rubocop-ast-1.38.1/lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.38.1 lib/rubocop/ast/node/mixin/constant_node.rb
tailscale_middleware-0.0.3 vendor/cache/ruby/3.4.0/gems/rubocop-ast-1.38.0/lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.38.0 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.37.0 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.36.2 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.36.1 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.36.0 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.35.0 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.34.1 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.34.0 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.33.1 lib/rubocop/ast/node/mixin/constant_node.rb
rubocop-ast-1.33.0 lib/rubocop/ast/node/mixin/constant_node.rb