@@ -75,7 +75,6 @@ pub fn parse_selection_char(buffer: &str, marker: char) -> ParseResult<'_> {
7575 let mut input = buffer. chars ( ) . peekable ( ) ;
7676
7777 let mut index = 0 ;
78- let mut action = ParseAction :: ForwardSearch ;
7978 while let Some ( char) = input. next ( ) {
8079 if char == marker {
8180 match input. peek ( ) {
@@ -102,12 +101,15 @@ pub fn parse_selection_char(buffer: &str, marker: char) -> ParseResult<'_> {
102101 Some ( & x) if x. is_ascii_digit ( ) || x == '-' => {
103102 let mut count: usize = 0 ;
104103 let mut size: usize = marker. len_utf8 ( ) ;
104+ let action = if x == '-' {
105+ size += 1 ;
106+ let _ = input. next ( ) ;
107+ ParseAction :: BackwardSearch
108+ } else {
109+ ParseAction :: ForwardSearch
110+ } ;
105111 while let Some ( & c) = input. peek ( ) {
106- if c == '-' {
107- let _ = input. next ( ) ;
108- size += 1 ;
109- action = ParseAction :: BackwardSearch ;
110- } else if c. is_ascii_digit ( ) {
112+ if c. is_ascii_digit ( ) {
111113 let c = c. to_digit ( 10 ) . expect ( "already checked if is a digit" ) ;
112114 let _ = input. next ( ) ;
113115 count *= 10 ;
@@ -146,7 +148,7 @@ pub fn parse_selection_char(buffer: &str, marker: char) -> ParseResult<'_> {
146148 remainder : & buffer[ 0 ..index] ,
147149 index : Some ( 0 ) ,
148150 marker : Some ( & buffer[ index..buffer. len ( ) ] ) ,
149- action,
151+ action : ParseAction :: ForwardSearch ,
150152 prefix : Some ( & buffer[ index..buffer. len ( ) ] ) ,
151153 }
152154 }
@@ -160,7 +162,7 @@ pub fn parse_selection_char(buffer: &str, marker: char) -> ParseResult<'_> {
160162 remainder : buffer,
161163 index : None ,
162164 marker : None ,
163- action,
165+ action : ParseAction :: ForwardSearch ,
164166 prefix : None ,
165167 }
166168}
0 commit comments