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:
commit
622759d129
@ -848,7 +848,7 @@ impl Ident {
|
|||||||
/// Creates a new `Ident` with the given `string` as well as the specified
|
/// Creates a new `Ident` with the given `string` as well as the specified
|
||||||
/// `span`.
|
/// `span`.
|
||||||
/// The `string` argument must be a valid identifier permitted by the
|
/// The `string` argument must be a valid identifier permitted by the
|
||||||
/// language, otherwise the function will panic.
|
/// language (including keywords, e.g. `self` or `fn`). Otherwise, the function will panic.
|
||||||
///
|
///
|
||||||
/// Note that `span`, currently in rustc, configures the hygiene information
|
/// Note that `span`, currently in rustc, configures the hygiene information
|
||||||
/// for this identifier.
|
/// for this identifier.
|
||||||
@ -870,7 +870,10 @@ impl Ident {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Same as `Ident::new`, but creates a raw identifier (`r#ident`).
|
/// Same as `Ident::new`, but creates a raw identifier (`r#ident`).
|
||||||
#[unstable(feature = "proc_macro_raw_ident", issue = "54723")]
|
/// The `string` argument be a valid identifier permitted by the language
|
||||||
|
/// (including keywords, e.g. `fn`). Keywords which are usable in path segments
|
||||||
|
/// (e.g. `self`, `super`) are not supported, and will cause a panic.
|
||||||
|
#[stable(feature = "proc_macro_raw_ident", since = "1.47.0")]
|
||||||
pub fn new_raw(string: &str, span: Span) -> Ident {
|
pub fn new_raw(string: &str, span: Span) -> Ident {
|
||||||
Ident(bridge::client::Ident::new(string, span.0, true))
|
Ident(bridge::client::Ident::new(string, span.0, true))
|
||||||
}
|
}
|
||||||
|
35
src/test/ui/proc-macro/auxiliary/raw-ident.rs
Normal file
35
src/test/ui/proc-macro/auxiliary/raw-ident.rs
Normal 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!()
|
||||||
|
}
|
||||||
|
}
|
16
src/test/ui/proc-macro/raw-ident.rs
Normal file
16
src/test/ui/proc-macro/raw-ident.rs
Normal 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
|
||||||
|
}
|
10
src/test/ui/proc-macro/raw-ident.stderr
Normal file
10
src/test/ui/proc-macro/raw-ident.stderr
Normal 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
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user