Auto merge of #40346 - jseyfried:path_and_tokenstream_attr, r=nrc
`TokenStream`-based attributes, paths in attribute and derive macro invocations This PR - refactors `Attribute` to use `Path` and `TokenStream` instead of `MetaItem`. - supports macro invocation paths for attribute procedural macros. - e.g. `#[::foo::attr_macro] struct S;`, `#[cfg_attr(all(), foo::attr_macro)] struct S;` - supports macro invocation paths for derive procedural macros. - e.g. `#[derive(foo::Bar, super::Baz)] struct S;` - supports arbitrary tokens as arguments to attribute procedural macros. - e.g. `#[foo::attr_macro arbitrary + tokens] struct S;` - supports using arbitrary tokens in "inert attributes" with derive procedural macros. - e.g. `#[derive(Foo)] struct S(#[inert arbitrary + tokens] i32);` where `#[proc_macro_derive(Foo, attributes(inert))]` r? @nrc
This commit is contained in:
commit
9c15de4fd5
56 changed files with 892 additions and 548 deletions
|
@ -17,7 +17,7 @@ pub use self::Token::*;
|
|||
use ast::{self};
|
||||
use ptr::P;
|
||||
use symbol::keywords;
|
||||
use tokenstream;
|
||||
use tokenstream::TokenTree;
|
||||
|
||||
use std::fmt;
|
||||
use std::rc::Rc;
|
||||
|
@ -349,7 +349,7 @@ pub enum Nonterminal {
|
|||
/// Stuff inside brackets for attributes
|
||||
NtMeta(ast::MetaItem),
|
||||
NtPath(ast::Path),
|
||||
NtTT(tokenstream::TokenTree),
|
||||
NtTT(TokenTree),
|
||||
// These are not exposed to macros, but are used by quasiquote.
|
||||
NtArm(ast::Arm),
|
||||
NtImplItem(ast::ImplItem),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue