rbs-inline 0.12.0 → 0.13.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ce83c34652cf8585d8ffda40fb71534b8829cf513395a3bba27f48be42f27d6
4
- data.tar.gz: 0efd8f5ce926b7573c0d12186c8a948883c07df41df6e90681e3ff25cb692ad8
3
+ metadata.gz: e1c716b3ad3ada559f211899b9e5e586729ee2ea8cf58e92825890042098ad9e
4
+ data.tar.gz: c446d657e9846b963b23e07f1935ad80d23a77c82f4a76cf60e7e6cc36f2bff3
5
5
  SHA512:
6
- metadata.gz: 281e0d112f8b1943c2dd8d528a1f53eebf21307212039fbe1db5cef1e1057494e89b656e49cf9a89d51fe8582cd294709e72fc59bdd212874cc42c5eb2bfdac5
7
- data.tar.gz: 72024761def9796f3ba65410308cda068fb46e234696ceecabc201b361c0e8effcfbc02dcb5f5e54f06e6b637c63ad2209b51c9fa8699ef5606644b880dc551a
6
+ metadata.gz: 4925e2fd8a505153c4d5ae56693e29e80033ea78a3ebbe9e3f1ee3d8aab4ff766f7f7919affbfee7b5f48fb13d9d8a50a1a36f98782b3a6fed32e0cb8137065f
7
+ data.tar.gz: b74dd3c230c5095505aac970004177af41efbcf52d485be27f0bc5793647d9f525a583b7879953e5b84a4b3002a3574e661fd6bcb23f446124660384a45dce46
@@ -207,9 +207,27 @@ module RBS
207
207
  end
208
208
 
209
209
  # @rbs %a{pure}
210
- # @rbs return Types::t?
210
+ # @rbs return: Types::t?
211
211
  def literal_type
212
- case node.value
212
+ infer_type_from_node(node.value)
213
+ end
214
+
215
+ # @rbs %a{pure}
216
+ # @rbs return: TypeName?
217
+ def constant_name
218
+ TypeName.new(name: node.name, namespace: Namespace.empty)
219
+ end
220
+
221
+ def start_line #: Integer
222
+ node.location.start_line
223
+ end
224
+
225
+ private
226
+
227
+ # @rbs node: Prism::Node
228
+ # @rbs return: Types::t?
229
+ def infer_type_from_node(node)
230
+ case node
213
231
  when Prism::StringNode, Prism::InterpolatedStringNode
214
232
  BuiltinNames::String.instance_type
215
233
  when Prism::SymbolNode, Prism::InterpolatedSymbolNode
@@ -221,22 +239,79 @@ module RBS
221
239
  when Prism::FloatNode
222
240
  BuiltinNames::Float.instance_type
223
241
  when Prism::ArrayNode
224
- BuiltinNames::Array.instance_type
242
+ infer_array_element_type(node)
225
243
  when Prism::HashNode
226
- BuiltinNames::Hash.instance_type
244
+ infer_hash_element_type(node)
227
245
  when Prism::TrueNode, Prism::FalseNode
228
246
  Types::Bases::Bool.new(location: nil)
229
247
  end
230
248
  end
231
249
 
232
- # @rbs %a{pure}
233
- # @rbs return: TypeName?
234
- def constant_name
235
- TypeName.new(name: node.name, namespace: Namespace.empty)
250
+ # @rbs node: Prism::ArrayNode
251
+ # @rbs return: Types::t
252
+ def infer_array_element_type(node)
253
+ return BuiltinNames::Array.instance_type if node.elements.empty?
254
+
255
+ element_types = [] #: Array[Types::t]
256
+ node.elements.each do |elem|
257
+ type = infer_type_from_node(elem)
258
+ return BuiltinNames::Array.instance_type unless type
259
+ element_types << type
260
+ end
261
+
262
+ element_types.uniq!(&:to_s)
263
+
264
+ # Union types are not currently supported.
265
+ case element_types.size
266
+ when 1
267
+ BuiltinNames::Array.instance_type(element_types.first || raise)
268
+ else
269
+ BuiltinNames::Array.instance_type(
270
+ Types::Bases::Any.new(location: nil)
271
+ )
272
+ end
236
273
  end
237
274
 
238
- def start_line #: Integer
239
- node.location.start_line
275
+ # @rbs node: Prism::HashNode
276
+ # @rbs return: Types::t
277
+ def infer_hash_element_type(node)
278
+ return BuiltinNames::Hash.instance_type if node.elements.empty?
279
+
280
+ key_types = [] #: Array[Types::t]
281
+ value_types = [] #: Array[Types::t]
282
+
283
+ node.elements.each do |elem|
284
+ case elem
285
+ when Prism::AssocNode
286
+ key_type = infer_type_from_node(elem.key)
287
+ value_type = infer_type_from_node(elem.value)
288
+ return BuiltinNames::Hash.instance_type unless key_type && value_type
289
+ key_types << key_type
290
+ value_types << value_type
291
+ else
292
+ return BuiltinNames::Hash.instance_type
293
+ end
294
+ end
295
+
296
+ key_types.uniq!(&:to_s)
297
+ value_types.uniq!(&:to_s)
298
+
299
+ # Union types are not currently supported.
300
+ key_type = case key_types.size
301
+ when 1
302
+ key_types.first || raise
303
+ else
304
+ Types::Bases::Any.new(location: nil)
305
+ end
306
+
307
+ value_type = case value_types.size
308
+ when 1
309
+ value_types.first || raise
310
+ else
311
+ Types::Bases::Any.new(location: nil)
312
+ end
313
+
314
+ BuiltinNames::Hash.instance_type(key_type, value_type)
240
315
  end
241
316
  end
242
317
 
@@ -69,8 +69,8 @@ module RBS
69
69
  instance.comments[result.line_range.end] = result
70
70
  end
71
71
 
72
- with_enable_magic_comment = result.comments.any? {|comment| comment.location.slice =~ /\A# rbs_inline: enabled\Z/}
73
- with_disable_magic_comment = result.comments.any? {|comment| comment.location.slice =~ /\A# rbs_inline: disabled\Z/}
72
+ with_enable_magic_comment = result.comments.any? {|comment| comment.location.slice =~ /\A# rbs_inline: enabled\R?\z/}
73
+ with_disable_magic_comment = result.comments.any? {|comment| comment.location.slice =~ /\A# rbs_inline: disabled\R?\z/}
74
74
 
75
75
  return if with_disable_magic_comment # Skips if `rbs_inline: disabled`
76
76
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RBS
4
4
  module Inline
5
- VERSION = "0.12.0"
5
+ VERSION = "0.13.0"
6
6
  end
7
7
  end
@@ -189,7 +189,8 @@ module RBS
189
189
  name: decl.constant_name,
190
190
  type: constant_decl_to_type(decl),
191
191
  comment: comment,
192
- location: nil
192
+ location: nil,
193
+ annotations: []
193
194
  )
194
195
  end
195
196
 
@@ -18,7 +18,7 @@ gems:
18
18
  source:
19
19
  type: git
20
20
  name: ruby/gem_rbs_collection
21
- revision: 43b158b1fc209960643ca6baf5f883b186997e8d
21
+ revision: d70d634c6e848dc5e93cea0163cc8206448be048
22
22
  remote: https://github.com/ruby/gem_rbs_collection.git
23
23
  repo_dir: gems
24
24
  - name: monitor
@@ -29,12 +29,8 @@ gems:
29
29
  version: '0'
30
30
  source:
31
31
  type: stdlib
32
- - name: pathname
33
- version: '0'
34
- source:
35
- type: stdlib
36
32
  - name: prism
37
- version: 1.2.0
33
+ version: 1.9.0
38
34
  source:
39
35
  type: rubygems
40
36
  - name: rake
@@ -42,11 +38,11 @@ gems:
42
38
  source:
43
39
  type: git
44
40
  name: ruby/gem_rbs_collection
45
- revision: 43b158b1fc209960643ca6baf5f883b186997e8d
41
+ revision: d70d634c6e848dc5e93cea0163cc8206448be048
46
42
  remote: https://github.com/ruby/gem_rbs_collection.git
47
43
  repo_dir: gems
48
44
  - name: rbs
49
- version: 3.9.4
45
+ version: 3.10.3
50
46
  source:
51
47
  type: rubygems
52
48
  - name: rdoc
@@ -102,7 +102,7 @@ module RBS
102
102
  def type: (untyped default_type) -> Types::t
103
103
 
104
104
  # @rbs %a{pure}
105
- # @rbs return Types::t?
105
+ # @rbs return: Types::t?
106
106
  %a{pure}
107
107
  def literal_type: () -> Types::t?
108
108
 
@@ -112,6 +112,20 @@ module RBS
112
112
  def constant_name: () -> TypeName?
113
113
 
114
114
  def start_line: () -> Integer
115
+
116
+ private
117
+
118
+ # @rbs node: Prism::Node
119
+ # @rbs return: Types::t?
120
+ def infer_type_from_node: (Prism::Node node) -> Types::t?
121
+
122
+ # @rbs node: Prism::ArrayNode
123
+ # @rbs return: Types::t
124
+ def infer_array_element_type: (Prism::ArrayNode node) -> Types::t
125
+
126
+ # @rbs node: Prism::HashNode
127
+ # @rbs return: Types::t
128
+ def infer_hash_element_type: (Prism::HashNode node) -> Types::t
115
129
  end
116
130
 
117
131
  class SingletonClassDecl < ModuleOrClass[Prism::SingletonClassNode]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs-inline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-10-03 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: prism
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  requirements: []
105
- rubygems_version: 3.6.2
105
+ rubygems_version: 4.0.3
106
106
  specification_version: 4
107
107
  summary: Inline RBS type declaration.
108
108
  test_files: []