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 test
rustfmt
clippy
rustdoc
committed
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