@@ -272,7 +272,7 @@ local build_grammar = wrap_env(function()
272272 CheckIndent = Cmt (Indent , check_indent ), -- validates line is in correct indent
273273 Line = (CheckIndent * Statement + Space * # Stop ),
274274
275- Statement = (Import + While + With + For + ForEach + Return
275+ Statement = (Import + While + With + For + ForEach + Switch + Return
276276 + ClassDecl + Export + BreakLoop + Ct (ExpList ) / flatten_or_mark " explist" * Space ) * ((
277277 -- statement decorators
278278 key " if" * Exp * (key " else" * Exp )^- 1 * Space / mark " if" +
@@ -298,6 +298,12 @@ local build_grammar = wrap_env(function()
298298
299299 With = key " with" * Exp * key " do" ^- 1 * Body / mark " with" ,
300300
301+ Switch = key " switch" * Exp * key " do" ^- 1 * Space ^- 1 * Break * SwitchBlock / mark " switch" ,
302+
303+ SwitchBlock = EmptyLine ^ 0 * Advance * Ct (SwitchCase * (Break ^ 1 * SwitchCase )^ 0 * (Break ^ 1 * SwitchElse )^- 1 ) * PopIndent ,
304+ SwitchCase = key " when" * Exp * key " then" ^- 1 * Body / mark " case" ,
305+ SwitchElse = key " else" * Body / mark " else" ,
306+
301307 If = key " if" * Exp * key " then" ^- 1 * Body *
302308 ((Break * CheckIndent )^- 1 * EmptyLine ^ 0 * key " elseif" * Exp * key " then" ^- 1 * Body / mark " elseif" )^ 0 *
303309 ((Break * CheckIndent )^- 1 * EmptyLine ^ 0 * key " else" * Body / mark " else" )^- 1 / mark " if" ,
@@ -317,7 +323,7 @@ local build_grammar = wrap_env(function()
317323 CompFor = key " for" * Ct (NameList ) * key " in" * (sym " *" * Exp / mark " unpack" + Exp ) / mark " for" ,
318324 CompClause = CompFor + key " when" * Exp / mark " when" ,
319325
320- Assign = Ct (AssignableList ) * sym " =" * (Ct (With + If ) + Ct (TableBlock + ExpListLow )) / mark " assign" ,
326+ Assign = Ct (AssignableList ) * sym " =" * (Ct (With + If + Switch ) + Ct (TableBlock + ExpListLow )) / mark " assign" ,
321327 Update = Assignable * ((sym " ..=" + sym " +=" + sym " -=" + sym " *=" + sym " /=" + sym " %=" )/ trim ) * Exp / mark " update" ,
322328
323329 -- we can ignore precedence for now
0 commit comments