# ICU4X Boilerplate Documentation

This file contains explanations of ICU4X-specific conventions on boilerplate (extra code/annotations) in source files.

## Library annotations

In order to assert that library crates conform to the ICU4X style guide, the following annotation should be present in every *lib.rs* file. The annotations do the following:

1. Set the crate to be `no_std`
2. Enforce no unannotated panicky behavior, except in test mode
3. Require every exported method to be documented, implement `Debug`, and be `non_exhaustive` or annotated as exhaustive

If the crate has no `std` feature:

    // https://github.com/unicode-org/icu4x/blob/main/documents/process/boilerplate.md#library-annotations
    #![cfg_attr(not(any(test, doc)), no_std)]
    #![cfg_attr(
        not(test),
        deny(
            clippy::indexing_slicing,
            clippy::unwrap_used,
            clippy::expect_used,
            clippy::panic,
        )
    )]
    #![warn(missing_docs)]

Not all crates are yet able to be annotated in this way. Annotations may be omitted and added when able.

If the crate has an `std` feature, specify this in the first line:

    // https://github.com/unicode-org/icu4x/blob/main/documents/process/boilerplate.md#library-annotations
    #![cfg_attr(not(any(test, doc)), no_std)]
    #![cfg_attr(
        not(test),
        deny(
            clippy::indexing_slicing,
            clippy::unwrap_used,
            clippy::expect_used,
            clippy::panic,
        )
    )]
    #![warn(missing_docs)]
