diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2018-04-04 14:27:53 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2018-04-04 14:34:54 -0700 |
| commit | a57b1fbd84543880e4cba99013c81b7b82292c31 (patch) | |
| tree | f015bb544020e4ce9e59d1315955ed372b58b918 /src/libproc_macro/lib.rs | |
| parent | 553c04d9eb311189cbd01d1af7f6c2c26578342c (diff) | |
| download | rust-a57b1fbd84543880e4cba99013c81b7b82292c31.tar.gz rust-a57b1fbd84543880e4cba99013c81b7b82292c31.zip | |
Tweak doc comment expansion
* Expand `!` tokens for inner doc comments * Trim leading doc comment decoration in the string literal Both of these should help bring the expansion inline with what `macro_rules!` already does. Closes #49655 Closes #49656
Diffstat (limited to 'src/libproc_macro/lib.rs')
| -rw-r--r-- | src/libproc_macro/lib.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/libproc_macro/lib.rs b/src/libproc_macro/lib.rs index 837900f05d2..ebd5c834fd0 100644 --- a/src/libproc_macro/lib.rs +++ b/src/libproc_macro/lib.rs @@ -59,6 +59,7 @@ use syntax::errors::DiagnosticBuilder; use syntax::parse::{self, token}; use syntax::symbol::Symbol; use syntax::tokenstream; +use syntax::parse::lexer::comments; use syntax_pos::{FileMap, Pos, SyntaxContext, FileName}; use syntax_pos::hygiene::Mark; @@ -1056,12 +1057,17 @@ impl TokenTree { } Literal(..) => tt!(self::Literal { token, span: Span(span) }), DocComment(c) => { + let style = comments::doc_comment_style(&c.as_str()); + let stripped = comments::strip_doc_comment_decoration(&c.as_str()); let stream = vec![ tt!(Term::new("doc", Span(span))), tt!(Op::new('=', Spacing::Alone)), - tt!(self::Literal::string(&c.as_str())), + tt!(self::Literal::string(&stripped)), ].into_iter().collect(); stack.push(tt!(Group::new(Delimiter::Bracket, stream))); + if style == ast::AttrStyle::Inner { + stack.push(tt!(Op::new('!', Spacing::Alone))); + } tt!(Op::new('#', Spacing::Alone)) } |
