in libraries/Microsoft.Bot.Builder.LanguageGeneration/StaticChecker.cs [246:331]
public override List<Diagnostic> VisitSwitchCaseBody([NotNull] LGTemplateParser.SwitchCaseBodyContext context)
{
var result = new List<Diagnostic>();
var switchCaseRules = context.switchCaseTemplateBody().switchCaseRule();
var length = switchCaseRules.Length;
for (var idx = 0; idx < length; idx++)
{
var switchCaseNode = switchCaseRules[idx].switchCaseStat();
var switchExpr = switchCaseNode.SWITCH() != null;
var caseExpr = switchCaseNode.CASE() != null;
var defaultExpr = switchCaseNode.DEFAULT() != null;
var node = switchExpr ? switchCaseNode.SWITCH() :
caseExpr ? switchCaseNode.CASE() :
switchCaseNode.DEFAULT();
if (node.GetText().Count(u => u == ' ') > 1)
{
result.Add(BuildLGDiagnostic(TemplateErrors.InvalidWhitespaceInSwitchCase, context: switchCaseNode));
}
if (idx == 0 && !switchExpr)
{
result.Add(BuildLGDiagnostic(TemplateErrors.NotStartWithSwitchInSwitchCase, context: switchCaseNode));
}
if (idx > 0 && switchExpr)
{
result.Add(BuildLGDiagnostic(TemplateErrors.MultipleSwithStatementInSwitchCase, context: switchCaseNode));
}
if (idx > 0 && idx < length - 1 && !caseExpr)
{
result.Add(BuildLGDiagnostic(TemplateErrors.InvalidStatementInMiddlerOfSwitchCase, context: switchCaseNode));
}
if (idx == length - 1 && (caseExpr || defaultExpr))
{
if (caseExpr)
{
result.Add(BuildLGDiagnostic(TemplateErrors.NotEndWithDefaultInSwitchCase, DiagnosticSeverity.Warning, switchCaseNode));
}
else
{
if (length == 2)
{
result.Add(BuildLGDiagnostic(TemplateErrors.MissingCaseInSwitchCase, DiagnosticSeverity.Warning, switchCaseNode));
}
}
}
if (switchExpr || caseExpr)
{
if (switchCaseNode.expression().Length != 1)
{
result.Add(BuildLGDiagnostic(TemplateErrors.InvalidExpressionInSwiathCase, context: switchCaseNode));
}
else
{
var errorPrefix = switchExpr ? "Switch" : "Case";
errorPrefix += " '" + switchCaseNode.expression(0).GetText() + "': ";
result.AddRange(CheckExpression(switchCaseNode.expression(0), errorPrefix));
}
}
else
{
if (switchCaseNode.expression().Length != 0 || switchCaseNode.TEXT().Length != 0)
{
result.Add(BuildLGDiagnostic(TemplateErrors.ExtraExpressionInSwitchCase, context: switchCaseNode));
}
}
if (caseExpr || defaultExpr)
{
if (switchCaseRules[idx].normalTemplateBody() != null)
{
result.AddRange(Visit(switchCaseRules[idx].normalTemplateBody()));
}
else
{
result.Add(BuildLGDiagnostic(TemplateErrors.MissingTemplateBodyInSwitchCase, context: switchCaseNode));
}
}
}
return result;
}