rust/src/doc/book/attributes.md
Steve Klabnik 024aa9a345 src/doc/trpl -> src/doc/book
The book was located under 'src/doc/trpl' because originally, it was
going to be hosted under that URL. Late in the game, before 1.0, we
decided that /book was a better one, so we changed the output, but
not the input. This causes confusion for no good reason. So we'll change
the source directory to look like the output directory, like for every
other thing in src/doc.
2015-11-19 11:30:18 -05:00

1.4 KiB
Raw Blame History

% Attributes

Declarations can be annotated with attributes in Rust. They look like this:

#[test]
# fn foo() {}

or like this:

# mod foo {
#![test]
# }

The difference between the two is the !, which changes what the attribute applies to:

#[foo]
struct Foo;

mod bar {
    #![bar]
}

The #[foo] attribute applies to the next item, which is the struct declaration. The #![bar] attribute applies to the item enclosing it, which is the mod declaration. Otherwise, theyre the same. Both change the meaning of the item theyre attached to somehow.

For example, consider a function like this:

#[test]
fn check() {
    assert_eq!(2, 1 + 1);
}

It is marked with #[test]. This means its special: when you run tests, this function will execute. When you compile as usual, it wont even be included. This function is now a test function.

Attributes may also have additional data:

#[inline(always)]
fn super_fast_fn() {
# }

Or even keys and values:

#[cfg(target_os = "macos")]
mod macos_only {
# }

Rust attributes are used for a number of different things. There is a full list of attributes in the reference. Currently, you are not allowed to create your own attributes, the Rust compiler defines them.