Add format string validation in expressions package

Format string validation now happens at parse time in the Parser:
- Invalid format string syntax throws ErrorInvalidFormatString
- Argument count mismatch throws ErrorFormatArgCountMismatch

This catches errors early and automatically for all consumers.
This commit is contained in:
eric sciple
2026-01-07 22:00:04 +00:00
parent dbf7752734
commit 9f260c4658
7 changed files with 398 additions and 38 deletions
+34 -34
View File
@@ -87,120 +87,120 @@
{
"expr": "format('{0')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: {0"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('{0', '')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: {0"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('{0}}', '')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: {0}}"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('{0}}}}', '')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: {0}}}}"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('0}')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: 0}"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('0}', '')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: 0}"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('{{0}')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: {{0}"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('{{0}', '')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: {{0}"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('{{{{0}')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: {{{{0}"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('{{{{0}', '')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: {{{{0}"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('}0{')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: }0{"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('}0{', '')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: }0{"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('}{0}')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: }{0}"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('}{0}', '')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: }{0}"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('{0}{', '')",
"err": {
"kind": "evaluation",
"value": "The following format string is invalid: {0}{"
"kind": "parsing",
"value": "Invalid format string"
}
},
{
"expr": "format('{0}')",
"err": {
"kind": "evaluation",
"value": "The following format string references more arguments than were supplied: {0}"
"kind": "parsing",
"value": "Format string references {0} but only 0 argument(s) provided"
}
},
{
"expr": "format('{0}{1}', 'abc')",
"err": {
"kind": "evaluation",
"value": "The following format string references more arguments than were supplied: {0}{1}"
"kind": "parsing",
"value": "Format string references {1} but only 1 argument(s) provided"
}
}
]