{"record":{"id":"f195edbdbf57e81a","repo":"unoplatform/uno","slug":"missing-closing-quote","errorCode":null,"errorMessage":"Missing closing quote","messagePattern":"Missing closing quote","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/Utils/XBindExpressionParser.CoreParser.cs","lineNumber":104,"sourceCode":"\n\t\t\treturn new XBindInvocation() { Path = bindPath, Arguments = arguments.ToArray() };\n\t\t}\n\n\t\tprivate XBindArgument ParseXBindArgument()\n\t\t{\n\t\t\tSkipWhitespaces();\n\t\t\tif (Current == '\"')\n\t\t\t{\n\t\t\t\t// literal string argument\n\t\t\t\tvar oldPosition = _position++;\n\t\t\t\twhile (!IsDone && Current != '\"')\n\t\t\t\t{\n\t\t\t\t\t_position++;\n\t\t\t\t}\n\n\t\t\t\tif (Current != '\"')\n\t\t\t\t{\n\t\t\t\t\tthrow new Exception(\"Missing closing quote\");\n\t\t\t\t}\n\n\t\t\t\tvar literal = _xBind.Substring(oldPosition, ++_position - oldPosition);\n\t\t\t\treturn new XBindLiteralArgument() { LiteralArgument = literal };\n\t\t\t}\n\t\t\telse if (char.IsDigit(Current))\n\t\t\t{\n\t\t\t\t// literal numeric argument\n\t\t\t\tvar oldPosition = _position;\n\t\t\t\twhile (char.IsDigit(Current))\n\t\t\t\t{\n\t\t\t\t\t_position++;\n\t\t\t\t}\n\n\t\t\t\tif (Current == '.')\n\t\t\t\t{\n\t\t\t\t\t_position++;\n\t\t\t\t\tif (!char.IsDigit(Current))","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/unoplatform/uno/blob/04183404888ea21b4e5bfa3493e8d5f15e972c3a/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/Utils/XBindExpressionParser.CoreParser.cs#L86-L122","documentation":"When parsing a string literal argument in an x:Bind invocation, the parser expects a matching closing '\"' before end-of-input. If the opening quote is never closed, it throws. Example trigger: {x:Bind Foo(\"unclosed)}.","triggerScenarios":"An x:Bind string literal argument whose opening '\"' has no closing '\"', e.g. {x:Bind Foo(\"bar)}.","commonSituations":"Unterminated string literal in a hand-edited x:Bind; a copy/paste that dropped the closing quote.","solutions":["Add the closing '\"' for the string literal.","Escape any literal quotes inside the string if needed."],"exampleFix":"<!-- before -->\n<TextBlock Text=\"{x:Bind Greet(\"world}\" />\n<!-- after -->\n<TextBlock Text=\"{x:Bind Greet(\"world\")}\" />","handlingStrategy":"validation","validationCode":"static bool HasClosingQuote(string expr)\n{ bool open = false; foreach (var c in expr) { if (c == '\"') open = !open; } return !open; }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always close string literals in x:Bind with a matching '\"'.","Use an editor that highlights unterminated string literals."],"tags":["xaml","xbind","parser","binding","string-literal"],"backgroundTag":null,"analyzedSha":"04183404888ea21b4e5bfa3493e8d5f15e972c3a","analyzedAt":"2026-08-13T21:08:11.651Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}