Skip to content

Commit 3f807b4

Browse files
committed
Update StringScanner signatures to match strscan 3.1.6
Widen the matcher methods (#check, #check_until, #exist?, #match?, accept String patterns, correct several return types, and add the introduced in the latest Ruby release.
1 parent 8cdfd11 commit 3f807b4

1 file changed

Lines changed: 76 additions & 18 deletions

File tree

stdlib/strscan/0/string_scanner.rbs

Lines changed: 76 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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,22 @@ 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, bool return_string_p) -> (String | Integer)?
1294+
1295+
# <!--
1296+
# rdoc-file=ext/strscan/lib/strscan/strscan.rb
1297+
# - scan_integer(base: 10)
1298+
# -->
1299+
# If `base` isn't provided or is `10`, then it is equivalent to calling
1300+
# <code>#scan</code> with a `[+-]?d+` pattern, and returns an Integer or nil.
1301+
#
1302+
# If `base` is `16`, then it is equivalent to calling <code>#scan</code> with a
1303+
# `[+-]?(0x)?[0-9a-fA-F]+` pattern, and returns an Integer or nil.
1304+
#
1305+
# The scanned string must be encoded with an ASCII compatible encoding,
1306+
# otherwise Encoding::CompatibilityError will be raised.
1307+
#
1308+
def scan_integer: (?base: Integer) -> Integer?
12511309

12521310
# <!--
12531311
# rdoc-file=ext/strscan/strscan.c
@@ -1300,7 +1358,7 @@ class StringScanner
13001358
# scanner.scan_until(/nope/) # => nil
13011359
# match_values_cleared?(scanner) # => true
13021360
#
1303-
def scan_until: (Regexp) -> String?
1361+
def scan_until: (Regexp | String) -> String?
13041362

13051363
# <!--
13061364
# rdoc-file=ext/strscan/strscan.c
@@ -1311,7 +1369,7 @@ class StringScanner
13111369
# `return_string_p` is true, otherwise returns the number of bytes advanced.
13121370
# This method does affect the match register.
13131371
#
1314-
def search_full: (Regexp pattern, bool advance_pointer_p, bool return_string_p) -> untyped
1372+
def search_full: (Regexp | String pattern, bool advance_pointer_p, bool return_string_p) -> (String | Integer)?
13151373

13161374
# <!--
13171375
# rdoc-file=ext/strscan/strscan.c
@@ -1331,7 +1389,7 @@ class StringScanner
13311389
# scanner.match?(/nope/) # => nil
13321390
# scanner.size # => nil
13331391
#
1334-
def size: () -> Integer
1392+
def size: () -> Integer?
13351393

13361394
# <!--
13371395
# rdoc-file=ext/strscan/strscan.c
@@ -1379,7 +1437,7 @@ class StringScanner
13791437
# scanner.skip(/nope/) # => nil
13801438
# match_values_cleared?(scanner) # => true
13811439
#
1382-
def skip: (Regexp) -> Integer?
1440+
def skip: (Regexp | String) -> Integer?
13831441

13841442
# <!--
13851443
# rdoc-file=ext/strscan/strscan.c
@@ -1427,7 +1485,7 @@ class StringScanner
14271485
# scanner.skip_until(/nope/) # => nil
14281486
# match_values_cleared?(scanner) # => true
14291487
#
1430-
def skip_until: (Regexp) -> Integer?
1488+
def skip_until: (Regexp | String) -> Integer?
14311489

14321490
# <!--
14331491
# rdoc-file=ext/strscan/strscan.c
@@ -1501,7 +1559,7 @@ class StringScanner
15011559
# # rest_size: 0
15021560
# match_values_cleared?(scanner) # => true
15031561
#
1504-
def terminate: () -> void
1562+
def terminate: () -> self
15051563

15061564
# <!--
15071565
# rdoc-file=ext/strscan/strscan.c
@@ -1532,7 +1590,7 @@ class StringScanner
15321590
# match_values_cleared?(scanner) # => true
15331591
# scanner.unscan # Raises StringScanner::Error.
15341592
#
1535-
def unscan: () -> void
1593+
def unscan: () -> self
15361594

15371595
# <!--
15381596
# rdoc-file=ext/strscan/strscan.c
@@ -1547,7 +1605,7 @@ class StringScanner
15471605
# scanner.values_at(*0..3) # => ["Fri Dec 12 ", "Fri", "Dec", "12"]
15481606
# scanner.values_at(*%i[wday month day]) # => ["Fri", "Dec", "12"]
15491607
#
1550-
def values_at: (*Integer) -> Array[String]?
1608+
def values_at: (*Integer | String | Symbol) -> Array[String]?
15511609

15521610
private
15531611

@@ -1570,7 +1628,7 @@ class StringScanner
15701628
# # rest: "foobarbaz"
15711629
# # rest_size: 9
15721630
#
1573-
def initialize: (String, ?bool dup, ?fixed_anchor: bool) -> untyped
1631+
def initialize: (String, ?fixed_anchor: bool) -> void
15741632

15751633
# <!--
15761634
# rdoc-file=ext/strscan/strscan.c

0 commit comments

Comments
 (0)