# Contributing ## Filing an Issue If you are trying to use `cargo-generate` and run into an issue- please file an issue! We'd love to get you up and running, even if the issue you have might not be directly related to the code in `cargo-generate`. This tool seeks to make getting a project in Rust easy to start, so any sorts of feedback on usability, usecases, or other aspects of this general problem space are welcome! When filing an issue, do your best to be as specific as possible. Include the version of cargo you are using (`cargo --version`), the version of Rust you are using (`rustc --version`) and your operating system and version. The faster was can reproduce your issue, the faster we can fix it for you! ## Testing your code ### Unit tests After writing your patch, or finishing an awesome feature, make sure that your code does not collides with the existing code, in executing the unit tests. To execute the unit tests, we will use the `test` feature included in `cargo`: ```sh cargo test ``` `cargo test` will execute the unit tests included in the `tests` directory. If all the lights are green, you can then validate the manual tests. ### Manual tests For complex issues, and solutions, we did not created unit tests yet. Otherwise, we have manual tests in order to check if everything is ok. For example, to test if your code does not collides with the solution of the [issue #83], you have to run those tests locally: **1. Clone an existing template, without any git submodule, locally** You can take one at the [Templates page]. For example: ```sh cargo generate --git https://github.com/rustwasm/wasm-pack-template ``` Once you tested the project has been correctly cloned and set, please to do the same with a template that contains git submodules. **2. Clone an existing template, with at least one git submodule, locally** For example: ```sh cargo generate --git https://github.com/k0pernicus/cargo-template-test-submodule ``` Please check that the project has been correctly cloned and set, and check if the repository contains initialized submodules. **Your ideas/contributions are welcome to create automated tests for this** :) ## Submitting a PR If you are considering filing a pull request, make sure that there's an issue filed for the work you'd like to do. There might be some discussion required! Filing an issue first will help ensure that the work you put into your pull request will get merged :) Before you submit your pull request, check that you have completed all of the steps mentioned in the pull request template. Link the issue that your pull request is responding to, and format your code using [rustfmt][rustfmt]. ### Configuring rustfmt Before submitting code in a PR, make sure that you have formatted the codebase using [rustfmt][rustfmt]. `rustfmt` is a tool for formatting Rust code, which helps keep style consistent across the project. If you have not used `rustfmt` before, here's how to get setup: **1. Use Stable Toolchain** Use the `rustup override` command to make sure that you are using the stable toolchain. Run this command in the `cargo-generate` directory you cloned. ```sh rustup override set stable ``` **2. Add the rustfmt component** Install the most recent version of `rustfmt` using this command: ```sh rustup component add rustfmt --toolchain stable ``` **3. Running rustfmt** To run `rustfmt`, use this command: ```sh cargo fmt ``` [rustfmt]: https://github.com/rust-lang-nursery/rustfmt ## Conduct We expect everyone who participates in this project in anyway to be friendly, open-minded, and humble. We have a [Code of Conduct], and expect you to have read it. If you have any questions or concerns, feel free to reach out to Ashley Williams, ashley666ashley@gmail.com. [Code of Conduct]: CODE_OF_CONDUCT.md [issue #83]: https://github.com/ashleygwilliams/cargo-generate/issues/83 [Templates page]: TEMPLATES.md