Sha256: eb1e3721bf6b7a9cb0bc606803e228ddcf59571cc33a28ccef51610df8950889

Contents?: true

Size: 1.46 KB

Versions: 2

Compression:

Stored size: 1.46 KB

Contents

module Yoda
  module Typing
    class ConstantResolver
      # @abstract
      class Query
        class << self
          # @param node [AST::ConstantNode]
          # @param tracer [Inferencer::Tracer]
          def from_node(node, tracer: nil)
            case node.type
            when :cbase
              CbaseQuery.new
            when :empty
              RelativeBaseQuery.new
            else
              MemberQuery.new(parent: from_node(node.base, tracer: tracer), name: node.name.name.to_s, tracer: tracer && NodeTracer.new(node: node, tracer: tracer))
            end
          end

          def from_string(string, parent: RelativeBaseQuery.new)
            base, child = string.split("::", 2)

            case base
            when nil
              parent
            when ""
              base_query = CbaseQuery.new

              if child.nil?
                base_query
              else
                from_string(child, parent: base_query)
              end
            else
              base_query = MemberQuery.new(parent: parent, name: base)

              if child.nil?
                base_query
              else
                from_string(child, parent: base_query)
              end
            end
          end
        end

        # @abstract
        # @return [Query, nil]
        def parent
          fail NotImplementedError
        end

        # @return [NodeTracer, nil]
        def tracer
          nil
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
yoda-language-server-0.9.0 lib/yoda/typing/constant_resolver/query.rb
yoda-language-server-0.8.0 lib/yoda/typing/constant_resolver/query.rb