rust/tests/source/attrib.rs
Nick Cameron 42f03458dd Refactor and fixup attribute formatting
Preserves trailing commas (except in derives where we follow function args).
Correctly uses `#` vs `#!` for derives.
Uses block indent for derives, fixes #2805.
2018-06-26 15:18:17 +12:00

177 lines
3.6 KiB
Rust

// rustfmt-wrap_comments: true
// Test attributes and doc comments are preserved.
#![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))))]
//! Doc comment
#![attribute]
//! Crate doc comment
// Comment
// Comment on attribute
#![the(attribute)]
// Another comment
#[invalid attribute]
fn foo() {}
/// Blah blah blah.
/// Blah blah blah.
/// Blah blah blah.
/// Blah blah blah.
/// Blah blah blah.
impl Bar {
/// Blah blah blooo.
/// Blah blah blooo.
/// Blah blah blooo.
/// Blah blah blooo.
#[an_attribute]
fn foo(&mut self) -> isize {
}
/// Blah blah bing.
/// Blah blah bing.
/// Blah blah bing.
/// Blah blah bing.
/// Blah blah bing.
/// Blah blah bing.
pub fn f2(self) {
(foo, bar)
}
#[another_attribute]
fn f3(self) -> Dog {
}
/// Blah blah bing.
#[attrib1]
/// Blah blah bing.
#[attrib2]
// Another comment that needs rewrite because it's tooooooooooooooooooooooooooooooo loooooooooooong.
/// Blah blah bing.
fn f4(self) -> Cat {
}
// We want spaces around `=`
#[cfg(feature="nightly")]
fn f5(self) -> Monkey {}
}
// #984
struct Foo {
# [ derive ( Clone , PartialEq , Debug , Deserialize , Serialize ) ]
foo: usize,
}
// #1668
/// Default path (*nix)
#[cfg(all(unix, not(target_os = "macos"), not(target_os = "ios"), not(target_os = "android")))]
fn foo() {
#[cfg(target_os = "freertos")]
match port_id {
'a' | 'A' => GpioPort { port_address: GPIO_A },
'b' | 'B' => GpioPort { port_address: GPIO_B },
_ => panic!(),
}
#[cfg_attr(not(target_os = "freertos"), allow(unused_variables))]
let x = 3;
}
// #1777
#[test]
#[should_panic(expected = "(")]
#[should_panic(expected = /* ( */ "(")]
#[should_panic(/* ((((( */expected /* ((((( */= /* ((((( */ "("/* ((((( */)]
#[should_panic(
/* (((((((( *//*
(((((((((()(((((((( */
expected = "("
// ((((((((
)]
fn foo() {}
// #1799
fn issue_1799() {
#[allow(unreachable_code)] // https://github.com/rust-lang/rust/issues/43336
Some( Err(error) ) ;
#[allow(unreachable_code)]
// https://github.com/rust-lang/rust/issues/43336
Some( Err(error) ) ;
}
// Formatting inner attributes
fn inner_attributes() {
#![ this_is_an_inner_attribute ( foo ) ]
foo();
}
impl InnerAttributes() {
#![ this_is_an_inner_attribute ( foo ) ]
fn foo() {}
}
mod InnerAttributes {
#![ this_is_an_inner_attribute ( foo ) ]
}
fn attributes_on_statements() {
// Local
# [ attr ( on ( local ) ) ]
let x = 3;
// Item
# [ attr ( on ( item ) ) ]
use foo;
// Expr
# [ attr ( on ( expr ) ) ]
{}
// Semi
# [ attr ( on ( semi ) ) ]
foo();
// Mac
# [ attr ( on ( mac ) ) ]
foo!();
}
// Large derives
#[derive(Add, Sub, Mul, Div, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Debug, Hash, Serialize, Mul)]
/// Foo bar baz
#[derive(Add, Sub, Mul, Div, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Debug, Hash, Serialize, Deserialize)]
pub struct HP(pub u8);
// Long `#[doc = "..."]`
struct A { #[doc = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] b: i32 }
// #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() {}