diff --git a/lib/rbs/environment.rb b/lib/rbs/environment.rb index 416b8b902..81677e151 100644 --- a/lib/rbs/environment.rb +++ b/lib/rbs/environment.rb @@ -209,12 +209,16 @@ def validate_type_params end end - def resolve_type_names + def resolve_type_names(only: nil) resolver = TypeNameResolver.from_env(self) env = Environment.new() declarations.each do |decl| - env << resolve_declaration(resolver, decl, outer: [], prefix: Namespace.root) + if only && !only.member?(decl) + env << decl + else + env << resolve_declaration(resolver, decl, outer: [], prefix: Namespace.root) + end end env diff --git a/sig/environment.rbs b/sig/environment.rbs index 08bcfef26..447909fc1 100644 --- a/sig/environment.rbs +++ b/sig/environment.rbs @@ -84,7 +84,13 @@ module RBS # Runs generics type params validation over each class definitions. def validate_type_params: () -> void - def resolve_type_names: () -> Environment + # Resolve all type names in the environment to absolute type names. + # Relative type name will be left if absolute type name cannot be found. + # + # When `only` is given, it skips other _top-level_ declarations not included in the collection. + # This helps running resolution faster in the case of _partial updates_. + # + def resolve_type_names: (?only: Set[AST::Declarations::t]?) -> Environment def resolve_declaration: (TypeNameResolver resolver, AST::Declarations::t decl, outer: Array[module_decl], prefix: Namespace) -> AST::Declarations::t