aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2021-04-03 03:05:02 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2021-04-03 03:05:02 +0000
commitad2434ef54e2f8cbbbe0888c18d12873c3a1b04b (patch)
tree4f65437682237a2c6bbafef186110d3bed2fd832
parent6fa8cef43029fa0b0ffc73b92d8fae432818736b (diff)
parentc93282a9e490317571f250916b717b2279b7c2da (diff)
downloadpaste-android12-tests-release.tar.gz
Snap for 7256110 from c93282a9e490317571f250916b717b2279b7c2da to sc-releaseandroid-vts-12.0_r9android-vts-12.0_r8android-vts-12.0_r7android-vts-12.0_r6android-vts-12.0_r5android-vts-12.0_r4android-vts-12.0_r3android-vts-12.0_r2android-vts-12.0_r12android-vts-12.0_r11android-vts-12.0_r10android-vts-12.0_r1android-security-12.0.0_r59android-security-12.0.0_r58android-security-12.0.0_r57android-security-12.0.0_r56android-security-12.0.0_r55android-security-12.0.0_r54android-security-12.0.0_r53android-security-12.0.0_r52android-security-12.0.0_r51android-security-12.0.0_r50android-security-12.0.0_r49android-security-12.0.0_r48android-security-12.0.0_r47android-security-12.0.0_r46android-security-12.0.0_r45android-security-12.0.0_r44android-security-12.0.0_r43android-security-12.0.0_r42android-security-12.0.0_r41android-security-12.0.0_r40android-security-12.0.0_r39android-security-12.0.0_r38android-security-12.0.0_r37android-security-12.0.0_r36android-security-12.0.0_r35android-security-12.0.0_r34android-security-11.0.0_r71android-platform-12.0.0_r9android-platform-12.0.0_r8android-platform-12.0.0_r7android-platform-12.0.0_r6android-platform-12.0.0_r5android-platform-12.0.0_r4android-platform-12.0.0_r31android-platform-12.0.0_r30android-platform-12.0.0_r3android-platform-12.0.0_r29android-platform-12.0.0_r28android-platform-12.0.0_r27android-platform-12.0.0_r26android-platform-12.0.0_r25android-platform-12.0.0_r24android-platform-12.0.0_r23android-platform-12.0.0_r22android-platform-12.0.0_r21android-platform-12.0.0_r20android-platform-12.0.0_r2android-platform-12.0.0_r19android-platform-12.0.0_r18android-platform-12.0.0_r17android-platform-12.0.0_r16android-platform-12.0.0_r15android-platform-12.0.0_r14android-platform-12.0.0_r13android-platform-12.0.0_r12android-platform-12.0.0_r11android-platform-12.0.0_r10android-platform-12.0.0_r1android-cts-12.0_r9android-cts-12.0_r8android-cts-12.0_r7android-cts-12.0_r6android-cts-12.0_r5android-cts-12.0_r4android-cts-12.0_r3android-cts-12.0_r2android-cts-12.0_r12android-cts-12.0_r11android-cts-12.0_r10android-cts-12.0_r1android-12.0.0_r9android-12.0.0_r8android-12.0.0_r34android-12.0.0_r33android-12.0.0_r31android-12.0.0_r30android-12.0.0_r3android-12.0.0_r25android-12.0.0_r2android-12.0.0_r11android-12.0.0_r10android-12.0.0_r1android12-tests-releaseandroid12-security-releaseandroid12-s5-releaseandroid12-s4-releaseandroid12-s3-releaseandroid12-s2-releaseandroid12-s1-releaseandroid12-releaseandroid12-platform-release
Change-Id: If7522348434a9f5599f04ee45737ccdf8cd185d5
-rw-r--r--.cargo_vcs_info.json2
-rw-r--r--.clippy.toml1
-rw-r--r--.github/workflows/ci.yml2
-rw-r--r--Android.bp1
-rw-r--r--Cargo.toml2
-rw-r--r--Cargo.toml.orig2
-rw-r--r--METADATA10
-rw-r--r--README.md2
-rw-r--r--src/attr.rs2
-rw-r--r--src/lib.rs38
-rw-r--r--tests/test_doc.rs23
11 files changed, 65 insertions, 20 deletions
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index 5163423..bd3aebb 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
{
"git": {
- "sha1": "3eb762421182b53411e58ff93765b5604ed89c8b"
+ "sha1": "b38636e38862f1df2c7b167073b022fcc8819a05"
}
}
diff --git a/.clippy.toml b/.clippy.toml
new file mode 100644
index 0000000..3d30690
--- /dev/null
+++ b/.clippy.toml
@@ -0,0 +1 @@
+msrv = "1.31.0"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4412b64..dc09e20 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -43,4 +43,4 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: dtolnay/rust-toolchain@clippy
- - run: cargo clippy -- -Dclippy::all
+ - run: cargo clippy -- -Dclippy::all -Dclippy::pedantic
diff --git a/Android.bp b/Android.bp
index 3b05d9b..1c0a8b7 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,4 +1,5 @@
// This file is generated by cargo2android.py --run --dependencies.
+// Do not modify this file as changes will be overridden on upgrade.
package {
default_applicable_licenses: ["external_rust_crates_paste_license"],
diff --git a/Cargo.toml b/Cargo.toml
index 299dca1..1c2d8de 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,7 +13,7 @@
[package]
edition = "2018"
name = "paste"
-version = "1.0.4"
+version = "1.0.5"
authors = ["David Tolnay <dtolnay@gmail.com>"]
description = "Macros for all your token pasting needs"
readme = "README.md"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index ec7baa1..782f2f4 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,6 +1,6 @@
[package]
name = "paste"
-version = "1.0.4"
+version = "1.0.5"
authors = ["David Tolnay <dtolnay@gmail.com>"]
edition = "2018"
license = "MIT OR Apache-2.0"
diff --git a/METADATA b/METADATA
index 6f124d0..d689809 100644
--- a/METADATA
+++ b/METADATA
@@ -7,13 +7,13 @@ third_party {
}
url {
type: ARCHIVE
- value: "https://static.crates.io/crates/paste/paste-1.0.4.crate"
+ value: "https://static.crates.io/crates/paste/paste-1.0.5.crate"
}
- version: "1.0.4"
+ version: "1.0.5"
license_type: NOTICE
last_upgrade_date {
- year: 2020
- month: 12
- day: 9
+ year: 2021
+ month: 4
+ day: 1
}
}
diff --git a/README.md b/README.md
index 19fa99b..6faed11 100644
--- a/README.md
+++ b/README.md
@@ -134,6 +134,8 @@ macro_rules! method_new {
};
}
+pub struct Paste {}
+
method_new!(Paste); // expands to #[doc = "Create a new `Paste` object"]
```
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(
diff --git a/src/lib.rs b/src/lib.rs
index 794ef3b..d066ca0 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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,
diff --git a/tests/test_doc.rs b/tests/test_doc.rs
index 1ceaf23..2e2b14d 100644
--- a/tests/test_doc.rs
+++ b/tests/test_doc.rs
@@ -52,3 +52,26 @@ fn test_case() {
let expected = "HTTP GET!";
assert_eq!(doc, expected);
}
+
+// https://github.com/dtolnay/paste/issues/63
+#[test]
+fn test_stringify() {
+ macro_rules! create {
+ ($doc:expr) => {
+ paste! {
+ #[doc = $doc]
+ pub struct Struct;
+ }
+ };
+ }
+
+ macro_rules! forward {
+ ($name:ident) => {
+ create!(stringify!($name));
+ };
+ }
+
+ forward!(documentation);
+
+ let _ = Struct;
+}