diff --git a/crates/typst-syntax/src/lexer.rs b/crates/typst-syntax/src/lexer.rs index 5d684139f..8875d171c 100644 --- a/crates/typst-syntax/src/lexer.rs +++ b/crates/typst-syntax/src/lexer.rs @@ -862,11 +862,11 @@ impl Lexer<'_> { "number literals may not start or end with an underscore" )); } - let number = ignore_underscores(number); + let number2 = ignore_underscores(number); - let kind = if i64::from_str_radix(&number, base).is_ok() { + let kind = if i64::from_str_radix(&number2, base).is_ok() { SyntaxKind::Int - } else if base == 10 && number.parse::().is_ok() { + } else if base == 10 && number2.parse::().is_ok() { SyntaxKind::Float } else { return self.error(match base { diff --git a/tests/suite/foundations/int.typ b/tests/suite/foundations/int.typ index ace65939b..9175da03b 100644 --- a/tests/suite/foundations/int.typ +++ b/tests/suite/foundations/int.typ @@ -7,10 +7,14 @@ --- int-base-binary-invalid --- // Error: 2-7 invalid binary number: 0b123 #0b123 +// Error: 2-8 invalid binary number: 0b1_23 +#0b1_23 --- int-base-hex-invalid --- // Error: 2-8 invalid hexadecimal number: 0x123z #0x123z +// Error: 2-9 invalid hexadecimal number: 0x12_3z +#0x12_3z --- int-constructor --- // Test conversion to numbers.