rust/compiler/rustc_span/src
Matthias Krüger 383f107867
Rollup merge of #143070 - joshtriplett:macro-rules-parse, r=petrochenkov
Rewrite `macro_rules!` parser to not use the MBE engine itself

The `macro_rules!` parser was written to match the series of rules using the macros-by-example (MBE) engine and a hand-written equivalent of the left-hand side of a MBE macro. This was complex to read, difficult to extend, and produced confusing error messages. Because it was using the MBE engine, any parse failure would be reported as if some macro was being applied to the `macro_rules!` invocation itself; for instance, errors would talk about "macro invocation", "macro arguments", and "macro call", when they were actually about the macro *definition*.

And in practice, the `macro_rules!` parser only used the MBE engine to extract the left-hand side and right-hand side of each rule as a token tree, and then parsed the rest using a separate parser.

Rewrite it to parse the series of rules using a simple loop, instead. This makes it more extensible in the future, and improves error messages. For instance, omitting a semicolon between rules will result in "expected `;`" and "unexpected token", rather than the confusing "no rules expected this token in macro call".

This work was greatly aided by pair programming with Vincenzo Palazzo (`@vincenzopalazzo)` and Eric Holk (`@eholk).`

For review, I recommend reading the two commits separately.
2025-07-02 19:29:37 +02:00
..
analyze_source_file Be more accurate about calculating display_col from a BytePos 2024-07-18 20:08:38 +00:00
edit_distance update cfg(bootstrap) 2025-01-08 21:26:39 +01:00
source_map Take into-account -Zremap-path-scope when embedding filenames 2025-05-05 19:45:34 +02:00
symbol Introduce ByteSymbol. 2025-06-30 20:42:27 +10:00
analyze_source_file.rs Update cfg(bootstrap) 2025-07-01 10:55:49 -07:00
caching_source_map_view.rs Do not clone Arc when hashing span. 2025-06-11 23:44:22 +00:00
def_id.rs Move hashes from rustc_data_structure to rustc_hashes so they can be shared with rust-analyzer 2025-02-16 16:18:30 -05:00
edit_distance.rs Use abs_diff where applicable 2025-03-27 18:29:06 +00:00
edition.rs Unify the format of rustc cli flags 2025-04-24 12:54:40 +08:00
fatal_error.rs Auto merge of #117557 - Zoxc:panic-prio, r=petrochenkov 2023-11-09 00:39:02 +00:00
hygiene.rs Implement DesugaringKind::FormatLiteral 2025-06-22 10:58:25 +02:00
lib.rs Update cfg(bootstrap) 2025-07-01 10:55:49 -07:00
profiling.rs Reformat use declarations. 2024-07-29 08:26:52 +10:00
source_map.rs Take into-account -Zremap-path-scope when embedding filenames 2025-05-05 19:45:34 +02:00
span_encoding.rs Optimize the codegen for Span::from_expansion 2025-04-30 11:38:09 -04:00
symbol.rs Rollup merge of #143070 - joshtriplett:macro-rules-parse, r=petrochenkov 2025-07-02 19:29:37 +02:00
tests.rs add unstable support for outputting file checksums for use in cargo 2024-10-01 21:23:20 -06:00