Repository: dtolnay/syn
Pull request #1608 (2024-03-30 02:27:43)

Use `dep:` and optional dependency feature `?` syntax
This PR comes in 2 parts:

The first uses the `dep:` syntax for the `printing` feature depending on `quote`, which removes the unused implicit feature.

The second uses the `?` syntax in the `proc-macro` feature, so `quote` is not pulled in as a dependency if `printing` is not enabled.

Unfortunately, both of these changes raise the MSRV back to 1.60. Before finishing my changes in CI, I wanted to confirm that this was fine.


Patch:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 05df555b..4bd0f723 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -37,7 +37,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        rust: [stable, beta, 1.60.0, 1.56.0]
+        rust: [stable, beta, 1.60.0]
         include:
           - rust: nightly
             components: rustc-dev
@@ -52,7 +52,6 @@ jobs:
             os: windows
     env:
       target: ${{matrix.target && format('--target={0}', matrix.target)}}
-      manifestpath: ${{matrix.rust == '1.56.0' && '--manifest-path tests/crate/Cargo.toml' || ''}}
     timeout-minutes: 45
     steps:
       - uses: actions/checkout@v4
@@ -61,21 +60,21 @@ jobs:
           toolchain: ${{matrix.rust}}
           targets: ${{matrix.target}}
           components: ${{matrix.components}}
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features
-      - run: cargo check ${{env.manifestpath}} ${{env.target}}
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --features full
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --features 'fold visit visit-mut'
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --features 'full fold visit visit-mut'
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features --features derive
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features --features 'derive parsing'
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features --features 'derive printing'
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features --features 'proc-macro parsing printing'
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features --features full
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features --features 'full parsing'
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features --features 'full printing'
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features --features 'full parsing printing'
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features --features 'fold visit visit-mut parsing printing'
-      - run: cargo check ${{env.manifestpath}} ${{env.target}} --no-default-features --features 'full fold visit visit-mut parsing printing'
+      - run: cargo check ${{env.target}} --no-default-features
+      - run: cargo check ${{env.target}}
+      - run: cargo check ${{env.target}} --features full
+      - run: cargo check ${{env.target}} --features 'fold visit visit-mut'
+      - run: cargo check ${{env.target}} --features 'full fold visit visit-mut'
+      - run: cargo check ${{env.target}} --no-default-features --features derive
+      - run: cargo check ${{env.target}} --no-default-features --features 'derive parsing'
+      - run: cargo check ${{env.target}} --no-default-features --features 'derive printing'
+      - run: cargo check ${{env.target}} --no-default-features --features 'proc-macro parsing printing'
+      - run: cargo check ${{env.target}} --no-default-features --features full
+      - run: cargo check ${{env.target}} --no-default-features --features 'full parsing'
+      - run: cargo check ${{env.target}} --no-default-features --features 'full printing'
+      - run: cargo check ${{env.target}} --no-default-features --features 'full parsing printing'
+      - run: cargo check ${{env.target}} --no-default-features --features 'fold visit visit-mut parsing printing'
+      - run: cargo check ${{env.target}} --no-default-features --features 'full fold visit visit-mut parsing printing'
       - if: matrix.components == 'rustc-dev'
         run: cargo check --benches --all-features --release
 
diff --git a/Cargo.toml b/Cargo.toml
index 16a8d416..d1b564c4 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,20 +18,20 @@ include = [
 keywords = ["macros", "syn"]
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/dtolnay/syn"
-rust-version = "1.56"
+rust-version = "1.60"
 
 [features]
 default = ["derive", "parsing", "printing", "clone-impls", "proc-macro"]
 derive = []
 full = []
 parsing = []
-printing = ["quote"]
+printing = ["dep:quote"]
 visit = []
 visit-mut = []
 fold = []
 clone-impls = []
 extra-traits = []
-proc-macro = ["proc-macro2/proc-macro", "quote/proc-macro"]
+proc-macro = ["proc-macro2/proc-macro", "quote?/proc-macro"]
 test = ["syn-test-suite/all-features"]
 
 [dependencies]
diff --git a/README.md b/README.md
index e8d99abc..04f9bf6c 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,7 @@ contains some APIs that may be useful more generally.
 [`syn::DeriveInput`]: https://docs.rs/syn/2.0/syn/struct.DeriveInput.html
 [parser functions]: https://docs.rs/syn/2.0/syn/parse/index.html
 
-*Version requirement: Syn supports rustc 1.56 and up.*
+*Version requirement: Syn supports rustc 1.60 and up.*
 
 [*Release notes*](https://github.com/dtolnay/syn/releases)
 


Test patch:
diff --git a/tests/crate/Cargo.toml b/tests/crate/Cargo.toml
deleted file mode 100644
index 54a305fd..00000000
--- a/tests/crate/Cargo.toml
+++ /dev/null
@@ -1,26 +0,0 @@
-[workspace]
-[package]
-name = "syn-test-suite"
-version = "0.0.0"
-authors = ["David Tolnay <dtolnay@gmail.com>"]
-edition = "2021"
-publish = false
-
-[lib]
-path = "test.rs"
-
-[dependencies]
-syn = { path = "../..", default-features = false }
-
-[features]
-default = ["derive", "parsing", "printing", "clone-impls", "proc-macro"]
-derive = ["syn/derive"]
-full = ["syn/full"]
-parsing = ["syn/parsing"]
-printing = ["syn/printing"]
-visit = ["syn/visit"]
-visit-mut = ["syn/visit-mut"]
-fold = ["syn/fold"]
-clone-impls = ["syn/clone-impls"]
-extra-traits = ["syn/extra-traits"]
-proc-macro = ["syn/proc-macro"]
diff --git a/tests/crate/test.rs b/tests/crate/test.rs
deleted file mode 100644
index 6c776606..00000000
--- a/tests/crate/test.rs
+++ /dev/null
@@ -1,1 +0,0 @@
-pub use syn::*;