From 79738ff2388a6f15cd28690a3d276ee5086fb44f Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Thu, 18 Jan 2024 10:47:37 +0100 Subject: Fix support for mixed case variables --- askama_parser/src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'askama_parser/src/lib.rs') diff --git a/askama_parser/src/lib.rs b/askama_parser/src/lib.rs index e6f133c..1cb0e87 100644 --- a/askama_parser/src/lib.rs +++ b/askama_parser/src/lib.rs @@ -349,9 +349,9 @@ fn path_or_identifier(i: &str) -> ParseResult<'_, PathOrIdentifier<'_>> { let rest = rest.as_deref().unwrap_or_default(); // The returned identifier can be assumed to be path if: - // - Contains both a lowercase and uppercase character, i.e. a type name like `None` - // - Doesn't contain any lowercase characters, i.e. it's a constant - // In short, if it contains any uppercase characters it's a path. + // - it is an absolute path (starts with `::`), or + // - it has multiple components (at least one `::`), or + // - the first letter is uppercase match (root, start, rest) { (Some(_), start, tail) => { let mut path = Vec::with_capacity(2 + tail.len()); @@ -360,7 +360,7 @@ fn path_or_identifier(i: &str) -> ParseResult<'_, PathOrIdentifier<'_>> { path.extend(rest); Ok((i, PathOrIdentifier::Path(path))) } - (None, name, []) if !name.contains(char::is_uppercase) => { + (None, name, []) if name.chars().next().map_or(true, |c| c.is_lowercase()) => { Ok((i, PathOrIdentifier::Identifier(name))) } (None, start, tail) => { -- cgit