rbs 2.8.4 → 3.0.0.dev.2

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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +0 -3
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +17 -17
  5. data/README.md +1 -0
  6. data/Rakefile +66 -0
  7. data/core/array.rbs +1 -1
  8. data/core/builtin.rbs +1 -1
  9. data/core/hash.rbs +1 -1
  10. data/core/module.rbs +1 -1
  11. data/ext/rbs_extension/constants.c +18 -2
  12. data/ext/rbs_extension/constants.h +9 -1
  13. data/ext/rbs_extension/lexer.c +834 -777
  14. data/ext/rbs_extension/lexer.h +3 -1
  15. data/ext/rbs_extension/lexer.re +3 -1
  16. data/ext/rbs_extension/lexstate.c +4 -2
  17. data/ext/rbs_extension/parser.c +287 -57
  18. data/ext/rbs_extension/ruby_objs.c +71 -5
  19. data/ext/rbs_extension/ruby_objs.h +9 -2
  20. data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
  21. data/lib/rbs/ast/declarations.rb +49 -2
  22. data/lib/rbs/ast/directives.rb +39 -0
  23. data/lib/rbs/ast/members.rb +49 -15
  24. data/lib/rbs/cli.rb +38 -19
  25. data/lib/rbs/collection/config/lockfile.rb +115 -0
  26. data/lib/rbs/collection/config/lockfile_generator.rb +99 -53
  27. data/lib/rbs/collection/config.rb +12 -40
  28. data/lib/rbs/collection/installer.rb +9 -13
  29. data/lib/rbs/collection/sources/base.rb +2 -2
  30. data/lib/rbs/collection/sources/git.rb +135 -62
  31. data/lib/rbs/collection/sources/rubygems.rb +10 -12
  32. data/lib/rbs/collection/sources/stdlib.rb +10 -13
  33. data/lib/rbs/collection/sources.rb +7 -1
  34. data/lib/rbs/collection.rb +1 -0
  35. data/lib/rbs/definition.rb +1 -1
  36. data/lib/rbs/definition_builder/ancestor_builder.rb +24 -8
  37. data/lib/rbs/definition_builder/method_builder.rb +3 -3
  38. data/lib/rbs/definition_builder.rb +456 -579
  39. data/lib/rbs/environment/use_map.rb +77 -0
  40. data/lib/rbs/environment.rb +356 -85
  41. data/lib/rbs/environment_loader.rb +20 -17
  42. data/lib/rbs/environment_walker.rb +1 -1
  43. data/lib/rbs/errors.rb +34 -37
  44. data/lib/rbs/locator.rb +3 -3
  45. data/lib/rbs/parser_aux.rb +8 -6
  46. data/lib/rbs/prototype/helpers.rb +29 -13
  47. data/lib/rbs/prototype/node_usage.rb +99 -0
  48. data/lib/rbs/prototype/rb.rb +3 -2
  49. data/lib/rbs/prototype/rbi.rb +6 -4
  50. data/lib/rbs/prototype/runtime.rb +25 -12
  51. data/lib/rbs/resolver/constant_resolver.rb +23 -7
  52. data/lib/rbs/resolver/type_name_resolver.rb +2 -1
  53. data/lib/rbs/sorter.rb +3 -3
  54. data/lib/rbs/substitution.rb +19 -0
  55. data/lib/rbs/test/setup.rb +1 -1
  56. data/lib/rbs/type_alias_dependency.rb +1 -1
  57. data/lib/rbs/type_alias_regularity.rb +3 -3
  58. data/lib/rbs/types.rb +1 -5
  59. data/lib/rbs/validator.rb +25 -3
  60. data/lib/rbs/variance_calculator.rb +2 -2
  61. data/lib/rbs/version.rb +1 -1
  62. data/lib/rbs/writer.rb +54 -19
  63. data/lib/rbs.rb +3 -2
  64. data/lib/rdoc_plugin/parser.rb +3 -3
  65. data/schema/members.json +15 -10
  66. data/sig/ancestor_graph.rbs +22 -2
  67. data/sig/collection/config/lockfile.rbs +80 -0
  68. data/sig/collection/config/lockfile_generator.rbs +53 -0
  69. data/sig/collection/config.rbs +5 -48
  70. data/sig/collection/installer.rbs +1 -1
  71. data/sig/collection/sources.rbs +76 -33
  72. data/sig/constant.rbs +1 -1
  73. data/sig/declarations.rbs +36 -3
  74. data/sig/definition.rbs +1 -1
  75. data/sig/definition_builder.rbs +94 -82
  76. data/sig/directives.rbs +61 -0
  77. data/sig/environment.rbs +150 -28
  78. data/sig/environment_loader.rbs +2 -2
  79. data/sig/errors.rbs +42 -0
  80. data/sig/members.rbs +31 -7
  81. data/sig/parser.rbs +8 -15
  82. data/sig/prototype/node_usage.rbs +20 -0
  83. data/sig/resolver/constant_resolver.rbs +1 -2
  84. data/sig/shims/bundler.rbs +31 -0
  85. data/sig/shims/rubygems.rbs +15 -0
  86. data/sig/shims.rbs +0 -22
  87. data/sig/substitution.rbs +6 -0
  88. data/sig/use_map.rbs +35 -0
  89. data/sig/validator.rbs +12 -5
  90. data/sig/writer.rbs +6 -2
  91. metadata +16 -9
  92. data/lib/rbs/constant_table.rb +0 -167
  93. data/lib/rbs/type_name_resolver.rb +0 -67
  94. data/sig/constant_table.rbs +0 -30
  95. data/sig/type_name_resolver.rbs +0 -26
data/sig/environment.rbs CHANGED
@@ -13,9 +13,11 @@ module RBS
13
13
  end
14
14
 
15
15
  module ContextUtil
16
- def calculate_context: (Array[_NamedDecl]) -> Array[Namespace]
16
+ def calculate_context: (Array[_NamedDecl]) -> Resolver::context
17
17
  end
18
18
 
19
+ # Name of object, it's (multiple) declarations with the outer module declarations
20
+ #
19
21
  class MultiEntry[M < _ModuleOrClass]
20
22
  class D[M < _ModuleOrClass]
21
23
  attr_reader decl: M
@@ -25,9 +27,9 @@ module RBS
25
27
 
26
28
  include ContextUtil
27
29
 
28
- @context: Array[Namespace]
30
+ @context: Resolver::context
29
31
 
30
- def context: () -> Array[Namespace]
32
+ def context: () -> Resolver::context
31
33
  end
32
34
 
33
35
  attr_reader name: TypeName
@@ -55,6 +57,8 @@ module RBS
55
57
  class ClassEntry < MultiEntry[AST::Declarations::Class]
56
58
  end
57
59
 
60
+ # Name of object, it's (single) declaration, and the outer module declarations
61
+ #
58
62
  class SingleEntry[N, D]
59
63
  attr_reader name: N
60
64
  attr_reader decl: D
@@ -64,36 +68,68 @@ module RBS
64
68
 
65
69
  include ContextUtil
66
70
 
67
- @context: Array[Namespace]
71
+ @context: Resolver::context
72
+
73
+ def context: () -> Resolver::context
74
+ end
75
+
76
+ class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias]
77
+ end
78
+
79
+ class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias]
80
+ end
81
+
82
+ class InterfaceEntry < SingleEntry[TypeName, AST::Declarations::Interface]
83
+ end
84
+
85
+ class TypeAliasEntry < SingleEntry[TypeName, AST::Declarations::TypeAlias]
86
+ end
68
87
 
69
- def context: () -> Array[Namespace]
88
+ class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant]
70
89
  end
71
90
 
72
- # Top level declarations.
91
+ class GlobalEntry < SingleEntry[Symbol, AST::Declarations::Global]
92
+ end
93
+
94
+ # Top level declarations
73
95
  attr_reader declarations: Array[AST::Declarations::t]
74
96
 
97
+ # Class declarations
75
98
  attr_reader class_decls: Hash[TypeName, ModuleEntry | ClassEntry]
76
- attr_reader interface_decls: Hash[TypeName, SingleEntry[TypeName, AST::Declarations::Interface]]
77
- attr_reader alias_decls: Hash[TypeName, SingleEntry[TypeName, AST::Declarations::Alias]]
78
- attr_reader constant_decls: Hash[TypeName, SingleEntry[TypeName, AST::Declarations::Constant]]
79
- attr_reader global_decls: Hash[Symbol, SingleEntry[Symbol, AST::Declarations::Global]]
99
+
100
+ attr_reader class_alias_decls: Hash[TypeName, ModuleAliasEntry | ClassAliasEntry]
101
+
102
+ # Interface declarations
103
+ attr_reader interface_decls: Hash[TypeName, InterfaceEntry]
104
+
105
+ # Type alias declarations
106
+ attr_reader type_alias_decls: Hash[TypeName, TypeAliasEntry]
107
+
108
+ # Constant declarations
109
+ attr_reader constant_decls: Hash[TypeName, ConstantEntry]
110
+
111
+ # Global declarations
112
+ attr_reader global_decls: Hash[Symbol, GlobalEntry]
113
+
114
+ attr_reader buffer_directives: Hash[Buffer, Array[AST::Directives::t]]
80
115
 
81
116
  def initialize: () -> void
82
117
 
83
118
  def initialize_copy: (Environment) -> void
84
119
 
120
+ # Construct an environment from EnvironmentLoader
121
+ #
85
122
  def self.from_loader: (EnvironmentLoader) -> Environment
86
123
 
87
- def cache_name: [N, D] (Hash[N, SingleEntry[N, D]] cache, name: N, decl: D, outer: Array[module_decl]) -> SingleEntry[N, D]
88
-
89
- def insert_decl: (AST::Declarations::t, outer: Array[module_decl], namespace: Namespace) -> void
124
+ def add_signature: (buffer: Buffer, directives: Array[AST::Directives::t], decls: Array[AST::Declarations::t]) -> void
90
125
 
91
- # Insert a toplevel declaration into the env.
126
+ # Insert a toplevel declaration into the environment
92
127
  #
93
128
  def <<: (AST::Declarations::t decl) -> self
94
129
 
95
- # Runs generics type params validation over each class definitions.
96
- def validate_type_params: () -> void
130
+ # Insert a declaration into the environment
131
+ #
132
+ private def insert_decl: (AST::Declarations::t, outer: Array[module_decl], namespace: Namespace) -> void
97
133
 
98
134
  # Resolve all type names in the environment to absolute type names.
99
135
  # Relative type name will be left if absolute type name cannot be found.
@@ -103,18 +139,6 @@ module RBS
103
139
  #
104
140
  def resolve_type_names: (?only: Set[AST::Declarations::t]?) -> Environment
105
141
 
106
- def resolve_declaration: (TypeNameResolver resolver, AST::Declarations::t decl, outer: Array[module_decl], prefix: Namespace) -> AST::Declarations::t
107
-
108
- def resolve_member: (TypeNameResolver, AST::Members::t, context: Array[Namespace]) -> AST::Members::t
109
-
110
- def resolve_method_type: (TypeNameResolver, RBS::MethodType, context: Array[Namespace]) -> RBS::MethodType
111
-
112
- def resolve_type_params: (TypeNameResolver resolver, Array[AST::TypeParam], context: Array[Namespace]) -> Array[AST::TypeParam]
113
-
114
- def absolute_type: (TypeNameResolver, Types::t, context: Array[Namespace]) -> Types::t
115
-
116
- def absolute_type_name: (TypeNameResolver, TypeName, context: Array[Namespace]) -> TypeName
117
-
118
142
  def inspect: () -> String
119
143
 
120
144
  @buffers: Array[Buffer]
@@ -127,5 +151,103 @@ module RBS
127
151
  # Construction of new environment is done with `<<` so that nested declarations will work well.
128
152
  #
129
153
  def reject: () { (AST::Declarations::t) -> boolish } -> Environment
154
+
155
+ # Returns true if an interface with the type name is defined
156
+ #
157
+ def interface_name?: (TypeName) -> bool
158
+
159
+ # Returns true if a type alias with the type name is defined
160
+ #
161
+ def type_alias_name?: (TypeName) -> bool
162
+
163
+ # Returns true if a module or class with the type name is defined
164
+ #
165
+ def module_name?: (TypeName) -> bool
166
+
167
+ # Returns true if the type name is defined
168
+ #
169
+ def type_name?: (TypeName) -> bool
170
+
171
+ # Returns if a constant of the name is defined
172
+ #
173
+ def constant_name?: (TypeName) -> bool
174
+
175
+ # Returns true if the type name is defined by constant declaration
176
+ #
177
+ def constant_decl?: (TypeName) -> bool
178
+
179
+ # Returns true if the type name is defined by class declaration
180
+ #
181
+ def class_decl?: (TypeName) -> bool
182
+
183
+ # Returns true if the type name is defined by module declaration
184
+ #
185
+ def module_decl?: (TypeName) -> bool
186
+
187
+ # Returns true if the type name is a module alias
188
+ #
189
+ def module_alias?: (TypeName) -> bool
190
+
191
+ # Returns true if the type name is a class alias
192
+ def class_alias?: (TypeName) -> bool
193
+
194
+ def class_entry: (TypeName) -> (ClassEntry | ClassAliasEntry | nil)
195
+
196
+ # Returns ClassEntry if the class definition is found, normalized in case of alias
197
+ #
198
+ def normalized_class_entry: (TypeName) -> ClassEntry?
199
+
200
+ def module_entry: (TypeName) -> (ModuleEntry | ModuleAliasEntry | nil)
201
+
202
+ # Returns ModuleEntry if the module definition is found, normalized in case of alias
203
+ #
204
+ def normalized_module_entry: (TypeName) -> ModuleEntry?
205
+
206
+ def constant_entry: (TypeName) -> (ClassEntry | ClassAliasEntry | ModuleEntry | ModuleAliasEntry | ConstantEntry | nil)
207
+
208
+ def module_class_entry: (TypeName) -> (ClassEntry | ClassAliasEntry | ModuleEntry | ModuleAliasEntry | nil)
209
+
210
+ def normalized_module_class_entry: (TypeName) -> (ClassEntry | ModuleEntry | nil)
211
+
212
+ @normalize_module_name_cache: Hash[TypeName, TypeName | false | nil]
213
+
214
+ # Returns the original module name that is defined with `module` declaration
215
+ #
216
+ # * Calls `#absolute!` for relative module names
217
+ # * Returns `nil` if the rhs name cannot be found
218
+ # * Returns `false` if the name is cyclic
219
+ #
220
+ def normalize_module_name?: (TypeName) -> (TypeName | nil | false)
221
+
222
+ # Returns the original module name that is defined with `module` declaration
223
+ #
224
+ # * Raises an error if given type name is not module
225
+ # * Calls `#absolute!` for relative module names
226
+ # * Returns the name itself if the name cannot be normalized to a class/module
227
+ #
228
+ def normalize_module_name: (TypeName) -> TypeName
229
+
230
+ # Runs generics type params validation over each class definitions
231
+ def validate_type_params: () -> void
232
+
233
+ private
234
+
235
+ # Returns a context for inside given decls
236
+ #
237
+ def resolver_context: (*module_decl) -> Resolver::context
238
+
239
+ def append_context: (Resolver::context, module_decl) -> Resolver::context
240
+
241
+ def resolve_declaration: (Resolver::TypeNameResolver resolver, UseMap map, AST::Declarations::t decl, outer: Array[module_decl], prefix: Namespace) -> AST::Declarations::t
242
+
243
+ def resolve_member: (Resolver::TypeNameResolver, UseMap map, AST::Members::t, context: Resolver::context) -> AST::Members::t
244
+
245
+ def resolve_method_type: (Resolver::TypeNameResolver, UseMap map, RBS::MethodType, context: Resolver::context) -> RBS::MethodType
246
+
247
+ def resolve_type_params: (Resolver::TypeNameResolver resolver, UseMap map, Array[AST::TypeParam], context: Resolver::context) -> Array[AST::TypeParam]
248
+
249
+ def absolute_type: (Resolver::TypeNameResolver, UseMap map, Types::t, context: Resolver::context) -> Types::t
250
+
251
+ def absolute_type_name: (Resolver::TypeNameResolver, UseMap map, TypeName, context: Resolver::context) -> TypeName
130
252
  end
131
253
  end
@@ -81,7 +81,7 @@ module RBS
81
81
  def resolve_dependencies: (library: String, version: String?) -> void
82
82
 
83
83
  # Add repository path and libraries via rbs_collection.lock.yaml.
84
- def add_collection: (Collection::Config collection_config) -> void
84
+ def add_collection: (Collection::Config::Lockfile lockfile) -> void
85
85
 
86
86
  # This is helper function to test if RBS for a library is available or not.
87
87
  #
@@ -100,7 +100,7 @@ module RBS
100
100
  #
101
101
  def self.gem_sig_path: (String name, String? version) -> [Gem::Specification, Pathname]?
102
102
 
103
- def each_decl: () { (AST::Declarations::t, Buffer, source, Pathname) -> void } -> void
103
+ def each_signature: () { (source, Pathname, Buffer, Array[AST::Declarations::t], Array[AST::Directives::t]) -> void } -> void
104
104
 
105
105
  def each_dir: { (source, Pathname) -> void } -> void
106
106
 
data/sig/errors.rbs CHANGED
@@ -123,6 +123,23 @@ module RBS
123
123
  def other_locations: () -> Array[Location[untyped, untyped]?]
124
124
  end
125
125
 
126
+ # An interface mixin causes a duplication of a method definition
127
+ #
128
+ # ```rbs
129
+ # interface _Foo1
130
+ # def foo: () -> void
131
+ # end
132
+ #
133
+ # interface _Foo2
134
+ # def foo: () -> void
135
+ # end
136
+ #
137
+ # class Foo
138
+ # include _Foo1
139
+ # include _Foo2 # <= The error will be reported here (or the line of _Foo1)
140
+ # end
141
+ # ```
142
+ #
126
143
  class DuplicatedInterfaceMethodDefinitionError < DefinitionError
127
144
  type ty = Types::ClassSingleton | Types::ClassInstance | Types::Interface
128
145
  type mixin_member = AST::Members::Include | AST::Members::Extend
@@ -138,6 +155,8 @@ module RBS
138
155
  def qualified_method_name: () -> String
139
156
  end
140
157
 
158
+ # The `alias` member declares an alias from unknown method
159
+ #
141
160
  class UnknownMethodAliasError < DefinitionError
142
161
  attr_reader type_name: TypeName
143
162
  attr_reader original_name: Symbol
@@ -154,6 +173,8 @@ module RBS
154
173
  def initialize: (name: TypeName, entry: Environment::ClassEntry) -> void
155
174
  end
156
175
 
176
+ # The *overloading* method definition cannot find *non-overloading* method definition
177
+ #
157
178
  class InvalidOverloadMethodError < DefinitionError
158
179
  attr_reader type_name: TypeName
159
180
  attr_reader method_name: Symbol
@@ -259,4 +280,25 @@ module RBS
259
280
 
260
281
  def initialize: (type_name: TypeName, method_name: Symbol?, params: Array[AST::TypeParam], location: Location[untyped, untyped]?) -> void
261
282
  end
283
+
284
+ # A module/class alias declaration has inconsistent right-hand-side
285
+ #
286
+ # ```rbs
287
+ # module Foo = Object # Error
288
+ # class Bar = Kernel # Error
289
+ # ```
290
+ #
291
+ class InconsistentClassModuleAliasError < BaseError
292
+ attr_reader alias_entry: Environment::ModuleAliasEntry | Environment::ClassAliasEntry
293
+
294
+ def initialize: (Environment::ModuleAliasEntry | Environment::ClassAliasEntry) -> void
295
+ end
296
+
297
+ # A module/class alias declaration is cyclic
298
+ #
299
+ class CyclicClassAliasDefinitionError < BaseError
300
+ attr_reader alias_entry: Environment::ModuleAliasEntry | Environment::ClassAliasEntry
301
+
302
+ def initialize: (Environment::ModuleAliasEntry | Environment::ClassAliasEntry) -> void
303
+ end
262
304
  end
data/sig/members.rbs CHANGED
@@ -15,6 +15,26 @@ module RBS
15
15
  type visibility = :public | :private
16
16
 
17
17
  class MethodDefinition < Base
18
+ class Overload
19
+ attr_reader method_type: MethodType
20
+
21
+ attr_reader annotations: Array[Annotation]
22
+
23
+ def initialize: (method_type: MethodType, annotations: Array[Annotation]) -> void
24
+
25
+ def ==: (untyped) -> bool
26
+
27
+ def hash: () -> Integer
28
+
29
+ alias eql? ==
30
+
31
+ def update: (?annotations: Array[Annotation], ?method_type: MethodType) -> Overload
32
+
33
+ def sub: (Substitution) -> Overload
34
+
35
+ include _ToJson
36
+ end
37
+
18
38
  type kind = :instance | :singleton | :singleton_instance
19
39
 
20
40
  # def foo: () -> void
@@ -26,31 +46,35 @@ module RBS
26
46
  # ^^^ keyword
27
47
  # ^^^^^ kind
28
48
  # ^^^ name
29
- # ^^^ overload
49
+ # ^^^ overloading
30
50
  #
31
- type loc = Location[:keyword | :name, :kind | :overload | :visibility]
51
+ type loc = Location[:keyword | :name, :kind | :overloading | :visibility]
32
52
 
33
53
  attr_reader name: Symbol
34
54
  attr_reader kind: kind
35
- attr_reader types: Array[MethodType]
55
+ attr_reader overloads: Array[Overload]
36
56
  attr_reader annotations: Array[Annotation]
37
57
  attr_reader location: loc?
38
58
  attr_reader comment: Comment?
39
- attr_reader overload: bool
59
+ attr_reader overloading: bool
40
60
  attr_reader visibility: visibility?
41
61
 
42
- def initialize: (name: Symbol, kind: kind, types: Array[MethodType], annotations: Array[Annotation], location: loc?, comment: Comment?, overload: boolish, ?visibility: visibility?) -> void
62
+ def initialize: (name: Symbol, kind: kind, overloads: Array[Overload], annotations: Array[Annotation], location: loc?, comment: Comment?, overloading: bool, visibility: visibility?) -> void
43
63
 
44
64
  include _HashEqual
45
65
  include _ToJson
46
66
 
67
+ # Returns true if the `def` is to define instance method
47
68
  def instance?: () -> bool
48
69
 
70
+ # Returns true if the `def` is to define singleton method
49
71
  def singleton?: () -> bool
50
72
 
51
- def overload?: () -> bool
73
+ # Returns true if the `def` is overloading (== with `...`)
74
+ #
75
+ def overloading?: () -> bool
52
76
 
53
- def update: (?name: Symbol, ?kind: kind, ?types: Array[MethodType], ?annotations: Array[Annotation], ?location: loc?, ?comment: Comment?, ?overload: boolish, ?visibility: visibility?) -> MethodDefinition
77
+ def update: (?name: Symbol, ?kind: kind, ?overloads: Array[Overload], ?annotations: Array[Annotation], ?location: loc?, ?comment: Comment?, ?overloading: bool, ?visibility: visibility?) -> MethodDefinition
54
78
  end
55
79
 
56
80
  module Var
data/sig/parser.rbs CHANGED
@@ -6,15 +6,13 @@ module RBS
6
6
  # If no token is left in the input, it returns `nil`.
7
7
  #
8
8
  # ```ruby
9
+ # RBS::Parser.parse_method_type("() -> void") # => `() -> void`
9
10
  # RBS::Parser.parse_method_type("() -> void", range: 0...) # => `() -> void`
10
11
  # RBS::Parser.parse_method_type("() -> void () -> String", range: 11...) # => `() -> String`
11
12
  # RBS::Parser.parse_method_type("() -> void () -> String", range: 23...) # => nil
12
13
  # ```
13
14
  #
14
- # `line` and `column` is deprecated and are ignored.
15
- #
16
- def self.parse_method_type: (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol]) -> MethodType?
17
- | (Buffer | String, ?line: top, ?column: top, ?variables: Array[Symbol]) -> MethodType
15
+ def self.parse_method_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol]) -> MethodType?
18
16
 
19
17
  # Parse a type and return it
20
18
  #
@@ -22,22 +20,17 @@ module RBS
22
20
  # If no token is left in the input, it returns `nil`.
23
21
  #
24
22
  # ```ruby
23
+ # RBS::Parser.parse_type("String") # => `String`
25
24
  # RBS::Parser.parse_type("String", range: 0...) # => `String`
26
25
  # RBS::Parser.parse_type("String Integer", pos: 7...) # => `Integer`
27
26
  # RBS::Parser.parse_type("String Integer", pos: 14...) # => nil
28
27
  # ```
29
28
  #
30
- # `line` and `column` is deprecated and are ignored.
31
- #
32
- def self.parse_type: (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol]) -> Types::t?
33
- | (Buffer | String, ?line: top, ?column: top, ?variables: Array[Symbol]) -> Types::t
29
+ def self.parse_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol]) -> Types::t?
34
30
 
35
31
  # Parse whole RBS file and return an array of declarations
36
32
  #
37
- # `line` and `column` is deprecated and are ignored.
38
- #
39
- def self.parse_signature: (Buffer | String) -> Array[AST::Declarations::t]
40
- | (Buffer | String, ?line: top, ?column: top) -> Array[AST::Declarations::t]
33
+ def self.parse_signature: (Buffer | String) -> [Buffer, Array[AST::Directives::t], Array[AST::Declarations::t]]
41
34
 
42
35
  KEYWORDS: Hash[String, bot]
43
36
 
@@ -45,11 +38,11 @@ module RBS
45
38
 
46
39
  def self.buffer: (String | Buffer source) -> Buffer
47
40
 
48
- def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, boolish eof) -> Types::t?
41
+ def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables) -> Types::t?
49
42
 
50
- def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, boolish eof) -> MethodType?
43
+ def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables) -> MethodType?
51
44
 
52
- def self._parse_signature: (Buffer, Integer end_pos) -> Array[AST::Declarations::t]
45
+ def self._parse_signature: (Buffer, Integer end_pos) -> [Array[AST::Directives::t], Array[AST::Declarations::t]]
53
46
 
54
47
  class LocatedValue
55
48
  end
@@ -0,0 +1,20 @@
1
+ module RBS
2
+ module Prototype
3
+ class NodeUsage
4
+ include Helpers
5
+
6
+ type node = RubyVM::AbstractSyntaxTree::Node
7
+
8
+ attr_reader node: node
9
+
10
+ attr_reader conditional_nodes: Set[node]
11
+
12
+ def initialize: (node) -> void
13
+
14
+ def calculate: (node, conditional: bool) -> void
15
+
16
+ def each_conditional_node: () { (node) -> void } -> void
17
+ | () -> Enumerator[node, void]
18
+ end
19
+ end
20
+ end
@@ -37,7 +37,7 @@ module RBS
37
37
 
38
38
  def constant_of_module: (TypeName name, Environment::ClassEntry | Environment::ModuleEntry) -> Constant
39
39
 
40
- def constant_of_constant: (TypeName name, Environment::SingleEntry[TypeName, AST::Declarations::Constant]) -> Constant
40
+ def constant_of_constant: (TypeName name, Environment::ConstantEntry) -> Constant
41
41
  end
42
42
 
43
43
  attr_reader builder: DefinitionBuilder
@@ -65,7 +65,6 @@ module RBS
65
65
  # ^ <- constant_name
66
66
  # ```
67
67
  #
68
- # Find the
69
68
  def resolve_child: (TypeName module_name, Symbol constant_name) -> Constant?
70
69
 
71
70
  # Returns the table of all constants accessible with `::` (colon2) operator.
@@ -0,0 +1,31 @@
1
+ module Bundler
2
+ class LockfileParser
3
+ def initialize: (String) -> void
4
+
5
+ def specs: () -> Array[LazySpecification]
6
+ end
7
+
8
+ class LazySpecification
9
+ def name: () -> String
10
+
11
+ def version: () -> String
12
+
13
+ def dependencies: () -> Array[Gem::Dependency]
14
+ end
15
+
16
+ class Dependency < Gem::Dependency
17
+ attr_reader autorequire: Array[String]?
18
+ end
19
+
20
+ class Definition
21
+ def lockfile: () -> Pathname
22
+
23
+ def locked_gems: () -> LockfileParser
24
+
25
+ def dependencies: () -> Array[Dependency]
26
+ end
27
+
28
+ def self.default_lockfile: () -> Pathname
29
+
30
+ def self.definition: () -> Definition
31
+ end
@@ -0,0 +1,15 @@
1
+ module Gem
2
+ class Specification
3
+ attr_reader version (): Version
4
+
5
+ attr_reader gem_dir (): String
6
+
7
+ def self.find_by_name: (String name, *String requirements) -> instance
8
+
9
+ def dependencies: () -> Array[Dependency]
10
+ end
11
+
12
+ class Dependency
13
+ def name: () -> String
14
+ end
15
+ end
data/sig/shims.rbs CHANGED
@@ -1,25 +1,3 @@
1
- module Gem
2
- class Specification
3
- attr_reader version (): Version
4
-
5
- attr_reader gem_dir (): String
6
-
7
- def self.find_by_name: (String name, *String requirements) -> instance
8
- end
9
- end
10
-
11
- module Bundler
12
- class LockfileParser
13
- def initialize: (String) -> void
14
- def specs: () -> Array[LazySpecification]
15
- end
16
-
17
- class LazySpecification
18
- def name: () -> String
19
- def version: () -> String
20
- end
21
- end
22
-
23
1
  module RDoc
24
2
  class Store
25
3
  def initialize: (?String? path, ?Symbol? type) -> void
data/sig/substitution.rbs CHANGED
@@ -38,5 +38,11 @@ module RBS
38
38
 
39
39
  # Returns true if given substitution is identity.
40
40
  def empty?: () -> bool
41
+
42
+ alias [] apply
43
+
44
+ # (s1 + s2)[t] == s2[s1[t]]
45
+ #
46
+ def +: (Substitution) -> Substitution
41
47
  end
42
48
  end
data/sig/use_map.rbs ADDED
@@ -0,0 +1,35 @@
1
+ module RBS
2
+ class Environment
3
+ # ```rb
4
+ # map = UseMap.build(environment)
5
+ #
6
+ # map.resolve?(TypeName("TN")) # => nil or resolved type name
7
+ # ```
8
+ #
9
+ class UseMap
10
+ class Table
11
+ attr_reader known_types: Set[TypeName]
12
+
13
+ attr_reader children: Hash[Namespace, Set[TypeName]]
14
+
15
+ def initialize: () -> void
16
+
17
+ def compute_children: () -> self
18
+ end
19
+
20
+ attr_reader use_dirs: Array[AST::Directives::Use]
21
+
22
+ @map: Hash[Symbol, TypeName]
23
+
24
+ @table: Table
25
+
26
+ def initialize: (table: Table) -> void
27
+
28
+ def resolve?: (TypeName) -> TypeName?
29
+
30
+ def resolve: (TypeName) -> TypeName
31
+
32
+ def build_map: (AST::Directives::Use::clause) -> self
33
+ end
34
+ end
35
+ end
data/sig/validator.rbs CHANGED
@@ -2,7 +2,7 @@ module RBS
2
2
  class Validator
3
3
  attr_reader env: Environment
4
4
 
5
- attr_reader resolver: TypeNameResolver
5
+ attr_reader resolver: Resolver::TypeNameResolver
6
6
 
7
7
  attr_reader definition_builder: DefinitionBuilder
8
8
 
@@ -10,11 +10,11 @@ module RBS
10
10
 
11
11
  attr_reader type_alias_regularity: TypeAliasRegularity
12
12
 
13
- def initialize: (env: Environment, resolver: TypeNameResolver) -> void
13
+ def initialize: (env: Environment, resolver: Resolver::TypeNameResolver) -> void
14
14
 
15
15
  # Validates the presence of type names and type application arity match.
16
16
  #
17
- def validate_type: (Types::t, context: TypeNameResolver::context) -> void
17
+ def validate_type: (Types::t, context: Resolver::context) -> void
18
18
 
19
19
  # Validates type alias definition:
20
20
  #
@@ -25,7 +25,7 @@ module RBS
25
25
  #
26
26
  # It yields the rhs type if block is given, so that you can validate the rhs type.
27
27
  #
28
- def validate_type_alias: (entry: Environment::SingleEntry[TypeName, AST::Declarations::Alias]) ?{ (Types::t rhs_type) -> void } -> void
28
+ def validate_type_alias: (entry: Environment::TypeAliasEntry) ?{ (Types::t rhs_type) -> void } -> void
29
29
 
30
30
  # Validates the type parameters in generic methods.
31
31
  #
@@ -42,11 +42,18 @@ module RBS
42
42
  #
43
43
  def validate_type_params: (Array[AST::TypeParam] params, type_name: TypeName, ?method_name: Symbol?, location: Location[untyped, untyped]?) -> void
44
44
 
45
+ # Validates class alias declaration
46
+ #
47
+ # - The right hand side can be normalized
48
+ # - No mixing alias declaration between class and modules
49
+ #
50
+ def validate_class_alias: (entry: Environment::ClassAliasEntry | Environment::ModuleAliasEntry) -> void
51
+
45
52
  private
46
53
 
47
54
  # Resolves relative type names to absolute type names in given context.
48
55
  # Yields the type when the type name resolution using `#resolver` fails.
49
56
  #
50
- def absolute_type: (Types::t, context: TypeNameResolver::context) { (Types::t) -> TypeName } -> Types::t
57
+ def absolute_type: (Types::t, context: Resolver::context) { (Types::t) -> TypeName } -> Types::t
51
58
  end
52
59
  end