@@ -7,28 +7,29 @@ pub(crate) mod printf {
7
7
pub enum Substitution < ' a > {
8
8
/// A formatted output substitution with its internal byte offset.
9
9
Format ( Format < ' a > ) ,
10
- /// A literal `%%` escape.
11
- Escape ,
10
+ /// A literal `%%` escape, with its start and end indices .
11
+ Escape ( ( usize , usize ) ) ,
12
12
}
13
13
14
14
impl < ' a > Substitution < ' a > {
15
15
pub fn as_str ( & self ) -> & str {
16
16
match * self {
17
17
Substitution :: Format ( ref fmt) => fmt. span ,
18
- Substitution :: Escape => "%%" ,
18
+ Substitution :: Escape ( _ ) => "%%" ,
19
19
}
20
20
}
21
21
22
22
pub fn position ( & self ) -> Option < InnerSpan > {
23
23
match * self {
24
24
Substitution :: Format ( ref fmt) => Some ( fmt. position ) ,
25
- _ => None ,
25
+ Substitution :: Escape ( ( start , end ) ) => Some ( InnerSpan :: new ( start , end ) ) ,
26
26
}
27
27
}
28
28
29
29
pub fn set_position ( & mut self , start : usize , end : usize ) {
30
- if let Substitution :: Format ( ref mut fmt) = self {
31
- fmt. position = InnerSpan :: new ( start, end) ;
30
+ match self {
31
+ Substitution :: Format ( ref mut fmt) => fmt. position = InnerSpan :: new ( start, end) ,
32
+ Substitution :: Escape ( ref mut pos) => * pos = ( start, end) ,
32
33
}
33
34
}
34
35
@@ -39,7 +40,7 @@ pub(crate) mod printf {
39
40
pub fn translate ( & self ) -> Result < String , Option < String > > {
40
41
match * self {
41
42
Substitution :: Format ( ref fmt) => fmt. translate ( ) ,
42
- Substitution :: Escape => Err ( None ) ,
43
+ Substitution :: Escape ( _ ) => Err ( None ) ,
43
44
}
44
45
}
45
46
}
@@ -304,14 +305,9 @@ pub(crate) mod printf {
304
305
fn next ( & mut self ) -> Option < Self :: Item > {
305
306
let ( mut sub, tail) = parse_next_substitution ( self . s ) ?;
306
307
self . s = tail;
307
- match sub {
308
- Substitution :: Format ( _) => {
309
- if let Some ( inner_span) = sub. position ( ) {
310
- sub. set_position ( inner_span. start + self . pos , inner_span. end + self . pos ) ;
311
- self . pos += inner_span. end ;
312
- }
313
- }
314
- Substitution :: Escape => self . pos += 2 ,
308
+ if let Some ( InnerSpan { start, end } ) = sub. position ( ) {
309
+ sub. set_position ( start + self . pos , end + self . pos ) ;
310
+ self . pos += end;
315
311
}
316
312
Some ( sub)
317
313
}
@@ -340,7 +336,7 @@ pub(crate) mod printf {
340
336
let at = {
341
337
let start = s. find ( '%' ) ?;
342
338
if let '%' = s[ start + 1 ..] . chars ( ) . next ( ) ? {
343
- return Some ( ( Substitution :: Escape , & s[ start + 2 ..] ) ) ;
339
+ return Some ( ( Substitution :: Escape ( ( start , start + 2 ) ) , & s[ start + 2 ..] ) ) ;
344
340
}
345
341
346
342
Cur :: new_at ( s, start)
0 commit comments