Rollup merge of #75084 - Aaron1011:stabilize/ident-new-raw, r=petrochenkov

Stabilize Ident::new_raw

Tracking issue: #54723

This is a continuation of PR #59002
This commit is contained in:
Yuki Okushi 2020-08-04 09:27:06 +09:00 committed by GitHub
commit 622759d129
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 66 additions and 2 deletions

View file

@ -0,0 +1,35 @@
// force-host
// no-prefer-dynamic
#![crate_type = "proc-macro"]
extern crate proc_macro;
use proc_macro::{TokenStream, TokenTree, Ident, Punct, Spacing, Span};
#[proc_macro]
pub fn make_struct(input: TokenStream) -> TokenStream {
match input.into_iter().next().unwrap() {
TokenTree::Ident(ident) => {
vec![
TokenTree::Ident(Ident::new("struct", Span::call_site())),
TokenTree::Ident(Ident::new_raw(&ident.to_string(), Span::call_site())),
TokenTree::Punct(Punct::new(';', Spacing::Alone))
].into_iter().collect()
}
_ => panic!()
}
}
#[proc_macro]
pub fn make_bad_struct(input: TokenStream) -> TokenStream {
match input.into_iter().next().unwrap() {
TokenTree::Ident(ident) => {
vec![
TokenTree::Ident(Ident::new_raw("struct", Span::call_site())),
TokenTree::Ident(Ident::new(&ident.to_string(), Span::call_site())),
TokenTree::Punct(Punct::new(';', Spacing::Alone))
].into_iter().collect()
}
_ => panic!()
}
}

View file

@ -0,0 +1,16 @@
// aux-build:raw-ident.rs
#[macro_use] extern crate raw_ident;
fn main() {
make_struct!(fn);
make_struct!(Foo);
make_struct!(await);
r#fn;
r#Foo;
Foo;
r#await;
make_bad_struct!(S); //~ ERROR expected one of
}

View file

@ -0,0 +1,10 @@
error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, `}`, or an operator, found `S`
--> $DIR/raw-ident.rs:15:5
|
LL | make_bad_struct!(S);
| ^^^^^^^^^^^^^^^^^^^^ expected one of 8 possible tokens
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to previous error