# Contributing to cargo-test-filter
Thank you for your interest in contributing to cargo-test-filter!
## Development Setup
1. Clone the repository:
```bash
git clone https://github.com/johnproblems/cargo-test-filter.git
cd cargo-test-filter
```
2. Build the project:
```bash
cargo build
```
3. Run tests:
```bash
cargo test
```
## Project Structure
- `src/main.rs` - Entry point for the CLI application
- `src/lib.rs` - Library root with public API
- `src/cli.rs` - Command-line argument parsing using clap
- `src/discovery.rs` - Test discovery logic (scans for test files)
- `src/filter.rs` - Test filtering logic based on criteria
- `src/runner.rs` - Test execution via cargo test
## Adding New Features
When adding new features:
1. Update the relevant module (discovery, filter, or runner)
2. Add tests to verify the functionality
3. Update the README.md with usage examples
4. Ensure all tests pass: `cargo test`
## Tag Format
Tests can be tagged using comment-based annotations:
```rust
// @tag: integration
// @tag: fast
#[test]
fn my_test() {
assert!(true);
}
```
The discovery module parses these tags and uses them for filtering.
## Running the Tool Locally
During development, you can run the tool directly:
```bash
cargo run -- test-filter --integration
cargo run -- test-filter --tag fast
```
Or build and use the binary:
```bash
cargo build --release
./target/release/cargo-test-filter test-filter --help
```
## Code Style
- Follow Rust standard formatting: `cargo fmt`
- Run clippy for linting: `cargo clippy`
- Write clear comments for complex logic
## Pull Request Process
1. Create a feature branch
2. Make your changes
3. Add tests
4. Update documentation
5. Ensure `cargo test` passes
6. Submit a pull request
## License
By contributing, you agree that your contributions will be licensed under MIT OR Apache-2.0.