@@ -498,7 +498,7 @@ class StringScanner
498498 # scanner[0] # => nil
499499 # scanner[1] # => nil
500500 #
501- def [] : (Integer) -> String?
501+ def [] : (Integer | String | Symbol ) -> String?
502502
503503 # <!--
504504 # rdoc-file=ext/strscan/strscan.c
@@ -625,7 +625,7 @@ class StringScanner
625625 # scanner.check(/nope/) # => nil
626626 # match_values_cleared?(scanner) # => true
627627 #
628- def check : (Regexp) -> String?
628+ def check : (Regexp | String ) -> String?
629629
630630 # <!--
631631 # rdoc-file=ext/strscan/strscan.c
@@ -673,7 +673,7 @@ class StringScanner
673673 # scanner.check_until(/nope/) # => nil
674674 # match_values_cleared?(scanner) # => true
675675 #
676- def check_until : (Regexp) -> String
676+ def check_until : (Regexp | String ) -> String?
677677
678678 # <!--
679679 # rdoc-file=ext/strscan/strscan.c
@@ -760,7 +760,7 @@ class StringScanner
760760 # scanner.exist?(/nope/) # => nil
761761 # match_values_cleared?(scanner) # => true
762762 #
763- def exist? : (Regexp) -> Integer?
763+ def exist? : (Regexp | String ) -> Integer?
764764
765765 # <!--
766766 # rdoc-file=ext/strscan/strscan.c
@@ -913,7 +913,7 @@ class StringScanner
913913 # scanner.match?(/nope/) # => nil
914914 # match_values_cleared?(scanner) # => true
915915 #
916- def match? : (Regexp) -> Integer?
916+ def match? : (Regexp | String ) -> Integer?
917917
918918 # <!--
919919 # rdoc-file=ext/strscan/strscan.c
@@ -973,6 +973,29 @@ class StringScanner
973973 #
974974 def matched_size : () -> Integer?
975975
976+ # <!--
977+ # rdoc-file=ext/strscan/strscan.c
978+ # - named_captures -> hash
979+ # -->
980+ # Returns the array of captured match values at indexes (1..)
981+ # if the most recent match attempt succeeded, or nil otherwise;
982+ # see [Captured Match Values](rdoc-ref:StringScanner@Captured+Match+Values):
983+ # scanner = StringScanner.new('Fri Dec 12 1975 14:39')
984+ # scanner.named_captures # => {}
985+ #
986+ # pattern = /(?<wday>\w+) (?<month>\w+) (?<day>\d+) /
987+ # scanner.match?(pattern)
988+ # scanner.named_captures # => {"wday"=>"Fri", "month"=>"Dec", "day"=>"12"}
989+ #
990+ # scanner.string = 'nope'
991+ # scanner.match?(pattern)
992+ # scanner.named_captures # => {"wday"=>nil, "month"=>nil, "day"=>nil}
993+ #
994+ # scanner.match?(/nosuch/)
995+ # scanner.named_captures # => {}
996+ #
997+ def named_captures : () -> Hash[String, String?]
998+
976999 # <!--
9771000 # rdoc-file=ext/strscan/strscan.c
9781001 # - peek(length) -> substring
@@ -988,6 +1011,17 @@ class StringScanner
9881011 #
9891012 def peek : (Integer) -> String
9901013
1014+ # <!--
1015+ # rdoc-file=ext/strscan/strscan.c
1016+ # - peek_byte()
1017+ # -->
1018+ # Peeks at the current byte and returns it as an integer.
1019+ #
1020+ # s = StringScanner.new('ab')
1021+ # s.peek_byte # => 97
1022+ #
1023+ def peek_byte : () -> Integer?
1024+
9911025 # <!-- rdoc-file=ext/strscan/strscan.c -->
9921026 # call-seq:
9931027 # pos -> byte_position
@@ -1092,7 +1126,7 @@ class StringScanner
10921126 # scanner.match?(/nope/) # => nil
10931127 # scanner.post_match # => nil
10941128 #
1095- def post_match : () -> String
1129+ def post_match : () -> String?
10961130
10971131 # <!--
10981132 # rdoc-file=ext/strscan/strscan.c
@@ -1112,7 +1146,7 @@ class StringScanner
11121146 # scanner.exist?(/nope/) # => nil
11131147 # scanner.pre_match # => nil
11141148 #
1115- def pre_match : () -> String
1149+ def pre_match : () -> String?
11161150
11171151 # <!--
11181152 # rdoc-file=ext/strscan/strscan.c
@@ -1134,7 +1168,7 @@ class StringScanner
11341168 # # => nil
11351169 # match_values_cleared?(scanner) # => true
11361170 #
1137- def reset : () -> void
1171+ def reset : () -> self
11381172
11391173 # <!--
11401174 # rdoc-file=ext/strscan/strscan.c
@@ -1235,7 +1269,16 @@ class StringScanner
12351269 # scanner.scan(/nope/) # => nil
12361270 # match_values_cleared?(scanner) # => true
12371271 #
1238- def scan : (Regexp) -> String?
1272+ def scan : (Regexp | String) -> String?
1273+
1274+ # <!--
1275+ # rdoc-file=ext/strscan/strscan.c
1276+ # - scan_byte -> integer_byte
1277+ # -->
1278+ # Scans one byte and returns it as an integer. This method is not multibyte
1279+ # character sensitive. See also: #getch.
1280+ #
1281+ def scan_byte : () -> Integer?
12391282
12401283 # <!--
12411284 # rdoc-file=ext/strscan/strscan.c
@@ -1247,7 +1290,23 @@ class StringScanner
12471290 #
12481291 # "full" means "#scan with full parameters".
12491292 #
1250- def scan_full : (Regexp pattern, bool advance_pointer_p, bool return_string_p) -> untyped
1293+ def scan_full : (Regexp | String pattern, bool advance_pointer_p, true return_string_p) -> String?
1294+ | (Regexp | String pattern, bool advance_pointer_p, false return_string_p) -> Integer?
1295+
1296+ # <!--
1297+ # rdoc-file=ext/strscan/lib/strscan/strscan.rb
1298+ # - scan_integer(base: 10)
1299+ # -->
1300+ # If `base` isn't provided or is `10`, then it is equivalent to calling
1301+ # <code>#scan</code> with a `[+-]?d+` pattern, and returns an Integer or nil.
1302+ #
1303+ # If `base` is `16`, then it is equivalent to calling <code>#scan</code> with a
1304+ # `[+-]?(0x)?[0-9a-fA-F]+` pattern, and returns an Integer or nil.
1305+ #
1306+ # The scanned string must be encoded with an ASCII compatible encoding,
1307+ # otherwise Encoding::CompatibilityError will be raised.
1308+ #
1309+ def scan_integer : (?base: Integer) -> Integer?
12511310
12521311 # <!--
12531312 # rdoc-file=ext/strscan/strscan.c
@@ -1300,7 +1359,7 @@ class StringScanner
13001359 # scanner.scan_until(/nope/) # => nil
13011360 # match_values_cleared?(scanner) # => true
13021361 #
1303- def scan_until : (Regexp) -> String?
1362+ def scan_until : (Regexp | String ) -> String?
13041363
13051364 # <!--
13061365 # rdoc-file=ext/strscan/strscan.c
@@ -1311,7 +1370,8 @@ class StringScanner
13111370 # `return_string_p` is true, otherwise returns the number of bytes advanced.
13121371 # This method does affect the match register.
13131372 #
1314- def search_full : (Regexp pattern, bool advance_pointer_p, bool return_string_p) -> untyped
1373+ def search_full : (Regexp | String pattern, bool advance_pointer_p, true return_string_p) -> String?
1374+ | (Regexp | String pattern, bool advance_pointer_p, false return_string_p) -> Integer?
13151375
13161376 # <!--
13171377 # rdoc-file=ext/strscan/strscan.c
@@ -1331,7 +1391,7 @@ class StringScanner
13311391 # scanner.match?(/nope/) # => nil
13321392 # scanner.size # => nil
13331393 #
1334- def size : () -> Integer
1394+ def size : () -> Integer?
13351395
13361396 # <!--
13371397 # rdoc-file=ext/strscan/strscan.c
@@ -1379,7 +1439,7 @@ class StringScanner
13791439 # scanner.skip(/nope/) # => nil
13801440 # match_values_cleared?(scanner) # => true
13811441 #
1382- def skip : (Regexp) -> Integer?
1442+ def skip : (Regexp | String ) -> Integer?
13831443
13841444 # <!--
13851445 # rdoc-file=ext/strscan/strscan.c
@@ -1427,7 +1487,7 @@ class StringScanner
14271487 # scanner.skip_until(/nope/) # => nil
14281488 # match_values_cleared?(scanner) # => true
14291489 #
1430- def skip_until : (Regexp) -> Integer?
1490+ def skip_until : (Regexp | String ) -> Integer?
14311491
14321492 # <!--
14331493 # rdoc-file=ext/strscan/strscan.c
@@ -1501,7 +1561,7 @@ class StringScanner
15011561 # # rest_size: 0
15021562 # match_values_cleared?(scanner) # => true
15031563 #
1504- def terminate : () -> void
1564+ def terminate : () -> self
15051565
15061566 # <!--
15071567 # rdoc-file=ext/strscan/strscan.c
@@ -1532,7 +1592,7 @@ class StringScanner
15321592 # match_values_cleared?(scanner) # => true
15331593 # scanner.unscan # Raises StringScanner::Error.
15341594 #
1535- def unscan : () -> void
1595+ def unscan : () -> self
15361596
15371597 # <!--
15381598 # rdoc-file=ext/strscan/strscan.c
@@ -1547,7 +1607,7 @@ class StringScanner
15471607 # scanner.values_at(*0..3) # => ["Fri Dec 12 ", "Fri", "Dec", "12"]
15481608 # scanner.values_at(*%i[wday month day]) # => ["Fri", "Dec", "12"]
15491609 #
1550- def values_at : (*Integer) -> Array[String]?
1610+ def values_at : (*Integer | String | Symbol ) -> Array[String]?
15511611
15521612 private
15531613
@@ -1570,7 +1630,7 @@ class StringScanner
15701630 # # rest: "foobarbaz"
15711631 # # rest_size: 9
15721632 #
1573- def initialize : (String, ?bool dup, ? fixed_anchor: bool ) -> untyped
1633+ def initialize : (String, ?fixed_anchor: bool ) -> void
15741634
15751635 # <!--
15761636 # rdoc-file=ext/strscan/strscan.c
0 commit comments