rbs 1.0.3 → 1.1.1
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/.github/workflows/ruby.yml +2 -2
- data/CHANGELOG.md +65 -0
- data/Gemfile +0 -1
- data/Rakefile +3 -2
- data/Steepfile +2 -0
- data/bin/rbs-prof +1 -1
- data/core/array.rbs +10 -6
- data/core/complex.rbs +1 -1
- data/core/enumerable.rbs +15 -1
- data/core/enumerator.rbs +4 -0
- data/core/file.rbs +2 -1
- data/core/integer.rbs +2 -1
- data/core/module.rbs +1 -1
- data/core/rational.rbs +2 -1
- data/core/string.rbs +2 -1
- data/core/symbol.rbs +2 -1
- data/core/thread.rbs +14 -1
- data/core/time.rbs +2 -1
- data/docs/stdlib.md +1 -1
- data/lib/rbs.rb +3 -0
- data/lib/rbs/ancestor_graph.rb +90 -0
- data/lib/rbs/ast/members.rb +13 -0
- data/lib/rbs/char_scanner.rb +20 -0
- data/lib/rbs/definition_builder.rb +50 -25
- data/lib/rbs/definition_builder/method_builder.rb +23 -2
- data/lib/rbs/environment.rb +42 -5
- data/lib/rbs/environment_walker.rb +4 -4
- data/lib/rbs/errors.rb +32 -17
- data/lib/rbs/parser.rb +437 -416
- data/lib/rbs/parser.y +29 -16
- data/lib/rbs/test/type_check.rb +7 -3
- data/lib/rbs/version.rb +1 -1
- data/sig/ancestor_graph.rbs +40 -0
- data/sig/char_scanner.rbs +9 -0
- data/sig/definition_builder.rbs +5 -1
- data/sig/environment.rbs +22 -2
- data/sig/environment_walker.rbs +39 -0
- data/sig/errors.rbs +42 -17
- data/sig/members.rbs +2 -0
- data/sig/method_builder.rbs +2 -0
- data/sig/parser.rbs +11 -4
- data/sig/polyfill.rbs +0 -14
- data/sig/types.rbs +7 -1
- data/stdlib/bigdecimal/0/big_decimal.rbs +1 -1
- data/stdlib/cgi/0/core.rbs +595 -0
- data/stdlib/date/0/date.rbs +1 -1
- data/stdlib/json/0/json.rbs +288 -0
- data/stdlib/pathname/0/pathname.rbs +2 -1
- data/stdlib/rubygems/0/basic_specification.rbs +3 -0
- data/stdlib/rubygems/0/config_file.rbs +3 -0
- data/stdlib/rubygems/0/dependency_installer.rbs +5 -0
- data/stdlib/rubygems/0/installer.rbs +3 -0
- data/stdlib/rubygems/0/path_support.rbs +3 -0
- data/stdlib/rubygems/0/platform.rbs +3 -0
- data/stdlib/rubygems/0/request_set.rbs +7 -0
- data/stdlib/rubygems/0/requirement.rbs +3 -0
- data/stdlib/rubygems/0/rubygems.rbs +710 -0
- data/stdlib/rubygems/0/source_list.rbs +2 -0
- data/stdlib/rubygems/0/specification.rbs +3 -0
- data/stdlib/rubygems/0/stream_ui.rbs +3 -0
- data/stdlib/rubygems/0/uninstaller.rbs +3 -0
- data/stdlib/rubygems/0/version.rbs +228 -0
- data/stdlib/set/0/set.rbs +7 -0
- data/stdlib/strscan/0/string_scanner.rbs +582 -0
- data/stdlib/timeout/0/timeout.rbs +57 -0
- data/stdlib/uri/0/rfc2396_parser.rbs +144 -7
- data/steep/Gemfile.lock +17 -19
- metadata +24 -2
    
        data/lib/rbs/ast/members.rb
    CHANGED
    
    | @@ -245,6 +245,19 @@ module RBS | |
| 245 245 | 
             
                    def hash
         | 
| 246 246 | 
             
                      self.class.hash ^ name.hash ^ type.hash ^ ivar_name.hash ^ kind.hash
         | 
| 247 247 | 
             
                    end
         | 
| 248 | 
            +
             | 
| 249 | 
            +
                    def update(name: self.name, type: self.type, ivar_name: self.ivar_name, kind: self.kind, annotations: self.annotations, location: self.location, comment: self.comment)
         | 
| 250 | 
            +
                      klass = _ = self.class
         | 
| 251 | 
            +
                      klass.new(
         | 
| 252 | 
            +
                        name: name,
         | 
| 253 | 
            +
                        type: type,
         | 
| 254 | 
            +
                        ivar_name: ivar_name,
         | 
| 255 | 
            +
                        kind: kind,
         | 
| 256 | 
            +
                        annotations: annotations,
         | 
| 257 | 
            +
                        location: location,
         | 
| 258 | 
            +
                        comment: comment
         | 
| 259 | 
            +
                      )
         | 
| 260 | 
            +
                    end
         | 
| 248 261 | 
             
                  end
         | 
| 249 262 |  | 
| 250 263 | 
             
                  class AttrReader < Base
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            module RBS
         | 
| 2 | 
            +
              class CharScanner < StringScanner
         | 
| 3 | 
            +
                def initialize(string)
         | 
| 4 | 
            +
                  super(string)
         | 
| 5 | 
            +
                  @charpos = 0
         | 
| 6 | 
            +
                end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                alias original_charpos charpos
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def charpos
         | 
| 11 | 
            +
                  @charpos
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def scan(pattern)
         | 
| 15 | 
            +
                  s = super
         | 
| 16 | 
            +
                  @charpos += s.size if s
         | 
| 17 | 
            +
                  s
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -10,11 +10,11 @@ module RBS | |
| 10 10 | 
             
                attr_reader :singleton0_cache
         | 
| 11 11 | 
             
                attr_reader :interface_cache
         | 
| 12 12 |  | 
| 13 | 
            -
                def initialize(env:)
         | 
| 13 | 
            +
                def initialize(env:, ancestor_builder: nil, method_builder: nil)
         | 
| 14 14 | 
             
                  @env = env
         | 
| 15 15 | 
             
                  @type_name_resolver = TypeNameResolver.from_env(env)
         | 
| 16 | 
            -
                  @ancestor_builder = AncestorBuilder.new(env: env)
         | 
| 17 | 
            -
                  @method_builder = MethodBuilder.new(env: env)
         | 
| 16 | 
            +
                  @ancestor_builder = ancestor_builder || AncestorBuilder.new(env: env)
         | 
| 17 | 
            +
                  @method_builder = method_builder || MethodBuilder.new(env: env)
         | 
| 18 18 |  | 
| 19 19 | 
             
                  @instance_cache = {}
         | 
| 20 20 | 
             
                  @singleton_cache = {}
         | 
| @@ -80,6 +80,7 @@ module RBS | |
| 80 80 | 
             
                                 when AST::Members::Alias
         | 
| 81 81 | 
             
                                   unless definition.methods.key?(original.old_name)
         | 
| 82 82 | 
             
                                     raise UnknownMethodAliasError.new(
         | 
| 83 | 
            +
                                       type_name: type_name,
         | 
| 83 84 | 
             
                                       original_name: original.old_name,
         | 
| 84 85 | 
             
                                       aliased_name: original.new_name,
         | 
| 85 86 | 
             
                                       location: original.location
         | 
| @@ -139,9 +140,8 @@ module RBS | |
| 139 140 | 
             
                    case entry
         | 
| 140 141 | 
             
                    when Environment::ClassEntry, Environment::ModuleEntry
         | 
| 141 142 | 
             
                      ancestors = ancestor_builder.instance_ancestors(type_name)
         | 
| 142 | 
            -
                       | 
| 143 | 
            -
             | 
| 144 | 
            -
                                                           location: nil)
         | 
| 143 | 
            +
                      args = Types::Variable.build(entry.type_params.each.map(&:name))
         | 
| 144 | 
            +
                      self_type = Types::ClassInstance.new(name: type_name, args: args, location: nil)
         | 
| 145 145 |  | 
| 146 146 | 
             
                      Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
         | 
| 147 147 | 
             
                        one_ancestors = ancestor_builder.one_instance_ancestors(type_name)
         | 
| @@ -217,6 +217,8 @@ module RBS | |
| 217 217 | 
             
                                       super_interface_method: entry.is_a?(Environment::ModuleEntry))
         | 
| 218 218 |  | 
| 219 219 | 
             
                        entry.decls.each do |d|
         | 
| 220 | 
            +
                          subst = Substitution.build(d.decl.type_params.each.map(&:name), args)
         | 
| 221 | 
            +
             | 
| 220 222 | 
             
                          d.decl.members.each do |member|
         | 
| 221 223 | 
             
                            case member
         | 
| 222 224 | 
             
                            when AST::Members::AttrReader, AST::Members::AttrAccessor, AST::Members::AttrWriter
         | 
| @@ -229,12 +231,18 @@ module RBS | |
| 229 231 | 
             
                                            end
         | 
| 230 232 |  | 
| 231 233 | 
             
                                if ivar_name
         | 
| 232 | 
            -
                                  insert_variable(type_name, | 
| 234 | 
            +
                                  insert_variable(type_name,
         | 
| 235 | 
            +
                                                  definition.instance_variables,
         | 
| 236 | 
            +
                                                  name: ivar_name,
         | 
| 237 | 
            +
                                                  type: member.type.sub(subst))
         | 
| 233 238 | 
             
                                end
         | 
| 234 239 | 
             
                              end
         | 
| 235 240 |  | 
| 236 241 | 
             
                            when AST::Members::InstanceVariable
         | 
| 237 | 
            -
                              insert_variable(type_name, | 
| 242 | 
            +
                              insert_variable(type_name,
         | 
| 243 | 
            +
                                              definition.instance_variables,
         | 
| 244 | 
            +
                                              name: member.name,
         | 
| 245 | 
            +
                                              type: member.type.sub(subst))
         | 
| 238 246 |  | 
| 239 247 | 
             
                            when AST::Members::ClassVariable
         | 
| 240 248 | 
             
                              insert_variable(type_name, definition.class_variables, name: member.name, type: member.type)
         | 
| @@ -353,15 +361,10 @@ module RBS | |
| 353 361 | 
             
                    when Environment::ClassEntry, Environment::ModuleEntry
         | 
| 354 362 | 
             
                      ancestors = ancestor_builder.singleton_ancestors(type_name)
         | 
| 355 363 | 
             
                      self_type = Types::ClassSingleton.new(name: type_name, location: nil)
         | 
| 356 | 
            -
                      instance_type = Types::ClassInstance.new(
         | 
| 357 | 
            -
                        name: type_name,
         | 
| 358 | 
            -
                        args: entry.type_params.each.map { Types::Bases::Any.new(location: nil) },
         | 
| 359 | 
            -
                        location: nil
         | 
| 360 | 
            -
                      )
         | 
| 361 364 |  | 
| 362 365 | 
             
                      Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
         | 
| 363 366 | 
             
                        def0 = build_singleton0(type_name)
         | 
| 364 | 
            -
                        subst = Substitution. | 
| 367 | 
            +
                        subst = Substitution.new
         | 
| 365 368 |  | 
| 366 369 | 
             
                        merge_definition(src: def0, dest: definition, subst: subst, keep_super: true)
         | 
| 367 370 |  | 
| @@ -554,6 +557,7 @@ module RBS | |
| 554 557 |  | 
| 555 558 | 
             
                      unless original_method
         | 
| 556 559 | 
             
                        raise UnknownMethodAliasError.new(
         | 
| 560 | 
            +
                          type_name: definition.type_name,
         | 
| 557 561 | 
             
                          original_name: original.old_name,
         | 
| 558 562 | 
             
                          aliased_name: original.new_name,
         | 
| 559 563 | 
             
                          location: original.location
         | 
| @@ -723,11 +727,13 @@ module RBS | |
| 723 727 | 
             
                end
         | 
| 724 728 |  | 
| 725 729 | 
             
                def merge_method(type_name, methods, name, method, sub, implemented_in: :keep, keep_super: false)
         | 
| 726 | 
            -
                   | 
| 730 | 
            +
                  if sub.empty? && implemented_in == :keep && keep_super
         | 
| 731 | 
            +
                    methods[name] = method
         | 
| 732 | 
            +
                  else
         | 
| 727 733 | 
             
                    if sub.empty? && implemented_in == :keep
         | 
| 728 | 
            -
                      defs
         | 
| 734 | 
            +
                      defs = method.defs
         | 
| 729 735 | 
             
                    else
         | 
| 730 | 
            -
                      defs.map do |defn|
         | 
| 736 | 
            +
                      defs = method.defs.map do |defn|
         | 
| 731 737 | 
             
                        defn.update(
         | 
| 732 738 | 
             
                          type: sub.empty? ? defn.type : defn.type.sub(sub),
         | 
| 733 739 | 
             
                          implemented_in: case implemented_in
         | 
| @@ -741,16 +747,16 @@ module RBS | |
| 741 747 | 
             
                        )
         | 
| 742 748 | 
             
                      end
         | 
| 743 749 | 
             
                    end
         | 
| 744 | 
            -
                  end
         | 
| 745 750 |  | 
| 746 | 
            -
             | 
| 751 | 
            +
                    super_method = methods[name]
         | 
| 747 752 |  | 
| 748 | 
            -
             | 
| 749 | 
            -
             | 
| 750 | 
            -
             | 
| 751 | 
            -
             | 
| 752 | 
            -
             | 
| 753 | 
            -
             | 
| 753 | 
            +
                    methods[name] = Definition::Method.new(
         | 
| 754 | 
            +
                      super_method: keep_super ? method.super_method : super_method,
         | 
| 755 | 
            +
                      accessibility: method.accessibility,
         | 
| 756 | 
            +
                      defs: defs,
         | 
| 757 | 
            +
                      alias_of: method.alias_of
         | 
| 758 | 
            +
                    )
         | 
| 759 | 
            +
                  end
         | 
| 754 760 | 
             
                end
         | 
| 755 761 |  | 
| 756 762 | 
             
                def try_cache(type_name, cache:, key: type_name)
         | 
| @@ -781,5 +787,24 @@ module RBS | |
| 781 787 | 
             
                  ensure_namespace!(type_name.namespace, location: entry.decl.location)
         | 
| 782 788 | 
             
                  entry.decl.type
         | 
| 783 789 | 
             
                end
         | 
| 790 | 
            +
             | 
| 791 | 
            +
                def update(env:, except:, ancestor_builder:)
         | 
| 792 | 
            +
                  method_builder = self.method_builder.update(env: env, except: except)
         | 
| 793 | 
            +
             | 
| 794 | 
            +
                  DefinitionBuilder.new(env: env, ancestor_builder: ancestor_builder, method_builder: method_builder).tap do |builder|
         | 
| 795 | 
            +
                    builder.instance_cache.merge!(instance_cache)
         | 
| 796 | 
            +
                    builder.singleton_cache.merge!(singleton_cache)
         | 
| 797 | 
            +
                    builder.singleton0_cache.merge!(singleton0_cache)
         | 
| 798 | 
            +
                    builder.interface_cache.merge!(interface_cache)
         | 
| 799 | 
            +
             | 
| 800 | 
            +
                    except.each do |name|
         | 
| 801 | 
            +
                      builder.instance_cache.delete([name, true])
         | 
| 802 | 
            +
                      builder.instance_cache.delete([name, false])
         | 
| 803 | 
            +
                      builder.singleton_cache.delete(name)
         | 
| 804 | 
            +
                      builder.singleton0_cache.delete(name)
         | 
| 805 | 
            +
                      builder.interface_cache.delete(name)
         | 
| 806 | 
            +
                    end
         | 
| 807 | 
            +
                  end
         | 
| 808 | 
            +
                end
         | 
| 784 809 | 
             
              end
         | 
| 785 810 | 
             
            end
         | 
| @@ -96,15 +96,22 @@ module RBS | |
| 96 96 | 
             
                        type = Types::ClassInstance.new(name: type_name, args: args, location: nil)
         | 
| 97 97 | 
             
                        Methods.new(type: type).tap do |methods|
         | 
| 98 98 | 
             
                          entry.decls.each do |d|
         | 
| 99 | 
            +
                            subst = Substitution.build(d.decl.type_params.each.map(&:name), args)
         | 
| 99 100 | 
             
                            each_member_with_accessibility(d.decl.members) do |member, accessibility|
         | 
| 100 101 | 
             
                              case member
         | 
| 101 102 | 
             
                              when AST::Members::MethodDefinition
         | 
| 102 103 | 
             
                                if member.instance?
         | 
| 103 | 
            -
                                  build_method(methods, | 
| 104 | 
            +
                                  build_method(methods,
         | 
| 105 | 
            +
                                               type,
         | 
| 106 | 
            +
                                               member: member.update(types: member.types.map {|type| type.sub(subst) }),
         | 
| 107 | 
            +
                                               accessibility: accessibility)
         | 
| 104 108 | 
             
                                end
         | 
| 105 109 | 
             
                              when AST::Members::AttrReader, AST::Members::AttrWriter, AST::Members::AttrAccessor
         | 
| 106 110 | 
             
                                if member.kind == :instance
         | 
| 107 | 
            -
                                  build_attribute(methods, | 
| 111 | 
            +
                                  build_attribute(methods,
         | 
| 112 | 
            +
                                                  type,
         | 
| 113 | 
            +
                                                  member: member.update(type: member.type.sub(subst)),
         | 
| 114 | 
            +
                                                  accessibility: accessibility)
         | 
| 108 115 | 
             
                                end
         | 
| 109 116 | 
             
                              when AST::Members::Alias
         | 
| 110 117 | 
             
                                if member.kind == :instance
         | 
| @@ -212,6 +219,20 @@ module RBS | |
| 212 219 | 
             
                      end
         | 
| 213 220 | 
             
                    end
         | 
| 214 221 | 
             
                  end
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                  def update(env:, except:)
         | 
| 224 | 
            +
                    MethodBuilder.new(env: env).tap do |copy|
         | 
| 225 | 
            +
                      copy.instance_methods.merge!(instance_methods)
         | 
| 226 | 
            +
                      copy.singleton_methods.merge!(singleton_methods)
         | 
| 227 | 
            +
                      copy.interface_methods.merge!(interface_methods)
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                      except.each do |type_name|
         | 
| 230 | 
            +
                        copy.instance_methods.delete(type_name)
         | 
| 231 | 
            +
                        copy.singleton_methods.delete(type_name)
         | 
| 232 | 
            +
                        copy.interface_methods.delete(type_name)
         | 
| 233 | 
            +
                      end
         | 
| 234 | 
            +
                    end
         | 
| 235 | 
            +
                  end
         | 
| 215 236 | 
             
                end
         | 
| 216 237 | 
             
              end
         | 
| 217 238 | 
             
            end
         | 
    
        data/lib/rbs/environment.rb
    CHANGED
    
    | @@ -1,6 +1,5 @@ | |
| 1 1 | 
             
            module RBS
         | 
| 2 2 | 
             
              class Environment
         | 
| 3 | 
            -
                attr_reader :buffers
         | 
| 4 3 | 
             
                attr_reader :declarations
         | 
| 5 4 |  | 
| 6 5 | 
             
                attr_reader :class_decls
         | 
| @@ -169,7 +168,7 @@ module RBS | |
| 169 168 | 
             
                      # @type var decl: AST::Declarations::Class
         | 
| 170 169 | 
             
                      existing_entry.insert(decl: decl, outer: outer)
         | 
| 171 170 | 
             
                    else
         | 
| 172 | 
            -
                      raise DuplicatedDeclarationError.new(name, decl, existing_entry. | 
| 171 | 
            +
                      raise DuplicatedDeclarationError.new(name, decl, existing_entry.decls[0].decl)
         | 
| 173 172 | 
             
                    end
         | 
| 174 173 |  | 
| 175 174 | 
             
                    prefix = outer + [decl]
         | 
| @@ -204,12 +203,22 @@ module RBS | |
| 204 203 | 
             
                  self
         | 
| 205 204 | 
             
                end
         | 
| 206 205 |  | 
| 207 | 
            -
                def  | 
| 206 | 
            +
                def validate_type_params
         | 
| 207 | 
            +
                  class_decls.each_value do |decl|
         | 
| 208 | 
            +
                    decl.primary
         | 
| 209 | 
            +
                  end
         | 
| 210 | 
            +
                end
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                def resolve_type_names(only: nil)
         | 
| 208 213 | 
             
                  resolver = TypeNameResolver.from_env(self)
         | 
| 209 214 | 
             
                  env = Environment.new()
         | 
| 210 215 |  | 
| 211 216 | 
             
                  declarations.each do |decl|
         | 
| 212 | 
            -
                     | 
| 217 | 
            +
                    if only && !only.member?(decl)
         | 
| 218 | 
            +
                      env << decl
         | 
| 219 | 
            +
                    else
         | 
| 220 | 
            +
                      env << resolve_declaration(resolver, decl, outer: [], prefix: Namespace.root)
         | 
| 221 | 
            +
                    end
         | 
| 213 222 | 
             
                  end
         | 
| 214 223 |  | 
| 215 224 | 
             
                  env
         | 
| @@ -431,8 +440,36 @@ module RBS | |
| 431 440 | 
             
                end
         | 
| 432 441 |  | 
| 433 442 | 
             
                def inspect
         | 
| 434 | 
            -
                  ivars = %i[@ | 
| 443 | 
            +
                  ivars = %i[@declarations @class_decls @interface_decls @alias_decls @constant_decls @global_decls]
         | 
| 435 444 | 
             
                  "\#<RBS::Environment #{ivars.map { |iv| "#{iv}=(#{instance_variable_get(iv).size} items)"}.join(' ')}>"
         | 
| 436 445 | 
             
                end
         | 
| 446 | 
            +
             | 
| 447 | 
            +
                def buffers
         | 
| 448 | 
            +
                  buffers_decls.keys.compact
         | 
| 449 | 
            +
                end
         | 
| 450 | 
            +
             | 
| 451 | 
            +
                def buffers_decls
         | 
| 452 | 
            +
                  # @type var hash: Hash[Buffer, Array[AST::Declarations::t]]
         | 
| 453 | 
            +
                  hash = {}
         | 
| 454 | 
            +
             | 
| 455 | 
            +
                  declarations.each do |decl|
         | 
| 456 | 
            +
                    location = decl.location or next
         | 
| 457 | 
            +
                    (hash[location.buffer] ||= []) << decl
         | 
| 458 | 
            +
                  end
         | 
| 459 | 
            +
             | 
| 460 | 
            +
                  hash
         | 
| 461 | 
            +
                end
         | 
| 462 | 
            +
             | 
| 463 | 
            +
                def reject
         | 
| 464 | 
            +
                  env = Environment.new
         | 
| 465 | 
            +
             | 
| 466 | 
            +
                  declarations.each do |decl|
         | 
| 467 | 
            +
                    unless yield(decl)
         | 
| 468 | 
            +
                      env << decl
         | 
| 469 | 
            +
                    end
         | 
| 470 | 
            +
                  end
         | 
| 471 | 
            +
             | 
| 472 | 
            +
                  env
         | 
| 473 | 
            +
                end
         | 
| 437 474 | 
             
              end
         | 
| 438 475 | 
             
            end
         | 
| @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            module RBS
         | 
| 2 2 | 
             
              class EnvironmentWalker
         | 
| 3 | 
            -
                InstanceNode = Struct.new(:type_name, keyword_init: true)
         | 
| 4 | 
            -
                SingletonNode = Struct.new(:type_name, keyword_init: true)
         | 
| 5 | 
            -
                TypeNameNode = Struct.new(:type_name, keyword_init: true)
         | 
| 3 | 
            +
                InstanceNode = _ = Struct.new(:type_name, keyword_init: true)
         | 
| 4 | 
            +
                SingletonNode = _ = Struct.new(:type_name, keyword_init: true)
         | 
| 5 | 
            +
                TypeNameNode = _ = Struct.new(:type_name, keyword_init: true)
         | 
| 6 6 |  | 
| 7 7 | 
             
                attr_reader :env
         | 
| 8 8 |  | 
| 9 9 | 
             
                def initialize(env:)
         | 
| 10 10 | 
             
                  @env = env
         | 
| 11 | 
            -
                  @only_ancestors =  | 
| 11 | 
            +
                  @only_ancestors = false
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| 14 14 | 
             
                def builder
         | 
    
        data/lib/rbs/errors.rb
    CHANGED
    
    | @@ -14,7 +14,12 @@ module RBS | |
| 14 14 | 
             
                end
         | 
| 15 15 | 
             
              end
         | 
| 16 16 |  | 
| 17 | 
            -
              class  | 
| 17 | 
            +
              class ErrorBase < StandardError; end
         | 
| 18 | 
            +
              class ParsingError < ErrorBase; end
         | 
| 19 | 
            +
              class LoadingError < ErrorBase; end
         | 
| 20 | 
            +
              class DefinitionError < ErrorBase; end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              class InvalidTypeApplicationError < DefinitionError
         | 
| 18 23 | 
             
                attr_reader :type_name
         | 
| 19 24 | 
             
                attr_reader :args
         | 
| 20 25 | 
             
                attr_reader :params
         | 
| @@ -35,7 +40,7 @@ module RBS | |
| 35 40 | 
             
                end
         | 
| 36 41 | 
             
              end
         | 
| 37 42 |  | 
| 38 | 
            -
              class RecursiveAncestorError <  | 
| 43 | 
            +
              class RecursiveAncestorError < DefinitionError
         | 
| 39 44 | 
             
                attr_reader :ancestors
         | 
| 40 45 | 
             
                attr_reader :location
         | 
| 41 46 |  | 
| @@ -73,7 +78,7 @@ module RBS | |
| 73 78 | 
             
                end
         | 
| 74 79 | 
             
              end
         | 
| 75 80 |  | 
| 76 | 
            -
              class NoTypeFoundError <  | 
| 81 | 
            +
              class NoTypeFoundError < ErrorBase
         | 
| 77 82 | 
             
                attr_reader :type_name
         | 
| 78 83 | 
             
                attr_reader :location
         | 
| 79 84 |  | 
| @@ -102,7 +107,7 @@ module RBS | |
| 102 107 | 
             
                end
         | 
| 103 108 | 
             
              end
         | 
| 104 109 |  | 
| 105 | 
            -
              class NoSuperclassFoundError <  | 
| 110 | 
            +
              class NoSuperclassFoundError < DefinitionError
         | 
| 106 111 | 
             
                attr_reader :type_name
         | 
| 107 112 | 
             
                attr_reader :location
         | 
| 108 113 |  | 
| @@ -118,7 +123,7 @@ module RBS | |
| 118 123 | 
             
                end
         | 
| 119 124 | 
             
              end
         | 
| 120 125 |  | 
| 121 | 
            -
              class NoSelfTypeFoundError <  | 
| 126 | 
            +
              class NoSelfTypeFoundError < DefinitionError
         | 
| 122 127 | 
             
                attr_reader :type_name
         | 
| 123 128 | 
             
                attr_reader :location
         | 
| 124 129 |  | 
| @@ -145,7 +150,7 @@ module RBS | |
| 145 150 | 
             
                end
         | 
| 146 151 | 
             
              end
         | 
| 147 152 |  | 
| 148 | 
            -
              class NoMixinFoundError <  | 
| 153 | 
            +
              class NoMixinFoundError < DefinitionError
         | 
| 149 154 | 
             
                attr_reader :type_name
         | 
| 150 155 | 
             
                attr_reader :member
         | 
| 151 156 |  | 
| @@ -174,7 +179,7 @@ module RBS | |
| 174 179 | 
             
                end
         | 
| 175 180 | 
             
              end
         | 
| 176 181 |  | 
| 177 | 
            -
              class DuplicatedMethodDefinitionError <  | 
| 182 | 
            +
              class DuplicatedMethodDefinitionError < DefinitionError
         | 
| 178 183 | 
             
                attr_reader :type
         | 
| 179 184 | 
             
                attr_reader :method_name
         | 
| 180 185 | 
             
                attr_reader :members
         | 
| @@ -200,6 +205,10 @@ module RBS | |
| 200 205 | 
             
                  end
         | 
| 201 206 | 
             
                end
         | 
| 202 207 |  | 
| 208 | 
            +
                def type_name
         | 
| 209 | 
            +
                  type.name
         | 
| 210 | 
            +
                end
         | 
| 211 | 
            +
             | 
| 203 212 | 
             
                def location
         | 
| 204 213 | 
             
                  members[0].location
         | 
| 205 214 | 
             
                end
         | 
| @@ -209,7 +218,7 @@ module RBS | |
| 209 218 | 
             
                end
         | 
| 210 219 | 
             
              end
         | 
| 211 220 |  | 
| 212 | 
            -
              class DuplicatedInterfaceMethodDefinitionError <  | 
| 221 | 
            +
              class DuplicatedInterfaceMethodDefinitionError < DefinitionError
         | 
| 213 222 | 
             
                attr_reader :type
         | 
| 214 223 | 
             
                attr_reader :method_name
         | 
| 215 224 | 
             
                attr_reader :member
         | 
| @@ -230,23 +239,29 @@ module RBS | |
| 230 239 | 
             
                    "#{type.name}##{method_name}"
         | 
| 231 240 | 
             
                  end
         | 
| 232 241 | 
             
                end
         | 
| 242 | 
            +
             | 
| 243 | 
            +
                def type_name
         | 
| 244 | 
            +
                  type.name
         | 
| 245 | 
            +
                end
         | 
| 233 246 | 
             
              end
         | 
| 234 247 |  | 
| 235 | 
            -
              class UnknownMethodAliasError <  | 
| 248 | 
            +
              class UnknownMethodAliasError < DefinitionError
         | 
| 249 | 
            +
                attr_reader :type_name
         | 
| 236 250 | 
             
                attr_reader :original_name
         | 
| 237 251 | 
             
                attr_reader :aliased_name
         | 
| 238 252 | 
             
                attr_reader :location
         | 
| 239 253 |  | 
| 240 | 
            -
                def initialize(original_name:, aliased_name:, location:)
         | 
| 254 | 
            +
                def initialize(type_name:, original_name:, aliased_name:, location:)
         | 
| 255 | 
            +
                  @type_name = type_name
         | 
| 241 256 | 
             
                  @original_name = original_name
         | 
| 242 257 | 
             
                  @aliased_name = aliased_name
         | 
| 243 258 | 
             
                  @location = location
         | 
| 244 259 |  | 
| 245 | 
            -
                  super "#{Location.to_string location}: Unknown method alias name: #{original_name} => #{aliased_name}"
         | 
| 260 | 
            +
                  super "#{Location.to_string location}: Unknown method alias name: #{original_name} => #{aliased_name} (#{type_name})"
         | 
| 246 261 | 
             
                end
         | 
| 247 262 | 
             
              end
         | 
| 248 263 |  | 
| 249 | 
            -
              class SuperclassMismatchError <  | 
| 264 | 
            +
              class SuperclassMismatchError < DefinitionError
         | 
| 250 265 | 
             
                attr_reader :name
         | 
| 251 266 | 
             
                attr_reader :entry
         | 
| 252 267 |  | 
| @@ -257,7 +272,7 @@ module RBS | |
| 257 272 | 
             
                end
         | 
| 258 273 | 
             
              end
         | 
| 259 274 |  | 
| 260 | 
            -
              class InvalidOverloadMethodError <  | 
| 275 | 
            +
              class InvalidOverloadMethodError < DefinitionError
         | 
| 261 276 | 
             
                attr_reader :type_name
         | 
| 262 277 | 
             
                attr_reader :method_name
         | 
| 263 278 | 
             
                attr_reader :kind
         | 
| @@ -280,7 +295,7 @@ module RBS | |
| 280 295 | 
             
                end
         | 
| 281 296 | 
             
              end
         | 
| 282 297 |  | 
| 283 | 
            -
              class GenericParameterMismatchError <  | 
| 298 | 
            +
              class GenericParameterMismatchError < LoadingError
         | 
| 284 299 | 
             
                attr_reader :name
         | 
| 285 300 | 
             
                attr_reader :decl
         | 
| 286 301 |  | 
| @@ -291,7 +306,7 @@ module RBS | |
| 291 306 | 
             
                end
         | 
| 292 307 | 
             
              end
         | 
| 293 308 |  | 
| 294 | 
            -
              class DuplicatedDeclarationError <  | 
| 309 | 
            +
              class DuplicatedDeclarationError < LoadingError
         | 
| 295 310 | 
             
                attr_reader :name
         | 
| 296 311 | 
             
                attr_reader :decls
         | 
| 297 312 |  | 
| @@ -304,7 +319,7 @@ module RBS | |
| 304 319 | 
             
                end
         | 
| 305 320 | 
             
              end
         | 
| 306 321 |  | 
| 307 | 
            -
              class InvalidVarianceAnnotationError <  | 
| 322 | 
            +
              class InvalidVarianceAnnotationError < DefinitionError
         | 
| 308 323 | 
             
                attr_reader :type_name
         | 
| 309 324 | 
             
                attr_reader :param
         | 
| 310 325 | 
             
                attr_reader :location
         | 
| @@ -318,7 +333,7 @@ module RBS | |
| 318 333 | 
             
                end
         | 
| 319 334 | 
             
              end
         | 
| 320 335 |  | 
| 321 | 
            -
              class RecursiveAliasDefinitionError <  | 
| 336 | 
            +
              class RecursiveAliasDefinitionError < DefinitionError
         | 
| 322 337 | 
             
                attr_reader :type
         | 
| 323 338 | 
             
                attr_reader :defs
         | 
| 324 339 |  |