[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251110135927.05d83da2@eugeo>
Date: Mon, 10 Nov 2025 13:59:27 +0000
From: Gary Guo <gary@...yguo.net>
To: Miguel Ojeda <ojeda@...nel.org>
Cc: Alex Gaynor <alex.gaynor@...il.com>, Nathan Chancellor
<nathan@...nel.org>, Nicolas Schier <nicolas@...sle.eu>, Boqun Feng
<boqun.feng@...il.com>, Björn Roy Baron
<bjorn3_gh@...tonmail.com>, Benno Lossin <lossin@...nel.org>, Andreas
Hindborg <a.hindborg@...nel.org>, Alice Ryhl <aliceryhl@...gle.com>, Trevor
Gross <tmgross@...ch.edu>, Danilo Krummrich <dakr@...nel.org>,
rust-for-linux@...r.kernel.org, linux-kbuild@...r.kernel.org,
linux-kernel@...r.kernel.org, patches@...ts.linux.dev
Subject: Re: [PATCH 00/18] `syn` support
On Mon, 10 Nov 2025 10:50:05 +0100
Miguel Ojeda <ojeda@...nel.org> wrote:
> This patch series introduces support for `syn` (and its dependencies).
> Having such support allows to greatly simplify writing complex macros
> such as `pin-init`.
>
> Benno has already prepared the `pin-init` version based on this, and on
> top of that, we will be able to simplify the `macros` crate too.
>
> The series starts with a few preparation commits (two fixes were already
> merged in mainline that were discovered by this series), then each crate
> is added.
>
> This has been a long time coming -- the first iterations of this, from
> 2022 and 2023 (with `serde` too), are at:
>
> https://github.com/Rust-for-Linux/linux/pull/910
> https://github.com/Rust-for-Linux/linux/pull/1007
>
> After those, we considered picking these from the distributions where
> possible. However, after discussing it, it is not really worth the
> complexity: vendoring makes things less complex and is less fragile.
>
> In particular, we avoid having to support and test several versions,
> we avoid having to introduce Cargo just to properly fetch the right
> versions from the registry, we can easily customize the crates if needed
> (e.g. dropping the `unicode_idents` dependency like it is done in this
> series) and we simplify the configuration of the build for users for
> which the "default" paths/registries would not have worked.
>
> Moreover, nowadays, the ~57k lines introduced are not that much compared
> to years ago (it dwarfed the actual Rust kernel code). Moreover, back
> then it wasn't clear the Rust experiment would be a success, so it would
> have been a bit pointless/risky to add many lines for nothing. Our macro
> needs were also smaller in the early days.
>
> So, finally, in Kangrejos 2025 we discussed going with the original,
> simpler approach. Thus here it is the result.
>
> There should not be many updates needed for these, and even if there
> are, they should not be too big, e.g. +7k -3k lines across the 3 crates
> in the last year.
>
> Note that `syn` does not have all the features enabled, since we do not
> need them so far, but they can easily be enabled just adding them to the
> list.
>
> I will be updating the webpage as well with the result of this:
>
> https://rust-for-linux.com/third-party-crates
>
> Please give it a test -- thanks!
Hi Miguel,
Thank you for creating this. I have been wanting to use `syn` even
before RfL was merged into mainline :)
I've gone through all commits and they all look good to me (I've also
verified the "import crate" patches against the source). So
Reviewed-by: Gary Guo <gary@...yguo.net>
I can build with these patches and I've verified that libmacros can
indeed reference types within `syn`, so also
Tested-by: Gary Guo <gary@...yguo.net>
Best,
Gary
>
> Miguel Ojeda (18):
> rust: condvar: avoid `pub` in example
> rust: kbuild: introduce `core-flags` and `core-skip_flags`
> rust: kbuild: simplify `--cfg` handling
> rust: kbuild: add host library support
> rust: proc-macro2: import crate
> rust: proc-macro2: add SPDX License Identifiers
> rust: proc-macro2: remove `unicode_ident` dependency
> rust: proc-macro2: add `README.md`
> rust: proc-macro2: enable support in kbuild
> rust: quote: import crate
> rust: quote: add SPDX License Identifiers
> rust: quote: add `README.md`
> rust: quote: enable support in kbuild
> rust: syn: import crate
> rust: syn: add SPDX License Identifiers
> rust: syn: remove `unicode-ident` dependency
> rust: syn: add `README.md`
> rust: syn: enable support in kbuild
>
> .gitignore | 1 +
> Makefile | 5 +
> rust/Makefile | 134 +-
> rust/kernel/sync/condvar.rs | 2 +-
> rust/proc-macro2/README.md | 13 +
> rust/proc-macro2/detection.rs | 77 +
> rust/proc-macro2/extra.rs | 153 +
> rust/proc-macro2/fallback.rs | 1258 +++++
> rust/proc-macro2/lib.rs | 1351 ++++++
> rust/proc-macro2/location.rs | 31 +
> rust/proc-macro2/marker.rs | 19 +
> rust/proc-macro2/parse.rs | 997 ++++
> rust/proc-macro2/probe.rs | 12 +
> rust/proc-macro2/probe/proc_macro_span.rs | 53 +
> .../proc-macro2/probe/proc_macro_span_file.rs | 16 +
> .../probe/proc_macro_span_location.rs | 23 +
> rust/proc-macro2/rcvec.rs | 148 +
> rust/proc-macro2/wrapper.rs | 986 ++++
> rust/quote/README.md | 12 +
> rust/quote/ext.rs | 112 +
> rust/quote/format.rs | 170 +
> rust/quote/ident_fragment.rs | 90 +
> rust/quote/lib.rs | 1456 ++++++
> rust/quote/runtime.rs | 494 ++
> rust/quote/spanned.rs | 52 +
> rust/quote/to_tokens.rs | 273 ++
> rust/syn/README.md | 13 +
> rust/syn/attr.rs | 838 ++++
> rust/syn/bigint.rs | 68 +
> rust/syn/buffer.rs | 436 ++
> rust/syn/classify.rs | 313 ++
> rust/syn/custom_keyword.rs | 262 ++
> rust/syn/custom_punctuation.rs | 306 ++
> rust/syn/data.rs | 426 ++
> rust/syn/derive.rs | 261 ++
> rust/syn/discouraged.rs | 227 +
> rust/syn/drops.rs | 60 +
> rust/syn/error.rs | 469 ++
> rust/syn/export.rs | 75 +
> rust/syn/expr.rs | 4175 +++++++++++++++++
> rust/syn/ext.rs | 138 +
> rust/syn/file.rs | 127 +
> rust/syn/fixup.rs | 775 +++
> rust/syn/gen/clone.rs | 2269 +++++++++
> rust/syn/gen/debug.rs | 3240 +++++++++++++
> rust/syn/gen/eq.rs | 2308 +++++++++
> rust/syn/gen/fold.rs | 3904 +++++++++++++++
> rust/syn/gen/hash.rs | 2878 ++++++++++++
> rust/syn/gen/visit.rs | 3943 ++++++++++++++++
> rust/syn/gen/visit_mut.rs | 3761 +++++++++++++++
> rust/syn/generics.rs | 1479 ++++++
> rust/syn/group.rs | 293 ++
> rust/syn/ident.rs | 110 +
> rust/syn/item.rs | 3492 ++++++++++++++
> rust/syn/lib.rs | 1013 ++++
> rust/syn/lifetime.rs | 158 +
> rust/syn/lit.rs | 1862 ++++++++
> rust/syn/lookahead.rs | 334 ++
> rust/syn/mac.rs | 227 +
> rust/syn/macros.rs | 184 +
> rust/syn/meta.rs | 429 ++
> rust/syn/op.rs | 221 +
> rust/syn/parse.rs | 1421 ++++++
> rust/syn/parse_macro_input.rs | 130 +
> rust/syn/parse_quote.rs | 242 +
> rust/syn/pat.rs | 957 ++++
> rust/syn/path.rs | 968 ++++
> rust/syn/precedence.rs | 212 +
> rust/syn/print.rs | 18 +
> rust/syn/punctuated.rs | 1157 +++++
> rust/syn/restriction.rs | 180 +
> rust/syn/scan_expr.rs | 267 ++
> rust/syn/sealed.rs | 6 +
> rust/syn/span.rs | 65 +
> rust/syn/spanned.rs | 120 +
> rust/syn/stmt.rs | 486 ++
> rust/syn/thread.rs | 62 +
> rust/syn/token.rs | 1098 +++++
> rust/syn/tt.rs | 109 +
> rust/syn/ty.rs | 1273 +++++
> rust/syn/verbatim.rs | 35 +
> rust/syn/whitespace.rs | 67 +
> scripts/generate_rust_analyzer.py | 23 +-
> 83 files changed, 57895 insertions(+), 13 deletions(-)
> create mode 100644 rust/proc-macro2/README.md
> create mode 100644 rust/proc-macro2/detection.rs
> create mode 100644 rust/proc-macro2/extra.rs
> create mode 100644 rust/proc-macro2/fallback.rs
> create mode 100644 rust/proc-macro2/lib.rs
> create mode 100644 rust/proc-macro2/location.rs
> create mode 100644 rust/proc-macro2/marker.rs
> create mode 100644 rust/proc-macro2/parse.rs
> create mode 100644 rust/proc-macro2/probe.rs
> create mode 100644 rust/proc-macro2/probe/proc_macro_span.rs
> create mode 100644 rust/proc-macro2/probe/proc_macro_span_file.rs
> create mode 100644 rust/proc-macro2/probe/proc_macro_span_location.rs
> create mode 100644 rust/proc-macro2/rcvec.rs
> create mode 100644 rust/proc-macro2/wrapper.rs
> create mode 100644 rust/quote/README.md
> create mode 100644 rust/quote/ext.rs
> create mode 100644 rust/quote/format.rs
> create mode 100644 rust/quote/ident_fragment.rs
> create mode 100644 rust/quote/lib.rs
> create mode 100644 rust/quote/runtime.rs
> create mode 100644 rust/quote/spanned.rs
> create mode 100644 rust/quote/to_tokens.rs
> create mode 100644 rust/syn/README.md
> create mode 100644 rust/syn/attr.rs
> create mode 100644 rust/syn/bigint.rs
> create mode 100644 rust/syn/buffer.rs
> create mode 100644 rust/syn/classify.rs
> create mode 100644 rust/syn/custom_keyword.rs
> create mode 100644 rust/syn/custom_punctuation.rs
> create mode 100644 rust/syn/data.rs
> create mode 100644 rust/syn/derive.rs
> create mode 100644 rust/syn/discouraged.rs
> create mode 100644 rust/syn/drops.rs
> create mode 100644 rust/syn/error.rs
> create mode 100644 rust/syn/export.rs
> create mode 100644 rust/syn/expr.rs
> create mode 100644 rust/syn/ext.rs
> create mode 100644 rust/syn/file.rs
> create mode 100644 rust/syn/fixup.rs
> create mode 100644 rust/syn/gen/clone.rs
> create mode 100644 rust/syn/gen/debug.rs
> create mode 100644 rust/syn/gen/eq.rs
> create mode 100644 rust/syn/gen/fold.rs
> create mode 100644 rust/syn/gen/hash.rs
> create mode 100644 rust/syn/gen/visit.rs
> create mode 100644 rust/syn/gen/visit_mut.rs
> create mode 100644 rust/syn/generics.rs
> create mode 100644 rust/syn/group.rs
> create mode 100644 rust/syn/ident.rs
> create mode 100644 rust/syn/item.rs
> create mode 100644 rust/syn/lib.rs
> create mode 100644 rust/syn/lifetime.rs
> create mode 100644 rust/syn/lit.rs
> create mode 100644 rust/syn/lookahead.rs
> create mode 100644 rust/syn/mac.rs
> create mode 100644 rust/syn/macros.rs
> create mode 100644 rust/syn/meta.rs
> create mode 100644 rust/syn/op.rs
> create mode 100644 rust/syn/parse.rs
> create mode 100644 rust/syn/parse_macro_input.rs
> create mode 100644 rust/syn/parse_quote.rs
> create mode 100644 rust/syn/pat.rs
> create mode 100644 rust/syn/path.rs
> create mode 100644 rust/syn/precedence.rs
> create mode 100644 rust/syn/print.rs
> create mode 100644 rust/syn/punctuated.rs
> create mode 100644 rust/syn/restriction.rs
> create mode 100644 rust/syn/scan_expr.rs
> create mode 100644 rust/syn/sealed.rs
> create mode 100644 rust/syn/span.rs
> create mode 100644 rust/syn/spanned.rs
> create mode 100644 rust/syn/stmt.rs
> create mode 100644 rust/syn/thread.rs
> create mode 100644 rust/syn/token.rs
> create mode 100644 rust/syn/tt.rs
> create mode 100644 rust/syn/ty.rs
> create mode 100644 rust/syn/verbatim.rs
> create mode 100644 rust/syn/whitespace.rs
>
> --
> 2.51.2
Powered by blists - more mailing lists