@@ -3,13 +3,10 @@ use unicode_categories::UnicodeCategories;
3
3
use winnow:: ascii:: { digit0, digit1, till_line_ending, Caseless } ;
4
4
use winnow:: combinator:: { alt, dispatch, eof, fail, opt, peek, terminated} ;
5
5
use winnow:: error:: ContextError ;
6
- use winnow:: error:: ErrMode ;
7
- use winnow:: error:: ErrorKind ;
8
- use winnow:: error:: ParserError as _;
6
+ use winnow:: error:: ParserError ;
9
7
use winnow:: prelude:: * ;
10
- use winnow:: stream:: { ContainsToken as _, Stream as _} ;
11
8
use winnow:: token:: { any, one_of, rest, take, take_until, take_while} ;
12
- use winnow:: PResult ;
9
+ use winnow:: Result ;
13
10
14
11
pub ( crate ) fn tokenize ( mut input : & str , named_placeholders : bool ) -> Vec < Token < ' _ > > {
15
12
let mut tokens: Vec < Token > = Vec :: new ( ) ;
@@ -101,7 +98,7 @@ fn get_next_token<'a>(
101
98
last_reserved_token : Option < Token < ' a > > ,
102
99
last_reserved_top_level_token : Option < Token < ' a > > ,
103
100
named_placeholders : bool ,
104
- ) -> PResult < Token < ' a > > {
101
+ ) -> Result < Token < ' a > > {
105
102
alt ( (
106
103
get_comment_token,
107
104
get_string_token,
@@ -124,14 +121,14 @@ fn get_next_token<'a>(
124
121
) )
125
122
. parse_next ( input)
126
123
}
127
- fn get_double_colon_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
124
+ fn get_double_colon_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
128
125
"::" . parse_next ( input) . map ( |token| Token {
129
126
kind : TokenKind :: DoubleColon ,
130
127
value : token,
131
128
key : None ,
132
129
} )
133
130
}
134
- fn get_whitespace_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
131
+ fn get_whitespace_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
135
132
take_while ( 1 .., char:: is_whitespace)
136
133
. parse_next ( input)
137
134
. map ( |token| Token {
@@ -141,7 +138,7 @@ fn get_whitespace_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
141
138
} )
142
139
}
143
140
144
- fn get_comment_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
141
+ fn get_comment_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
145
142
dispatch ! { any;
146
143
'#' => till_line_ending. value( TokenKind :: LineComment ) ,
147
144
'-' => ( '-' , till_line_ending) . value( TokenKind :: LineComment ) ,
@@ -193,7 +190,7 @@ pub fn take_till_escaping<'a>(
193
190
// 3. double quoted string using "" or \" to escape
194
191
// 4. single quoted string using '' or \' to escape
195
192
// 5. national character quoted string using N'' or N\' to escape
196
- fn get_string_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
193
+ fn get_string_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
197
194
dispatch ! { any;
198
195
'`' => ( take_till_escaping( '`' , & [ '`' ] ) , any) . void( ) ,
199
196
'[' => ( take_till_escaping( ']' , & [ ']' ] ) , any) . void( ) ,
@@ -213,7 +210,7 @@ fn get_string_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
213
210
}
214
211
215
212
// Like above but it doesn't replace double quotes
216
- fn get_placeholder_string_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
213
+ fn get_placeholder_string_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
217
214
dispatch ! { any;
218
215
'`' =>( take_till_escaping( '`' , & [ '`' ] ) , any) . void( ) ,
219
216
'[' =>( take_till_escaping( ']' , & [ ']' ] ) , any) . void( ) ,
@@ -231,7 +228,7 @@ fn get_placeholder_string_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
231
228
} )
232
229
}
233
230
234
- fn get_open_paren_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
231
+ fn get_open_paren_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
235
232
alt ( ( "(" , terminated ( Caseless ( "CASE" ) , end_of_word) ) )
236
233
. parse_next ( input)
237
234
. map ( |token| Token {
@@ -241,7 +238,7 @@ fn get_open_paren_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
241
238
} )
242
239
}
243
240
244
- fn get_close_paren_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
241
+ fn get_close_paren_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
245
242
alt ( ( ")" , terminated ( Caseless ( "END" ) , end_of_word) ) )
246
243
. parse_next ( input)
247
244
. map ( |token| Token {
@@ -251,7 +248,7 @@ fn get_close_paren_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
251
248
} )
252
249
}
253
250
254
- fn get_placeholder_token < ' i > ( input : & mut & ' i str , named_placeholders : bool ) -> PResult < Token < ' i > > {
251
+ fn get_placeholder_token < ' i > ( input : & mut & ' i str , named_placeholders : bool ) -> Result < Token < ' i > > {
255
252
// The precedence changes based on 'named_placeholders' but not the exhaustiveness.
256
253
// This is to ensure the formatting is the same even if parameters aren't used.
257
254
@@ -272,7 +269,7 @@ fn get_placeholder_token<'i>(input: &mut &'i str, named_placeholders: bool) -> P
272
269
}
273
270
}
274
271
275
- fn get_indexed_placeholder_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
272
+ fn get_indexed_placeholder_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
276
273
alt ( ( ( one_of ( ( '?' , '$' ) ) , digit1) . take ( ) , "?" ) )
277
274
. parse_next ( input)
278
275
. map ( |token| Token {
@@ -294,7 +291,7 @@ fn get_indexed_placeholder_token<'i>(input: &mut &'i str) -> PResult<Token<'i>>
294
291
} )
295
292
}
296
293
297
- fn get_ident_named_placeholder_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
294
+ fn get_ident_named_placeholder_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
298
295
(
299
296
one_of ( ( '@' , ':' , '$' ) ) ,
300
297
take_while ( 1 .., |item : char | {
@@ -313,7 +310,7 @@ fn get_ident_named_placeholder_token<'i>(input: &mut &'i str) -> PResult<Token<'
313
310
} )
314
311
}
315
312
316
- fn get_string_named_placeholder_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
313
+ fn get_string_named_placeholder_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
317
314
( one_of ( ( '@' , ':' ) ) , get_placeholder_string_token)
318
315
. take ( )
319
316
. parse_next ( input)
@@ -332,7 +329,7 @@ fn get_escaped_placeholder_key<'a>(key: &'a str, quote_char: &str) -> Cow<'a, st
332
329
Cow :: Owned ( key. replace ( & format ! ( "\\ {}" , quote_char) , quote_char) )
333
330
}
334
331
335
- fn get_number_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
332
+ fn get_number_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
336
333
( opt ( "-" ) , alt ( ( scientific_notation, decimal_number, digit1) ) )
337
334
. take ( )
338
335
. parse_next ( input)
@@ -343,11 +340,11 @@ fn get_number_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
343
340
} )
344
341
}
345
342
346
- fn decimal_number < ' i > ( input : & mut & ' i str ) -> PResult < & ' i str > {
343
+ fn decimal_number < ' i > ( input : & mut & ' i str ) -> Result < & ' i str > {
347
344
( digit1, "." , digit0) . take ( ) . parse_next ( input)
348
345
}
349
346
350
- fn scientific_notation < ' i > ( input : & mut & ' i str ) -> PResult < & ' i str > {
347
+ fn scientific_notation < ' i > ( input : & mut & ' i str ) -> Result < & ' i str > {
351
348
(
352
349
alt ( ( decimal_number, digit1) ) ,
353
350
"e" ,
@@ -363,17 +360,17 @@ fn get_reserved_word_token<'a>(
363
360
previous_token : Option < Token < ' a > > ,
364
361
last_reserved_token : Option < Token < ' a > > ,
365
362
last_reserved_top_level_token : Option < Token < ' a > > ,
366
- ) -> PResult < Token < ' a > > {
363
+ ) -> Result < Token < ' a > > {
367
364
// A reserved word cannot be preceded by a "."
368
365
// this makes it so in "my_table.from", "from" is not considered a reserved word
369
366
if let Some ( token) = previous_token {
370
367
if token. value == "." {
371
- return Err ( ErrMode :: from_error_kind ( input, ErrorKind :: Slice ) ) ;
368
+ return Err ( ParserError :: from_input ( input) ) ;
372
369
}
373
370
}
374
371
375
372
if !( 'a' ..='z' , 'A' ..='Z' , '$' ) . contains_token ( input. chars ( ) . next ( ) . unwrap_or ( '\0' ) ) {
376
- return Err ( ErrMode :: from_error_kind ( input, ErrorKind :: Slice ) ) ;
373
+ return Err ( ParserError :: from_input ( input) ) ;
377
374
}
378
375
379
376
alt ( (
@@ -406,7 +403,7 @@ fn get_top_level_reserved_token<'a>(
406
403
let first_char = peek ( any) . parse_next ( input) ?. to_ascii_uppercase ( ) ;
407
404
408
405
// Match keywords based on their first letter
409
- let result: PResult < & str > = match first_char {
406
+ let result: Result < & str > = match first_char {
410
407
'A' => alt ( (
411
408
terminated ( "ADD" , end_of_word) ,
412
409
terminated ( "AFTER" , end_of_word) ,
@@ -462,10 +459,7 @@ fn get_top_level_reserved_token<'a>(
462
459
'W' => terminated ( "WHERE" , end_of_word) . parse_next ( & mut uc_input) ,
463
460
464
461
// If the first character doesn't match any of our keywords, fail early
465
- _ => Err ( ErrMode :: from_error_kind (
466
- & uc_input,
467
- winnow:: error:: ErrorKind :: Tag ,
468
- ) ) ,
462
+ _ => Err ( ParserError :: from_input ( & uc_input) ) ,
469
463
} ;
470
464
471
465
if let Ok ( token) = result {
@@ -490,7 +484,7 @@ fn get_top_level_reserved_token<'a>(
490
484
key : None ,
491
485
} )
492
486
} else {
493
- Err ( ErrMode :: from_error_kind ( input, ErrorKind :: Tag ) )
487
+ Err ( ParserError :: from_input ( input) )
494
488
}
495
489
}
496
490
}
@@ -554,7 +548,7 @@ fn get_newline_reserved_token<'a>(
554
548
) ) ;
555
549
556
550
// Combine all parsers
557
- let result: PResult < & str > = alt ( ( standard_joins, specific_joins, special_joins, operators) )
551
+ let result: Result < & str > = alt ( ( standard_joins, specific_joins, special_joins, operators) )
558
552
. parse_next ( & mut uc_input) ;
559
553
560
554
if let Ok ( token) = result {
@@ -577,16 +571,16 @@ fn get_newline_reserved_token<'a>(
577
571
key : None ,
578
572
} )
579
573
} else {
580
- Err ( ErrMode :: from_error_kind ( input, ErrorKind :: Alt ) )
574
+ Err ( ParserError :: from_input ( input) )
581
575
}
582
576
}
583
577
}
584
578
585
- fn get_top_level_reserved_token_no_indent < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
579
+ fn get_top_level_reserved_token_no_indent < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
586
580
let uc_input = get_uc_words ( input, 2 ) ;
587
581
let mut uc_input = uc_input. as_str ( ) ;
588
582
589
- let result: PResult < & str > = alt ( (
583
+ let result: Result < & str > = alt ( (
590
584
terminated ( "BEGIN" , end_of_word) ,
591
585
terminated ( "DECLARE" , end_of_word) ,
592
586
terminated ( "INTERSECT" , end_of_word) ,
@@ -608,19 +602,19 @@ fn get_top_level_reserved_token_no_indent<'i>(input: &mut &'i str) -> PResult<To
608
602
key : None ,
609
603
} )
610
604
} else {
611
- Err ( ErrMode :: from_error_kind ( input, ErrorKind :: Alt ) )
605
+ Err ( ParserError :: from_input ( input) )
612
606
}
613
607
}
614
- fn get_plain_reserved_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
608
+ fn get_plain_reserved_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
615
609
alt ( ( get_plain_reserved_two_token, get_plain_reserved_one_token) ) . parse_next ( input)
616
610
}
617
- fn get_plain_reserved_one_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
611
+ fn get_plain_reserved_one_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
618
612
let uc_input = get_uc_words ( input, 1 ) ;
619
613
let mut uc_input = uc_input. as_str ( ) ;
620
614
621
615
let first_char = peek ( any) . parse_next ( input) ?. to_ascii_uppercase ( ) ;
622
616
623
- let result: PResult < & str > = match first_char {
617
+ let result: Result < & str > = match first_char {
624
618
'A' => alt ( (
625
619
terminated ( "ACCESSIBLE" , end_of_word) ,
626
620
terminated ( "ACTION" , end_of_word) ,
@@ -995,10 +989,7 @@ fn get_plain_reserved_one_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
995
989
996
990
'Y' => alt ( ( terminated ( "YEAR_MONTH" , end_of_word) , ) ) . parse_next ( & mut uc_input) ,
997
991
// If the first character doesn't match any of our keywords, fail early
998
- _ => Err ( ErrMode :: from_error_kind (
999
- & uc_input,
1000
- winnow:: error:: ErrorKind :: Tag ,
1001
- ) ) ,
992
+ _ => Err ( ParserError :: from_input ( & uc_input) ) ,
1002
993
} ;
1003
994
if let Ok ( token) = result {
1004
995
let input_end_pos = token. len ( ) ;
@@ -1009,14 +1000,14 @@ fn get_plain_reserved_one_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
1009
1000
key : None ,
1010
1001
} )
1011
1002
} else {
1012
- Err ( ErrMode :: from_error_kind ( input, ErrorKind :: Alt ) )
1003
+ Err ( ParserError :: from_input ( input) )
1013
1004
}
1014
1005
}
1015
1006
1016
- fn get_plain_reserved_two_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
1007
+ fn get_plain_reserved_two_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
1017
1008
let uc_input = get_uc_words ( input, 2 ) ;
1018
1009
let mut uc_input = uc_input. as_str ( ) ;
1019
- let result: PResult < & str > = alt ( (
1010
+ let result: Result < & str > = alt ( (
1020
1011
terminated ( "CHARACTER SET" , end_of_word) ,
1021
1012
terminated ( "ON DELETE" , end_of_word) ,
1022
1013
terminated ( "ON UPDATE" , end_of_word) ,
@@ -1032,11 +1023,11 @@ fn get_plain_reserved_two_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
1032
1023
key : None ,
1033
1024
} )
1034
1025
} else {
1035
- Err ( ErrMode :: from_error_kind ( input, ErrorKind :: Alt ) )
1026
+ Err ( ParserError :: from_input ( input) )
1036
1027
}
1037
1028
}
1038
1029
1039
- fn get_word_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
1030
+ fn get_word_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
1040
1031
take_while ( 1 .., is_word_character)
1041
1032
. parse_next ( input)
1042
1033
. map ( |token| Token {
@@ -1046,7 +1037,7 @@ fn get_word_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
1046
1037
} )
1047
1038
}
1048
1039
1049
- fn get_operator_token < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
1040
+ fn get_operator_token < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
1050
1041
// Define the allowed operator characters
1051
1042
let allowed_operators = (
1052
1043
'!' , '<' , '>' , '=' , '|' , ':' , '-' , '~' , '*' , '&' , '@' , '^' , '?' , '#' , '/' , '%' ,
@@ -1060,7 +1051,7 @@ fn get_operator_token<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
1060
1051
} )
1061
1052
. parse_next ( input)
1062
1053
}
1063
- fn get_any_other_char < ' i > ( input : & mut & ' i str ) -> PResult < Token < ' i > > {
1054
+ fn get_any_other_char < ' i > ( input : & mut & ' i str ) -> Result < Token < ' i > > {
1064
1055
one_of ( |token| token != '\n' && token != '\r' )
1065
1056
. take ( )
1066
1057
. parse_next ( input)
@@ -1071,7 +1062,7 @@ fn get_any_other_char<'i>(input: &mut &'i str) -> PResult<Token<'i>> {
1071
1062
} )
1072
1063
}
1073
1064
1074
- fn end_of_word < ' i > ( input : & mut & ' i str ) -> PResult < & ' i str > {
1065
+ fn end_of_word < ' i > ( input : & mut & ' i str ) -> Result < & ' i str > {
1075
1066
peek ( alt ( (
1076
1067
eof,
1077
1068
one_of ( |val : char | !is_word_character ( val) ) . take ( ) ,
0 commit comments