Skip to content

Commit 1abe17d

Browse files
authored
Merge pull request #2959 from zonuexe/fix/widen-strscan-sigs
Update `StringScanner` signatures to match strscan 3.1.6
2 parents fcf2891 + ee6642d commit 1abe17d

1 file changed

Lines changed: 79 additions & 19 deletions

File tree

stdlib/strscan/0/string_scanner.rbs

Lines changed: 79 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)