Contributing

I would appreciate any contributions to this crate. However, some things are handy to know.

Code Style

Import Order

All imports are semantically grouped and ordered. The order is:

  • standard library (use std::...)
  • external crates (use rand::...)
  • current crate (use crate::...)
  • parent module (use super::..)
  • current module (use self::...)
  • module declaration (mod ...)

There must be an empty line between groups. An example:

use crossterm_utils::{csi, write_cout, Result};

use crate::sys::{get_cursor_position, show_cursor};

use super::Cursor;

CLion Tips

The CLion IDE does this for you (Menu -> Code -> Optimize Imports). Be aware that the CLion sorts imports in a group in a different way when compared to the rustfmt. It's effectively two steps operation to get proper grouping & sorting:

  • Menu -> Code -> Optimize Imports - group & semantically order imports
  • cargo fmt - fix ordering within the group

Second step can be automated via CLion -> Preferences -> Languages & Frameworks -> Rust -> Rustfmt -> Run rustfmt on save.

Max Line Length

TypeMax line length
Code100
Comments in the code120
Documentation120

100 is the max_width default value.

120 is because of the GitHub. The editor & viewer width there is +- 123 characters.

Warnings

The code must be warning free. It‘s quite hard to find an error if the build logs are polluted with warnings. If you decide to silent a warning with (#[allow(...)]), please add a comment why it’s required.

Always consult the Travis CI build logs.

Forbidden Warnings

Search for #![deny(...)] in the code:

  • unused_must_use
  • unused_imports