22
33module RBS
44 class Environment
5- attr_reader :declarations
6-
75 attr_reader :class_decls
86 attr_reader :interface_decls
97 attr_reader :type_alias_decls
108 attr_reader :constant_decls
119 attr_reader :global_decls
1210 attr_reader :class_alias_decls
1311
14- attr_reader :signatures
12+ attr_reader :sources
1513
1614 class SingleEntry
1715 attr_reader :name
@@ -44,9 +42,7 @@ class GlobalEntry < SingleEntry
4442 end
4543
4644 def initialize
47- @signatures = { }
48- @declarations = [ ]
49-
45+ @sources = [ ]
5046 @class_decls = { }
5147 @interface_decls = { }
5248 @type_alias_decls = { }
@@ -57,9 +53,7 @@ def initialize
5753 end
5854
5955 def initialize_copy ( other )
60- @signatures = other . signatures . dup
61- @declarations = other . declarations . dup
62-
56+ @sources = other . sources . dup
6357 @class_decls = other . class_decls . dup
6458 @interface_decls = other . interface_decls . dup
6559 @type_alias_decls = other . type_alias_decls . dup
@@ -368,16 +362,21 @@ def insert_decl(decl, context:, namespace:)
368362 end
369363 end
370364
371- def <<( decl )
372- declarations << decl
373- insert_decl ( decl , context : nil , namespace : Namespace . root )
374- self
365+ def add_source ( source )
366+ sources << source
367+
368+ source . declarations . each do |decl |
369+ insert_decl ( decl , context : nil , namespace : Namespace . root )
370+ end
375371 end
376372
377- def add_signature ( buffer :, directives :, decls :)
378- signatures [ buffer ] = [ directives , decls ]
379- decls . each do |decl |
380- self << decl
373+ def each_rbs_source ( &block )
374+ if block
375+ sources . each do |source |
376+ yield source
377+ end
378+ else
379+ enum_for ( :each_rbs_source )
381380 end
382381 end
383382
@@ -420,12 +419,14 @@ def resolve_type_names(only: nil)
420419 table . known_types . merge ( interface_decls . keys )
421420 table . compute_children
422421
423- signatures . each do |buffer , ( dirs , decls ) |
424- resolve = dirs . find { _1 . is_a? ( AST ::Directives ::ResolveTypeNames ) } #: AST::Directives::ResolveTypeNames?
422+ each_rbs_source do |source |
423+ resolve = source . directives . find { _1 . is_a? ( AST ::Directives ::ResolveTypeNames ) } #: AST::Directives::ResolveTypeNames?
425424 if !resolve || resolve . value
426- _ , decls = resolve_signature ( resolver , table , dirs , decls )
425+ _ , decls = resolve_signature ( resolver , table , source . directives , source . declarations )
426+ else
427+ decls = source . declarations
427428 end
428- env . add_signature ( buffer : buffer , directives : dirs , decls : decls )
429+ env . add_source ( Source :: RBS . new ( source . buffer , source . directives , decls ) )
429430 end
430431
431432 env
@@ -713,15 +714,16 @@ def inspect
713714 end
714715
715716 def buffers
716- signatures . keys
717+ sources . map ( & :buffer )
717718 end
718719
719720 def unload ( buffers )
720721 env = Environment . new
722+ bufs = buffers . to_set
721723
722- signatures . each do |buf , ( dirs , decls ) |
723- next if buffers . include? ( buf )
724- env . add_signature ( buffer : buf , directives : dirs , decls : decls )
724+ each_rbs_source do |source |
725+ next if bufs . include? ( source . buffer )
726+ env . add_source ( source )
725727 end
726728
727729 env
0 commit comments