rust/tests/target/doc-attrib.rs
Rémy Rakic 83d1d9aa14 normalize_doc_attributes: remove leading whitespace from the doc comment opener
Remove possible whitespace from the `CommentStyle::opener()` so that the literal itself has control over the comment's leading spaces.

This is most useful for tools, such as bindgen, to allow for example: machine-readable comments with precise syntax rules, or idempotently round-tripping between the proc-macro API and rustfmt.
2018-11-05 18:24:36 +01:00

133 lines
3.6 KiB
Rust

// rustfmt-wrap_comments: true
// rustfmt-normalize_doc_attributes: true
// Only doc = "" attributes should be normalized
//! Example doc attribute comment
//! Example doc attribute comment with 10 leading spaces
#![doc(
html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
html_root_url = "https://doc.rust-lang.org/nightly/",
html_playground_url = "https://play.rust-lang.org/",
test(attr(deny(warnings)))
)]
// Long `#[doc = "..."]`
struct A {
/// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
b: i32,
}
/// The `nodes` and `edges` method each return instantiations of `Cow<[T]>` to
/// leave implementers the freedom to create entirely new vectors or to pass
/// back slices into internally owned vectors.
struct B {
b: i32,
}
/// Level 1 comment
mod tests {
/// Level 2 comment
impl A {
/// Level 3 comment
fn f() {
/// Level 4 comment
fn g() {}
}
}
}
struct C {
/// item doc attrib comment
// regular item comment
b: i32,
// regular item comment
/// item doc attrib comment
c: i32,
}
// non-regression test for regular attributes, from #2647
#[cfg(
feature = "this_line_is_101_characters_long_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
)]
pub fn foo() {}
// path attrs
#[clippy::bar]
#[clippy::bar=foo]
#[clippy::bar(a, b, c)]
pub fn foo() {}
mod issue_2620 {
#[derive(Debug, StructOpt)]
#[structopt(about = "Display information about the character on FF Logs")]
pub struct Params {
#[structopt(help = "The server the character is on")]
server: String,
#[structopt(help = "The character's first name")]
first_name: String,
#[structopt(help = "The character's last name")]
last_name: String,
#[structopt(
short = "j",
long = "job",
help = "The job to look at",
parse(try_from_str)
)]
job: Option<Job>,
}
}
// non-regression test for regular attributes, from #2969
#[cfg(not(all(
feature = "std",
any(
target_os = "linux",
target_os = "android",
target_os = "netbsd",
target_os = "dragonfly",
target_os = "haiku",
target_os = "emscripten",
target_os = "solaris",
target_os = "cloudabi",
target_os = "macos",
target_os = "ios",
target_os = "freebsd",
target_os = "openbsd",
target_os = "bitrig",
target_os = "redox",
target_os = "fuchsia",
windows,
all(target_arch = "wasm32", feature = "stdweb"),
all(target_arch = "wasm32", feature = "wasm-bindgen"),
)
)))]
type Os = NoSource;
// use cases from bindgen needing precise control over leading spaces
/// <div rustbindgen accessor></div>
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct ContradictAccessors {
///<foo>no leading spaces here</foo>
pub mBothAccessors: ::std::os::raw::c_int,
/// <div rustbindgen accessor="false"></div>
pub mNoAccessors: ::std::os::raw::c_int,
/// <div rustbindgen accessor="unsafe"></div>
pub mUnsafeAccessors: ::std::os::raw::c_int,
/// <div rustbindgen accessor="immutable"></div>
pub mImmutableAccessor: ::std::os::raw::c_int,
}
/// \brief MPI structure
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct mbedtls_mpi {
///< integer sign
pub s: ::std::os::raw::c_int,
///< total # of limbs
pub n: ::std::os::raw::c_ulong,
///< pointer to limbs
pub p: *mut mbedtls_mpi_uint,
}