Auto merge of #27056 - Eljay:doc-comments, r=nikomatsakis

Fixes #23812 by stripping the decoration when desugaring macro doc comments into #[doc] attributes, and detects whether the attribute should be inner or outer style and outputs the appropriate token tree.
This commit is contained in:
bors 2015-07-20 21:21:24 +00:00
commit ed49bad0cc
6 changed files with 142 additions and 13 deletions

View file

@ -0,0 +1,19 @@
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
macro_rules! outer {
(#[$outer:meta]) => ()
}
outer! {
//! Inner
} //~^ ERROR no rules expected the token `!`
fn main() { }

View file

@ -0,0 +1,19 @@
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
macro_rules! inner {
(#![$inner:meta]) => ()
}
inner! {
/// Outer
} //~^ ERROR no rules expected the token `[`
fn main() { }

View file

@ -0,0 +1,33 @@
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
macro_rules! doc {
(
$(#[$outer:meta])*
mod $i:ident {
$(#![$inner:meta])*
}
) =>
(
$(#[$outer])*
pub mod $i {
$(#![$inner])*
}
)
}
doc! {
/// Outer doc
mod Foo {
//! Inner doc
}
}
fn main() { }

View file

@ -0,0 +1,46 @@
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
macro_rules! doc {
(#[$outer:meta] mod $i:ident { #![$inner:meta] }) =>
(
#[$outer]
pub mod $i {
#![$inner]
}
)
}
doc! {
/// Outer comment
mod Foo {
//! Inner comment
}
}
// @has issue_23812/Foo/index.html
// @has - 'Outer comment'
// @!has - '/// Outer comment'
// @has - 'Inner comment'
// @!has - '//! Inner comment'
doc! {
/** Outer block comment */
mod Bar {
/*! Inner block comment */
}
}
// @has issue_23812/Bar/index.html
// @has - 'Outer block comment'
// @!has - '/** Outer block comment */'
// @has - 'Inner block comment'
// @!has - '/*! Inner block comment */'