rbi 0.4.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20c28ba58d5d78165f3a26c3f354d3bd32c610ebf8364b4611a3a34ec69c360d
4
- data.tar.gz: f446a5d9a2ce20676a082260cdf61c016deb31940dace2fce9891b797d8c5d20
3
+ metadata.gz: 8945af1db330f337d9e956a588855b37d5fdeda9d9b4d14aae567205f283291e
4
+ data.tar.gz: 43c623a2db05aa3c7cba0da55a62717319009104e0b1f1cc2ce9b380e9c00389
5
5
  SHA512:
6
- metadata.gz: 5256315c81ad44aab890dc0c35cbc996787af24a650d21ab55d6405ab8ceec99f5e108ed085418b1e3207c05d7a4c5bbfc28c95b0c4ec49bd6a95ab665b9a3e6
7
- data.tar.gz: f12fc80dcf8d4804fba40343956ddefc1f6fa60aeb237a5037977375835264db312f28d5d25920f90eb07190f0379de6631811824d81a588132633e8940f843f
6
+ metadata.gz: a748432dd7758173966613ec2a6b067d9effb717c68a8bfcd6c2db826138892af9c4166f171546a0c78ad3ad0ef24a1e8a72b8d453b7502f4114123fb878d7b8
7
+ data.tar.gz: abd31c2df6e52e469b0018ac4a5b1466d9df6b670ae409fa8a9d7b642c06787e60f1439b003a7c3523fd1af2b8710100578bb2b257aa3ec6416cfeae18a1af83
@@ -428,26 +428,29 @@ module RBI
428
428
  print("[#{sig.type_params.join(", ")}] ")
429
429
  end
430
430
 
431
- block_param = node.params.find { |param| param.is_a?(BlockParam) }
432
- sig_block_param = sig.params.find { |param| param.name == block_param&.name }
431
+ raise Error, "Arity mismatch between method and signature" if sig.params.size != node.params.size
433
432
 
434
- sig_params = sig.params.dup
435
- if block_param
436
- sig_params.reject! do |param|
437
- param.name == block_param.name
438
- end
433
+ block_params, params = sig.params.zip(node.params).partition do |_sig_param, method_param|
434
+ method_param.is_a?(BlockParam)
439
435
  end
440
436
 
441
- unless sig_params.empty?
437
+ raise Error, "Multiple block parameters found" if block_params.size > 1
438
+
439
+ block_param = block_params.first if block_params.any?
440
+
441
+ unless params.empty?
442
442
  print("(")
443
- sig_params.each_with_index do |param, index|
443
+ params.each_with_index do |(sig_param, method_param), index|
444
444
  print(", ") if index > 0
445
- print_sig_param(node, param)
445
+ print_sig_param(
446
+ sig_param,
447
+ method_param, #: as !nil
448
+ )
446
449
  end
447
450
  print(") ")
448
451
  end
449
- if sig_block_param
450
- block_type = sig_block_param.type
452
+ if (sig_param = block_param&.first)
453
+ block_type = sig_param.type
451
454
  block_type = Type.parse_string(block_type) if block_type.is_a?(String)
452
455
 
453
456
  block_is_nilable = false
@@ -490,30 +493,33 @@ module RBI
490
493
  print("[#{sig.type_params.join(", ")}] ")
491
494
  end
492
495
 
493
- block_param = node.params.find { |param| param.is_a?(BlockParam) }
494
- sig_block_param = sig.params.find { |param| param.name == block_param&.name }
496
+ raise Error, "Arity mismatch between method and signature" if sig.params.size != node.params.size
495
497
 
496
- sig_params = sig.params.dup
497
- if block_param
498
- sig_params.reject! do |param|
499
- param.name == block_param.name
500
- end
498
+ block_params, params = sig.params.zip(node.params).partition do |_sig_param, method_param|
499
+ method_param.is_a?(BlockParam)
501
500
  end
502
501
 
503
- unless sig_params.empty?
502
+ raise Error, "Multiple block parameters found" if block_params.size > 1
503
+
504
+ block_param = block_params.first if block_params.any?
505
+
506
+ unless params.empty?
504
507
  printl("(")
505
508
  indent
506
- sig_params.each_with_index do |param, index|
509
+ params.each_with_index do |(sig_param, method_param), index|
507
510
  printt
508
- print_sig_param(node, param)
509
- print(",") if index < sig_params.size - 1
511
+ print_sig_param(
512
+ sig_param,
513
+ method_param, #: as !nil
514
+ )
515
+ print(",") if index < params.size - 1
510
516
  printn
511
517
  end
512
518
  dedent
513
519
  printt(") ")
514
520
  end
515
- if sig_block_param
516
- block_type = sig_block_param.type
521
+ if (block_param = block_param&.first)
522
+ block_type = block_param.type
517
523
  block_type = Type.parse_string(block_type) if block_type.is_a?(String)
518
524
 
519
525
  block_is_nilable = false
@@ -591,11 +597,8 @@ module RBI
591
597
  # @override
592
598
  #: (RestParam node) -> void
593
599
  def visit_rest_param(node)
594
- if @positional_names
595
- print("*untyped #{node.name}")
596
- else
597
- print("*untyped")
598
- end
600
+ print("*untyped")
601
+ print(" #{node.name}") if @positional_names && !node.anonymous?
599
602
  end
600
603
 
601
604
  # @override
@@ -614,7 +617,7 @@ module RBI
614
617
  #: (KwRestParam node) -> void
615
618
  def visit_kw_rest_param(node)
616
619
  print("**untyped")
617
- print(" #{node.name}") if node.name
620
+ print(" #{node.name}") unless node.anonymous?
618
621
  end
619
622
 
620
623
  # @override
@@ -873,39 +876,46 @@ module RBI
873
876
  printl("# #{loc}") if loc && print_locs
874
877
  end
875
878
 
876
- #: (Method node, SigParam param) -> void
877
- def print_sig_param(node, param)
878
- type = parse_type(param.type).rbs_string
879
+ #: (SigParam sig_param, Param method_param) -> void
880
+ def print_sig_param(sig_param, method_param)
881
+ if !method_param.anonymous? && sig_param.name != method_param.name
882
+ raise Error,
883
+ "Mismatched parameter names: #{sig_param.name} vs #{method_param.name}"
884
+ end
879
885
 
880
- orig_param = node.params.find { |p| p.name == param.name }
886
+ type = parse_type(sig_param.type).rbs_string
881
887
 
882
- case orig_param
888
+ case method_param
883
889
  when ReqParam
884
890
  if @positional_names
885
- print("#{type} #{param.name}")
891
+ print("#{type} #{sig_param.name}")
886
892
  else
887
893
  print(type)
888
894
  end
889
895
  when OptParam
890
896
  if @positional_names
891
- print("?#{type} #{param.name}")
897
+ print("?#{type} #{sig_param.name}")
892
898
  else
893
899
  print("?#{type}")
894
900
  end
895
901
  when RestParam
896
- if @positional_names
897
- print("*#{type} #{param.name}")
898
- else
902
+ if method_param.anonymous? || !@positional_names
899
903
  print("*#{type}")
904
+ else
905
+ print("*#{type} #{sig_param.name}")
900
906
  end
901
907
  when KwParam
902
- print("#{param.name}: #{type}")
908
+ print("#{sig_param.name}: #{type}")
903
909
  when KwOptParam
904
- print("?#{param.name}: #{type}")
910
+ print("?#{sig_param.name}: #{type}")
905
911
  when KwRestParam
906
- print("**#{type} #{param.name}")
912
+ if method_param.anonymous?
913
+ print("**#{type}")
914
+ else
915
+ print("**#{type} #{sig_param.name}")
916
+ end
907
917
  else
908
- raise Error, "Unexpected param type: #{orig_param.class} for param #{param.name}"
918
+ raise Error, "Unexpected param type: #{method_param.class} for param #{sig_param.name}"
909
919
  end
910
920
  end
911
921
 
data/lib/rbi/type.rb CHANGED
@@ -720,7 +720,14 @@ module RBI
720
720
  if @types.empty?
721
721
  "{}"
722
722
  else
723
- "{ " + @types.map { |name, type| "#{name}: #{type.to_rbi}" }.join(", ") + " }"
723
+ "{ " + @types.map do |name, type|
724
+ case name
725
+ when Symbol
726
+ "#{name}: #{type.to_rbi}"
727
+ when String
728
+ "#{name.inspect} => #{type.to_rbi}"
729
+ end
730
+ end.join(", ") + " }"
724
731
  end
725
732
  end
726
733
 
data/lib/rbi/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module RBI
5
- VERSION = "0.4.0"
5
+ VERSION = "0.4.1"
6
6
  end
data/rbi/rbi.rbi CHANGED
@@ -1777,8 +1777,8 @@ class RBI::RBSPrinter < ::RBI::Visitor
1777
1777
  sig { params(node: ::RBI::Param, last: T::Boolean).void }
1778
1778
  def print_param_comment_leading_space(node, last:); end
1779
1779
 
1780
- sig { params(node: ::RBI::Method, param: ::RBI::SigParam).void }
1781
- def print_sig_param(node, param); end
1780
+ sig { params(sig_param: ::RBI::SigParam, method_param: ::RBI::Param).void }
1781
+ def print_sig_param(sig_param, method_param); end
1782
1782
 
1783
1783
  sig { params(node: ::RBI::SigParam, last: T::Boolean).void }
1784
1784
  def print_sig_param_comment_leading_space(node, last:); end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Terrasa