Sha256: c38419499de0df73e007e39f3e78a1ba686a8bf2789f5a62b38923ea959fcf3e

Contents?: true

Size: 877 Bytes

Versions: 8

Compression:

Stored size: 877 Bytes

Contents

require 'set'

module Yoda
  module Typing
    class Environment
      def initialize
        @binds = {}
      end

      # @param key  [String, Symbol]
      def resolve(key)
        @binds[key.to_sym]
      end

      # @param key  [String, Symbol]
      # @param type [Symbol, Model::Types::Base]
      def bind(key, type)
        key = key.to_sym
        type = (type.is_a?(Symbol) && resolve(type)) || type
        @binds.transform_values! { |value| value == key ? type : value }
        @binds[key] = type
        self
      end

      # @param signature [Model::FunctionSignatures::Base]
      # @return [self]
      def bind_method_parameters(signature)
        parameter_names = signature.parameters.parameter_names
        parameter_names.each do |name|
          bind(name.gsub(/:\Z/, ''), signature.parameter_type_of(name))
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
yoda-language-server-0.7.2 lib/yoda/typing/environment.rb
yoda-language-server-0.7.1 lib/yoda/typing/environment.rb
yoda-language-server-0.7.0 lib/yoda/typing/environment.rb
yoda-language-server-0.6.2 lib/yoda/typing/environment.rb
yoda-language-server-0.6.1 lib/yoda/typing/environment.rb
yoda-language-server-0.6.0 lib/yoda/typing/environment.rb
yoda-language-server-0.5.0 lib/yoda/typing/environment.rb
yoda-language-server-0.4.0 lib/yoda/typing/environment.rb