# Project Style Guide
This project firmly adheres to the following guides:
- [Formatting Guide](https://github.com/rust-dev-tools/fmt-rfcs/blob/master/guide/guide.md)
- [Style Guide](https://doc.rust-lang.org/1.0.0/style/)
Everything below is in addition to those.
## General Rules
- Maximum line length is 79 characters. This includes comments, and there are
no exceptions.
## `mod` and `use` Order
- All `mod` declarations go before all `use` declarations within the scope.
- Blocks are then ordered by scope (`pub use` is above `pub(crate) use` is
above `use`, etc.).
- The following blocks need to be separated by a single line, in this order:
- Standard library crates
- Each individual community crate
- Each project crate module
- Items within blocks are sorted alphabetically.
- Community crate blocks are sorted alphabetically.
- Prefer not to glob on `pub use`
- Never `pub use` or `pub mod` standard are community crates.
- Sample:
```Rust
//! [ module docs ]
pub mod axial;
pub mod offset;
mod cube;
mod double;
pub use axial::Axial;
use std::collections::HashSet;
use std::iter::FromIterator;
use petgraph::graph::{node_index, NodeIndex};
use petgraph::stable_graph::StableGraph;
use petgraph::visit::Dfs;
use rand::prelude::*;
use axial::*;
use cube::*;
use double::*;
use offset::*;
```
## Headers
Section headers span the full line:
```Rust
//////////////////////////////////////////////////////////////////////////////
// Section Header
//////////////////////////////////////////////////////////////////////////////
```
This header is to be used in regions where there is no indentation, most
commonly before structure definitions, traits, method implementations, and
unit tests.
The second header is the sub-header, which goes up to the 39th character:
```Rust
//////////////////////////////////
// Sub-Header
//////////////////////////////////
```
This header should be at one level of indentation, and is used to separate
method and unit testing categories.
## Documentation
Please document all of your code.