From 4a7071d0f83c9caa1811c587314461c422f54827 Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Tue, 5 Apr 2022 11:23:22 +0900 Subject: [PATCH] Toplevel constant must have the lowlevel precedence --- lib/rbs/resolver/constant_resolver.rb | 7 +++++-- test/rbs/resolver/constant_resolver_test.rb | 23 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/rbs/resolver/constant_resolver.rb b/lib/rbs/resolver/constant_resolver.rb index 9c670111b..02b1aac86 100644 --- a/lib/rbs/resolver/constant_resolver.rb +++ b/lib/rbs/resolver/constant_resolver.rb @@ -106,12 +106,17 @@ def load_context_constants(context) # @type var consts: Hash[Symbol, Constant] consts = {} + # Toplevel constants has the lowest precedence + consts.merge!(table.toplevel) if context if last = context[1] + # Ancestor constants has the next precedence constants_from_ancestors(last, constants: consts) end end + # Context (module nesting) constants has the next precedence constants_from_context(context, constants: consts) or return + # The constant itself comes the last constants_itself(context, constants: consts) context_constants_cache[context] = consts @@ -152,8 +157,6 @@ def constants_from_context(context, constants:) consts = table.children(last) or return false constants.merge!(consts) end - else - constants.merge!(table.toplevel) end true diff --git a/test/rbs/resolver/constant_resolver_test.rb b/test/rbs/resolver/constant_resolver_test.rb index 7b7fd0ef5..de88b6b1f 100644 --- a/test/rbs/resolver/constant_resolver_test.rb +++ b/test/rbs/resolver/constant_resolver_test.rb @@ -282,4 +282,27 @@ class Stuff end end end + + def test_reference_constant_toplevel + SignatureManager.new do |manager| + manager.files[Pathname("foo.rbs")] = <