lib/rbs/environment.rb in rbs-2.2.2 vs lib/rbs/environment.rb in rbs-2.3.0
- old
+ new
@@ -7,23 +7,27 @@
attr_reader :alias_decls
attr_reader :constant_decls
attr_reader :global_decls
module ContextUtil
- def context
- @context ||= begin
- (outer + [decl]).each.with_object([Namespace.root]) do |decl, array|
- first = array.first or raise
- array.unshift(first + decl.name.to_namespace)
- end
- end
+ def calculate_context(decls)
+ decls.each.with_object([Namespace.root]) do |decl, array|
+ first = array.first or raise
+ array.unshift(first + decl.name.to_namespace)
+ end
end
end
class MultiEntry
D = _ = Struct.new(:decl, :outer, keyword_init: true) do
+ # @implements D[M]
+
include ContextUtil
+
+ def context
+ @context ||= calculate_context(outer + [decl])
+ end
end
attr_reader :name
attr_reader :decls
@@ -37,22 +41,20 @@
@primary = nil
end
def validate_type_params
unless decls.empty?
- # @type var hd_decl: MultiEntry::D[module_decl]
- # @type var tl_decls: Array[MultiEntry::D[module_decl]]
hd_decl, *tl_decls = decls
raise unless hd_decl
hd_params = hd_decl.decl.type_params
tl_decls.each do |tl_decl|
tl_params = tl_decl.decl.type_params
unless compatible_params?(hd_params, tl_params)
- raise GenericParameterMismatchError.new(name: name, decl: tl_decl.decl)
+ raise GenericParameterMismatchError.new(name: name, decl: _ = tl_decl.decl)
end
end
end
end
@@ -84,29 +86,39 @@
decls.first or raise("decls cannot be empty")
end
end
end
+ def foo
+ a = [1].sample()
+ return unless a
+ a + 1
+ end
+
class ClassEntry < MultiEntry
def primary
@primary ||= begin
validate_type_params
decls.find {|d| d.decl.super_class } || decls.first or raise("decls cannot be empty")
end
end
end
class SingleEntry
- include ContextUtil
-
attr_reader :name
attr_reader :outer
attr_reader :decl
def initialize(name:, decl:, outer:)
@name = name
@decl = decl
@outer = outer
+ end
+
+ include ContextUtil
+
+ def context
+ @context = calculate_context(outer)
end
end
def initialize
@buffers = []