@@ -1227,6 +1227,141 @@ Syntax(Chunk)@0..20
12271227 ) ;
12281228 }
12291229
1230+ #[ test]
1231+ fn test_ternary_right_assoc ( ) {
1232+ let code = "local x = a ? b ? c : d : e\n " ;
1233+ let result = r#"
1234+ Syntax(Chunk)@0..28
1235+ Syntax(Block)@0..28
1236+ Syntax(LocalStat)@0..27
1237+ Token(TkLocal)@0..5 "local"
1238+ Token(TkWhitespace)@5..6 " "
1239+ Syntax(LocalName)@6..7
1240+ Token(TkName)@6..7 "x"
1241+ Token(TkWhitespace)@7..8 " "
1242+ Token(TkAssign)@8..9 "="
1243+ Token(TkWhitespace)@9..10 " "
1244+ Syntax(TernaryExpr)@10..27
1245+ Syntax(NameExpr)@10..11
1246+ Token(TkName)@10..11 "a"
1247+ Token(TkWhitespace)@11..12 " "
1248+ Token(TkTernary)@12..13 "?"
1249+ Token(TkWhitespace)@13..14 " "
1250+ Syntax(TernaryExpr)@14..23
1251+ Syntax(NameExpr)@14..15
1252+ Token(TkName)@14..15 "b"
1253+ Token(TkWhitespace)@15..16 " "
1254+ Token(TkTernary)@16..17 "?"
1255+ Token(TkWhitespace)@17..18 " "
1256+ Syntax(NameExpr)@18..19
1257+ Token(TkName)@18..19 "c"
1258+ Token(TkWhitespace)@19..20 " "
1259+ Token(TkColon)@20..21 ":"
1260+ Token(TkWhitespace)@21..22 " "
1261+ Syntax(NameExpr)@22..23
1262+ Token(TkName)@22..23 "d"
1263+ Token(TkWhitespace)@23..24 " "
1264+ Token(TkColon)@24..25 ":"
1265+ Token(TkWhitespace)@25..26 " "
1266+ Syntax(NameExpr)@26..27
1267+ Token(TkName)@26..27 "e"
1268+ Token(TkEndOfLine)@27..28 "\n"
1269+ "# ;
1270+
1271+ assert_ast_eq ! (
1272+ code,
1273+ result,
1274+ ParserConfig :: with_level( LuaLanguageLevel :: LuaJITExt )
1275+ ) ;
1276+ }
1277+
1278+ #[ test]
1279+ fn test_ternary_with_paren_method_call ( ) {
1280+ let code = "local x = a ? (b:call()) : c\n " ;
1281+ let result = r#"
1282+ Syntax(Chunk)@0..29
1283+ Syntax(Block)@0..29
1284+ Syntax(LocalStat)@0..28
1285+ Token(TkLocal)@0..5 "local"
1286+ Token(TkWhitespace)@5..6 " "
1287+ Syntax(LocalName)@6..7
1288+ Token(TkName)@6..7 "x"
1289+ Token(TkWhitespace)@7..8 " "
1290+ Token(TkAssign)@8..9 "="
1291+ Token(TkWhitespace)@9..10 " "
1292+ Syntax(TernaryExpr)@10..28
1293+ Syntax(NameExpr)@10..11
1294+ Token(TkName)@10..11 "a"
1295+ Token(TkWhitespace)@11..12 " "
1296+ Token(TkTernary)@12..13 "?"
1297+ Token(TkWhitespace)@13..14 " "
1298+ Syntax(ParenExpr)@14..24
1299+ Token(TkLeftParen)@14..15 "("
1300+ Syntax(CallExpr)@15..23
1301+ Syntax(IndexExpr)@15..21
1302+ Syntax(NameExpr)@15..16
1303+ Token(TkName)@15..16 "b"
1304+ Token(TkColon)@16..17 ":"
1305+ Token(TkName)@17..21 "call"
1306+ Syntax(CallArgList)@21..23
1307+ Token(TkLeftParen)@21..22 "("
1308+ Token(TkRightParen)@22..23 ")"
1309+ Token(TkRightParen)@23..24 ")"
1310+ Token(TkWhitespace)@24..25 " "
1311+ Token(TkColon)@25..26 ":"
1312+ Token(TkWhitespace)@26..27 " "
1313+ Syntax(NameExpr)@27..28
1314+ Token(TkName)@27..28 "c"
1315+ Token(TkEndOfLine)@28..29 "\n"
1316+ "# ;
1317+
1318+ assert_ast_eq ! (
1319+ code,
1320+ result,
1321+ ParserConfig :: with_level( LuaLanguageLevel :: LuaJITExt )
1322+ ) ;
1323+ }
1324+
1325+ #[ test]
1326+ fn test_method_chain_no_ternary ( ) {
1327+ let code = "local x = a:b():c()\n " ;
1328+ let result = r#"
1329+ Syntax(Chunk)@0..20
1330+ Syntax(Block)@0..20
1331+ Syntax(LocalStat)@0..19
1332+ Token(TkLocal)@0..5 "local"
1333+ Token(TkWhitespace)@5..6 " "
1334+ Syntax(LocalName)@6..7
1335+ Token(TkName)@6..7 "x"
1336+ Token(TkWhitespace)@7..8 " "
1337+ Token(TkAssign)@8..9 "="
1338+ Token(TkWhitespace)@9..10 " "
1339+ Syntax(CallExpr)@10..19
1340+ Syntax(IndexExpr)@10..17
1341+ Syntax(CallExpr)@10..15
1342+ Syntax(IndexExpr)@10..13
1343+ Syntax(NameExpr)@10..11
1344+ Token(TkName)@10..11 "a"
1345+ Token(TkColon)@11..12 ":"
1346+ Token(TkName)@12..13 "b"
1347+ Syntax(CallArgList)@13..15
1348+ Token(TkLeftParen)@13..14 "("
1349+ Token(TkRightParen)@14..15 ")"
1350+ Token(TkColon)@15..16 ":"
1351+ Token(TkName)@16..17 "c"
1352+ Syntax(CallArgList)@17..19
1353+ Token(TkLeftParen)@17..18 "("
1354+ Token(TkRightParen)@18..19 ")"
1355+ Token(TkEndOfLine)@19..20 "\n"
1356+ "# ;
1357+
1358+ assert_ast_eq ! (
1359+ code,
1360+ result,
1361+ ParserConfig :: with_level( LuaLanguageLevel :: LuaJITExt )
1362+ ) ;
1363+ }
1364+
12301365 #[ test]
12311366 fn test_const_stat ( ) {
12321367 let code = "const x = 1\n " ;
0 commit comments