# Contributing Just open a PR! Or feel free to [create an issue](https://github.com/patrickomatic/csv-plus-plus/issues) if you would like feedback on your idea before working on it. ## Design Philosophies Some design philosophies that you should abide by if you want to contribute source code: ### Versioning * Make things private by default. We want to reduce incrementing versions for trivial changes and to do that we should expose as little as possible. - **Things to make public**: Anything needed by `src/lib.rs` or otherwise would be necessary for someone to compile a template from another Rust program. - **Things to make private/pub(crate)**: Try to make things private by default, but in particular the parser and target-specific (excel, google sheets, etc) code should not be exposed. Ideally we should be able to change these without churning the version numbers. ### Dependencies * As few dependencies as possible. If you don't absolutely need the dependency, it's better *not* to include it. * Target the lowest version of the dependency you need. Ideally we want to be as flexible as possible if someone includes the csv++ source code, so that means not targetting high dependency versions unless necessary. * Target as few features as possible from the dependency. If the dependency splits it's functionality into multiple features than only include what you need. ## Development Tools All code should conform to the guidelines set by: * [Clippy](https://github.com/rust-lang/rust-clippy) * [rustfmt](https://github.com/rust-lang/rustfmt)