From b9708a9bfd40d26acc5a3f58f056968c8515521e Mon Sep 17 00:00:00 2001 From: Haibo Huang Date: Fri, 29 May 2020 00:41:33 -0700 Subject: Upgrade rust/crates/paste-impl to 0.1.15 Test: None Change-Id: I9dc8532d6df2e60b4ccd36e4aa445b932fab910c --- .cargo_vcs_info.json | 2 +- Cargo.toml | 2 +- Cargo.toml.orig | 2 +- METADATA | 4 ++-- src/lib.rs | 26 +++++++++++++++++++++----- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json index 1347e27..40fcd29 100644 --- a/.cargo_vcs_info.json +++ b/.cargo_vcs_info.json @@ -1,5 +1,5 @@ { "git": { - "sha1": "157559c3faf524ae24f8329537d2a763f6e18931" + "sha1": "b5ce9a40b201ffe985e13260f6b0fa9ef5330fd7" } } diff --git a/Cargo.toml b/Cargo.toml index 97a4cab..92a7a9a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ [package] edition = "2018" name = "paste-impl" -version = "0.1.14" +version = "0.1.15" authors = ["David Tolnay "] description = "Implementation detail of the `paste` crate" license = "MIT OR Apache-2.0" diff --git a/Cargo.toml.orig b/Cargo.toml.orig index 80d2071..72a12ad 100644 --- a/Cargo.toml.orig +++ b/Cargo.toml.orig @@ -1,6 +1,6 @@ [package] name = "paste-impl" -version = "0.1.14" +version = "0.1.15" authors = ["David Tolnay "] edition = "2018" license = "MIT OR Apache-2.0" diff --git a/METADATA b/METADATA index 2b0d5de..4cb5af3 100644 --- a/METADATA +++ b/METADATA @@ -9,11 +9,11 @@ third_party { type: GIT value: "https://github.com/dtolnay/paste" } - version: "0.1.14" + version: "0.1.15" license_type: NOTICE last_upgrade_date { year: 2020 month: 5 - day: 25 + day: 29 } } diff --git a/src/lib.rs b/src/lib.rs index 1c762d9..2feee4c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -56,15 +56,14 @@ fn parse(input: ParseStream, contains_paste: &mut bool) -> Result { let delimiter = group.delimiter(); let content = group.stream(); let span = group.span(); - let in_path = prev_colons || input.peek(Token![::]); if delimiter == Delimiter::Bracket && is_paste_operation(&content) { let segments = parse_bracket_as_segments.parse2(content)?; let pasted = paste_segments(span, &segments)?; pasted.to_tokens(&mut expanded); *contains_paste = true; - } else if is_none_delimited_single_ident_or_lifetime(delimiter, &content) { + } else if is_none_delimited_flat_group(delimiter, &content) { content.to_tokens(&mut expanded); - *contains_paste |= in_path; + *contains_paste = true; } else { let mut group_contains_paste = false; let nested = (|input: ParseStream| parse(input, &mut group_contains_paste)) @@ -77,6 +76,7 @@ fn parse(input: ParseStream, contains_paste: &mut bool) -> Result { } else { group.clone() }; + let in_path = prev_colons || input.peek(Token![::]); if in_path && delimiter == Delimiter::None { group.stream().to_tokens(&mut expanded); *contains_paste = true; @@ -99,7 +99,7 @@ fn is_paste_operation(input: &TokenStream) -> bool { } // https://github.com/dtolnay/paste/issues/26 -fn is_none_delimited_single_ident_or_lifetime(delimiter: Delimiter, input: &TokenStream) -> bool { +fn is_none_delimited_flat_group(delimiter: Delimiter, input: &TokenStream) -> bool { if delimiter != Delimiter::None { return false; } @@ -108,20 +108,36 @@ fn is_none_delimited_single_ident_or_lifetime(delimiter: Delimiter, input: &Toke enum State { Init, Ident, + Literal, Apostrophe, Lifetime, + Colon1, + Colon2, } let mut state = State::Init; for tt in input.clone() { state = match (state, &tt) { (State::Init, TokenTree::Ident(_)) => State::Ident, + (State::Init, TokenTree::Literal(_)) => State::Literal, (State::Init, TokenTree::Punct(punct)) if punct.as_char() == '\'' => State::Apostrophe, (State::Apostrophe, TokenTree::Ident(_)) => State::Lifetime, + (State::Ident, TokenTree::Punct(punct)) + if punct.as_char() == ':' && punct.spacing() == Spacing::Joint => + { + State::Colon1 + } + (State::Colon1, TokenTree::Punct(punct)) + if punct.as_char() == ':' && punct.spacing() == Spacing::Alone => + { + State::Colon2 + } + (State::Colon2, TokenTree::Ident(_)) => State::Ident, _ => return false, }; } - state == State::Ident || state == State::Lifetime + + state == State::Ident || state == State::Literal || state == State::Lifetime } enum Segment { -- cgit v1.2.3