# Contributing to kfmtbox Thank you for your interest in contributing to kfmtbox! This document provides guidelines and information for contributors. ## ๐Ÿš€ Getting Started ### Prerequisites - Rust 1.70+ (edition 2021) - Cargo - Git ### Development Setup 1. **Fork and clone the repository** ```bash git clone https://github.com/yourusername/kfmtbox.git cd kfmtbox ``` 2. **Build the project** ```bash cargo build ``` 3. **Run tests** ```bash cargo test ``` 4. **Check code quality** ```bash cargo clippy cargo fmt ``` ## ๐ŸŽฏ How to Contribute ### Reporting Bugs Before creating a bug report, please check existing issues to avoid duplicates. When creating a bug report, include: - **Clear description** of the bug - **Steps to reproduce** the issue - **Expected behavior** vs actual behavior - **Environment details** (OS, Rust version, etc.) - **Sample input** that triggers the bug (if applicable) Use the [bug report template](.github/ISSUE_TEMPLATE/bug_report.md) when creating issues. ### Suggesting Features We welcome feature suggestions! When proposing a new feature: - **Describe the problem** it solves - **Explain the proposed solution** - **Consider alternatives** you've thought about - **Provide examples** of how it would work Use the [feature request template](.github/ISSUE_TEMPLATE/feature_request.md) when creating issues. ### Code Contributions #### Development Workflow 1. **Create a feature branch** ```bash git checkout -b feature/your-feature-name ``` 2. **Make your changes** - Write clean, well-documented code - Follow Rust naming conventions - Add tests for new functionality - Update documentation as needed 3. **Test your changes** ```bash cargo test cargo clippy cargo fmt ``` 4. **Commit your changes** ```bash git add . git commit -m "Add: brief description of changes" ``` 5. **Push and create a Pull Request** ```bash git push origin feature/your-feature-name ``` #### Code Style Guidelines - **Formatting**: Use `cargo fmt` to format code - **Linting**: Address all `cargo clippy` warnings - **Documentation**: Document public APIs with doc comments - **Tests**: Write unit tests for new functionality - **Naming**: Follow Rust naming conventions (snake_case for functions/variables, PascalCase for types) #### Commit Message Format Use clear, descriptive commit messages: ``` Add: support for block comments in C/C++ files Fix: text wrapping edge case with Unicode characters Update: improve error messages for invalid file types Docs: add examples for VSCode integration Test: add unit tests for comment detection logic ``` ## ๐Ÿงช Testing ### Running Tests ```bash # Run all tests cargo test # Run tests with output cargo test -- --nocapture # Run specific test cargo test test_name # Run integration tests cargo test --test integration_tests ``` ### Writing Tests - **Unit tests**: Place in the same file as the code being tested - **Integration tests**: Place in `tests/` directory - **Test coverage**: Aim for good test coverage of new functionality - **Edge cases**: Test edge cases and error conditions ### Test Examples ```rust #[cfg(test)] mod tests { use super::*; #[test] fn test_comment_detection() { let detector = CommentDetector::new(); let style = detector.detect_from_filetype("rs"); assert_eq!(style.prefix, "//"); } #[test] fn test_text_wrapping() { let wrapper = TextWrapper::new(20); let result = wrapper.wrap_text("This is a very long line"); assert!(result.len() > 1); for line in &result { assert!(line.len() <= 20); } } } ``` ## ๐Ÿ“ Project Structure ``` kfmtbox/ โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ main.rs # CLI entry point โ”‚ โ”œโ”€โ”€ lib.rs # Library exports โ”‚ โ”œโ”€โ”€ cli.rs # Command line parsing โ”‚ โ”œโ”€โ”€ box_renderer.rs # Flower box rendering โ”‚ โ”œโ”€โ”€ text_wrapper.rs # Text wrapping logic โ”‚ โ”œโ”€โ”€ comment_detector.rs # File type detection โ”‚ โ””โ”€โ”€ config.rs # Configuration handling โ”œโ”€โ”€ tests/ # Integration tests โ”œโ”€โ”€ .github/ # GitHub workflows and templates โ”œโ”€โ”€ Cargo.toml # Project configuration โ”œโ”€โ”€ README.md # Project documentation โ”œโ”€โ”€ CONTRIBUTING.md # This file โ””โ”€โ”€ LICENSE # MIT License ``` ## ๐Ÿ” Code Review Process ### Pull Request Guidelines - **Clear description** of changes and motivation - **Link to related issues** if applicable - **Screenshots or examples** for UI changes - **Update documentation** as needed - **Ensure all tests pass** ### Review Checklist - [ ] Code follows project style guidelines - [ ] Tests are included and passing - [ ] Documentation is updated - [ ] No breaking changes (or clearly documented) - [ ] Performance implications considered - [ ] Security implications reviewed ## ๐Ÿ› Common Issues and Solutions ### Build Issues **Problem**: `cargo build` fails with dependency errors **Solution**: Run `cargo update` to update dependencies **Problem**: Tests fail on specific platforms **Solution**: Check if the issue is platform-specific and add appropriate test conditions ### Code Issues **Problem**: Clippy warnings **Solution**: Address all warnings or add `#[allow(clippy::warning_name)]` with justification **Problem**: Formatting issues **Solution**: Run `cargo fmt` to auto-format code ## ๐Ÿ“š Resources - [Rust Book](https://doc.rust-lang.org/book/) - [Rust API Guidelines](https://rust-lang.github.io/api-guidelines/) - [Clap Documentation](https://docs.rs/clap/) - [Serde Documentation](https://serde.rs/) ## ๐Ÿ’ฌ Getting Help - **GitHub Discussions**: For questions and general discussion - **GitHub Issues**: For bug reports and feature requests - **Pull Request Comments**: For code review discussions ## ๐ŸŽ‰ Recognition Contributors will be recognized in: - README.md contributors section - Release notes for significant contributions - GitHub contributor graph Thank you for contributing to kfmtbox! ๐Ÿš€