Thanks for your interest in contributing to `ouch`!

# Table of contents:

- [Code of Conduct](#code-of-conduct)
- [I want to ask a question or provide feedback](#i-want-to-ask-a-question-or-provide-feedback)
- [Adding a new feature](#adding-a-new-feature)
- [PRs](#prs)
- [Dealing with UI tests](#dealing-with-ui-tests)

## Code of Conduct

We follow the [Rust Official Code of Conduct](https://www.rust-lang.org/policies/code-of-conduct).

## I want to ask a question or provide feedback

Create [an issue](https://github.com/ouch-org/ouch/issues) or go to [Ouch Discussions](https://github.com/ouch-org/ouch/discussions).

## Adding a new feature

Before opening the PR, open an issue to discuss your addition, this increases the chance of your PR being accepted.

## PRs

- Pass all CI checks.
- After opening the PR, add a [CHANGELOG.md] entry.

[CHANGELOG.md]: https://github.com/ouch-org/ouch

### CI Tests

The CI tests will run for a combination of features, `--no-default-features` will also be tested.

## Dealing with UI tests

We use snapshots to do UI testing and guarantee a consistent output, this way, you can catch accidental changes or see what output changed in the PR diff.

- Run tests with `cargo insta` (requires `cargo install cargo-insta`):

```sh
cargo insta test
# Or, if you only want to run UI tests
cargo insta test -- ui
# Sometimes, you might have to run UI tests with different feature flags
cargo insta test --no-default-features -- ui
```

- You can also use the `--profile fast` flag to trade some compile time for faster tests (usually worth it):

```sh
cargo test --profile fast
cargo insta test --profile fast -- ui
```

- If some UI test failed, you should review them:

```sh
cargo insta review
```

- After addressing all, you should be able to `git add` and `commit` accordingly.

NOTE: Sometimes, you'll have to run these two commands multiple times.
