Skip to content

Commit 0b32dec

Browse files
committed
proc_macro: Use ToTokens trait in quote macro
1 parent 904d8f6 commit 0b32dec

11 files changed

+33
-8
lines changed

library/proc_macro/src/quote.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
//! This quasiquoter uses macros 2.0 hygiene to reliably access
55
//! items from `proc_macro`, to build a `proc_macro::TokenStream`.
66
7-
use crate::{Delimiter, Group, Ident, Literal, Punct, Spacing, Span, TokenStream, TokenTree};
7+
use crate::{
8+
Delimiter, Group, Ident, Literal, Punct, Spacing, Span, ToTokens, TokenStream, TokenTree,
9+
};
810

911
macro_rules! quote_tt {
1012
(($($t:tt)*)) => { Group::new(Delimiter::Parenthesis, quote!($($t)*)) };
@@ -50,7 +52,7 @@ macro_rules! quote {
5052
() => { TokenStream::new() };
5153
($($t:tt)*) => {
5254
[
53-
$(TokenStream::from(quote_ts!($t)),)*
55+
$(ToTokens::into_token_stream(quote_ts!($t)),)*
5456
].iter().cloned().collect::<TokenStream>()
5557
};
5658
}
@@ -73,7 +75,7 @@ pub fn quote(stream: TokenStream) -> TokenStream {
7375
after_dollar = false;
7476
match tree {
7577
TokenTree::Ident(_) => {
76-
return Some(quote!(Into::<crate::TokenStream>::into(
78+
return Some(quote!(ToTokens::into_token_stream(
7779
Clone::clone(&(@ tree))),));
7880
}
7981
TokenTree::Punct(ref tt) if tt.as_char() == '$' => {}

tests/ui/macros/auxiliary/issue-100199.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#![feature(proc_macro_quote)]
2+
#![feature(proc_macro_totokens)]
23

34
extern crate proc_macro;
45

5-
use proc_macro::{quote, Ident, Span, TokenStream, TokenTree};
6+
use proc_macro::{Ident, Span, TokenStream, TokenTree, quote};
67

78
#[proc_macro_attribute]
89
pub fn struct_with_bound(_: TokenStream, _: TokenStream) -> TokenStream {

tests/ui/macros/auxiliary/proc_macro_def.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![feature(proc_macro_quote)]
2+
#![feature(proc_macro_totokens)]
23

34
extern crate proc_macro;
45

tests/ui/proc-macro/auxiliary/cond_plugin.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![feature(proc_macro_quote)]
2+
#![feature(proc_macro_totokens)]
23

34
extern crate proc_macro;
45

tests/ui/proc-macro/auxiliary/double.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![feature(proc_macro_quote)]
2+
#![feature(proc_macro_totokens)]
23

34
extern crate proc_macro;
45
use proc_macro::*;

tests/ui/proc-macro/auxiliary/generate-dollar-ident.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![feature(proc_macro_quote)]
2+
#![feature(proc_macro_totokens)]
23

34
extern crate proc_macro;
45
use proc_macro::*;

tests/ui/proc-macro/auxiliary/hygiene_example_codegen.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![feature(proc_macro_quote)]
2+
#![feature(proc_macro_totokens)]
23

34
extern crate proc_macro as proc_macro_renamed; // This does not break `quote!`
45

tests/ui/proc-macro/auxiliary/mixed-site-span.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![feature(proc_macro_quote)]
2+
#![feature(proc_macro_totokens)]
23

34
extern crate proc_macro;
45
use proc_macro::*;
@@ -13,10 +14,8 @@ pub fn proc_macro_rules(input: TokenStream) -> TokenStream {
1314
let local_use = id("local_use");
1415
let mut single_quote = Punct::new('\'', Spacing::Joint);
1516
single_quote.set_span(Span::mixed_site());
16-
let label_use: TokenStream = [
17-
TokenTree::from(single_quote),
18-
id("label_use"),
19-
].iter().cloned().collect();
17+
let label_use: TokenStream =
18+
[TokenTree::from(single_quote), id("label_use")].iter().cloned().collect();
2019
quote!(
2120
struct $item_def;
2221
let $local_def = 0;

tests/ui/proc-macro/auxiliary/nonterminal-recollect-attr.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![feature(proc_macro_quote)]
2+
#![feature(proc_macro_totokens)]
23

34
extern crate proc_macro;
45
use proc_macro::{TokenStream, quote};

tests/ui/proc-macro/auxiliary/resolved-located-at.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#![feature(proc_macro_def_site)]
22
#![feature(proc_macro_diagnostic)]
33
#![feature(proc_macro_quote)]
4+
#![feature(proc_macro_totokens)]
45

56
extern crate proc_macro;
67
use proc_macro::*;
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//@ check-pass
2+
3+
#![feature(proc_macro_quote)]
4+
#![feature(proc_macro_totokens)]
5+
#![crate_type = "proc-macro"]
6+
7+
extern crate proc_macro;
8+
9+
use proc_macro::*;
10+
11+
fn main() {
12+
let x = Ident::new("foo", Span::call_site());
13+
let _ = quote! {
14+
let $x = 199;
15+
};
16+
}

0 commit comments

Comments
 (0)