rbs 0.18.0 → 1.0.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +31 -0
 - data/Rakefile +4 -0
 - data/core/builtin.rbs +4 -0
 - data/core/file.rbs +0 -4
 - data/core/hash.rbs +1 -3
 - data/core/io.rbs +159 -6
 - data/core/kernel.rbs +1 -1
 - data/core/time.rbs +0 -12
 - data/goodcheck.yml +20 -0
 - data/lib/rbs.rb +2 -0
 - data/lib/rbs/ast/declarations.rb +7 -2
 - data/lib/rbs/ast/members.rb +10 -4
 - data/lib/rbs/cli.rb +10 -10
 - data/lib/rbs/definition.rb +70 -3
 - data/lib/rbs/definition_builder.rb +544 -989
 - data/lib/rbs/definition_builder/ancestor_builder.rb +476 -0
 - data/lib/rbs/definition_builder/method_builder.rb +217 -0
 - data/lib/rbs/environment.rb +5 -1
 - data/lib/rbs/environment_loader.rb +1 -1
 - data/lib/rbs/environment_walker.rb +16 -10
 - data/lib/rbs/errors.rb +71 -66
 - data/lib/rbs/method_type.rb +1 -31
 - data/lib/rbs/parser.rb +1000 -894
 - data/lib/rbs/parser.y +108 -57
 - data/lib/rbs/prototype/rb.rb +14 -3
 - data/lib/rbs/prototype/rbi.rb +6 -6
 - data/lib/rbs/prototype/runtime.rb +53 -33
 - data/lib/rbs/substitution.rb +4 -0
 - data/lib/rbs/test.rb +3 -1
 - data/lib/rbs/test/hook.rb +24 -7
 - data/lib/rbs/types.rb +63 -6
 - data/lib/rbs/validator.rb +4 -2
 - data/lib/rbs/variance_calculator.rb +5 -1
 - data/lib/rbs/version.rb +1 -1
 - data/lib/rbs/writer.rb +9 -1
 - data/schema/members.json +5 -1
 - data/sig/definition.rbs +6 -1
 - data/sig/definition_builder.rbs +3 -0
 - data/sig/errors.rbs +20 -0
 - data/sig/members.rbs +4 -1
 - data/sig/method_types.rbs +3 -16
 - data/sig/type_name_resolver.rbs +4 -2
 - data/sig/types.rbs +17 -1
 - data/sig/validator.rbs +12 -0
 - data/stdlib/dbm/0/dbm.rbs +0 -2
 - data/stdlib/logger/0/log_device.rbs +1 -2
 - data/stdlib/monitor/0/monitor.rbs +119 -0
 - data/stdlib/time/0/time.rbs +327 -0
 - data/stdlib/tsort/0/tsort.rbs +8 -0
 - data/stdlib/uri/0/common.rbs +401 -0
 - data/stdlib/uri/0/rfc2396_parser.rbs +9 -0
 - data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
 - data/steep/Gemfile.lock +13 -14
 - metadata +14 -5
 
    
        data/lib/rbs/parser.y
    CHANGED
    
    | 
         @@ -20,7 +20,7 @@ class RBS::Parser 
     | 
|
| 
       20 
20 
     | 
    
         
             
              nonassoc kARROW
         
     | 
| 
       21 
21 
     | 
    
         
             
              preclow
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
              expect  
     | 
| 
      
 23 
     | 
    
         
            +
              expect 5
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
            rule
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
         @@ -99,11 +99,13 @@ rule 
     | 
|
| 
       99 
99 
     | 
    
         
             
                  { result = nil }
         
     | 
| 
       100 
100 
     | 
    
         
             
                | kLT class_name {
         
     | 
| 
       101 
101 
     | 
    
         
             
                    result = Declarations::Class::Super.new(name: val[1].value,
         
     | 
| 
       102 
     | 
    
         
            -
                                                            args: [] 
     | 
| 
      
 102 
     | 
    
         
            +
                                                            args: [],
         
     | 
| 
      
 103 
     | 
    
         
            +
                                                            location: val[1].location)
         
     | 
| 
       103 
104 
     | 
    
         
             
                  }
         
     | 
| 
       104 
105 
     | 
    
         
             
                | kLT class_name kLBRACKET type_list kRBRACKET {
         
     | 
| 
       105 
106 
     | 
    
         
             
                    result = Declarations::Class::Super.new(name: val[1].value,
         
     | 
| 
       106 
     | 
    
         
            -
                                                            args: val[3] 
     | 
| 
      
 107 
     | 
    
         
            +
                                                            args: val[3],
         
     | 
| 
      
 108 
     | 
    
         
            +
                                                            location: val[1].location + val[4].location)
         
     | 
| 
       107 
109 
     | 
    
         
             
                  }
         
     | 
| 
       108 
110 
     | 
    
         | 
| 
       109 
111 
     | 
    
         
             
              module_decl:
         
     | 
| 
         @@ -202,57 +204,67 @@ rule 
     | 
|
| 
       202 
204 
     | 
    
         
             
                | alias_member
         
     | 
| 
       203 
205 
     | 
    
         
             
                | signature
         
     | 
| 
       204 
206 
     | 
    
         | 
| 
      
 207 
     | 
    
         
            +
              attribute_kind:
         
     | 
| 
      
 208 
     | 
    
         
            +
                  { result = :instance }
         
     | 
| 
      
 209 
     | 
    
         
            +
                | kSELF kDOT { result = :singleton }
         
     | 
| 
      
 210 
     | 
    
         
            +
             
     | 
| 
       205 
211 
     | 
    
         
             
              attribute_member:
         
     | 
| 
       206 
     | 
    
         
            -
                  annotations kATTRREADER keyword type {
         
     | 
| 
       207 
     | 
    
         
            -
                    location = val[1].location + val[ 
     | 
| 
       208 
     | 
    
         
            -
                    result = Members::AttrReader.new(name: val[ 
     | 
| 
      
 212 
     | 
    
         
            +
                  annotations kATTRREADER attribute_kind keyword type {
         
     | 
| 
      
 213 
     | 
    
         
            +
                    location = val[1].location + val[4].location
         
     | 
| 
      
 214 
     | 
    
         
            +
                    result = Members::AttrReader.new(name: val[3].value,
         
     | 
| 
       209 
215 
     | 
    
         
             
                                                     ivar_name: nil,
         
     | 
| 
       210 
     | 
    
         
            -
                                                     type: val[ 
     | 
| 
      
 216 
     | 
    
         
            +
                                                     type: val[4],
         
     | 
| 
      
 217 
     | 
    
         
            +
                                                     kind: val[2],
         
     | 
| 
       211 
218 
     | 
    
         
             
                                                     annotations: val[0],
         
     | 
| 
       212 
219 
     | 
    
         
             
                                                     location: location,
         
     | 
| 
       213 
220 
     | 
    
         
             
                                                     comment: leading_comment(val[0].first&.location || location))
         
     | 
| 
       214 
221 
     | 
    
         
             
                  }
         
     | 
| 
       215 
     | 
    
         
            -
                | annotations kATTRREADER method_name attr_var_opt kCOLON type {
         
     | 
| 
       216 
     | 
    
         
            -
                    location = val[1].location + val[ 
     | 
| 
       217 
     | 
    
         
            -
                    result = Members::AttrReader.new(name: val[ 
     | 
| 
       218 
     | 
    
         
            -
                                                     ivar_name: val[ 
     | 
| 
       219 
     | 
    
         
            -
                                                     type: val[ 
     | 
| 
      
 222 
     | 
    
         
            +
                | annotations kATTRREADER attribute_kind method_name attr_var_opt kCOLON type {
         
     | 
| 
      
 223 
     | 
    
         
            +
                    location = val[1].location + val[6].location
         
     | 
| 
      
 224 
     | 
    
         
            +
                    result = Members::AttrReader.new(name: val[3].value.to_sym,
         
     | 
| 
      
 225 
     | 
    
         
            +
                                                     ivar_name: val[4],
         
     | 
| 
      
 226 
     | 
    
         
            +
                                                     type: val[6],
         
     | 
| 
      
 227 
     | 
    
         
            +
                                                     kind: val[2],
         
     | 
| 
       220 
228 
     | 
    
         
             
                                                     annotations: val[0],
         
     | 
| 
       221 
229 
     | 
    
         
             
                                                     location: location,
         
     | 
| 
       222 
230 
     | 
    
         
             
                                                     comment: leading_comment(val[0].first&.location || location))
         
     | 
| 
       223 
231 
     | 
    
         
             
                  }
         
     | 
| 
       224 
     | 
    
         
            -
                | annotations kATTRWRITER keyword type {
         
     | 
| 
       225 
     | 
    
         
            -
                    location = val[1].location + val[ 
     | 
| 
       226 
     | 
    
         
            -
                    result = Members::AttrWriter.new(name: val[ 
     | 
| 
      
 232 
     | 
    
         
            +
                | annotations kATTRWRITER attribute_kind keyword type {
         
     | 
| 
      
 233 
     | 
    
         
            +
                    location = val[1].location + val[4].location
         
     | 
| 
      
 234 
     | 
    
         
            +
                    result = Members::AttrWriter.new(name: val[3].value,
         
     | 
| 
       227 
235 
     | 
    
         
             
                                                     ivar_name: nil,
         
     | 
| 
       228 
     | 
    
         
            -
                                                      
     | 
| 
      
 236 
     | 
    
         
            +
                                                     kind: val[2],
         
     | 
| 
      
 237 
     | 
    
         
            +
                                                     type: val[4],
         
     | 
| 
       229 
238 
     | 
    
         
             
                                                     annotations: val[0],
         
     | 
| 
       230 
239 
     | 
    
         
             
                                                     location: location,
         
     | 
| 
       231 
240 
     | 
    
         
             
                                                     comment: leading_comment(val[0].first&.location || location))
         
     | 
| 
       232 
241 
     | 
    
         
             
                  }
         
     | 
| 
       233 
     | 
    
         
            -
                | annotations kATTRWRITER method_name attr_var_opt kCOLON type {
         
     | 
| 
       234 
     | 
    
         
            -
                    location = val[1].location + val[ 
     | 
| 
       235 
     | 
    
         
            -
                    result = Members::AttrWriter.new(name: val[ 
     | 
| 
       236 
     | 
    
         
            -
                                                     ivar_name: val[ 
     | 
| 
       237 
     | 
    
         
            -
                                                      
     | 
| 
      
 242 
     | 
    
         
            +
                | annotations kATTRWRITER attribute_kind method_name attr_var_opt kCOLON type {
         
     | 
| 
      
 243 
     | 
    
         
            +
                    location = val[1].location + val[6].location
         
     | 
| 
      
 244 
     | 
    
         
            +
                    result = Members::AttrWriter.new(name: val[3].value.to_sym,
         
     | 
| 
      
 245 
     | 
    
         
            +
                                                     ivar_name: val[4],
         
     | 
| 
      
 246 
     | 
    
         
            +
                                                     kind: val[2],
         
     | 
| 
      
 247 
     | 
    
         
            +
                                                     type: val[6],
         
     | 
| 
       238 
248 
     | 
    
         
             
                                                     annotations: val[0],
         
     | 
| 
       239 
249 
     | 
    
         
             
                                                     location: location,
         
     | 
| 
       240 
250 
     | 
    
         
             
                                                     comment: leading_comment(val[0].first&.location || location))
         
     | 
| 
       241 
251 
     | 
    
         
             
                  }
         
     | 
| 
       242 
     | 
    
         
            -
                | annotations kATTRACCESSOR keyword type {
         
     | 
| 
       243 
     | 
    
         
            -
                    location = val[1].location + val[ 
     | 
| 
       244 
     | 
    
         
            -
                    result = Members::AttrAccessor.new(name: val[ 
     | 
| 
      
 252 
     | 
    
         
            +
                | annotations kATTRACCESSOR attribute_kind keyword type {
         
     | 
| 
      
 253 
     | 
    
         
            +
                    location = val[1].location + val[4].location
         
     | 
| 
      
 254 
     | 
    
         
            +
                    result = Members::AttrAccessor.new(name: val[3].value,
         
     | 
| 
       245 
255 
     | 
    
         
             
                                                       ivar_name: nil,
         
     | 
| 
       246 
     | 
    
         
            -
                                                        
     | 
| 
      
 256 
     | 
    
         
            +
                                                       kind: val[2],
         
     | 
| 
      
 257 
     | 
    
         
            +
                                                       type: val[4],
         
     | 
| 
       247 
258 
     | 
    
         
             
                                                       annotations: val[0],
         
     | 
| 
       248 
259 
     | 
    
         
             
                                                       location: location,
         
     | 
| 
       249 
260 
     | 
    
         
             
                                                       comment: leading_comment(val[0].first&.location || location))
         
     | 
| 
       250 
261 
     | 
    
         
             
                  }
         
     | 
| 
       251 
     | 
    
         
            -
                | annotations kATTRACCESSOR method_name attr_var_opt kCOLON type {
         
     | 
| 
       252 
     | 
    
         
            -
                    location = val[1].location + val[ 
     | 
| 
       253 
     | 
    
         
            -
                    result = Members::AttrAccessor.new(name: val[ 
     | 
| 
       254 
     | 
    
         
            -
                                                       ivar_name: val[ 
     | 
| 
       255 
     | 
    
         
            -
                                                        
     | 
| 
      
 262 
     | 
    
         
            +
                | annotations kATTRACCESSOR attribute_kind method_name attr_var_opt kCOLON type {
         
     | 
| 
      
 263 
     | 
    
         
            +
                    location = val[1].location + val[6].location
         
     | 
| 
      
 264 
     | 
    
         
            +
                    result = Members::AttrAccessor.new(name: val[3].value.to_sym,
         
     | 
| 
      
 265 
     | 
    
         
            +
                                                       ivar_name: val[4],
         
     | 
| 
      
 266 
     | 
    
         
            +
                                                       kind: val[2],
         
     | 
| 
      
 267 
     | 
    
         
            +
                                                       type: val[6],
         
     | 
| 
       256 
268 
     | 
    
         
             
                                                       annotations: val[0],
         
     | 
| 
       257 
269 
     | 
    
         
             
                                                       location: location,
         
     | 
| 
       258 
270 
     | 
    
         
             
                                                       comment: leading_comment(val[0].first&.location || location))
         
     | 
| 
         @@ -474,26 +486,13 @@ rule 
     | 
|
| 
       474 
486 
     | 
    
         
             
                  }
         
     | 
| 
       475 
487 
     | 
    
         | 
| 
       476 
488 
     | 
    
         
             
              method_type:
         
     | 
| 
       477 
     | 
    
         
            -
                  start_merged_scope type_params  
     | 
| 
      
 489 
     | 
    
         
            +
                  start_merged_scope type_params proc_type {
         
     | 
| 
       478 
490 
     | 
    
         
             
                    reset_variable_scope
         
     | 
| 
       479 
491 
     | 
    
         | 
| 
       480 
     | 
    
         
            -
                    location = (val[1] || val[2] 
     | 
| 
      
 492 
     | 
    
         
            +
                    location = (val[1] || val[2]).location + val[2].location
         
     | 
| 
       481 
493 
     | 
    
         
             
                    type_params = val[1]&.value || []
         
     | 
| 
       482 
494 
     | 
    
         | 
| 
       483 
     | 
    
         
            -
                     
     | 
| 
       484 
     | 
    
         
            -
             
     | 
| 
       485 
     | 
    
         
            -
                    type = Types::Function.new(
         
     | 
| 
       486 
     | 
    
         
            -
                      required_positionals: params[0],
         
     | 
| 
       487 
     | 
    
         
            -
                      optional_positionals: params[1],
         
     | 
| 
       488 
     | 
    
         
            -
                      rest_positionals: params[2],
         
     | 
| 
       489 
     | 
    
         
            -
                      trailing_positionals: params[3],
         
     | 
| 
       490 
     | 
    
         
            -
                      required_keywords: params[4],
         
     | 
| 
       491 
     | 
    
         
            -
                      optional_keywords: params[5],
         
     | 
| 
       492 
     | 
    
         
            -
                      rest_keywords: params[6],
         
     | 
| 
       493 
     | 
    
         
            -
                      return_type: val[5]
         
     | 
| 
       494 
     | 
    
         
            -
                    )
         
     | 
| 
       495 
     | 
    
         
            -
             
     | 
| 
       496 
     | 
    
         
            -
                    block = val[3]&.value
         
     | 
| 
      
 495 
     | 
    
         
            +
                    type, block = val[2].value
         
     | 
| 
       497 
496 
     | 
    
         | 
| 
       498 
497 
     | 
    
         
             
                    result = MethodType.new(type_params: type_params,
         
     | 
| 
       499 
498 
     | 
    
         
             
                                            type: type,
         
     | 
| 
         @@ -507,14 +506,13 @@ rule 
     | 
|
| 
       507 
506 
     | 
    
         
             
                    result = LocatedValue.new(value: val[1], location: val[0].location + val[2].location)
         
     | 
| 
       508 
507 
     | 
    
         
             
                  }
         
     | 
| 
       509 
508 
     | 
    
         | 
| 
       510 
     | 
    
         
            -
               
     | 
| 
       511 
     | 
    
         
            -
                   
     | 
| 
       512 
     | 
    
         
            -
             
     | 
| 
       513 
     | 
    
         
            -
                    block = MethodType::Block.new(type: val[1].value, required: true)
         
     | 
| 
      
 509 
     | 
    
         
            +
              block:
         
     | 
| 
      
 510 
     | 
    
         
            +
                  kLBRACE simple_function_type kRBRACE {
         
     | 
| 
      
 511 
     | 
    
         
            +
                    block = Types::Block.new(type: val[1].value, required: true)
         
     | 
| 
       514 
512 
     | 
    
         
             
                    result = LocatedValue.new(value: block, location: val[0].location + val[2].location)
         
     | 
| 
       515 
513 
     | 
    
         
             
                  }
         
     | 
| 
       516 
     | 
    
         
            -
                | kQUESTION kLBRACE  
     | 
| 
       517 
     | 
    
         
            -
                    block =  
     | 
| 
      
 514 
     | 
    
         
            +
                | kQUESTION kLBRACE simple_function_type kRBRACE {
         
     | 
| 
      
 515 
     | 
    
         
            +
                    block = Types::Block.new(type: val[2].value, required: false)
         
     | 
| 
       518 
516 
     | 
    
         
             
                    result = LocatedValue.new(value: block, location: val[0].location + val[3].location)
         
     | 
| 
       519 
517 
     | 
    
         
             
                  }
         
     | 
| 
       520 
518 
     | 
    
         | 
| 
         @@ -797,8 +795,9 @@ rule 
     | 
|
| 
       797 
795 
     | 
    
         
             
                    result = Types::ClassSingleton.new(name: val[2].value,
         
     | 
| 
       798 
796 
     | 
    
         
             
                                                       location: val[0].location + val[3].location)
         
     | 
| 
       799 
797 
     | 
    
         
             
                  }
         
     | 
| 
       800 
     | 
    
         
            -
                | kHAT  
     | 
| 
       801 
     | 
    
         
            -
                     
     | 
| 
      
 798 
     | 
    
         
            +
                | kHAT proc_type {
         
     | 
| 
      
 799 
     | 
    
         
            +
                    type, block = val[1].value
         
     | 
| 
      
 800 
     | 
    
         
            +
                    result = Types::Proc.new(type: type, block: block, location: val[0].location + val[1].location)
         
     | 
| 
       802 
801 
     | 
    
         
             
                  }
         
     | 
| 
       803 
802 
     | 
    
         
             
                | simple_type kQUESTION {
         
     | 
| 
       804 
803 
     | 
    
         
             
                    result = Types::Optional.new(type: val[0], location: val[0].location + val[1].location)
         
     | 
| 
         @@ -842,6 +841,15 @@ rule 
     | 
|
| 
       842 
841 
     | 
    
         
             
                | keyword type {
         
     | 
| 
       843 
842 
     | 
    
         
             
                    result = { val[0].value => val[1] }
         
     | 
| 
       844 
843 
     | 
    
         
             
                  }
         
     | 
| 
      
 844 
     | 
    
         
            +
                | identifier_keywords kCOLON type {
         
     | 
| 
      
 845 
     | 
    
         
            +
                    result = { val[0].value => val[2] }
         
     | 
| 
      
 846 
     | 
    
         
            +
                  }
         
     | 
| 
      
 847 
     | 
    
         
            +
                | tQUOTEDIDENT kCOLON type {
         
     | 
| 
      
 848 
     | 
    
         
            +
                    result = { val[0].value => val[2] }
         
     | 
| 
      
 849 
     | 
    
         
            +
                  }
         
     | 
| 
      
 850 
     | 
    
         
            +
                | tQUOTEDMETHOD kCOLON type {
         
     | 
| 
      
 851 
     | 
    
         
            +
                    result = { val[0].value => val[2] }
         
     | 
| 
      
 852 
     | 
    
         
            +
                  }
         
     | 
| 
       845 
853 
     | 
    
         | 
| 
       846 
854 
     | 
    
         
             
              keyword_name:
         
     | 
| 
       847 
855 
     | 
    
         
             
                  keyword
         
     | 
| 
         @@ -851,7 +859,32 @@ rule 
     | 
|
| 
       851 
859 
     | 
    
         | 
| 
       852 
860 
     | 
    
         
             
              keyword: tLKEYWORD | tUKEYWORD | tLKEYWORD_Q_E | tUKEYWORD_Q_E
         
     | 
| 
       853 
861 
     | 
    
         | 
| 
       854 
     | 
    
         
            -
               
     | 
| 
      
 862 
     | 
    
         
            +
              proc_type:
         
     | 
| 
      
 863 
     | 
    
         
            +
                  params_opt block kARROW simple_type {
         
     | 
| 
      
 864 
     | 
    
         
            +
                    location = (val[0] || val[1] || val[2]).location + val[3].location
         
     | 
| 
      
 865 
     | 
    
         
            +
             
     | 
| 
      
 866 
     | 
    
         
            +
                    params = val[0]&.value || [[], [], nil, [], {}, {}, nil]
         
     | 
| 
      
 867 
     | 
    
         
            +
             
     | 
| 
      
 868 
     | 
    
         
            +
                    type = Types::Function.new(
         
     | 
| 
      
 869 
     | 
    
         
            +
                      required_positionals: params[0],
         
     | 
| 
      
 870 
     | 
    
         
            +
                      optional_positionals: params[1],
         
     | 
| 
      
 871 
     | 
    
         
            +
                      rest_positionals: params[2],
         
     | 
| 
      
 872 
     | 
    
         
            +
                      trailing_positionals: params[3],
         
     | 
| 
      
 873 
     | 
    
         
            +
                      required_keywords: params[4],
         
     | 
| 
      
 874 
     | 
    
         
            +
                      optional_keywords: params[5],
         
     | 
| 
      
 875 
     | 
    
         
            +
                      rest_keywords: params[6],
         
     | 
| 
      
 876 
     | 
    
         
            +
                      return_type: val[3]
         
     | 
| 
      
 877 
     | 
    
         
            +
                    )
         
     | 
| 
      
 878 
     | 
    
         
            +
             
     | 
| 
      
 879 
     | 
    
         
            +
                    block = val[1].value
         
     | 
| 
      
 880 
     | 
    
         
            +
             
     | 
| 
      
 881 
     | 
    
         
            +
                    result = LocatedValue.new(value: [type, block], location: location)
         
     | 
| 
      
 882 
     | 
    
         
            +
                  }
         
     | 
| 
      
 883 
     | 
    
         
            +
                | simple_function_type {
         
     | 
| 
      
 884 
     | 
    
         
            +
                    result = LocatedValue.new(value: [val[0].value, nil], location: val[0].location)
         
     | 
| 
      
 885 
     | 
    
         
            +
                  }
         
     | 
| 
      
 886 
     | 
    
         
            +
             
     | 
| 
      
 887 
     | 
    
         
            +
              simple_function_type:
         
     | 
| 
       855 
888 
     | 
    
         
             
                  kLPAREN params kRPAREN kARROW simple_type {
         
     | 
| 
       856 
889 
     | 
    
         
             
                    location = val[0].location + val[4].location
         
     | 
| 
       857 
890 
     | 
    
         
             
                    type = Types::Function.new(
         
     | 
| 
         @@ -883,7 +916,7 @@ rule 
     | 
|
| 
       883 
916 
     | 
    
         
             
                    result = LocatedValue.new(value: type, location: location)
         
     | 
| 
       884 
917 
     | 
    
         
             
                  }
         
     | 
| 
       885 
918 
     | 
    
         | 
| 
       886 
     | 
    
         
            -
             
     | 
| 
      
 919 
     | 
    
         
            +
              params:
         
     | 
| 
       887 
920 
     | 
    
         
             
                  required_positional kCOMMA params {
         
     | 
| 
       888 
921 
     | 
    
         
             
                    result = val[2]
         
     | 
| 
       889 
922 
     | 
    
         
             
                    result[0].unshift(val[0])
         
     | 
| 
         @@ -1294,6 +1327,10 @@ ANNOTATION_RE = Regexp.union(/%a\{.*?\}/, 
     | 
|
| 
       1294 
1327 
     | 
    
         
             
                                         /%a\(.*?\)/,
         
     | 
| 
       1295 
1328 
     | 
    
         
             
                                         /%a\<.*?\>/,
         
     | 
| 
       1296 
1329 
     | 
    
         
             
                                         /%a\|.*?\|/)
         
     | 
| 
      
 1330 
     | 
    
         
            +
             
     | 
| 
      
 1331 
     | 
    
         
            +
            escape_sequences = %w[a b e f n r s t v "].map { |l| "\\\\#{l}" }
         
     | 
| 
      
 1332 
     | 
    
         
            +
            DBL_QUOTE_STR_ESCAPE_SEQUENCES_RE = /(#{escape_sequences.join("|")})/
         
     | 
| 
      
 1333 
     | 
    
         
            +
             
     | 
| 
       1297 
1334 
     | 
    
         
             
            def next_token
         
     | 
| 
       1298 
1335 
     | 
    
         
             
              if @type
         
     | 
| 
       1299 
1336 
     | 
    
         
             
                type = @type
         
     | 
| 
         @@ -1373,7 +1410,21 @@ def next_token 
     | 
|
| 
       1373 
1410 
     | 
    
         
             
              when input.scan(/[a-z_]\w*\b/)
         
     | 
| 
       1374 
1411 
     | 
    
         
             
                new_token(:tLIDENT)
         
     | 
| 
       1375 
1412 
     | 
    
         
             
              when input.scan(/"(\\"|[^"])*"/)
         
     | 
| 
       1376 
     | 
    
         
            -
                s = input.matched.yield_self {|s| s[1, s.length - 2] } 
     | 
| 
      
 1413 
     | 
    
         
            +
                s = input.matched.yield_self {|s| s[1, s.length - 2] }
         
     | 
| 
      
 1414 
     | 
    
         
            +
                                 .gsub(DBL_QUOTE_STR_ESCAPE_SEQUENCES_RE) do |match|
         
     | 
| 
      
 1415 
     | 
    
         
            +
                                   case match
         
     | 
| 
      
 1416 
     | 
    
         
            +
                                   when '\\a' then "\a"
         
     | 
| 
      
 1417 
     | 
    
         
            +
                                   when '\\b' then "\b"
         
     | 
| 
      
 1418 
     | 
    
         
            +
                                   when '\\e' then "\e"
         
     | 
| 
      
 1419 
     | 
    
         
            +
                                   when '\\f' then "\f"
         
     | 
| 
      
 1420 
     | 
    
         
            +
                                   when '\\n' then "\n"
         
     | 
| 
      
 1421 
     | 
    
         
            +
                                   when '\\r' then "\r"
         
     | 
| 
      
 1422 
     | 
    
         
            +
                                   when '\\s' then "\s"
         
     | 
| 
      
 1423 
     | 
    
         
            +
                                   when '\\t' then "\t"
         
     | 
| 
      
 1424 
     | 
    
         
            +
                                   when '\\v' then "\v"
         
     | 
| 
      
 1425 
     | 
    
         
            +
                                   when '\\"' then '"'
         
     | 
| 
      
 1426 
     | 
    
         
            +
                                   end
         
     | 
| 
      
 1427 
     | 
    
         
            +
                                 end
         
     | 
| 
       1377 
1428 
     | 
    
         
             
                new_token(:tSTRING, s)
         
     | 
| 
       1378 
1429 
     | 
    
         
             
              when input.scan(/'(\\'|[^'])*'/)
         
     | 
| 
       1379 
1430 
     | 
    
         
             
                s = input.matched.yield_self {|s| s[1, s.length - 2] }.gsub(/\\'/, "'")
         
     | 
    
        data/lib/rbs/prototype/rb.rb
    CHANGED
    
    | 
         @@ -15,6 +15,14 @@ module RBS 
     | 
|
| 
       15 
15 
     | 
    
         
             
                        :instance
         
     | 
| 
       16 
16 
     | 
    
         
             
                      end
         
     | 
| 
       17 
17 
     | 
    
         
             
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    def attribute_kind
         
     | 
| 
      
 20 
     | 
    
         
            +
                      if singleton
         
     | 
| 
      
 21 
     | 
    
         
            +
                        :singleton
         
     | 
| 
      
 22 
     | 
    
         
            +
                      else
         
     | 
| 
      
 23 
     | 
    
         
            +
                        :instance
         
     | 
| 
      
 24 
     | 
    
         
            +
                      end
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
       18 
26 
     | 
    
         
             
                  end
         
     | 
| 
       19 
27 
     | 
    
         | 
| 
       20 
28 
     | 
    
         
             
                  attr_reader :source_decls
         
     | 
| 
         @@ -77,7 +85,7 @@ module RBS 
     | 
|
| 
       77 
85 
     | 
    
         
             
                      class_name, super_class, *class_body = node.children
         
     | 
| 
       78 
86 
     | 
    
         
             
                      kls = AST::Declarations::Class.new(
         
     | 
| 
       79 
87 
     | 
    
         
             
                        name: const_to_name(class_name),
         
     | 
| 
       80 
     | 
    
         
            -
                        super_class: super_class && AST::Declarations::Class::Super.new(name: const_to_name(super_class), args: []),
         
     | 
| 
      
 88 
     | 
    
         
            +
                        super_class: super_class && AST::Declarations::Class::Super.new(name: const_to_name(super_class), args: [], location: nil),
         
     | 
| 
       81 
89 
     | 
    
         
             
                        type_params: AST::Declarations::ModuleTypeParams.empty,
         
     | 
| 
       82 
90 
     | 
    
         
             
                        members: [],
         
     | 
| 
       83 
91 
     | 
    
         
             
                        annotations: [],
         
     | 
| 
         @@ -202,6 +210,7 @@ module RBS 
     | 
|
| 
       202 
210 
     | 
    
         
             
                              name: name,
         
     | 
| 
       203 
211 
     | 
    
         
             
                              ivar_name: nil,
         
     | 
| 
       204 
212 
     | 
    
         
             
                              type: Types::Bases::Any.new(location: nil),
         
     | 
| 
      
 213 
     | 
    
         
            +
                              kind: context.attribute_kind,
         
     | 
| 
       205 
214 
     | 
    
         
             
                              location: nil,
         
     | 
| 
       206 
215 
     | 
    
         
             
                              comment: comments[node.first_lineno - 1],
         
     | 
| 
       207 
216 
     | 
    
         
             
                              annotations: []
         
     | 
| 
         @@ -215,6 +224,7 @@ module RBS 
     | 
|
| 
       215 
224 
     | 
    
         
             
                              name: name,
         
     | 
| 
       216 
225 
     | 
    
         
             
                              ivar_name: nil,
         
     | 
| 
       217 
226 
     | 
    
         
             
                              type: Types::Bases::Any.new(location: nil),
         
     | 
| 
      
 227 
     | 
    
         
            +
                              kind: context.attribute_kind,
         
     | 
| 
       218 
228 
     | 
    
         
             
                              location: nil,
         
     | 
| 
       219 
229 
     | 
    
         
             
                              comment: comments[node.first_lineno - 1],
         
     | 
| 
       220 
230 
     | 
    
         
             
                              annotations: []
         
     | 
| 
         @@ -228,6 +238,7 @@ module RBS 
     | 
|
| 
       228 
238 
     | 
    
         
             
                              name: name,
         
     | 
| 
       229 
239 
     | 
    
         
             
                              ivar_name: nil,
         
     | 
| 
       230 
240 
     | 
    
         
             
                              type: Types::Bases::Any.new(location: nil),
         
     | 
| 
      
 241 
     | 
    
         
            +
                              kind: context.attribute_kind,
         
     | 
| 
       231 
242 
     | 
    
         
             
                              location: nil,
         
     | 
| 
       232 
243 
     | 
    
         
             
                              comment: comments[node.first_lineno - 1],
         
     | 
| 
       233 
244 
     | 
    
         
             
                              annotations: []
         
     | 
| 
         @@ -549,7 +560,7 @@ module RBS 
     | 
|
| 
       549 
560 
     | 
    
         
             
                    method_block = nil
         
     | 
| 
       550 
561 
     | 
    
         | 
| 
       551 
562 
     | 
    
         
             
                    if block
         
     | 
| 
       552 
     | 
    
         
            -
                      method_block =  
     | 
| 
      
 563 
     | 
    
         
            +
                      method_block = Types::Block.new(
         
     | 
| 
       553 
564 
     | 
    
         
             
                        required: true,
         
     | 
| 
       554 
565 
     | 
    
         
             
                        type: Types::Function.empty(untyped)
         
     | 
| 
       555 
566 
     | 
    
         
             
                      )
         
     | 
| 
         @@ -557,7 +568,7 @@ module RBS 
     | 
|
| 
       557 
568 
     | 
    
         | 
| 
       558 
569 
     | 
    
         
             
                    if body_node
         
     | 
| 
       559 
570 
     | 
    
         
             
                      if (yields = any_node?(body_node) {|n| n.type == :YIELD })
         
     | 
| 
       560 
     | 
    
         
            -
                        method_block =  
     | 
| 
      
 571 
     | 
    
         
            +
                        method_block = Types::Block.new(
         
     | 
| 
       561 
572 
     | 
    
         
             
                          required: true,
         
     | 
| 
       562 
573 
     | 
    
         
             
                          type: Types::Function.empty(untyped)
         
     | 
| 
       563 
574 
     | 
    
         
             
                        )
         
     | 
    
        data/lib/rbs/prototype/rbi.rb
    CHANGED
    
    | 
         @@ -47,7 +47,7 @@ module RBS 
     | 
|
| 
       47 
47 
     | 
    
         
             
                  def push_class(name, super_class, comment:)
         
     | 
| 
       48 
48 
     | 
    
         
             
                    modules.push AST::Declarations::Class.new(
         
     | 
| 
       49 
49 
     | 
    
         
             
                      name: nested_name(name),
         
     | 
| 
       50 
     | 
    
         
            -
                      super_class: super_class && AST::Declarations::Class::Super.new(name: const_to_name(super_class), args: []),
         
     | 
| 
      
 50 
     | 
    
         
            +
                      super_class: super_class && AST::Declarations::Class::Super.new(name: const_to_name(super_class), args: [], location: nil),
         
     | 
| 
       51 
51 
     | 
    
         
             
                      type_params: AST::Declarations::ModuleTypeParams.empty,
         
     | 
| 
       52 
52 
     | 
    
         
             
                      members: [],
         
     | 
| 
       53 
53 
     | 
    
         
             
                      annotations: [],
         
     | 
| 
         @@ -387,19 +387,19 @@ module RBS 
     | 
|
| 
       387 
387 
     | 
    
         
             
                    if block
         
     | 
| 
       388 
388 
     | 
    
         
             
                      if (type = vars[block])
         
     | 
| 
       389 
389 
     | 
    
         
             
                        if type.is_a?(Types::Proc)
         
     | 
| 
       390 
     | 
    
         
            -
                          method_block =  
     | 
| 
      
 390 
     | 
    
         
            +
                          method_block = Types::Block.new(required: true, type: type.type)
         
     | 
| 
       391 
391 
     | 
    
         
             
                        elsif type.is_a?(Types::Bases::Any)
         
     | 
| 
       392 
     | 
    
         
            -
                          method_block =  
     | 
| 
      
 392 
     | 
    
         
            +
                          method_block = Types::Block.new(
         
     | 
| 
       393 
393 
     | 
    
         
             
                            required: true,
         
     | 
| 
       394 
394 
     | 
    
         
             
                            type: Types::Function.empty(Types::Bases::Any.new(location: nil))
         
     | 
| 
       395 
395 
     | 
    
         
             
                          )
         
     | 
| 
       396 
396 
     | 
    
         
             
                        # Handle an optional block like `T.nilable(T.proc.void)`.
         
     | 
| 
       397 
397 
     | 
    
         
             
                        elsif type.is_a?(Types::Optional) && type.type.is_a?(Types::Proc)
         
     | 
| 
       398 
     | 
    
         
            -
                          method_block =  
     | 
| 
      
 398 
     | 
    
         
            +
                          method_block = Types::Block.new(required: false, type: type.type.type)
         
     | 
| 
       399 
399 
     | 
    
         
             
                        else
         
     | 
| 
       400 
400 
     | 
    
         
             
                          STDERR.puts "Unexpected block type: #{type}"
         
     | 
| 
       401 
401 
     | 
    
         
             
                          PP.pp args_node, STDERR
         
     | 
| 
       402 
     | 
    
         
            -
                          method_block =  
     | 
| 
      
 402 
     | 
    
         
            +
                          method_block = Types::Block.new(
         
     | 
| 
       403 
403 
     | 
    
         
             
                            required: true,
         
     | 
| 
       404 
404 
     | 
    
         
             
                            type: Types::Function.empty(Types::Bases::Any.new(location: nil))
         
     | 
| 
       405 
405 
     | 
    
         
             
                          )
         
     | 
| 
         @@ -485,7 +485,7 @@ module RBS 
     | 
|
| 
       485 
485 
     | 
    
         
             
                      Types::Tuple.new(types: types, location: nil)
         
     | 
| 
       486 
486 
     | 
    
         
             
                    else
         
     | 
| 
       487 
487 
     | 
    
         
             
                      if proc_type?(type_node)
         
     | 
| 
       488 
     | 
    
         
            -
                        Types::Proc.new(type: method_type(nil, type_node, variables: variables).type, location: nil)
         
     | 
| 
      
 488 
     | 
    
         
            +
                        Types::Proc.new(type: method_type(nil, type_node, variables: variables).type, block: nil, location: nil)
         
     | 
| 
       489 
489 
     | 
    
         
             
                      else
         
     | 
| 
       490 
490 
     | 
    
         
             
                        STDERR.puts "Unexpected type_node:"
         
     | 
| 
       491 
491 
     | 
    
         
             
                        PP.pp type_node, STDERR
         
     | 
| 
         @@ -61,11 +61,32 @@ module RBS 
     | 
|
| 
       61 
61 
     | 
    
         
             
                    end
         
     | 
| 
       62 
62 
     | 
    
         
             
                  end
         
     | 
| 
       63 
63 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
                  def  
     | 
| 
       65 
     | 
    
         
            -
                    supers = Set 
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
      
 64 
     | 
    
         
            +
                  def each_included_module(type_name, mod)
         
     | 
| 
      
 65 
     | 
    
         
            +
                    supers = Set[]
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                    mod.included_modules.each do |mix|
         
     | 
| 
      
 68 
     | 
    
         
            +
                      supers.merge(mix.included_modules)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                    if mod.is_a?(Class)
         
     | 
| 
      
 72 
     | 
    
         
            +
                      mod.superclass.included_modules.each do |mix|
         
     | 
| 
      
 73 
     | 
    
         
            +
                        supers << mix
         
     | 
| 
      
 74 
     | 
    
         
            +
                        supers.merge(mix.included_modules)
         
     | 
| 
      
 75 
     | 
    
         
            +
                      end
         
     | 
| 
      
 76 
     | 
    
         
            +
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                    mod.included_modules.each do |mix|
         
     | 
| 
       67 
79 
     | 
    
         
             
                      unless supers.include?(mix)
         
     | 
| 
       68 
     | 
    
         
            -
                         
     | 
| 
      
 80 
     | 
    
         
            +
                        unless const_name(mix)
         
     | 
| 
      
 81 
     | 
    
         
            +
                          RBS.logger.warn("Skipping anonymous module #{mix} included in #{mod}")
         
     | 
| 
      
 82 
     | 
    
         
            +
                        else
         
     | 
| 
      
 83 
     | 
    
         
            +
                          module_name = to_type_name(const_name(mix))
         
     | 
| 
      
 84 
     | 
    
         
            +
                          if module_name.namespace == type_name.namespace
         
     | 
| 
      
 85 
     | 
    
         
            +
                            module_name = TypeName.new(name: module_name.name, namespace: Namespace.empty)
         
     | 
| 
      
 86 
     | 
    
         
            +
                          end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                          yield module_name, mix
         
     | 
| 
      
 89 
     | 
    
         
            +
                        end
         
     | 
| 
       69 
90 
     | 
    
         
             
                      end
         
     | 
| 
       70 
91 
     | 
    
         
             
                    end
         
     | 
| 
       71 
92 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -103,7 +124,7 @@ module RBS 
     | 
|
| 
       103 
124 
     | 
    
         
             
                      when :keyrest
         
     | 
| 
       104 
125 
     | 
    
         
             
                        rest_keywords = Types::Function::Param.new(name: nil, type: untyped)
         
     | 
| 
       105 
126 
     | 
    
         
             
                      when :block
         
     | 
| 
       106 
     | 
    
         
            -
                        block =  
     | 
| 
      
 127 
     | 
    
         
            +
                        block = Types::Block.new(
         
     | 
| 
       107 
128 
     | 
    
         
             
                          type: Types::Function.empty(untyped).update(rest_positionals: Types::Function::Param.new(name: nil, type: untyped)),
         
     | 
| 
       108 
129 
     | 
    
         
             
                          required: true
         
     | 
| 
       109 
130 
     | 
    
         
             
                        )
         
     | 
| 
         @@ -298,11 +319,11 @@ module RBS 
     | 
|
| 
       298 
319 
     | 
    
         
             
                                 location: nil
         
     | 
| 
       299 
320 
     | 
    
         
             
                               )
         
     | 
| 
       300 
321 
     | 
    
         
             
                             else
         
     | 
| 
       301 
     | 
    
         
            -
                               Types::ClassInstance.new(name: to_type_name(value.class 
     | 
| 
      
 322 
     | 
    
         
            +
                               Types::ClassInstance.new(name: to_type_name(const_name(value.class)), args: [], location: nil)
         
     | 
| 
       302 
323 
     | 
    
         
             
                             end
         
     | 
| 
       303 
324 
     | 
    
         | 
| 
       304 
325 
     | 
    
         
             
                      @decls << AST::Declarations::Constant.new(
         
     | 
| 
       305 
     | 
    
         
            -
                        name: "#{mod 
     | 
| 
      
 326 
     | 
    
         
            +
                        name: "#{const_name(mod)}::#{name}",
         
     | 
| 
       306 
327 
     | 
    
         
             
                        type: type,
         
     | 
| 
       307 
328 
     | 
    
         
             
                        location: nil,
         
     | 
| 
       308 
329 
     | 
    
         
             
                        comment: nil
         
     | 
| 
         @@ -311,14 +332,14 @@ module RBS 
     | 
|
| 
       311 
332 
     | 
    
         
             
                  end
         
     | 
| 
       312 
333 
     | 
    
         | 
| 
       313 
334 
     | 
    
         
             
                  def generate_class(mod)
         
     | 
| 
       314 
     | 
    
         
            -
                    type_name = to_type_name(mod 
     | 
| 
      
 335 
     | 
    
         
            +
                    type_name = to_type_name(const_name(mod))
         
     | 
| 
       315 
336 
     | 
    
         
             
                    super_class = if mod.superclass == ::Object
         
     | 
| 
       316 
337 
     | 
    
         
             
                                    nil
         
     | 
| 
       317 
     | 
    
         
            -
                                  elsif mod.superclass. 
     | 
| 
      
 338 
     | 
    
         
            +
                                  elsif const_name(mod.superclass).nil?
         
     | 
| 
       318 
339 
     | 
    
         
             
                                    RBS.logger.warn("Skipping anonymous superclass #{mod.superclass} of #{mod}")
         
     | 
| 
       319 
340 
     | 
    
         
             
                                    nil
         
     | 
| 
       320 
341 
     | 
    
         
             
                                  else
         
     | 
| 
       321 
     | 
    
         
            -
                                    AST::Declarations::Class::Super.new(name: to_type_name(mod.superclass 
     | 
| 
      
 342 
     | 
    
         
            +
                                    AST::Declarations::Class::Super.new(name: to_type_name(const_name(mod.superclass)), args: [], location: nil)
         
     | 
| 
       322 
343 
     | 
    
         
             
                                  end
         
     | 
| 
       323 
344 
     | 
    
         | 
| 
       324 
345 
     | 
    
         
             
                    decl = AST::Declarations::Class.new(
         
     | 
| 
         @@ -331,17 +352,7 @@ module RBS 
     | 
|
| 
       331 
352 
     | 
    
         
             
                      comment: nil
         
     | 
| 
       332 
353 
     | 
    
         
             
                    )
         
     | 
| 
       333 
354 
     | 
    
         | 
| 
       334 
     | 
    
         
            -
                     
     | 
| 
       335 
     | 
    
         
            -
                      unless included_module.name
         
     | 
| 
       336 
     | 
    
         
            -
                        RBS.logger.warn("Skipping anonymous module #{included_module} included in #{mod}")
         
     | 
| 
       337 
     | 
    
         
            -
                        next
         
     | 
| 
       338 
     | 
    
         
            -
                      end
         
     | 
| 
       339 
     | 
    
         
            -
             
     | 
| 
       340 
     | 
    
         
            -
                      module_name = to_type_name(included_module.name)
         
     | 
| 
       341 
     | 
    
         
            -
                      if module_name.namespace == type_name.namespace
         
     | 
| 
       342 
     | 
    
         
            -
                        module_name = TypeName.new(name: module_name.name, namespace: Namespace.empty)
         
     | 
| 
       343 
     | 
    
         
            -
                      end
         
     | 
| 
       344 
     | 
    
         
            -
             
     | 
| 
      
 355 
     | 
    
         
            +
                    each_included_module(type_name, mod) do |module_name, _|
         
     | 
| 
       345 
356 
     | 
    
         
             
                      decl.members << AST::Members::Include.new(
         
     | 
| 
       346 
357 
     | 
    
         
             
                        name: module_name,
         
     | 
| 
       347 
358 
     | 
    
         
             
                        args: [],
         
     | 
| 
         @@ -351,6 +362,16 @@ module RBS 
     | 
|
| 
       351 
362 
     | 
    
         
             
                      )
         
     | 
| 
       352 
363 
     | 
    
         
             
                    end
         
     | 
| 
       353 
364 
     | 
    
         | 
| 
      
 365 
     | 
    
         
            +
                    each_included_module(type_name, mod.singleton_class) do |module_name, _|
         
     | 
| 
      
 366 
     | 
    
         
            +
                      decl.members << AST::Members::Extend.new(
         
     | 
| 
      
 367 
     | 
    
         
            +
                        name: module_name,
         
     | 
| 
      
 368 
     | 
    
         
            +
                        args: [],
         
     | 
| 
      
 369 
     | 
    
         
            +
                        location: nil,
         
     | 
| 
      
 370 
     | 
    
         
            +
                        comment: nil,
         
     | 
| 
      
 371 
     | 
    
         
            +
                        annotations: []
         
     | 
| 
      
 372 
     | 
    
         
            +
                      )
         
     | 
| 
      
 373 
     | 
    
         
            +
                    end
         
     | 
| 
      
 374 
     | 
    
         
            +
             
     | 
| 
       354 
375 
     | 
    
         
             
                    generate_methods(mod, type_name, decl.members)
         
     | 
| 
       355 
376 
     | 
    
         | 
| 
       356 
377 
     | 
    
         
             
                    @decls << decl
         
     | 
| 
         @@ -378,18 +399,7 @@ module RBS 
     | 
|
| 
       378 
399 
     | 
    
         
             
                      comment: nil
         
     | 
| 
       379 
400 
     | 
    
         
             
                    )
         
     | 
| 
       380 
401 
     | 
    
         | 
| 
       381 
     | 
    
         
            -
                     
     | 
| 
       382 
     | 
    
         
            -
                      included_module_name = const_name(included_module)
         
     | 
| 
       383 
     | 
    
         
            -
                      unless included_module_name
         
     | 
| 
       384 
     | 
    
         
            -
                        RBS.logger.warn("Skipping anonymous module #{included_module} included in #{mod}")
         
     | 
| 
       385 
     | 
    
         
            -
                        next
         
     | 
| 
       386 
     | 
    
         
            -
                      end
         
     | 
| 
       387 
     | 
    
         
            -
             
     | 
| 
       388 
     | 
    
         
            -
                      module_name = to_type_name(included_module_name)
         
     | 
| 
       389 
     | 
    
         
            -
                      if module_name.namespace == type_name.namespace
         
     | 
| 
       390 
     | 
    
         
            -
                        module_name = TypeName.new(name: module_name.name, namespace: Namespace.empty)
         
     | 
| 
       391 
     | 
    
         
            -
                      end
         
     | 
| 
       392 
     | 
    
         
            -
             
     | 
| 
      
 402 
     | 
    
         
            +
                    each_included_module(type_name, mod) do |module_name, _|
         
     | 
| 
       393 
403 
     | 
    
         
             
                      decl.members << AST::Members::Include.new(
         
     | 
| 
       394 
404 
     | 
    
         
             
                        name: module_name,
         
     | 
| 
       395 
405 
     | 
    
         
             
                        args: [],
         
     | 
| 
         @@ -399,6 +409,16 @@ module RBS 
     | 
|
| 
       399 
409 
     | 
    
         
             
                      )
         
     | 
| 
       400 
410 
     | 
    
         
             
                    end
         
     | 
| 
       401 
411 
     | 
    
         | 
| 
      
 412 
     | 
    
         
            +
                    each_included_module(type_name, mod.singleton_class) do |module_name, _|
         
     | 
| 
      
 413 
     | 
    
         
            +
                      decl.members << AST::Members::Extend.new(
         
     | 
| 
      
 414 
     | 
    
         
            +
                        name: module_name,
         
     | 
| 
      
 415 
     | 
    
         
            +
                        args: [],
         
     | 
| 
      
 416 
     | 
    
         
            +
                        location: nil,
         
     | 
| 
      
 417 
     | 
    
         
            +
                        comment: nil,
         
     | 
| 
      
 418 
     | 
    
         
            +
                        annotations: []
         
     | 
| 
      
 419 
     | 
    
         
            +
                      )
         
     | 
| 
      
 420 
     | 
    
         
            +
                    end
         
     | 
| 
      
 421 
     | 
    
         
            +
             
     | 
| 
       402 
422 
     | 
    
         
             
                    generate_methods(mod, type_name, decl.members)
         
     | 
| 
       403 
423 
     | 
    
         | 
| 
       404 
424 
     | 
    
         
             
                    @decls << decl
         
     |