From 4eb2fb5c8ed30a580acf24234fffb2cb6256e335 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sun, 25 Oct 2026 09:56:18 -0400 Subject: [PATCH] Review fix for #2473: a repeated sheet name matches in any case Sheet1!A1:SHEET1!B2 is a range whose second end repeats the sheet, as Sheet1!A1:Sheet1!B2 is: the check uses same_name, Excel's case-insensitive name comparison. Co-Authored-By: Claude Opus 5.5 --- crates/formula/src/lexer.rs | 2 +- crates/formula/src/tests.rs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/formula/src/lexer.rs b/crates/formula/src/lexer.rs index 83ea78a86..332cb6eeb 100644 --- a/crates/formula/src/lexer.rs +++ b/crates/formula/src/lexer.rs @@ -346,7 +346,7 @@ pub fn tokenize_locale(src: &str, locale: crate::FormulaLocale) -> Result(), p))); k > j + 1 && ch(k) == Some('!') && !repeats_sheet } { let mut k = j + 1; diff --git a/crates/formula/src/tests.rs b/crates/formula/src/tests.rs index 2318a8b29..a7506aa4b 100644 --- a/crates/formula/src/tests.rs +++ b/crates/formula/src/tests.rs @@ -10,6 +10,8 @@ fn range_end_repeating_sheet_name_round_trips() { assert_eq!(rt("'a'!A1:'a'!B2"), "a!A1:a!B2"); assert_eq!(rt("Sheet1!A1:Sheet1!B2"), "Sheet1!A1:Sheet1!B2"); assert_eq!(rt("SUM(a!A1:a!B2)"), "SUM(a!A1:a!B2)"); + // Sheet names match without regard to case, as Excel's do. + assert_eq!(rt("Sheet1!A1:SHEET1!B2"), "Sheet1!A1:SHEET1!B2"); } #[test]