diff options
author | Elliott Hughes <enh@google.com> | 2021-04-02 03:01:33 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-04-02 03:01:33 +0000 |
commit | c93282a9e490317571f250916b717b2279b7c2da (patch) | |
tree | 4f65437682237a2c6bbafef186110d3bed2fd832 /src | |
parent | 0edfd8ecdbd3965e77e3fdcf2500622b76a92783 (diff) | |
parent | d4dc85c6ab4796aaef7b978d8c52db25aeaf12e4 (diff) | |
download | paste-c93282a9e490317571f250916b717b2279b7c2da.tar.gz |
Upgrade rust/crates/paste to 1.0.5 am: de10f9892e am: a4b1d5f3be am: d4dc85c6abandroid-12.1.0_r9android-12.1.0_r8android-12.1.0_r7android-12.1.0_r26android-12.1.0_r25android-12.1.0_r24android-12.1.0_r23android-12.1.0_r22android-12.1.0_r21android-12.1.0_r20android-12.1.0_r19android-12.1.0_r18android-12.1.0_r17android-12.1.0_r16android-12.1.0_r15android-12.1.0_r14android-12.1.0_r13android-12.1.0_r12android-12.1.0_r11android-12.1.0_r10android-12.0.0_r32android-12.0.0_r29android-12.0.0_r28android-12.0.0_r27android-12.0.0_r26android-12.0.0_r21android-12.0.0_r20android-12.0.0_r19android-12.0.0_r18android-12.0.0_r16android12L-devandroid12L-d2-s8-releaseandroid12L-d2-s7-releaseandroid12L-d2-s6-releaseandroid12L-d2-s5-releaseandroid12L-d2-s4-releaseandroid12L-d2-s3-releaseandroid12L-d2-s2-releaseandroid12L-d2-s1-releaseandroid12L-d2-releaseandroid12-qpr3-s7-releaseandroid12-qpr3-s6-releaseandroid12-qpr3-s5-releaseandroid12-qpr3-s4-releaseandroid12-qpr3-s3-releaseandroid12-qpr3-s2-releaseandroid12-qpr3-s1-releaseandroid12-qpr3-releaseandroid12-qpr1-releaseandroid12-qpr1-d-s3-releaseandroid12-qpr1-d-s2-releaseandroid12-qpr1-d-s1-releaseandroid12-qpr1-d-releaseandroid12-dev
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/paste/+/1662960
Change-Id: I6497b6de17877b8f36ac46d6e9d6641a69f95fe5
Diffstat (limited to 'src')
-rw-r--r-- | src/attr.rs | 2 | ||||
-rw-r--r-- | src/lib.rs | 38 |
2 files changed, 29 insertions, 11 deletions
diff --git a/src/attr.rs b/src/attr.rs index be64a79..8626d11 100644 --- a/src/attr.rs +++ b/src/attr.rs @@ -63,7 +63,7 @@ pub fn expand_attr( let mut group_contains_paste = false; let mut expanded = TokenStream::new(); let mut nested_attr = TokenStream::new(); - for tt in group.stream().into_iter() { + for tt in group.stream() { match &tt { TokenTree::Punct(punct) if punct.as_char() == ',' => { expanded.extend(expand_attr( @@ -132,11 +132,17 @@ //! }; //! } //! -//! # struct Paste; +//! pub struct Paste {} +//! //! method_new!(Paste); // expands to #[doc = "Create a new `Paste` object"] //! ``` -#![allow(clippy::needless_doctest_main)] +#![allow( + clippy::doc_markdown, + clippy::module_name_repetitions, + clippy::needless_doctest_main, + clippy::too_many_lines +)] extern crate proc_macro; @@ -154,7 +160,8 @@ use std::panic; #[proc_macro] pub fn paste(input: TokenStream) -> TokenStream { let mut contains_paste = false; - match expand(input, &mut contains_paste) { + let flatten_single_interpolation = true; + match expand(input, &mut contains_paste, flatten_single_interpolation) { Ok(expanded) => expanded, Err(err) => err.to_compile_error(), } @@ -172,7 +179,11 @@ pub fn expr(input: TokenStream) -> TokenStream { paste(input) } -fn expand(input: TokenStream, contains_paste: &mut bool) -> Result<TokenStream> { +fn expand( + input: TokenStream, + contains_paste: &mut bool, + flatten_single_interpolation: bool, +) -> Result<TokenStream> { let mut expanded = TokenStream::new(); let mut lookbehind = Lookbehind::Other; let mut prev_none_group = None::<Group>; @@ -203,15 +214,22 @@ fn expand(input: TokenStream, contains_paste: &mut bool) -> Result<TokenStream> let tokens = pasted_to_tokens(pasted, span)?; expanded.extend(tokens); *contains_paste = true; - } else if delimiter == Delimiter::None && is_flat_group(&content) { + } else if flatten_single_interpolation + && delimiter == Delimiter::None + && is_single_interpolation_group(&content) + { expanded.extend(content); *contains_paste = true; } else { let mut group_contains_paste = false; - let mut nested = expand(content, &mut group_contains_paste)?; - if delimiter == Delimiter::Bracket - && (lookbehind == Lookbehind::Pound || lookbehind == Lookbehind::PoundBang) - { + let is_attribute = delimiter == Delimiter::Bracket + && (lookbehind == Lookbehind::Pound || lookbehind == Lookbehind::PoundBang); + let mut nested = expand( + content, + &mut group_contains_paste, + flatten_single_interpolation && !is_attribute, + )?; + if is_attribute { nested = expand_attr(nested, span, &mut group_contains_paste)? } let group = if group_contains_paste { @@ -262,7 +280,7 @@ enum Lookbehind { } // https://github.com/dtolnay/paste/issues/26 -fn is_flat_group(input: &TokenStream) -> bool { +fn is_single_interpolation_group(input: &TokenStream) -> bool { #[derive(PartialEq)] enum State { Init, |