Repository: pest-parser/pest (language: rust)

Issue:
`rust-version` and non-default features
Currently, `rust-version` is set to 1.56 and it builds fine with default features.
During the release process, we found that at least 1.61 is required for `--all-features`.
Shall we set `rust-version` to 1.61?


Discussion / hints:
@CAD97 @NoahTheDuke 
Right now, it seems it's not possible to set different MSRVs per feature flags: https://rust-lang.github.io/rfcs/2495-min-rust-version.html#cfg-based-msrvs in the manifest?
Related: https://github.com/pest-parser/pest/pull/615#issuecomment-1179755352
Also related: https://github.com/rust-lang/libs-team/issues/72

Whilst it's not possible to key off of features, my opinion is that the `rust-version` should match the default feature set.

The ideal thing to do would be to downgrade the all-features MSRV, either by version sniffing or just changing what's adding the requirement.

Whatever we choose, we should test it in CI.

As far as if we want to bump MSRV again:

- We should add a policy for upgrading MSRV
- We should do a survey of rdeps's MSRV policies and avoid exceeding those
- We should also strongly consider a "six month" minimum even if no rdeps currently rely on that
- And track the T-libs discussion; it'll end up defacto setting the extended msrv policy for the ecosystem.
[direct rdeps](https://lib.rs/crates/pest/rev)

I checked rdeps with downloads >= 10k. Listed is just information from README/homepage/rustdoc; I did not check the `rust-version` key for any of these crates.

| crate | msrv policy | notes |
| - | - | - |
| semver-parser | - | deprecated |
| handlebars | stable | patch-level change |
| nalgebra | stable | - |
| tera | - | no policy listed |
| json5 | - | no policy listed |
| insta | - | no policy listed |
| mmids | - | no policy listed |
| async-graphql-parser | 1.57.0 | no policy listed; regularly bumped |
| termwiz | - | no policy listed |
| css-modules | - | only exists on crates-io; docs-rs and repo are 404 |
| jsonpath-rust | - | no policy listed |
| liquid | - | no policy listed |
| py_literal | - | no policy listed |
| comrak | - | no policy listed |
| msi | - | no policy listed | 

I know @jhpratt has considered potentially using pest in time; time has an MSRV policy of six months, with a explicit hole allowed for *optional* interoperability crate dependencies.
Thanks for the great research! 6 months is roughly stable-5, right? Seems like that's a reasonable bound given the discussion in the libs-team conversation.
Yeah, 6 months is somewhere in stable-4/stable-5 (current stable is stable-0) since months aren't a clean number of weeks. stable-5 is cleanly always at least 6 months old.
Six months is ~26 weeks. So stable - 4, plus about two weeks buffer. I don't count the weeks though, as it's easier to just add six to the month, saturating the day if necessary. So August 31 would turn into February 28.

The six months policy is in relatively high use among popular crates with a formal policy. For pest being potentially used in the time crate, while it would be an optional dependency, it would not be so directly (basically there's no "pest" feature, just "parsing" that would rely on pest). As such the caveat _would not_ apply, and pest would need to fully comply with my MSRV policy to be used as a dependency. This is, in part, why the only dependencies enabled by default are ones I directly control.
FWIW: 

* liquid appears to be on 1.59: https://github.com/cobalt-org/liquid-rust/commit/831869a99956306ae5d8ff09dbc007bfa1de872d
* tera on 1.46: https://github.com/Keats/tera/blob/master/.github/workflows/ci.yml#L18 (but tera will abandon pest for a handwritten lexer/parser in its next version)
* insta on 1.56: https://github.com/mitsuhiko/insta/blob/master/Cargo.toml#L8
* termwiz on 1.57: https://github.com/wez/wezterm/blob/main/ci/check-rust-version.sh#L3
* py_literal on 1.42: https://github.com/jturner314/py_literal/blob/master/.github/workflows/ci.yml#L24

Anyway, the culprit non-default feature in pest that needs 1.61 is `const_prec_climber` (it previously required nightly).

Fix patch:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 00c272c8..727d4bb3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -130,40 +130,3 @@ jobs:
           name: pest-ci-coverage
           fail_ci_if_error: false
           verbose: true
-
-# fuzzing: # fuzzit is now offline
-#   name: Fuzz Testing
-#   runs-on: ubuntu-latest
-#   if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
-#   steps:
-#     - name: Checkout source code
-#       uses: actions/checkout@v2
-#     - name: Install Rust Nightly
-#       uses: actions-rs/toolchain@v1
-#       with:
-#         toolchain: nightly
-#         default: true
-#     - name: Install Cargo Fuzz
-#       uses: actions-rs/install@v0.1
-#       with:
-#         crate: cargo-fuzz
-#         version: latest
-#         use-tool-cache: true
-#     - name: Bootstraping Grammars - Building
-#       uses: actions-rs/cargo@v1
-#       with:
-#         command: build
-#         args: --package pest_bootstrap
-#     - name: Bootstraping Grammars - Executing
-#       uses: actions-rs/cargo@v1
-#       with:
-#         command: run
-#         args: --package pest_bootstrap
-#     - name: Fuzz Testing - Regressions
-#       env:
-#         FUZZIT_API_KEY: ${{ secrets.FuzzitApiKey }}
-#       run: ./fuzzit.sh local-regression
-#     - name: Fuzz Testing - Fuzzing
-#       env:
-#         FUZZIT_API_KEY: ${{ secrets.FuzzitApiKey }}
-#       run: ./fuzzit.sh fuzzing
\ No newline at end of file
diff --git a/README.md b/README.md
index 860e9a4b..856ec8b0 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,8 @@
 
 [![pest Continuous Integration](https://github.com/pest-parser/pest/actions/workflows/ci.yml/badge.svg)](https://github.com/pest-parser/pest/actions/workflows/ci.yml)
 [![codecov](https://codecov.io/gh/pest-parser/pest/branch/master/graph/badge.svg)](https://codecov.io/gh/pest-parser/pest)
-[![Fuzzit Status](https://app.fuzzit.dev/badge?org_id=pest-parser)](https://app.fuzzit.dev/orgs/pest-parser/dashboard)
+<a href="https://blog.rust-lang.org/2021/11/01/Rust-1.56.1.html"><img alt="Rustc Version 1.56.1+" src="https://img.shields.io/badge/rustc-1.56.1%2B-lightgrey.svg"/></a>
+
 [![Crates.io](https://img.shields.io/crates/d/pest.svg)](https://crates.io/crates/pest)
 [![Crates.io](https://img.shields.io/crates/v/pest.svg)](https://crates.io/crates/pest)
 
@@ -172,6 +173,11 @@ Digit:   2
 * [caith](https://github.com/Geobert/caith) (a dice roller crate)
 * [Melody](https://github.com/yoav-lavi/melody)
 
+## Minimum Supported Rust Version (MSRV)
+
+This library should always compile with default features on **Rust 1.56.1** 
+or **Rust 1.61** with `const_prec_climber`.
+
 ## Special thanks
 
 A special round of applause goes to prof. Marius Minea for his guidance and all


Test patch: