@@ -78,54 +78,52 @@ impl EscapeError {
78
78
/// Takes a contents of a literal (without quotes) and produces a
79
79
/// sequence of escaped characters or errors.
80
80
/// Values are returned through invoking of the provided callback.
81
- pub fn unescape_literal < F > ( literal_text : & str , mode : Mode , callback : & mut F )
81
+ pub fn unescape_literal < F > ( src : & str , mode : Mode , callback : & mut F )
82
82
where
83
83
F : FnMut ( Range < usize > , Result < char , EscapeError > ) ,
84
84
{
85
85
match mode {
86
86
Mode :: Char | Mode :: Byte => {
87
- let mut chars = literal_text . chars ( ) ;
87
+ let mut chars = src . chars ( ) ;
88
88
let result = unescape_char_or_byte ( & mut chars, mode) ;
89
89
// The Chars iterator moved forward.
90
- callback ( 0 ..( literal_text . len ( ) - chars. as_str ( ) . len ( ) ) , result) ;
90
+ callback ( 0 ..( src . len ( ) - chars. as_str ( ) . len ( ) ) , result) ;
91
91
}
92
- Mode :: Str | Mode :: ByteStr => unescape_str_or_byte_str ( literal_text , mode, callback) ,
92
+ Mode :: Str | Mode :: ByteStr => unescape_str_or_byte_str ( src , mode, callback) ,
93
93
// NOTE: Raw strings do not perform any explicit character escaping, here we
94
94
// only translate CRLF to LF and produce errors on bare CR.
95
- Mode :: RawStr | Mode :: RawByteStr => {
96
- unescape_raw_str_or_raw_byte_str ( literal_text, mode, callback)
97
- }
95
+ Mode :: RawStr | Mode :: RawByteStr => unescape_raw_str_or_raw_byte_str ( src, mode, callback) ,
98
96
}
99
97
}
100
98
101
99
/// Takes a contents of a byte, byte string or raw byte string (without quotes)
102
100
/// and produces a sequence of bytes or errors.
103
101
/// Values are returned through invoking of the provided callback.
104
- pub fn unescape_byte_literal < F > ( literal_text : & str , mode : Mode , callback : & mut F )
102
+ pub fn unescape_byte_literal < F > ( src : & str , mode : Mode , callback : & mut F )
105
103
where
106
104
F : FnMut ( Range < usize > , Result < u8 , EscapeError > ) ,
107
105
{
108
106
debug_assert ! ( mode. is_bytes( ) ) ;
109
- unescape_literal ( literal_text , mode, & mut |range, result| {
107
+ unescape_literal ( src , mode, & mut |range, result| {
110
108
callback ( range, result. map ( byte_from_char) ) ;
111
109
} )
112
110
}
113
111
114
112
/// Takes a contents of a char literal (without quotes), and returns an
115
113
/// unescaped char or an error
116
- pub fn unescape_char ( literal_text : & str ) -> Result < char , ( usize , EscapeError ) > {
117
- let mut chars = literal_text . chars ( ) ;
114
+ pub fn unescape_char ( src : & str ) -> Result < char , ( usize , EscapeError ) > {
115
+ let mut chars = src . chars ( ) ;
118
116
unescape_char_or_byte ( & mut chars, Mode :: Char )
119
- . map_err ( |err| ( literal_text . len ( ) - chars. as_str ( ) . len ( ) , err) )
117
+ . map_err ( |err| ( src . len ( ) - chars. as_str ( ) . len ( ) , err) )
120
118
}
121
119
122
120
/// Takes a contents of a byte literal (without quotes), and returns an
123
121
/// unescaped byte or an error.
124
- pub fn unescape_byte ( literal_text : & str ) -> Result < u8 , ( usize , EscapeError ) > {
125
- let mut chars = literal_text . chars ( ) ;
122
+ pub fn unescape_byte ( src : & str ) -> Result < u8 , ( usize , EscapeError ) > {
123
+ let mut chars = src . chars ( ) ;
126
124
unescape_char_or_byte ( & mut chars, Mode :: Byte )
127
125
. map ( byte_from_char)
128
- . map_err ( |err| ( literal_text . len ( ) - chars. as_str ( ) . len ( ) , err) )
126
+ . map_err ( |err| ( src . len ( ) - chars. as_str ( ) . len ( ) , err) )
129
127
}
130
128
131
129
/// What kind of literal do we parse.
@@ -157,10 +155,7 @@ impl Mode {
157
155
158
156
fn scan_escape ( chars : & mut Chars < ' _ > , mode : Mode ) -> Result < char , EscapeError > {
159
157
// Previous character was '\\', unescape what follows.
160
-
161
- let second_char = chars. next ( ) . ok_or ( EscapeError :: LoneSlash ) ?;
162
-
163
- let res = match second_char {
158
+ let res = match chars. next ( ) . ok_or ( EscapeError :: LoneSlash ) ? {
164
159
'"' => '"' ,
165
160
'n' => '\n' ,
166
161
'r' => '\r' ,
@@ -249,23 +244,23 @@ fn scan_escape(chars: &mut Chars<'_>, mode: Mode) -> Result<char, EscapeError> {
249
244
}
250
245
251
246
#[ inline]
252
- fn ascii_check ( first_char : char , mode : Mode ) -> Result < char , EscapeError > {
253
- if mode. is_bytes ( ) && !first_char . is_ascii ( ) {
247
+ fn ascii_check ( c : char , mode : Mode ) -> Result < char , EscapeError > {
248
+ if mode. is_bytes ( ) && !c . is_ascii ( ) {
254
249
// Byte literal can't be a non-ascii character.
255
250
Err ( EscapeError :: NonAsciiCharInByte )
256
251
} else {
257
- Ok ( first_char )
252
+ Ok ( c )
258
253
}
259
254
}
260
255
261
256
fn unescape_char_or_byte ( chars : & mut Chars < ' _ > , mode : Mode ) -> Result < char , EscapeError > {
262
257
debug_assert ! ( mode == Mode :: Char || mode == Mode :: Byte ) ;
263
- let first_char = chars. next ( ) . ok_or ( EscapeError :: ZeroChars ) ?;
264
- let res = match first_char {
258
+ let c = chars. next ( ) . ok_or ( EscapeError :: ZeroChars ) ?;
259
+ let res = match c {
265
260
'\\' => scan_escape ( chars, mode) ,
266
261
'\n' | '\t' | '\'' => Err ( EscapeError :: EscapeOnlyChar ) ,
267
262
'\r' => Err ( EscapeError :: BareCarriageReturn ) ,
268
- _ => ascii_check ( first_char , mode) ,
263
+ _ => ascii_check ( c , mode) ,
269
264
} ?;
270
265
if chars. next ( ) . is_some ( ) {
271
266
return Err ( EscapeError :: MoreThanOneChar ) ;
@@ -282,13 +277,12 @@ where
282
277
debug_assert ! ( mode == Mode :: Str || mode == Mode :: ByteStr ) ;
283
278
let initial_len = src. len ( ) ;
284
279
let mut chars = src. chars ( ) ;
285
- while let Some ( first_char ) = chars. next ( ) {
286
- let start = initial_len - chars. as_str ( ) . len ( ) - first_char . len_utf8 ( ) ;
280
+ while let Some ( c ) = chars. next ( ) {
281
+ let start = initial_len - chars. as_str ( ) . len ( ) - c . len_utf8 ( ) ;
287
282
288
- let unescaped_char = match first_char {
283
+ let result = match c {
289
284
'\\' => {
290
- let second_char = chars. clone ( ) . next ( ) ;
291
- match second_char {
285
+ match chars. clone ( ) . next ( ) {
292
286
Some ( '\n' ) => {
293
287
// Rust language specification requires us to skip whitespaces
294
288
// if unescaped '\' character is followed by '\n'.
@@ -304,10 +298,10 @@ where
304
298
'\t' => Ok ( '\t' ) ,
305
299
'"' => Err ( EscapeError :: EscapeOnlyChar ) ,
306
300
'\r' => Err ( EscapeError :: BareCarriageReturn ) ,
307
- _ => ascii_check ( first_char , mode) ,
301
+ _ => ascii_check ( c , mode) ,
308
302
} ;
309
303
let end = initial_len - chars. as_str ( ) . len ( ) ;
310
- callback ( start..end, unescaped_char ) ;
304
+ callback ( start..end, result ) ;
311
305
}
312
306
313
307
fn skip_ascii_whitespace < F > ( chars : & mut Chars < ' _ > , start : usize , callback : & mut F )
@@ -341,18 +335,18 @@ where
341
335
/// sequence of characters or errors.
342
336
/// NOTE: Raw strings do not perform any explicit character escaping, here we
343
337
/// only translate CRLF to LF and produce errors on bare CR.
344
- fn unescape_raw_str_or_raw_byte_str < F > ( literal_text : & str , mode : Mode , callback : & mut F )
338
+ fn unescape_raw_str_or_raw_byte_str < F > ( src : & str , mode : Mode , callback : & mut F )
345
339
where
346
340
F : FnMut ( Range < usize > , Result < char , EscapeError > ) ,
347
341
{
348
342
debug_assert ! ( mode == Mode :: RawStr || mode == Mode :: RawByteStr ) ;
349
- let initial_len = literal_text . len ( ) ;
343
+ let initial_len = src . len ( ) ;
350
344
351
- let mut chars = literal_text . chars ( ) ;
352
- while let Some ( curr ) = chars. next ( ) {
353
- let start = initial_len - chars. as_str ( ) . len ( ) - curr . len_utf8 ( ) ;
345
+ let mut chars = src . chars ( ) ;
346
+ while let Some ( c ) = chars. next ( ) {
347
+ let start = initial_len - chars. as_str ( ) . len ( ) - c . len_utf8 ( ) ;
354
348
355
- let result = match curr {
349
+ let result = match c {
356
350
'\r' => Err ( EscapeError :: BareCarriageReturnInRawString ) ,
357
351
c if mode. is_bytes ( ) && !c. is_ascii ( ) => Err ( EscapeError :: NonAsciiCharInByteString ) ,
358
352
c => Ok ( c) ,
0 commit comments