Given these hash and Mustache template:
Hash:
{
'a': 3
}
Template:
"This is a+2: {{a+2}}"
Ruby and Python give me different outputs:
In ruby, I get:
/usr/lib/ruby/gems/3.0.0/gems/mustache-1.1.1/lib/mustache/parser.rb:286:in `error': Unclosed tag (Mustache::Parser::SyntaxError)
Line 1
{{a+2}}
In python, just empty string
Who is right? What result should we get in official mustache specification: empty string or error (or something else)? I don't know what the result is other programming languages.
Both are not wrong as they adhere to Mustache spec requirements (or lack thereof in this case).
The tag's content MUST be a non-whitespace character sequence NOT containing the current closing delimiter.
The Ruby implementation mustache/mustache further constrains the tag name to:
# The content allowed in a tag name.
ALLOWED_CONTENT = /(\w|[?!\/.-])*/
The Python implementation noahmorrison/chevron considers a+2
as the tag name:
import chevron
chevron.render("This is a+2: {{a+2}}", {'a+2': 3})
# 'This is a+2: 3'
Notably, the Python implementation is not defaulting a syntax error to an empty string.