Skip to content

Commit 4df2368

Browse files
authored
Manage the types of RBS keyword args as Array instead of Hash (#366)
Fixes #361
1 parent 29d382a commit 4df2368

3 files changed

Lines changed: 40 additions & 13 deletions

File tree

lib/typeprof/core/ast/sig_type.rb

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,19 @@ def initialize(raw_decl, raw_type_params, raw_block, lenv)
108108
param = raw_decl.type.rest_positionals
109109
@rest_positionals = param ? AST.create_rbs_type(param.type, lenv) : nil
110110

111-
@req_keywords = raw_decl.type.required_keywords.to_h do |key, ty|
111+
@req_keyword_keys = []
112+
@req_keyword_values = []
113+
raw_decl.type.required_keywords.each do |key, ty|
112114
raise "unsupported argument type: #{ ty.class }" if !ty.is_a?(RBS::Types::Function::Param)
113-
[key, AST.create_rbs_type(ty.type, lenv)]
115+
@req_keyword_keys << key
116+
@req_keyword_values << AST.create_rbs_type(ty.type, lenv)
114117
end
115-
@opt_keywords = raw_decl.type.optional_keywords.to_h do |key, ty|
118+
@opt_keyword_keys = []
119+
@opt_keyword_values = []
120+
raw_decl.type.optional_keywords.each do |key, ty|
116121
raise "unsupported argument type: #{ ty.class }" if !ty.is_a?(RBS::Types::Function::Param)
117-
[key, AST.create_rbs_type(ty.type, lenv)]
122+
@opt_keyword_keys << key
123+
@opt_keyword_values << AST.create_rbs_type(ty.type, lenv)
118124
end
119125
param = raw_decl.type.rest_keywords
120126
@rest_keywords = param ? AST.create_rbs_type(param.type, lenv) : nil
@@ -124,8 +130,10 @@ def initialize(raw_decl, raw_type_params, raw_block, lenv)
124130
@post_positionals = []
125131
@opt_positionals = []
126132
@rest_positionals = SigTyBaseAnyNode.new(raw_decl, lenv)
127-
@req_keywords = {}
128-
@opt_keywords = {}
133+
@req_keyword_keys = []
134+
@req_keyword_values = []
135+
@opt_keyword_keys = []
136+
@opt_keyword_values = []
129137
@rest_keywords = nil
130138
end
131139

@@ -137,8 +145,10 @@ def initialize(raw_decl, raw_type_params, raw_block, lenv)
137145
attr_reader :post_positionals
138146
attr_reader :opt_positionals
139147
attr_reader :rest_positionals
140-
attr_reader :req_keywords
141-
attr_reader :opt_keywords
148+
attr_reader :req_keyword_keys
149+
attr_reader :req_keyword_values
150+
attr_reader :opt_keyword_keys
151+
attr_reader :opt_keyword_values
142152
attr_reader :rest_keywords
143153
attr_reader :return_type
144154

@@ -148,12 +158,17 @@ def subnodes = {
148158
post_positionals:,
149159
opt_positionals:,
150160
rest_positionals:,
151-
req_keywords:,
152-
opt_keywords:,
161+
req_keyword_values:,
162+
opt_keyword_values:,
153163
rest_keywords:,
154164
return_type:,
155165
}
156-
def attrs = { type_params:, block_required: }
166+
def attrs = {
167+
type_params:,
168+
req_keyword_keys:,
169+
opt_keyword_keys:,
170+
block_required:,
171+
}
157172
end
158173

159174
class SigTyNode < Node

lib/typeprof/core/graph/box.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,10 +279,10 @@ def show
279279
args << arg.show
280280
end
281281

282-
method_type.req_keywords.each do |key, arg|
282+
method_type.req_keyword_keys.zip(method_type.req_keyword_values) do |key, arg|
283283
args << "#{ key }: #{arg.show}"
284284
end
285-
method_type.opt_keywords.each do |key, arg|
285+
method_type.opt_keyword_keys.zip(method_type.opt_keyword_values) do |key, arg|
286286
args << "?#{ key }: #{arg.show}"
287287
end
288288
if method_type.rest_keywords
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
## update
2+
#: (b: untyped) -> nil
3+
def a(b:); end
4+
5+
## update
6+
#: (b: untyped) -> nil
7+
def a(b:); end
8+
9+
## assert
10+
class Object
11+
def a: (b: untyped) -> nil
12+
end

0 commit comments

Comments
 (0)