rbs 0.11.0 → 0.13.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 +9 -9
- data/CHANGELOG.md +24 -0
- data/Rakefile +16 -6
- data/Steepfile +28 -0
- data/bin/steep +4 -0
- data/bin/test_runner.rb +7 -5
- data/lib/rbs/ast/comment.rb +7 -1
- data/lib/rbs/ast/declarations.rb +15 -9
- data/lib/rbs/buffer.rb +1 -1
- data/lib/rbs/cli.rb +12 -4
- data/lib/rbs/constant.rb +1 -1
- data/lib/rbs/constant_table.rb +9 -8
- data/lib/rbs/definition.rb +22 -13
- data/lib/rbs/definition_builder.rb +79 -55
- data/lib/rbs/environment.rb +28 -10
- data/lib/rbs/environment_loader.rb +12 -12
- data/lib/rbs/location.rb +1 -5
- data/lib/rbs/method_type.rb +5 -5
- data/lib/rbs/namespace.rb +14 -3
- data/lib/rbs/parser.y +0 -8
- data/lib/rbs/prototype/rb.rb +3 -4
- data/lib/rbs/prototype/rbi.rb +1 -2
- data/lib/rbs/substitution.rb +4 -3
- data/lib/rbs/type_name.rb +18 -1
- data/lib/rbs/type_name_resolver.rb +10 -3
- data/lib/rbs/types.rb +27 -21
- data/lib/rbs/variance_calculator.rb +9 -6
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +25 -15
- data/sig/annotation.rbs +26 -0
- data/sig/buffer.rbs +28 -0
- data/sig/builtin_names.rbs +41 -0
- data/sig/comment.rbs +26 -0
- data/sig/constant.rbs +21 -0
- data/sig/constant_table.rbs +30 -0
- data/sig/declarations.rbs +202 -0
- data/sig/definition.rbs +129 -0
- data/sig/definition_builder.rbs +94 -0
- data/sig/environment.rbs +94 -0
- data/sig/environment_loader.rbs +58 -0
- data/sig/location.rbs +52 -0
- data/sig/members.rbs +160 -0
- data/sig/method_types.rbs +40 -0
- data/sig/namespace.rbs +124 -0
- data/sig/polyfill.rbs +3 -0
- data/sig/rbs.rbs +3 -0
- data/sig/substitution.rbs +39 -0
- data/sig/type_name_resolver.rbs +24 -0
- data/sig/typename.rbs +70 -0
- data/sig/types.rbs +361 -0
- data/sig/util.rbs +13 -0
- data/sig/variance_calculator.rbs +35 -0
- data/sig/version.rbs +3 -0
- data/sig/writer.rbs +40 -0
- data/stdlib/bigdecimal/big_decimal.rbs +887 -0
- data/stdlib/bigdecimal/math/big_math.rbs +142 -0
- data/stdlib/builtin/builtin.rbs +0 -3
- data/stdlib/builtin/kernel.rbs +2 -0
- data/stdlib/builtin/math.rbs +26 -26
- data/stdlib/builtin/struct.rbs +9 -10
- data/stdlib/forwardable/forwardable.rbs +204 -0
- data/stdlib/pathname/pathname.rbs +2 -0
- data/stdlib/pty/pty.rbs +5 -29
- data/stdlib/set/set.rbs +1 -1
- data/stdlib/uri/file.rbs +167 -0
- data/stdlib/uri/generic.rbs +875 -0
- data/stdlib/uri/http.rbs +158 -0
- data/stdlib/uri/https.rbs +108 -0
- data/stdlib/uri/ldap.rbs +224 -0
- data/stdlib/uri/ldaps.rbs +108 -0
- data/steep/Gemfile +3 -0
- data/steep/Gemfile.lock +51 -0
- metadata +43 -5
@@ -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
|
-
|
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(
|
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,19 +113,20 @@ module RBS
|
|
113
113
|
|
114
114
|
type_params = case type
|
115
115
|
when Types::ClassInstance
|
116
|
-
env.class_decls[type.name]
|
116
|
+
env.class_decls[type.name].type_params
|
117
117
|
when Types::Interface
|
118
|
-
env.interface_decls[type.name]
|
118
|
+
env.interface_decls[type.name].decl.type_params
|
119
119
|
end
|
120
120
|
|
121
121
|
type.args.each.with_index do |ty, i|
|
122
122
|
var = type_params.params[i]
|
123
|
-
case var
|
123
|
+
case var&.variance
|
124
124
|
when :invariant
|
125
125
|
type(ty, result: result, context: :invariant)
|
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
|
data/lib/rbs/version.rb
CHANGED
data/lib/rbs/writer.rb
CHANGED
@@ -60,6 +60,8 @@ module RBS
|
|
60
60
|
|
61
61
|
def write(decls)
|
62
62
|
[nil, *decls].each_cons(2) do |prev, decl|
|
63
|
+
raise unless decl
|
64
|
+
|
63
65
|
preserve_empty_line(prev, decl)
|
64
66
|
write_decl decl
|
65
67
|
end
|
@@ -68,8 +70,8 @@ module RBS
|
|
68
70
|
def write_decl(decl)
|
69
71
|
case decl
|
70
72
|
when AST::Declarations::Class
|
71
|
-
super_class = if decl.super_class
|
72
|
-
" < #{name_and_args(
|
73
|
+
super_class = if super_class = decl.super_class
|
74
|
+
" < #{name_and_args(super_class.name, super_class.args)}"
|
73
75
|
end
|
74
76
|
write_comment decl.comment
|
75
77
|
write_annotation decl.annotations
|
@@ -77,6 +79,8 @@ module RBS
|
|
77
79
|
|
78
80
|
indent do
|
79
81
|
[nil, *decl.members].each_cons(2) do |prev, member|
|
82
|
+
raise unless member
|
83
|
+
|
80
84
|
preserve_empty_line prev, member
|
81
85
|
write_member member
|
82
86
|
end
|
@@ -134,9 +138,6 @@ module RBS
|
|
134
138
|
|
135
139
|
puts "end"
|
136
140
|
|
137
|
-
when AST::Declarations::Extension
|
138
|
-
RBS.logger.warn "Extension is ignored: #{decl.name}"
|
139
|
-
|
140
141
|
end
|
141
142
|
end
|
142
143
|
|
@@ -288,20 +289,29 @@ module RBS
|
|
288
289
|
end
|
289
290
|
|
290
291
|
def preserve_empty_line(prev, decl)
|
291
|
-
|
292
|
+
# @type var decl: _Located
|
292
293
|
|
293
|
-
|
294
|
+
return unless prev
|
294
295
|
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
return
|
296
|
+
if (_ = decl).respond_to?(:comment)
|
297
|
+
if comment = (_ = decl).comment
|
298
|
+
decl = comment
|
299
|
+
end
|
300
300
|
end
|
301
301
|
|
302
|
-
|
303
|
-
|
304
|
-
|
302
|
+
prev_loc = prev.location
|
303
|
+
decl_loc = decl.location
|
304
|
+
|
305
|
+
if prev_loc && decl_loc
|
306
|
+
prev_end_line = prev_loc.end_line
|
307
|
+
start_line = decl_loc.start_line
|
308
|
+
|
309
|
+
if start_line - prev_end_line > 1
|
310
|
+
puts
|
311
|
+
end
|
312
|
+
else
|
313
|
+
# When the signature is not constructed by the parser,
|
314
|
+
# it always inserts an empty line.
|
305
315
|
puts
|
306
316
|
end
|
307
317
|
end
|
data/sig/annotation.rbs
ADDED
@@ -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
|
data/sig/buffer.rbs
ADDED
@@ -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
|
data/sig/comment.rbs
ADDED
@@ -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
|
data/sig/constant.rbs
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module RBS
|
2
|
+
class Constant
|
3
|
+
type constant_entry = Environment::ClassEntry
|
4
|
+
| Environment::ModuleEntry
|
5
|
+
| Environment::SingleEntry[TypeName, AST::Declarations::Constant]
|
6
|
+
|
7
|
+
attr_reader name: TypeName
|
8
|
+
|
9
|
+
attr_reader type: Types::t
|
10
|
+
|
11
|
+
attr_reader entry: constant_entry
|
12
|
+
|
13
|
+
def initialize: (name: TypeName, type: Types::t, entry: constant_entry) -> void
|
14
|
+
|
15
|
+
def ==: (untyped other) -> bool
|
16
|
+
|
17
|
+
alias eql? ==
|
18
|
+
|
19
|
+
def hash: () -> Integer
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module RBS
|
2
|
+
class ConstantTable
|
3
|
+
attr_reader definition_builder: DefinitionBuilder
|
4
|
+
attr_reader constant_scopes_cache: Hash[TypeName, Array[Namespace]]
|
5
|
+
attr_reader resolver: TypeNameResolver
|
6
|
+
attr_reader env(): Environment
|
7
|
+
|
8
|
+
def initialize: (builder: DefinitionBuilder) -> void
|
9
|
+
|
10
|
+
def absolute_type: (Types::t, context: Array[Namespace]) -> Types::t
|
11
|
+
|
12
|
+
def absolute_type_name: (TypeName, context: Array[Namespace], location: Location?) -> TypeName
|
13
|
+
|
14
|
+
def name_to_constant: (TypeName) -> Constant?
|
15
|
+
|
16
|
+
def split_name: (TypeName) -> Array[Symbol]
|
17
|
+
|
18
|
+
def resolve_constant_reference: (TypeName name, context: Array[Namespace]) -> Constant?
|
19
|
+
|
20
|
+
def resolve_constant_reference_context: (Symbol, context: Array[Namespace]) -> Constant?
|
21
|
+
|
22
|
+
def resolve_constant_reference_inherit: (Symbol, scopes: Array[Namespace], ?no_object: bool) -> Constant?
|
23
|
+
|
24
|
+
def constant_scopes: (TypeName) -> Array[Namespace]
|
25
|
+
|
26
|
+
def constant_scopes_module: (TypeName, scopes: Array[Namespace]) -> Array[Namespace]
|
27
|
+
|
28
|
+
def constant_scopes0: (TypeName, ?scopes: Array[Namespace]) -> Array[Namespace]
|
29
|
+
end
|
30
|
+
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
|