rbs 4.0.0.dev.4 → 4.0.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 (281) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +18 -11
  5. data/.github/workflows/comments.yml +5 -3
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +27 -34
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +2 -2
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +1 -1
  12. data/CHANGELOG.md +323 -0
  13. data/README.md +1 -1
  14. data/Rakefile +43 -33
  15. data/Steepfile +1 -0
  16. data/config.yml +426 -24
  17. data/core/array.rbs +307 -227
  18. data/core/basic_object.rbs +9 -8
  19. data/core/binding.rbs +0 -2
  20. data/core/builtin.rbs +2 -2
  21. data/core/class.rbs +6 -5
  22. data/core/comparable.rbs +55 -34
  23. data/core/complex.rbs +104 -78
  24. data/core/dir.rbs +61 -49
  25. data/core/encoding.rbs +12 -15
  26. data/core/enumerable.rbs +179 -87
  27. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  28. data/core/enumerator.rbs +65 -2
  29. data/core/errno.rbs +11 -2
  30. data/core/errors.rbs +58 -29
  31. data/core/exception.rbs +13 -13
  32. data/core/fiber.rbs +74 -54
  33. data/core/file.rbs +280 -177
  34. data/core/file_test.rbs +3 -3
  35. data/core/float.rbs +257 -92
  36. data/core/gc.rbs +425 -281
  37. data/core/hash.rbs +1045 -739
  38. data/core/integer.rbs +135 -137
  39. data/core/io/buffer.rbs +53 -42
  40. data/core/io/wait.rbs +13 -35
  41. data/core/io.rbs +192 -144
  42. data/core/kernel.rbs +216 -155
  43. data/core/marshal.rbs +4 -4
  44. data/core/match_data.rbs +15 -13
  45. data/core/math.rbs +107 -66
  46. data/core/method.rbs +69 -33
  47. data/core/module.rbs +244 -106
  48. data/core/nil_class.rbs +7 -6
  49. data/core/numeric.rbs +74 -63
  50. data/core/object.rbs +9 -11
  51. data/core/object_space.rbs +30 -23
  52. data/core/pathname.rbs +1322 -0
  53. data/core/proc.rbs +95 -58
  54. data/core/process.rbs +222 -202
  55. data/core/ractor.rbs +371 -515
  56. data/core/random.rbs +21 -3
  57. data/core/range.rbs +159 -57
  58. data/core/rational.rbs +60 -89
  59. data/core/rbs/unnamed/argf.rbs +60 -53
  60. data/core/rbs/unnamed/env_class.rbs +19 -14
  61. data/core/rbs/unnamed/main_class.rbs +123 -0
  62. data/core/rbs/unnamed/random.rbs +11 -118
  63. data/core/regexp.rbs +258 -214
  64. data/core/ruby.rbs +53 -0
  65. data/core/ruby_vm.rbs +38 -34
  66. data/core/rubygems/config_file.rbs +5 -5
  67. data/core/rubygems/errors.rbs +4 -71
  68. data/core/rubygems/requirement.rbs +5 -5
  69. data/core/rubygems/rubygems.rbs +16 -82
  70. data/core/rubygems/version.rbs +2 -3
  71. data/core/set.rbs +490 -360
  72. data/core/signal.rbs +26 -16
  73. data/core/string.rbs +3234 -1285
  74. data/core/struct.rbs +27 -26
  75. data/core/symbol.rbs +41 -34
  76. data/core/thread.rbs +135 -67
  77. data/core/time.rbs +81 -50
  78. data/core/trace_point.rbs +41 -35
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +24 -16
  81. data/core/warning.rbs +7 -7
  82. data/docs/aliases.md +79 -0
  83. data/docs/collection.md +3 -3
  84. data/docs/config.md +171 -0
  85. data/docs/encoding.md +56 -0
  86. data/docs/gem.md +0 -1
  87. data/docs/inline.md +576 -0
  88. data/docs/sigs.md +3 -3
  89. data/docs/syntax.md +46 -16
  90. data/docs/type_fingerprint.md +21 -0
  91. data/exe/rbs +1 -1
  92. data/ext/rbs_extension/ast_translation.c +544 -116
  93. data/ext/rbs_extension/ast_translation.h +3 -0
  94. data/ext/rbs_extension/class_constants.c +16 -2
  95. data/ext/rbs_extension/class_constants.h +8 -0
  96. data/ext/rbs_extension/extconf.rb +5 -1
  97. data/ext/rbs_extension/legacy_location.c +33 -56
  98. data/ext/rbs_extension/legacy_location.h +37 -0
  99. data/ext/rbs_extension/main.c +44 -35
  100. data/include/rbs/ast.h +448 -173
  101. data/include/rbs/defines.h +27 -0
  102. data/include/rbs/lexer.h +30 -11
  103. data/include/rbs/location.h +25 -44
  104. data/include/rbs/parser.h +6 -6
  105. data/include/rbs/string.h +0 -2
  106. data/include/rbs/util/rbs_allocator.h +34 -13
  107. data/include/rbs/util/rbs_assert.h +12 -1
  108. data/include/rbs/util/rbs_constant_pool.h +0 -3
  109. data/include/rbs/util/rbs_encoding.h +2 -0
  110. data/include/rbs/util/rbs_unescape.h +2 -1
  111. data/include/rbs.h +8 -0
  112. data/lib/rbs/ast/annotation.rb +1 -1
  113. data/lib/rbs/ast/comment.rb +1 -1
  114. data/lib/rbs/ast/declarations.rb +10 -10
  115. data/lib/rbs/ast/members.rb +14 -14
  116. data/lib/rbs/ast/ruby/annotations.rb +293 -3
  117. data/lib/rbs/ast/ruby/comment_block.rb +24 -0
  118. data/lib/rbs/ast/ruby/declarations.rb +198 -3
  119. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  120. data/lib/rbs/ast/ruby/members.rb +532 -22
  121. data/lib/rbs/ast/type_param.rb +24 -4
  122. data/lib/rbs/buffer.rb +20 -15
  123. data/lib/rbs/cli/diff.rb +16 -15
  124. data/lib/rbs/cli/validate.rb +38 -106
  125. data/lib/rbs/cli.rb +52 -19
  126. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  127. data/lib/rbs/collection/sources/git.rb +1 -0
  128. data/lib/rbs/definition.rb +1 -1
  129. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  130. data/lib/rbs/definition_builder/method_builder.rb +20 -0
  131. data/lib/rbs/definition_builder.rb +147 -25
  132. data/lib/rbs/diff.rb +7 -1
  133. data/lib/rbs/environment.rb +227 -74
  134. data/lib/rbs/environment_loader.rb +0 -6
  135. data/lib/rbs/errors.rb +27 -18
  136. data/lib/rbs/inline_parser.rb +342 -6
  137. data/lib/rbs/location_aux.rb +1 -1
  138. data/lib/rbs/locator.rb +5 -1
  139. data/lib/rbs/method_type.rb +5 -3
  140. data/lib/rbs/parser_aux.rb +20 -7
  141. data/lib/rbs/prototype/helpers.rb +57 -0
  142. data/lib/rbs/prototype/rb.rb +3 -28
  143. data/lib/rbs/prototype/rbi.rb +3 -20
  144. data/lib/rbs/prototype/runtime.rb +8 -0
  145. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  146. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  147. data/lib/rbs/subtractor.rb +3 -1
  148. data/lib/rbs/test/type_check.rb +19 -2
  149. data/lib/rbs/type_name.rb +1 -1
  150. data/lib/rbs/types.rb +88 -78
  151. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  152. data/lib/rbs/validator.rb +2 -2
  153. data/lib/rbs/version.rb +1 -1
  154. data/lib/rbs.rb +1 -2
  155. data/lib/rdoc/discover.rb +1 -1
  156. data/lib/rdoc_plugin/parser.rb +1 -1
  157. data/rbs.gemspec +4 -3
  158. data/rust/.gitignore +1 -0
  159. data/rust/Cargo.lock +378 -0
  160. data/rust/Cargo.toml +7 -0
  161. data/rust/ruby-rbs/Cargo.toml +22 -0
  162. data/rust/ruby-rbs/build.rs +764 -0
  163. data/rust/ruby-rbs/examples/locations.rs +60 -0
  164. data/rust/ruby-rbs/src/lib.rs +1 -0
  165. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  166. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  167. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  168. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  169. data/rust/ruby-rbs-sys/build.rs +204 -0
  170. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  171. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  172. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  173. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  174. data/schema/typeParam.json +17 -1
  175. data/sig/ast/ruby/annotations.rbs +315 -4
  176. data/sig/ast/ruby/comment_block.rbs +8 -0
  177. data/sig/ast/ruby/declarations.rbs +102 -4
  178. data/sig/ast/ruby/members.rbs +108 -2
  179. data/sig/cli/diff.rbs +5 -11
  180. data/sig/cli/validate.rbs +12 -8
  181. data/sig/cli.rbs +18 -18
  182. data/sig/definition.rbs +6 -1
  183. data/sig/definition_builder.rbs +2 -0
  184. data/sig/environment.rbs +70 -12
  185. data/sig/errors.rbs +13 -14
  186. data/sig/inline_parser.rbs +39 -2
  187. data/sig/locator.rbs +0 -2
  188. data/sig/manifest.yaml +0 -1
  189. data/sig/method_builder.rbs +3 -1
  190. data/sig/parser.rbs +31 -13
  191. data/sig/prototype/helpers.rbs +2 -0
  192. data/sig/resolver/type_name_resolver.rbs +35 -7
  193. data/sig/source.rbs +3 -3
  194. data/sig/type_param.rbs +13 -8
  195. data/sig/types.rbs +6 -7
  196. data/sig/unit_test/spy.rbs +0 -8
  197. data/sig/unit_test/type_assertions.rbs +11 -0
  198. data/src/ast.c +410 -153
  199. data/src/lexer.c +1392 -1313
  200. data/src/lexer.re +3 -0
  201. data/src/lexstate.c +58 -37
  202. data/src/location.c +8 -48
  203. data/src/parser.c +977 -516
  204. data/src/string.c +0 -48
  205. data/src/util/rbs_allocator.c +89 -71
  206. data/src/util/rbs_assert.c +1 -1
  207. data/src/util/rbs_buffer.c +2 -2
  208. data/src/util/rbs_constant_pool.c +10 -14
  209. data/src/util/rbs_encoding.c +4 -8
  210. data/src/util/rbs_unescape.c +56 -20
  211. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  212. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  213. data/stdlib/cgi/0/core.rbs +9 -393
  214. data/stdlib/cgi/0/manifest.yaml +1 -0
  215. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  216. data/stdlib/coverage/0/coverage.rbs +7 -4
  217. data/stdlib/date/0/date.rbs +92 -79
  218. data/stdlib/date/0/date_time.rbs +25 -24
  219. data/stdlib/delegate/0/delegator.rbs +10 -7
  220. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  221. data/stdlib/digest/0/digest.rbs +110 -0
  222. data/stdlib/erb/0/erb.rbs +748 -347
  223. data/stdlib/etc/0/etc.rbs +55 -50
  224. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  225. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  226. data/stdlib/io-console/0/io-console.rbs +2 -2
  227. data/stdlib/json/0/json.rbs +217 -136
  228. data/stdlib/monitor/0/monitor.rbs +3 -3
  229. data/stdlib/net-http/0/net-http.rbs +162 -134
  230. data/stdlib/objspace/0/objspace.rbs +17 -34
  231. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  232. data/stdlib/open3/0/open3.rbs +469 -10
  233. data/stdlib/openssl/0/openssl.rbs +475 -357
  234. data/stdlib/optparse/0/optparse.rbs +26 -17
  235. data/stdlib/pathname/0/pathname.rbs +11 -1381
  236. data/stdlib/pp/0/pp.rbs +9 -8
  237. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  238. data/stdlib/pstore/0/pstore.rbs +35 -30
  239. data/stdlib/psych/0/psych.rbs +65 -12
  240. data/stdlib/psych/0/store.rbs +2 -4
  241. data/stdlib/pty/0/pty.rbs +9 -6
  242. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  243. data/stdlib/rdoc/0/code_object.rbs +2 -1
  244. data/stdlib/rdoc/0/parser.rbs +1 -1
  245. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  246. data/stdlib/rdoc/0/store.rbs +1 -1
  247. data/stdlib/resolv/0/resolv.rbs +25 -68
  248. data/stdlib/ripper/0/ripper.rbs +22 -19
  249. data/stdlib/securerandom/0/manifest.yaml +2 -0
  250. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  251. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  252. data/stdlib/singleton/0/singleton.rbs +3 -0
  253. data/stdlib/socket/0/addrinfo.rbs +7 -7
  254. data/stdlib/socket/0/basic_socket.rbs +3 -3
  255. data/stdlib/socket/0/ip_socket.rbs +10 -8
  256. data/stdlib/socket/0/socket.rbs +23 -10
  257. data/stdlib/socket/0/tcp_server.rbs +1 -1
  258. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  259. data/stdlib/socket/0/udp_socket.rbs +1 -1
  260. data/stdlib/socket/0/unix_server.rbs +1 -1
  261. data/stdlib/stringio/0/stringio.rbs +1177 -85
  262. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  263. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  264. data/stdlib/time/0/time.rbs +8 -6
  265. data/stdlib/timeout/0/timeout.rbs +63 -7
  266. data/stdlib/tsort/0/cyclic.rbs +3 -0
  267. data/stdlib/tsort/0/tsort.rbs +7 -6
  268. data/stdlib/uri/0/common.rbs +42 -20
  269. data/stdlib/uri/0/file.rbs +3 -3
  270. data/stdlib/uri/0/generic.rbs +26 -18
  271. data/stdlib/uri/0/http.rbs +2 -2
  272. data/stdlib/uri/0/ldap.rbs +2 -2
  273. data/stdlib/uri/0/mailto.rbs +3 -3
  274. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  275. data/stdlib/zlib/0/deflate.rbs +4 -3
  276. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  277. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  278. data/stdlib/zlib/0/inflate.rbs +1 -1
  279. data/stdlib/zlib/0/need_dict.rbs +1 -1
  280. data/stdlib/zlib/0/zstream.rbs +1 -0
  281. metadata +50 -6
@@ -151,6 +151,29 @@ module RBS
151
151
  end
152
152
  end
153
153
 
154
+ when AST::Ruby::Members::AttrReaderMember, AST::Ruby::Members::AttrWriterMember, AST::Ruby::Members::AttrAccessorMember
155
+ member.names.each do |name|
156
+ ivar_name = :"@#{name}"
157
+ attr_type = member.type || Types::Bases::Any.new(location: nil)
158
+
159
+ insert_variable(
160
+ type_name,
161
+ definition.instance_variables,
162
+ name: ivar_name,
163
+ type: attr_type,
164
+ source: member
165
+ )
166
+ end
167
+
168
+ when AST::Ruby::Members::InstanceVariableMember
169
+ insert_variable(
170
+ type_name,
171
+ definition.instance_variables,
172
+ name: member.name,
173
+ type: member.type,
174
+ source: member
175
+ )
176
+
154
177
  when AST::Members::InstanceVariable
155
178
  insert_variable(
156
179
  type_name,
@@ -375,6 +398,19 @@ module RBS
375
398
  .update(type_params: class_params + method_type.type_params)
376
399
  end
377
400
 
401
+ method_type = method_type.map_type do |type|
402
+ case type
403
+ when Types::Bases::Self
404
+ Types::ClassInstance.new(
405
+ name: type_name,
406
+ args: entry.type_params.map {|param| Types::Variable.new(name: param.name, location: param.location) },
407
+ location: nil
408
+ )
409
+ else
410
+ type
411
+ end
412
+ end
413
+
378
414
  method_type = method_type.update(
379
415
  type: method_type.type.with_return_type(
380
416
  Types::ClassInstance.new(
@@ -551,6 +587,7 @@ module RBS
551
587
  declared_in: type_name,
552
588
  source: source
553
589
  )
590
+
554
591
  validate_variable(variables[name])
555
592
  end
556
593
 
@@ -561,7 +598,15 @@ module RBS
561
598
  variables = [] #: Array[Definition::Variable]
562
599
  tmp_var = var
563
600
  while tmp_var
564
- variables << tmp_var if tmp_var.source.is_a?(AST::Members::Var)
601
+ case tmp_var.source
602
+ when AST::Members::AttrReader, AST::Members::AttrWriter, AST::Members::AttrAccessor
603
+ # nop
604
+ when AST::Ruby::Members::AttrReaderMember, AST::Ruby::Members::AttrWriterMember, AST::Ruby::Members::AttrAccessorMember
605
+ # nop
606
+ else
607
+ variables << tmp_var
608
+ end
609
+
565
610
  tmp_var = tmp_var.parent_variable
566
611
  end
567
612
 
@@ -579,6 +624,10 @@ module RBS
579
624
  if r.source.instance_of?(AST::Members::ClassInstanceVariable) && l.declared_in == r.declared_in
580
625
  raise ClassInstanceVariableDuplicationError.new(type_name: l.declared_in, variable_name: l.source.name, location: l.source.location)
581
626
  end
627
+ when AST::Ruby::Members::InstanceVariableMember
628
+ if l.declared_in == r.declared_in
629
+ raise InstanceVariableDuplicationError.new(type_name: l.declared_in, variable_name: l.source.name, location: l.source.location)
630
+ end
582
631
  end
583
632
  end
584
633
 
@@ -606,7 +655,7 @@ module RBS
606
655
 
607
656
  methods.each do |method|
608
657
  if interface_method_duplicates.include?(method.name)
609
- member.is_a?(AST::Members::Include) || member.is_a?(AST::Members::Extend) or raise
658
+ (member.is_a?(AST::Members::Include) || member.is_a?(AST::Members::Extend)) or raise
610
659
 
611
660
  raise DuplicatedInterfaceMethodDefinitionError.new(
612
661
  type: definition.self_type,
@@ -659,12 +708,14 @@ module RBS
659
708
  )
660
709
  end
661
710
 
711
+ accessibility = special_accessibility(original.instance?, original.new_name) || original_method.accessibility
712
+
662
713
  method_definition = Definition::Method.new(
663
714
  super_method: existing_method,
664
715
  defs: original_method.defs.map do |defn|
665
716
  defn.update(defined_in: defined_in, implemented_in: implemented_in)
666
717
  end,
667
- accessibility: original_method.accessibility,
718
+ accessibility: accessibility,
668
719
  alias_of: original_method,
669
720
  alias_member: original
670
721
  )
@@ -691,13 +742,9 @@ module RBS
691
742
  end
692
743
  end
693
744
 
694
- # @type var accessibility: RBS::Definition::accessibility
695
- accessibility =
696
- if original.instance? && [:initialize, :initialize_copy, :initialize_clone, :initialize_dup, :respond_to_missing?].include?(method.name)
697
- :private
698
- else
699
- method.accessibility
700
- end
745
+ # Respect the visibility of the original method definition.
746
+ accessibility = original.visibility || special_accessibility(original.instance?, method.name) || method.accessibility
747
+
701
748
  # Skip setting up `super_method` if `implemented_in` is `nil`, that means the type doesn't have implementation.
702
749
  # This typically happens if the type is an interface.
703
750
  if implemented_in
@@ -750,6 +797,9 @@ module RBS
750
797
  super_method = existing_method
751
798
  end
752
799
 
800
+ # Respect the visibility of the original method definition.
801
+ accessibility = original.visibility || special_accessibility(original.kind == :instance, method.name) || method.accessibility
802
+
753
803
  method_definition = Definition::Method.new(
754
804
  super_method: super_method,
755
805
  defs: [
@@ -760,42 +810,108 @@ module RBS
760
810
  implemented_in: implemented_in
761
811
  )
762
812
  ],
763
- accessibility: method.accessibility,
813
+ accessibility: accessibility,
764
814
  alias_of: nil,
765
815
  alias_member: nil
766
816
  )
767
817
 
768
818
  method_definition.annotations.replace(original.annotations)
769
- when AST::Ruby::Members::DefMember
819
+ when AST::Ruby::Members::AttrReaderMember, AST::Ruby::Members::AttrWriterMember, AST::Ruby::Members::AttrAccessorMember
770
820
  if duplicated_method = methods[method.name]
771
821
  raise DuplicatedMethodDefinitionError.new(
772
822
  type: definition.self_type,
773
823
  method_name: method.name,
774
- members: [original, *duplicated_method.members]
824
+ members: [*duplicated_method.members, original]
775
825
  )
776
826
  end
777
827
 
778
- defs = original.overloads.map do |overload|
779
- Definition::Method::TypeDef.new(
780
- type: subst.empty? ? overload.method_type : overload.method_type.sub(subst),
781
- member: original,
782
- defined_in: defined_in,
783
- implemented_in: implemented_in
784
- ).tap do |type_def|
785
- # Keep the original annotations given to overloads.
786
- type_def.overload_annotations.replace(overload.annotations)
828
+ attr_type = original.type || Types::Bases::Any.new(location: nil)
829
+ method_type =
830
+ if method.name.to_s.end_with?("=")
831
+ # setter
832
+ MethodType.new(
833
+ type_params: [],
834
+ type: Types::Function.empty(attr_type).update(
835
+ required_positionals: [
836
+ Types::Function::Param.new(type: attr_type, name: method.name.to_s.chomp("=").to_sym)
837
+ ]
838
+ ),
839
+ block: nil,
840
+ location: original.location
841
+ )
842
+ else
843
+ # getter
844
+ MethodType.new(
845
+ type_params: [],
846
+ type: Types::Function.empty(attr_type),
847
+ block: nil,
848
+ location: original.location
849
+ )
787
850
  end
851
+
852
+ if implemented_in
853
+ super_method = existing_method
788
854
  end
789
855
 
790
856
  method_definition = Definition::Method.new(
791
- super_method: existing_method,
792
- defs: defs,
793
- accessibility: :public,
857
+ super_method: super_method,
858
+ defs: [
859
+ Definition::Method::TypeDef.new(
860
+ type: method_type,
861
+ member: original,
862
+ defined_in: defined_in,
863
+ implemented_in: implemented_in
864
+ )
865
+ ],
866
+ accessibility: method.accessibility,
794
867
  alias_of: nil,
795
868
  alias_member: nil
796
869
  )
797
870
 
798
871
  method_definition.annotations.replace([])
872
+ when AST::Ruby::Members::DefMember
873
+ if duplicated_method = methods[method.name]
874
+ raise DuplicatedMethodDefinitionError.new(
875
+ type: definition.self_type,
876
+ method_name: method.name,
877
+ members: [original, *duplicated_method.members]
878
+ )
879
+ end
880
+
881
+ if original.method_type.empty? && existing_method
882
+ # Unannotated method with a parent definition → inherit from the parent, like @rbs ...
883
+ method_definition = Definition::Method.new(
884
+ super_method: existing_method,
885
+ defs: existing_method.defs.map { |defn| defn.update(implemented_in: implemented_in) },
886
+ accessibility: :public,
887
+ alias_of: existing_method.alias_of,
888
+ alias_member: nil
889
+ )
890
+
891
+ method_definition.annotations.replace(existing_method.annotations)
892
+ else
893
+ defs = original.overloads.map do |overload|
894
+ Definition::Method::TypeDef.new(
895
+ type: subst.empty? ? overload.method_type : overload.method_type.sub(subst),
896
+ member: original,
897
+ defined_in: defined_in,
898
+ implemented_in: implemented_in
899
+ ).tap do |type_def|
900
+ # Keep the original annotations given to overloads.
901
+ type_def.overload_annotations.replace(overload.annotations)
902
+ end
903
+ end
904
+
905
+ method_definition = Definition::Method.new(
906
+ super_method: existing_method,
907
+ defs: defs,
908
+ accessibility: :public,
909
+ alias_of: nil,
910
+ alias_member: nil
911
+ )
912
+
913
+ method_definition.annotations.replace([])
914
+ end
799
915
 
800
916
  when nil
801
917
  # Overloading method definition only
@@ -854,6 +970,12 @@ module RBS
854
970
  methods[method.name] = method_definition
855
971
  end
856
972
 
973
+ def special_accessibility(is_instance, method_name)
974
+ if is_instance && [:initialize, :initialize_copy, :initialize_clone, :initialize_dup, :respond_to_missing?].include?(method_name)
975
+ :private
976
+ end
977
+ end
978
+
857
979
  def try_cache(type_name, cache:)
858
980
  cache[type_name] ||= yield
859
981
  end
data/lib/rbs/diff.rb CHANGED
@@ -104,7 +104,13 @@ module RBS
104
104
  detail_to_s = @detail ? "[#{definition_method.defined_in} #{definition_method.accessibility}] " : ""
105
105
  if definition_method.alias_of
106
106
  first_def = definition_method.alias_of.defs.first #: Definition::Method::TypeDef
107
- "#{detail_to_s}alias #{prefix}#{key} #{prefix}#{first_def.member.name}"
107
+ member_name = case first_def.member
108
+ when AST::Members::Base
109
+ first_def.member.name
110
+ else
111
+ raise
112
+ end
113
+ "#{detail_to_s}alias #{prefix}#{key} #{prefix}#{member_name}"
108
114
  else
109
115
  "#{detail_to_s}def #{prefix}#{key}: #{definition_method.method_types.join(" | ")}"
110
116
  end