public override JsStatement VisitVariableDeclarationStatement(JsVariableDeclarationStatement statement, object data) { List <JsExpression> list = null; foreach (var d in statement.Declarations) { _variables.Add(d.Name); if (d.Initializer != null) { list = list ?? new List <JsExpression>(); list.Add(JsExpression.Assign(JsExpression.Identifier(d.Name), d.Initializer)); } } if (list == null) { return(new JsBlockStatement(new JsStatement[0], mergeWithParent: true)); } else if (list.Count == 1) { return(new JsExpressionStatement(list[0])); } else { return(new JsExpressionStatement(JsExpression.Comma(list))); } }
public void CommaIsNotParenthesizedInsideIndexing() { AssertCorrect(JsExpression.Binary(ExpressionNodeType.Index, JsExpression.Number(1), JsExpression.Comma( JsExpression.Number(2), JsExpression.Number(3) ) ), "1[2, 3]"); }
public void CommaIsParenthesizedAsAssignmentValue() { AssertCorrect(JsExpression.Binary(ExpressionNodeType.Assign, JsExpression.Number(1), JsExpression.Comma( JsExpression.Number(2), JsExpression.Number(3) ) ), "1 = (2, 3)"); }
public void ExpressionStatementIsParenthesizedWhenItStartsWithAnObjectLiteral() { AssertCorrect((JsStatement)JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), "({ a: 0 });\n"); AssertCorrect((JsStatement)JsExpression.Invocation(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0)))), "({ a: 0 }());\n"); AssertCorrect((JsStatement)JsExpression.Member(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), "a"), "({ a: 0 }.a);\n"); AssertCorrect((JsStatement)JsExpression.Comma(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), JsExpression.Null), "({ a: 0 }, null);\n"); AssertCorrect((JsStatement)JsExpression.Conditional(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), JsExpression.Number(0), JsExpression.Number(1)), "({ a: 0 } ? 0 : 1);\n"); AssertCorrect((JsStatement)JsExpression.PrefixPlusPlus(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0)))), "++{ a: 0 };\n"); AssertCorrect((JsStatement)JsExpression.PostfixPlusPlus(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0)))), "({ a: 0 }++);\n"); AssertCorrect((JsStatement)JsExpression.PostfixMinusMinus(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0)))), "({ a: 0 }--);\n"); AssertCorrect((JsStatement)JsExpression.Index(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), JsExpression.Number(0)), "({ a: 0 }[0]);\n"); AssertCorrect((JsStatement)JsExpression.Member(JsExpression.Invocation(JsExpression.Member(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("a", JsExpression.Number(0))), "a")), "b"), "({ a: 0 }.a().b);\n"); }
public void CommaIsOutputWithoutSpace() { AssertCorrect(JsExpression.Comma( JsExpression.Comma( JsExpression.Number(1), JsExpression.Number(2) ), JsExpression.Comma( JsExpression.Number(3), JsExpression.Number(4) ) ), "1,2,3,4"); }
public void CommaIsNotParenthesizedInsideOtherComma() { AssertCorrect(JsExpression.Comma( JsExpression.Comma( JsExpression.Number(1), JsExpression.Number(2) ), JsExpression.Comma( JsExpression.Number(3), JsExpression.Number(4) ) ), "1, 2, 3, 4"); }
public void CommaIsParenthesizedInsideArrayLiteral() { AssertCorrect(JsExpression.ArrayLiteral( JsExpression.Comma( JsExpression.Number(1), JsExpression.Number(2) ), JsExpression.Number(3), JsExpression.Comma( JsExpression.Number(4), JsExpression.Number(5) ) ), "[(1, 2), 3, (4, 5)]"); }
public void CommaIsParenthesizedInsideConstructorArgumentList() { AssertCorrect(JsExpression.New( JsExpression.Number(10), JsExpression.Comma( JsExpression.Number(1), JsExpression.Number(2) ), JsExpression.Number(3), JsExpression.Comma( JsExpression.Number(4), JsExpression.Number(5) ) ), "new 10((1, 2), 3, (4, 5))"); }
public void CommaIsParenthesizedInsideInvocation() { AssertCorrect(JsExpression.Invocation( JsExpression.Identifier("f"), JsExpression.Comma( JsExpression.Number(1), JsExpression.Number(2) ), JsExpression.Number(3), JsExpression.Comma( JsExpression.Number(4), JsExpression.Number(5) ) ), "f((1, 2), 3, (4, 5))"); }
public void ForStatementsAreCorrectlyOutput() { AssertCorrect(new JsForStatement(new JsVariableDeclarationStatement(new JsVariableDeclaration("i", JsExpression.Number(0))), JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)), JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")), JsBlockStatement.EmptyStatement), "for(var i=0;i<10;i++){}"); AssertCorrect(new JsForStatement(new JsExpressionStatement(JsExpression.Assign(JsExpression.Identifier("i"), JsExpression.Number(0))), JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)), JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")), JsBlockStatement.EmptyStatement), "for(i=0;i<10;i++){}"); AssertCorrect(new JsForStatement(new JsVariableDeclarationStatement(new JsVariableDeclaration("i", JsExpression.Number(0)), new JsVariableDeclaration("j", JsExpression.Number(1))), JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)), JsExpression.Comma(JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")), JsExpression.PostfixPlusPlus(JsExpression.Identifier("j"))), JsBlockStatement.EmptyStatement), "for(var i=0,j=1;i<10;i++,j++){}"); AssertCorrect(new JsForStatement(new JsEmptyStatement(), null, null, JsBlockStatement.EmptyStatement), "for(;;){}"); }
public void ForStatementsAreCorrectlyOutput() { AssertCorrect(JsStatement.For(JsStatement.Var(JsStatement.Declaration("i", JsExpression.Number(0))), JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)), JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")), JsStatement.EmptyBlock), "for (var i = 0; i < 10; i++) {\n}\n"); AssertCorrect(JsStatement.For(JsExpression.Assign(JsExpression.Identifier("i"), JsExpression.Number(0)), JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)), JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")), JsStatement.EmptyBlock), "for (i = 0; i < 10; i++) {\n}\n"); AssertCorrect(JsStatement.For(JsStatement.Var(JsStatement.Declaration("i", JsExpression.Number(0)), JsStatement.Declaration("j", JsExpression.Number(1))), JsExpression.Lesser(JsExpression.Identifier("i"), JsExpression.Number(10)), JsExpression.Comma(JsExpression.PostfixPlusPlus(JsExpression.Identifier("i")), JsExpression.PostfixPlusPlus(JsExpression.Identifier("j"))), JsStatement.EmptyBlock), "for (var i = 0, j = 1; i < 10; i++, j++) {\n}\n"); AssertCorrect(JsStatement.For(JsStatement.Empty, null, null, JsStatement.EmptyBlock), "for (;;) {\n}\n"); }
public void CommaExpressionIsParenthesizedInsideObjectLiteral() { AssertCorrect(JsExpression.ObjectLiteral(new JsObjectLiteralProperty("x", JsExpression.Comma(JsExpression.Number(1), JsExpression.Number(2))), new JsObjectLiteralProperty("y", JsExpression.Number(3))), "{ x: (1, 2), y: 3 }"); }
public virtual JsExpression VisitCommaExpression(JsCommaExpression expression, TData data) { var after = VisitExpressions(expression.Expressions, data); return(ReferenceEquals(after, expression.Expressions) ? expression : JsExpression.Comma(after)); }