Sha256: 310e3ad1e460a11c6d49c27d4e8cf5fd260eae77c855e0ffcbb1a9b0a4881ca8

Contents?: true

Size: 1020 Bytes

Versions: 4

Compression:

Stored size: 1020 Bytes

Contents

require 'forwardable'

module Yoda
  module Services
    class Evaluator
      extend Forwardable

      # @return [AST::Vnode]
      attr_reader :ast

      # @return [Model::Environment]
      attr_reader :environment

      # @return [Typing::Inferencer]
      attr_reader :inferencer

      delegate %i(type context_variable_types receiver_type method_candidates node_info) => :tracer

      # @param ast [::Parser::AST::Node]
      # @param registry [Model::Environment]
      def initialize(ast:, environment:)
        @ast = ast
        @environment = environment
        @inferencer = Typing::Inferencer.create_for_root(environment: environment)
        @lock = Concurrent::ReadWriteLock.new
      end

      # @return [void]
      def evaluate
        tracer
      end

      # @return [Typing::Inferencer::Tracer]
      def tracer
        @lock.with_write_lock do
          @tracer ||= begin
            inferencer.infer(ast)
            inferencer.tracer
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
yoda-language-server-0.10.1 lib/yoda/services/evaluator.rb
yoda-language-server-0.10.0 lib/yoda/services/evaluator.rb
yoda-language-server-0.9.0 lib/yoda/services/evaluator.rb
yoda-language-server-0.8.0 lib/yoda/services/evaluator.rb