Contributions are always welcome! And there is a multitude of ways in which you can help depending on what you like to do, or are good at. Anything from documentation, code cleanup, issue completion, new features, you name it, even filing issues is contributing and greatly appreciated!
There are a few goals of clap that I‘d like to maintain throughout contributions. If your proposed changes break, or go against any of these goals we’ll discuss the changes further before merging (but will not be ignored, all contributes are welcome!). These are by no means hard-and-fast rules, as I'm no expert and break them myself from time to time (even if by mistake or ignorance :P).
clap should be low since the main program is the star of the showpanic! on developer error (e.g. apps and args), exit gracefully on end-user errorOur releases fall into one of:
deprecated feature by defaultdeprecated feature flag)deprecated feature flag enabled-by-default (only on last planned minor release)#[doc(hidden)] all deprecated items in the prior minor releaseIf your change does not fit within a “patch” release, please coordinate with the clap maintainers for how to handle the situation.
Some practices to avoid breaking changes
/// Deprecated in [Issue #XXX](https://github.com/clap-rs/clap/issues/XXX), replaced with [intra-doc-link]#[cfg_attr(feature = "deprecated", deprecated(since = "X.Y.Z", note = "Replaced with ITEM in Issue #XXX"))]deprecated feature flag is to allow people to process them on their time table and allow us to process feedback from early adopters before requiring everyone to process them on the next major version.unstable-<name> feature flag with a stabilization tracking issue (e.g. Multicall Tracking issue)As we work towards a more flexible architecture, we hope to support multiple major versions to help ease users through the upgrade churn.
| Version | Status | Support | End-of-Life |
|---|---|---|---|
| v4 | active | Features and bug fixes target master by default | TBD |
| v3 | maintenance | Accepting trivial cherry-picks from master (i.e. minimal conflict resolution) by contributors and fixes for ecosystem-wide showstoppers | TBD |
| v2 | deprecated | Only accepting fixes for ecosystem-wide showstoppers | TBD |
| v1 | unsupported | - | - |
Note: We have not yet determined the End-of-Life schedule for previous major versions. We will give at least a 2 month warning before changing the support status.
A common (sub)set of commands for verifying your change:
$ make test-full $ make clippy-full $ make doc
(If make is not available on your system, you can look up what these expand to in the Makefile)
Check out the Makefile for more commands run by CI.
A helpful technique is to see the clap debug output while developing features. In order to see the debug output while running the full test suite or individual tests, run:
$ cargo test --features debug # Or for individual tests $ cargo test --test <test_name> --features debug
As a heads up, we'll be running your PR through the following gauntlet:
cargo testrustfmtclippyrustdoccommitted as we use Conventional commit styletypos to check spellingNot everything can be checked automatically though.
We request that the commit history gets cleaned up. We ask that commits are atomic, meaning they are complete and have a single responsibility. PRs should tell a cohesive story, with test and refactor commits that keep the fix or feature commits simple and clear.
Specifically, we would encourage
Note that we are talking about ideals. We understand having a clean history requires more advanced git skills; feel free to ask us for help! We might even suggest where it would work to be lax. We also understand that editing some early commits may cause a lot of churn with merge conflicts which can make it not worth editing all of the history.
For code organization, we recommend
impl blocks next to their type (or trait)pub item that uses them.pub items serve as a table-of-contents.https://github.com/clap-rs/clap/issues/1464)Yes, you can. In that case, you don't have to do anything except writing a comment on the issue saying that I do. The bounty will be reassigned to another issue.
Search for MSRV, for example
$ rg --hidden MSRV
And update all of the references