# Contribution guidelines

First off, thank you for considering contributing to tui-widgets.

If your contribution is not straightforward, please first discuss the change you
wish to make by creating a new issue before making the change.

## Reporting issues

Before reporting an issue on the
[issue tracker](https://github.com/ratatui/tui-widgets/issues),
please check that it has not already been reported by searching for some related
keywords.

## Pull requests

Try to do one pull request per change.

## Commit Message Format

This project adheres to [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).
A specification for adding human and machine readable meaning to commit messages.

### Commit Message Header

```text
<type>(<scope>): <short summary>
  │       │             │
  │       │             └─⫸ Summary in present tense. Not capitalized. No period at the end.
  │       │
  │       └─⫸ Commit Scope
  │
  └─⫸ Commit Type: feat|fix|build|ci|docs|perf
                     |refactor|test|chore
```

#### Type

- feat: Features. A new feature.
- fix: Bug fixes. A bug fix.
- docs: Documentation. Documentation only changes.
- style: Styles. Changes that do not affect meaning (formatting, whitespace, etc).
- refactor: Code refactoring. Change that neither fixes a bug nor adds a feature.
- perf: Performance improvements. Change that improves performance.
- test: Tests. Adding missing tests or correcting existing tests.
- build: Builds. Changes that affect the build system or dependencies (main, serde).
- ci: Continuous integration. Changes to CI configuration or scripts (GitHub Actions).
- chore: Chores. Other changes that don't modify src or test files.
- revert: Reverts. Reverts a previous commit.

## Developing

### Set up

This is no different than other Rust projects.

```shell
git clone https://github.com/ratatui/tui-widgets
cd tui-widgets
cargo test
```

### Useful Commands

- Run Clippy:

  ```shell
  cargo clippy --all-targets --all-features --workspace
  ```

- Run all tests:

  ```shell
  cargo test --all-features --workspace
  ```

- Check to see if there are code formatting issues

  ```shell
  cargo fmt --all -- --check
  ```

- Format the code in the project

  ```shell
  cargo fmt --all
  ```
