Skip to content

Commit 8c3b726

Browse files
committed
Support --edition=2024 (but use the same rules as for 2021)
1 parent a882643 commit 8c3b726

File tree

4 files changed

+33
-1
lines changed

4 files changed

+33
-1
lines changed

src/command_line.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::testcases;
88
use crate::Edition;
99

1010
const USAGE: &str = "\
11-
Usage: lexeywan [--edition=2015|2021] [<subcommand>] [...options]
11+
Usage: lexeywan [--edition=2015|2021|2024] [<subcommand>] [...options]
1212
1313
Subcommands:
1414
*compare [--short] [--failures-only] [--details=always|*failures|never]
@@ -51,6 +51,7 @@ fn run_cli_impl() -> Result<(), pico_args::Error> {
5151
{
5252
Some("2015") => Edition::E2015,
5353
Some("2021") => Edition::E2021,
54+
Some("2024") => Edition::E2024,
5455
None => Edition::E2021,
5556
_ => {
5657
return Err(pico_args::Error::ArgumentParsingFailed {

src/lex_via_rustc.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ pub fn analyse(input: &str, edition: Edition) -> Analysis {
162162
let rustc_edition = match edition {
163163
Edition::E2015 => rustc_span::edition::Edition::Edition2015,
164164
Edition::E2021 => rustc_span::edition::Edition::Edition2021,
165+
Edition::E2024 => rustc_span::edition::Edition::Edition2024,
165166
};
166167

167168
std::panic::catch_unwind(|| {

src/lexlucid/pretokenisation/pretokenisation_rules.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ use super::{PretokenData, Rule};
1515
pub fn list_rules(edition: Edition) -> &'static Vec<&'static Rule> {
1616
static EDITION_2015_RULES: OnceLock<Vec<&'static Rule>> = OnceLock::new();
1717
static EDITION_2021_RULES: OnceLock<Vec<&'static Rule>> = OnceLock::new();
18+
static EDITION_2024_RULES: OnceLock<Vec<&'static Rule>> = OnceLock::new();
1819
match edition {
1920
Edition::E2015 => EDITION_2015_RULES.get_or_init(|| make_rules(RULES_FOR_EDITION_2015)),
2021
Edition::E2021 => EDITION_2021_RULES.get_or_init(|| make_rules(RULES_FOR_EDITION_2021)),
22+
Edition::E2024 => EDITION_2024_RULES.get_or_init(|| make_rules(RULES_FOR_EDITION_2024)),
2123
}
2224
}
2325

@@ -101,6 +103,32 @@ const RULES_FOR_EDITION_2021: &[RuleName] = [
101103
]
102104
.as_slice();
103105

106+
const RULES_FOR_EDITION_2024: &[RuleName] = [
107+
RuleName::Whitespace,
108+
RuleName::LineComment,
109+
RuleName::BlockComment,
110+
RuleName::UnterminatedBlockComment,
111+
RuleName::Punctuation,
112+
RuleName::SingleQuotedLiteral,
113+
RuleName::RawLifetimeOrLabel2021,
114+
RuleName::ReservedLifetimeOrLabelPrefix2021,
115+
RuleName::NonRawLifetimeOrLabel,
116+
RuleName::DoublequotedNonrawLiteral2021,
117+
RuleName::DoublequotedHashlessRawLiteral2021,
118+
RuleName::DoublequotedHashedRawLiteral2021,
119+
RuleName::FloatLiteralWithExponent,
120+
RuleName::FloatLiteralWithoutExponent,
121+
RuleName::FloatLiteralWithFinalDot,
122+
RuleName::IntegerBinaryLiteral,
123+
RuleName::IntegerOctalLiteral,
124+
RuleName::IntegerHexadecimalLiteral,
125+
RuleName::IntegerDecimalLiteral,
126+
RuleName::RawIdentifier,
127+
RuleName::ReservedPrefixOrUnterminatedLiteral2021,
128+
RuleName::NonrawIdentifier,
129+
]
130+
.as_slice();
131+
104132
fn make_rules(wanted: &[RuleName]) -> Vec<&'static Rule> {
105133
static NAMED_RULES: OnceLock<BTreeMap<RuleName, Rule>> = OnceLock::new();
106134
let named_rules = NAMED_RULES.get_or_init(make_named_rules);

src/main.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ enum Edition {
1919
E2015,
2020
/// Rust 2021
2121
E2021,
22+
/// Rust 2024
23+
E2024,
2224
}
2325

2426
fn main() -> impl std::process::Termination {

0 commit comments

Comments
 (0)