Skip to content

`syn` support

Miguel Ojeda linux-kbuild linux-patches lkml rust-for-linux 2 versions – Applied

Status from this message: Applied to `rust-next` -- thanks everyone!

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest20 patches 3 repliesApplied
  2. v118 patches 42 repliesSuperseded

Changes in v2 from the cover letter

- Drop condvar patch.
- Add note about := in commit log.
- Add comment about rustfmt and note it in the log.
- Rename hostlibrary to procmacrolibrary.
- Split a couple changes into two new commits (rustc_test_library, rustc_procmacro). I applied the tags to those, since the changes are still the same and the log is simple.
- Add new commit with the macros support for the new crates.

Patches in v2 Applied

#Subject and filesSizeRepliesApplied
1/20rust: kbuild: introduce `core-flags` and `core-skip_flags`rust/Makefile+14 -50 replies
2/20rust: kbuild: simplify `--cfg` handlingrust/Makefile scripts/generate_rust_analyzer.py+5 -30 replies
3/20rust: kbuild: add proc macro library support.gitignore rust/Makefile+11 -00 replies
4/20rust: kbuild: support skipping flags in `rustc_test_library`rust/Makefile+2 -20 replies
5/20rust: kbuild: support using libraries in `rustc_procmacro`rust/Makefile+1 -10 replies
6/20rust: proc-macro2: import craterust/proc-macro2/detection.rs rust/proc-macro2/extra.rs rust/proc-macro2/fallback.rs +10 more+5098 -00 replies
7/20rust: proc-macro2: add SPDX License Identifiersrust/proc-macro2/detection.rs rust/proc-macro2/extra.rs rust/proc-macro2/fallback.rs +10 more+26 -00 replies
8/20rust: proc-macro2: remove `unicode_ident` dependencyrust/proc-macro2/fallback.rs+2 -20 replies
9/20rust: proc-macro2: add `README.md`rust/proc-macro2/README.md+13 -00 replies
10/20rust: proc-macro2: enable support in kbuildMakefile rust/Makefile scripts/generate_rust_analyzer.py+42 -20 replies
11/20rust: quote: import craterust/quote/ext.rs rust/quote/format.rs rust/quote/ident_fragment.rs +4 more+2633 -00 replies
12/20rust: quote: add SPDX License Identifiersrust/quote/ext.rs rust/quote/format.rs rust/quote/ident_fragment.rs +4 more+14 -00 replies
13/20rust: quote: add `README.md`rust/quote/README.md+12 -00 replies
14/20rust: quote: enable support in kbuildMakefile rust/Makefile scripts/generate_rust_analyzer.py+43 -30 replies
15/20rust: syn: import craterust/syn/attr.rs rust/syn/bigint.rs rust/syn/buffer.rs +52 more+49824 -00 replies
16/20rust: syn: add SPDX License Identifiersrust/syn/attr.rs rust/syn/bigint.rs rust/syn/buffer.rs +52 more+110 -00 replies
17/20rust: syn: remove `unicode-ident` dependencyrust/syn/ident.rs+2 -20 replies
18/20rust: syn: add `README.md`rust/syn/README.md+13 -00 replies
19/20rust: syn: enable support in kbuildMakefile rust/Makefile scripts/generate_rust_analyzer.py+42 -32 replies
20/20rust: macros: support `proc-macro2`, `quote` and `syn`rust/Makefile scripts/generate_rust_analyzer.py+10 -50 replies

Reviews trailers per patch

19 of 20 patches have a Reviewed-by or Acked-by.

PatchAlice RyhlGary GuoJesung Yang
1/20R-b R-b T-b T-b
2/20R-b R-b T-b T-b
3/20R-b T-b T-b
4/20R-b R-b T-b T-b
5/20R-b R-b T-b T-b
6/20R-b T-b T-b
7/20R-b T-b T-b
8/20R-b R-b T-b T-b
9/20R-b R-b T-b T-b
10/20R-b T-b T-b
11/20R-b T-b T-b
12/20R-b T-b T-b
13/20R-b T-b T-b
14/20R-b R-b T-b T-b
15/20R-b T-b T-b
16/20R-b T-b T-b
17/20R-b R-b T-b T-b
18/20R-b R-b T-b T-b
19/20R-b R-b T-b T-b
20/20T-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 3 reviewers.

Read the v2 thread

Cover letter [PATCH v2 00/20] `syn` support

This patch series introduces support for syn (and its dependencies):

Syn is a parsing library for parsing a stream of Rust tokens into a syntax tree of Rust source code.

Currently this library is geared toward use in Rust procedural macros, but contains some APIs that may be useful more generally.

It is the most downloaded Rust crate (according to crates.io), and it is also used by the Rust compiler itself. Having such support allows to greatly simplify writing complex macros such as pin-init. We will use it in the macros crate too.

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. I think Jesung is working on updating the TryFrom and Into upcoming derive macros to use syn 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. Finally, support for using the new crates from our macros crate is introduced.

This has been a long time coming, e.g. even before Rust for Linux was merged into the Linux kernel, Gary and Benno have wanted to use syn. The first iterations of this, from 2022 and 2023 (with serde too, another popular crate), 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.

v2:
- Drop condvar patch.
- Add note about := in commit log.
- Add comment about rustfmt and note it in the log.
- Rename hostlibrary to procmacrolibrary.
- Split a couple changes into two new commits (rustc_test_library, rustc_procmacro). I applied the tags to those, since the changes are still the same and the log is simple.
- Add new commit with the macros support for the new crates.

v1: https://lore.kernel.org/rust-for-linux/[email protected]/

Miguel Ojeda (20):
rust: kbuild: introduce core-flags and core-skip_flags
rust: kbuild: simplify --cfg handling
rust: kbuild: add proc macro library support
rust: kbuild: support skipping flags in rustc_test_library
rust: kbuild: support using libraries in rustc_procmacro
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
rust: macros: support proc-macro2, quote and syn

 .gitignore                                    |    1 +
 Makefile                                      |    7 +
 rust/Makefile                                 |  147 +-
 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             |   25 +-
 82 files changed, 57906 insertions(+), 17 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

base-commit: bc197e24a3acd13dd0b7b07c1448c5c225946546 --
2.52.0