Skip to content

Commit 48f99b0

Browse files
authored
Merge pull request #1625 from dtolnay/peek
Improve how None-delimited groups are counted by peek
2 parents 9f00b23 + 4b18c15 commit 48f99b0

File tree

3 files changed

+9
-17
lines changed

3 files changed

+9
-17
lines changed

src/buffer.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -346,11 +346,13 @@ impl<'a> Cursor<'a> {
346346
self.span()
347347
}
348348

349-
/// Skip over the next token without cloning it. Returns `None` if this
350-
/// cursor points to eof.
349+
/// Skip over the next token that is not a None-delimited group, without
350+
/// cloning it. Returns `None` if this cursor points to eof.
351351
///
352352
/// This method treats `'lifetimes` as a single token.
353-
pub(crate) fn skip(self) -> Option<Cursor<'a>> {
353+
pub(crate) fn skip(mut self) -> Option<Cursor<'a>> {
354+
self.ignore_none();
355+
354356
let len = match self.entry() {
355357
Entry::End(_) => return None,
356358

src/parse.rs

-10
Original file line numberDiff line numberDiff line change
@@ -614,11 +614,6 @@ impl<'a> ParseBuffer<'a> {
614614
/// ```
615615
pub fn peek2<T: Peek>(&self, token: T) -> bool {
616616
fn peek2(buffer: &ParseBuffer, peek: fn(Cursor) -> bool) -> bool {
617-
if let Some(group) = buffer.cursor().group(Delimiter::None) {
618-
if group.0.skip().map_or(false, peek) {
619-
return true;
620-
}
621-
}
622617
buffer.cursor().skip().map_or(false, peek)
623618
}
624619

@@ -629,11 +624,6 @@ impl<'a> ParseBuffer<'a> {
629624
/// Looks at the third-next token in the parse stream.
630625
pub fn peek3<T: Peek>(&self, token: T) -> bool {
631626
fn peek3(buffer: &ParseBuffer, peek: fn(Cursor) -> bool) -> bool {
632-
if let Some(group) = buffer.cursor().group(Delimiter::None) {
633-
if group.0.skip().and_then(Cursor::skip).map_or(false, peek) {
634-
return true;
635-
}
636-
}
637627
buffer
638628
.cursor()
639629
.skip()

tests/test_parse_stream.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ fn test_peek_groups() {
136136
assert!(!input.peek2(Token![::]));
137137
assert!(input.peek2(Token![!]));
138138
assert!(input.peek2(token::Group));
139-
assert!(!input.peek3(Token![=])); // FIXME
140-
assert!(input.peek3(Token![static])); // FIXME
139+
assert!(input.peek3(Token![=]));
140+
assert!(!input.peek3(Token![static]));
141141

142142
let content;
143143
parenthesized!(content in input);
@@ -155,8 +155,8 @@ fn test_peek_groups() {
155155
assert!(input.peek(token::Group));
156156
assert!(input.peek(Token![!]));
157157
assert!(input.peek2(Token![=]));
158-
assert!(!input.peek3(Token![static])); // FIXME
159-
assert!(input.peek2(Token![static])); // FIXME
158+
assert!(input.peek3(Token![static]));
159+
assert!(!input.peek2(Token![static]));
160160

161161
let _: Token![!] = input.parse()?;
162162

0 commit comments

Comments
 (0)