# Contributing This repository is open to community contributions! There are a few options if you'd like to help: 1. File issues for bugs you find or new features you'd like. 2. Read over and discuss issues, then make a PR that fixes them. Use "Fixes #X" in your PR description to automatically close the issue when the PR is merged. 3. Review existing PRs, and leave thoughtful feedback. If you think a PR is ready to merge, hit "Approve" in your review! Any contributions made are provided under the license(s) listed in this repo at the time of their contribution, and do not require separate attribution. When you make a PR (other than for purely internal changes), please update the root level `RELEASES.md`. ## Testing 1. Use doc tests aggressively to show how APIs should be used. You can use `#` to hide setup code from the doc tests, but use this sparingly. 2. Unit test belong near the code they are testing. Use `#[cfg(test)]` on the test module to ignore it during builds, and `#[test]` on the test functions to ensure they are run. 3. Integration tests should be stored in the top level `tests` folder, importing functions from `lib.rs`. Use `cargo test` to run all tests. ## CI The CI will: 1. Ensure the code is formatted with `cargo fmt`. 2. Ensure that the code compiles. 3. Ensure that (almost) all `clippy` lints pass. 4. Ensure all tests pass on Windows, MacOS and Ubuntu. Check this locally with: 1. `cargo run -p ci` 2. `cargo test --workspace` To manually rerun CI: 1. Navigate to the `Actions` tab. 2. Use the dropdown menu in the CI run of interest and select "View workflow file". 3. In the top-right corner, select "Rerun workflow". ## Documentation Documentation is handled with standard Rust doc strings. Use `cargo doc --open` to build and then open the docs locally.