about summary refs log tree commit diff
path: root/src/libproc_macro/lib.rs
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2018-04-04 14:27:53 -0700
committerAlex Crichton <alex@alexcrichton.com>2018-04-04 14:34:54 -0700
commita57b1fbd84543880e4cba99013c81b7b82292c31 (patch)
treef015bb544020e4ce9e59d1315955ed372b58b918 /src/libproc_macro/lib.rs
parent553c04d9eb311189cbd01d1af7f6c2c26578342c (diff)
downloadrust-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.rs8
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))
             }