66 lines
2.0 KiB
Markdown
66 lines
2.0 KiB
Markdown
|
# 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:
|
||
|
|
||
|
```rust
|
||
|
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
|
||
|
|
||
|
| Type | Max line length |
|
||
|
|:---------------------|----------------:|
|
||
|
| Code | 100 |
|
||
|
| Comments in the code | 120 |
|
||
|
| Documentation | 120 |
|
||
|
|
||
|
100 is the [`max_width`](https://github.com/rust-lang/rustfmt/blob/master/Configurations.md#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](https://travis-ci.org/crossterm-rs/crossterm/pull_requests) build logs.
|
||
|
|
||
|
### Forbidden Warnings
|
||
|
|
||
|
Search for `#![deny(...)]` in the code:
|
||
|
|
||
|
* `unused_must_use`
|
||
|
* `unused_imports`
|