rbs 0.11.0 → 0.12.0

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Rakefile +9 -4
  4. data/Steepfile +28 -0
  5. data/bin/steep +4 -0
  6. data/bin/test_runner.rb +10 -5
  7. data/lib/rbs/ast/comment.rb +7 -1
  8. data/lib/rbs/ast/declarations.rb +15 -9
  9. data/lib/rbs/buffer.rb +1 -1
  10. data/lib/rbs/definition.rb +22 -13
  11. data/lib/rbs/definition_builder.rb +79 -55
  12. data/lib/rbs/environment.rb +24 -10
  13. data/lib/rbs/location.rb +1 -5
  14. data/lib/rbs/method_type.rb +5 -5
  15. data/lib/rbs/namespace.rb +14 -3
  16. data/lib/rbs/parser.y +0 -8
  17. data/lib/rbs/prototype/rb.rb +3 -4
  18. data/lib/rbs/prototype/rbi.rb +1 -2
  19. data/lib/rbs/substitution.rb +4 -3
  20. data/lib/rbs/type_name.rb +18 -1
  21. data/lib/rbs/type_name_resolver.rb +10 -3
  22. data/lib/rbs/types.rb +27 -21
  23. data/lib/rbs/variance_calculator.rb +8 -5
  24. data/lib/rbs/version.rb +1 -1
  25. data/sig/annotation.rbs +26 -0
  26. data/sig/buffer.rbs +28 -0
  27. data/sig/builtin_names.rbs +41 -0
  28. data/sig/comment.rbs +26 -0
  29. data/sig/declarations.rbs +202 -0
  30. data/sig/definition.rbs +129 -0
  31. data/sig/definition_builder.rbs +95 -0
  32. data/sig/environment.rbs +94 -0
  33. data/sig/environment_loader.rbs +4 -0
  34. data/sig/location.rbs +52 -0
  35. data/sig/members.rbs +160 -0
  36. data/sig/method_types.rbs +40 -0
  37. data/sig/namespace.rbs +124 -0
  38. data/sig/polyfill.rbs +3 -0
  39. data/sig/rbs.rbs +3 -0
  40. data/sig/substitution.rbs +39 -0
  41. data/sig/type_name_resolver.rbs +24 -0
  42. data/sig/typename.rbs +70 -0
  43. data/sig/types.rbs +361 -0
  44. data/sig/util.rbs +13 -0
  45. data/sig/variance_calculator.rbs +35 -0
  46. data/stdlib/bigdecimal/big_decimal.rbs +887 -0
  47. data/stdlib/bigdecimal/math/big_math.rbs +142 -0
  48. data/stdlib/builtin/builtin.rbs +0 -3
  49. data/stdlib/builtin/math.rbs +26 -26
  50. data/stdlib/builtin/struct.rbs +9 -10
  51. data/stdlib/forwardable/forwardable.rbs +204 -0
  52. data/stdlib/set/set.rbs +1 -1
  53. data/stdlib/uri/file.rbs +167 -0
  54. data/stdlib/uri/generic.rbs +875 -0
  55. data/steep/Gemfile +3 -0
  56. data/steep/Gemfile.lock +55 -0
  57. metadata +36 -6
@@ -73,11 +73,11 @@ module RBS
73
73
  type(param.type, result: result, context: :contravariant)
74
74
  end
75
75
 
76
- if method_type.block
77
- method_type.block.type.each_param do |param|
76
+ if block = method_type.block
77
+ block.type.each_param do |param|
78
78
  type(param.type, result: result, context: :covariant)
79
79
  end
80
- type(method_type.block.type.return_type, result: result, context: :contravariant)
80
+ type(block.type.return_type, result: result, context: :contravariant)
81
81
  end
82
82
 
83
83
  type(method_type.type.return_type, result: result, context: :covariant)
@@ -113,9 +113,9 @@ module RBS
113
113
 
114
114
  type_params = case type
115
115
  when Types::ClassInstance
116
- env.class_decls[type.name]&.type_params
116
+ env.class_decls[type.name].type_params
117
117
  when Types::Interface
118
- env.interface_decls[type.name]&.decl&.type_params
118
+ env.interface_decls[type.name].decl.type_params
119
119
  end
120
120
 
121
121
  type.args.each.with_index do |ty, i|
@@ -126,6 +126,7 @@ module RBS
126
126
  when :covariant
127
127
  type(ty, result: result, context: context)
128
128
  when :contravariant
129
+ # @type var con: variance
129
130
  con = case context
130
131
  when :invariant
131
132
  :invariant
@@ -133,6 +134,8 @@ module RBS
133
134
  :contravariant
134
135
  when :contravariant
135
136
  :covariant
137
+ else
138
+ raise
136
139
  end
137
140
  type(ty, result: result, context: con)
138
141
  end
@@ -1,3 +1,3 @@
1
1
  module RBS
2
- VERSION = "0.11.0"
2
+ VERSION = "0.12.0"
3
3
  end
@@ -0,0 +1,26 @@
1
+ module RBS
2
+ module AST
3
+ # RBS allows writing annotations of declarations and members.
4
+ #
5
+ # %a{annotation_here}
6
+ # class Hello
7
+ # %a{rbs:test:skip}
8
+ # def foo: () -> void
9
+ # end
10
+ #
11
+ class Annotation
12
+ attr_reader string: String
13
+ attr_reader location: Location?
14
+
15
+ def initialize: (string: String, location: Location?) -> void
16
+
17
+ def ==: (untyped other) -> bool
18
+
19
+ alias eql? ==
20
+
21
+ def hash: () -> Integer
22
+
23
+ def to_json: (*untyped) -> String
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ module RBS
2
+ class Buffer
3
+ # Location in a buffer.
4
+ # A pair of line number (1 origin) and column number (0 origin).
5
+ #
6
+ type loc = [Integer, Integer]
7
+
8
+ # Name to identify Buffer.
9
+ attr_reader name: untyped
10
+
11
+ # The content of the buffer.
12
+ attr_reader content: String
13
+
14
+ attr_reader lines: Array[String]
15
+
16
+ attr_reader ranges: Array[Range[Integer]]
17
+
18
+ def initialize: (name: untyped name, content: String content) -> void
19
+
20
+ # Translate position to location.
21
+ def pos_to_loc: (Integer pos) -> loc
22
+
23
+ # Translate location to position.
24
+ def loc_to_pos: (loc loc) -> Integer
25
+
26
+ def last_position: () -> Integer
27
+ end
28
+ end
@@ -0,0 +1,41 @@
1
+ module RBS
2
+ module BuiltinNames
3
+ class Name
4
+ attr_reader name: TypeName
5
+
6
+ def initialize: (name: TypeName) -> void
7
+
8
+ def to_s: () -> String
9
+
10
+ def instance_type: (*Types::t) -> Types::ClassInstance
11
+
12
+ def instance_type?: (Types::t) -> bool
13
+
14
+ def singleton_type: () -> Types::ClassSingleton
15
+
16
+ def singleton_type?: (Types::t) -> bool
17
+
18
+ def self.define: (Symbol, ?namespace: Namespace) -> instance
19
+ end
20
+
21
+ BasicObject: Name
22
+ Object: Name
23
+ Kernel: Name
24
+ String: Name
25
+ Comparable: Name
26
+ Enumerable: Name
27
+ Class: Name
28
+ Module: Name
29
+ Array: Name
30
+ Hash: Name
31
+ Range: Name
32
+ Enumerator: Name
33
+ Set: Name
34
+ Symbol: Name
35
+ Integer: Name
36
+ Float: Name
37
+ Regexp: Name
38
+ TrueClass: Name
39
+ FalseClass: Name
40
+ end
41
+ end
@@ -0,0 +1,26 @@
1
+ module RBS
2
+ module AST
3
+ # RBS allows writing documentation of declarations and members.
4
+ #
5
+ # # This is a doc for class.
6
+ # class Hello
7
+ # end
8
+ #
9
+ class Comment
10
+ attr_reader string: String
11
+ attr_reader location: Location?
12
+
13
+ def initialize: (string: String, location: Location?) -> void
14
+
15
+ def ==: (untyped other) -> bool
16
+
17
+ alias eql? ==
18
+
19
+ def hash: () -> Integer
20
+
21
+ def to_json: (*untyped) -> String
22
+
23
+ def concat: (string: String, location: Location?) -> self
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,202 @@
1
+ module RBS
2
+ module AST
3
+ module Declarations
4
+ type t = Class | Module | Interface | Constant | Global | Alias
5
+
6
+ class Base
7
+ end
8
+
9
+ type variance = :invariant | :covariant | :contravariant
10
+
11
+ class ModuleTypeParams
12
+ class TypeParam
13
+ attr_reader name: Symbol
14
+ attr_reader variance: variance
15
+ attr_reader skip_validation: bool
16
+
17
+ def initialize: (name: Symbol, variance: variance, skip_validation: bool) -> void
18
+
19
+ include _ToJson
20
+ end
21
+
22
+ attr_reader params: Array[TypeParam]
23
+
24
+ def initialize: () -> void
25
+
26
+ def add: (TypeParam param) -> self
27
+
28
+ include _HashEqual
29
+ include _ToJson
30
+
31
+ def []: (Symbol) -> TypeParam?
32
+
33
+ def each: { (TypeParam) -> void } -> void
34
+ | () -> Enumerator[TypeParam, void]
35
+
36
+ def self.empty: () -> instance
37
+
38
+ def variance: (Symbol) -> variance
39
+
40
+ def skip_validation?: (Symbol) -> bool
41
+
42
+ def empty?: () -> bool
43
+
44
+ def size: () -> Integer
45
+
46
+ def rename_to: (Array[Symbol] names) -> ModuleTypeParams
47
+ end
48
+
49
+ interface _WithMember
50
+ def members: () -> Array[untyped]
51
+ end
52
+
53
+ module NestedDeclarationHelper : _WithMember
54
+ def each_member: () { (Members::t) -> void } -> void
55
+ | () -> Enumerator[Members::t, void]
56
+
57
+ def each_decl: () { (t) -> void } -> void
58
+ | () -> Enumerator[t, void]
59
+ end
60
+
61
+ module MixinHelper : _WithMember
62
+ type mixin_member = Members::Include | Members::Extend | Members::Prepend
63
+
64
+ @mixins: Array[mixin_member]
65
+
66
+ def each_mixin: () { (mixin_member) -> void } -> void
67
+ | () -> Enumerator[mixin_member, void]
68
+ end
69
+
70
+ class Class < Base
71
+ type member = Members::t | t
72
+
73
+ class Super
74
+ attr_reader name: TypeName
75
+ attr_reader args: Array[Types::t]
76
+
77
+ def initialize: (name: TypeName, args: Array[Types::t]) -> void
78
+
79
+ include _HashEqual
80
+ include _ToJson
81
+ end
82
+
83
+ include NestedDeclarationHelper
84
+ include MixinHelper
85
+
86
+ attr_reader name: TypeName
87
+ attr_reader type_params: ModuleTypeParams
88
+ attr_reader members: Array[member]
89
+ attr_reader super_class: Super?
90
+ attr_reader annotations: Array[Annotation]
91
+ attr_reader location: Location?
92
+ attr_reader comment: Comment?
93
+
94
+ def initialize: (name: TypeName, type_params: ModuleTypeParams, members: Array[member], super_class: Super?, annotations: Array[Annotation], location: Location?, comment: Comment?) -> void
95
+
96
+ include _HashEqual
97
+ include _ToJson
98
+ end
99
+
100
+ class Module < Base
101
+ type member = Members::t | t
102
+
103
+ class Self
104
+ attr_reader name: TypeName
105
+ attr_reader args: Array[Types::t]
106
+ attr_reader location: Location?
107
+
108
+ def initialize: (name: TypeName, args: Array[Types::t], location: Location?) -> void
109
+
110
+ include _HashEqual
111
+ include _ToJson
112
+
113
+ def to_s: () -> String
114
+ end
115
+
116
+ include NestedDeclarationHelper
117
+ include MixinHelper
118
+
119
+ attr_reader name: TypeName
120
+ attr_reader type_params: ModuleTypeParams
121
+ attr_reader members: Array[member]
122
+ attr_reader location: Location?
123
+ attr_reader annotations: Array[Annotation]
124
+ attr_reader self_types: Array[Self]
125
+ attr_reader comment: Comment?
126
+
127
+ def initialize: (name: TypeName, type_params: ModuleTypeParams, members: Array[member], location: Location?, annotations: Array[Annotation], self_types: Array[Self], comment: Comment?) -> void
128
+
129
+ include _HashEqual
130
+ include _ToJson
131
+ end
132
+
133
+ class Extension < Base
134
+ attr_reader name: TypeName
135
+ attr_reader type_params: ModuleTypeParams
136
+ attr_reader extension_name: Symbol
137
+ attr_reader members: Array[Members::t]
138
+ attr_reader annotations: Array[Annotation]
139
+ attr_reader location: Location?
140
+ attr_reader comment: Comment?
141
+
142
+ def initialize: (name: TypeName, type_params: ModuleTypeParams, extension_name: Symbol, members: Array[Members::t], annotations: Array[Annotation], location: Location?, comment: Comment?) -> void
143
+
144
+ include _HashEqual
145
+ include _ToJson
146
+ end
147
+
148
+ class Interface
149
+ type member = Members::t
150
+
151
+ attr_reader name: TypeName
152
+ attr_reader type_params: ModuleTypeParams
153
+ attr_reader members: Array[member]
154
+ attr_reader annotations: Array[Annotation]
155
+ attr_reader location: Location?
156
+ attr_reader comment: Comment?
157
+
158
+ def initialize: (name: TypeName, type_params: ModuleTypeParams, members: Array[member], annotations: Array[Annotation], location: Location?, comment: Comment?) -> void
159
+
160
+ include _HashEqual
161
+ include _ToJson
162
+ end
163
+
164
+ class Alias < Base
165
+ attr_reader name: TypeName
166
+ attr_reader type: Types::t
167
+ attr_reader annotations: Array[Annotation]
168
+ attr_reader location: Location?
169
+ attr_reader comment: Comment?
170
+
171
+ def initialize: (name: TypeName, type: Types::t, annotations: Array[Annotation], location: Location?, comment: Comment?) -> void
172
+
173
+ include _HashEqual
174
+ include _ToJson
175
+ end
176
+
177
+ class Constant < Base
178
+ attr_reader name: TypeName
179
+ attr_reader type: Types::t
180
+ attr_reader location: Location?
181
+ attr_reader comment: Comment?
182
+
183
+ def initialize: (name: TypeName, type: Types::t, location: Location?, comment: Comment?) -> void
184
+
185
+ include _HashEqual
186
+ include _ToJson
187
+ end
188
+
189
+ class Global < Base
190
+ attr_reader name: Symbol
191
+ attr_reader type: Types::t
192
+ attr_reader location: Location?
193
+ attr_reader comment: Comment?
194
+
195
+ def initialize: (name: Symbol, type: Types::t, location: Location?, comment: Comment?) -> void
196
+
197
+ include _HashEqual
198
+ include _ToJson
199
+ end
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,129 @@
1
+ module RBS
2
+ class Definition
3
+ type accessibility = :public | :private
4
+
5
+ class Variable
6
+ attr_reader parent_variable: Variable?
7
+ attr_reader type: Types::t
8
+ attr_reader declared_in: TypeName
9
+
10
+ def initialize: (parent_variable: Variable?, type: Types::t, declared_in: TypeName) -> void
11
+
12
+ def sub: (Substitution) -> Variable
13
+ end
14
+
15
+ class Method
16
+ type method_member = AST::Members::MethodDefinition | AST::Members::AttrReader | AST::Members::AttrAccessor | AST::Members::AttrWriter
17
+
18
+ class TypeDef
19
+ attr_reader type: MethodType
20
+ attr_reader member: method_member
21
+ attr_reader defined_in: TypeName?
22
+ attr_reader implemented_in: TypeName?
23
+
24
+ def initialize: (type: MethodType, member: method_member, defined_in: TypeName?, implemented_in: TypeName?) -> void
25
+
26
+ def comment: () -> AST::Comment?
27
+
28
+ def annotations: () -> Array[AST::Annotation]
29
+
30
+ def update: (?type: MethodType, ?member: method_member, ?defined_in: TypeName?, ?implemented_in: TypeName?) -> TypeDef
31
+
32
+ def overload?: () -> bool
33
+ end
34
+
35
+ attr_reader super_method: Method?
36
+ attr_reader defs: Array[TypeDef]
37
+ attr_reader accessibility: accessibility
38
+ attr_reader extra_annotations: Array[AST::Annotation]
39
+ attr_reader defined_in: TypeName?
40
+ attr_reader implemented_in: TypeName?
41
+ attr_reader method_types: Array[MethodType]
42
+ attr_reader comments: Array[AST::Comment]
43
+ attr_reader annotations: Array[AST::Annotation]
44
+ attr_reader members: Array[method_member]
45
+
46
+ def initialize: (super_method: Method?, defs: Array[TypeDef], accessibility: accessibility, ?annotations: Array[AST::Annotation]) -> void
47
+
48
+ def public?: () -> bool
49
+
50
+ def private?: () -> bool
51
+
52
+ def sub: (Substitution) -> Method
53
+
54
+ def map_type: () { (Types::t) -> Types::t } -> Method
55
+
56
+ def map_method_type: () { (MethodType) -> MethodType } -> Method
57
+ end
58
+
59
+ module Ancestor
60
+ type t = Instance | Singleton
61
+
62
+ class Instance
63
+ attr_reader name: TypeName
64
+ attr_reader args: Array[Types::t]
65
+
66
+ def initialize: (name: TypeName, args: Array[Types::t]) -> void
67
+ end
68
+
69
+ class Singleton
70
+ attr_reader name: TypeName
71
+
72
+ def initialize: (name: TypeName) -> void
73
+ end
74
+ end
75
+
76
+ class InstanceAncestors
77
+ attr_reader type_name: TypeName
78
+ attr_reader params: Array[Symbol]
79
+ attr_reader ancestors: Array[Ancestor::t]
80
+
81
+ def initialize: (type_name: TypeName, params: Array[Symbol], ancestors: Array[Ancestor::t]) -> void
82
+
83
+ def apply: (Array[Types::t], location: Location?) -> Array[Ancestor::t]
84
+ end
85
+
86
+ class SingletonAncestors
87
+ attr_reader type_name: TypeName
88
+ attr_reader ancestors: Array[Ancestor::t]
89
+
90
+ def initialize: (type_name: TypeName, ancestors: Array[Ancestor::t]) -> void
91
+ end
92
+
93
+ type self_type = Types::ClassSingleton | Types::ClassInstance | Types::Interface
94
+ type definition_entry = Environment::ModuleEntry | Environment::ClassEntry | Environment::SingleEntry[TypeName, AST::Declarations::Interface]
95
+
96
+ attr_reader type_name: TypeName
97
+ attr_reader entry: definition_entry
98
+ attr_reader ancestors: InstanceAncestors | SingletonAncestors | nil
99
+ attr_reader self_type: self_type
100
+ attr_reader methods: Hash[Symbol, Method]
101
+ attr_reader instance_variables: Hash[Symbol, Variable]
102
+ attr_reader class_variables: Hash[Symbol, Variable]
103
+
104
+ def initialize: (type_name: TypeName, entry: definition_entry, self_type: self_type, ancestors: InstanceAncestors | SingletonAncestors | nil) -> void
105
+
106
+ def class?: () -> bool
107
+
108
+ def module?: () -> bool
109
+
110
+ def interface?: () -> bool
111
+
112
+ def class_type?: () -> bool
113
+
114
+ def instance_type?: () -> bool
115
+
116
+ def interface_type?: () -> bool
117
+
118
+ def type_params: () -> Array[Symbol]
119
+
120
+ def type_params_decl: () -> AST::Declarations::ModuleTypeParams
121
+
122
+ def sub: (Substitution) -> Definition
123
+
124
+ def map_method_type: () { (MethodType) -> MethodType } -> Definition
125
+
126
+ def each_type: () { (Types::t) -> void } -> void
127
+ | () -> Enumerator[Types::t, void]
128
+ end
129
+ end