From e7fcbe962be6115c98bb8b2d6fdd7fb8f388d6c4 Mon Sep 17 00:00:00 2001 From: Taco de Wolff Date: Sat, 2 Apr 2022 14:48:10 -0300 Subject: [PATCH] JS: merge sequential var declarations into another declaration --- js/js_test.go | 4 ++++ js/vars.go | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/js/js_test.go b/js/js_test.go index 1331fb113b..745051f1f7 100644 --- a/js/js_test.go +++ b/js/js_test.go @@ -334,6 +334,10 @@ func TestJS(t *testing.T) { {`var a,b=c;b=a`, `var a,b=c;b=a`}, {`var{a}=f;var b=c,d=e;`, `var{a}=f,b=c,d=e`}, {`var a,b;a=1,b=2,c=3`, `var a=1,b=2;c=3`}, + {`var a=[];var b={};var c=d,e=f`, `var a=[],b={},c=d,e=f`}, + {`var a=[];var b={};var c=d,e=f`, `var a=[],b={},c=d,e=f`}, + {`var a=[];var b;var c,e=f`, `var a=[],b,c,e=f`}, + {`var a=[];f();var b;f();var c;f();var e=f`, `var a=[],b,c,e;f(),f(),f(),e=f`}, // TODO: test for variables renaming (first rename, then merge vars) // function and method declarations diff --git a/js/vars.go b/js/vars.go index fe7bd446c6..26c780548a 100644 --- a/js/vars.go +++ b/js/vars.go @@ -261,7 +261,13 @@ func mergeVarDeclExprStmt(decl *js.VarDecl, exprStmt *js.ExprStmt, forward bool) if forward { item = commaExpr.List[len(commaExpr.List)-i-1] } - if binaryExpr, ok := item.(*js.BinaryExpr); ok && binaryExpr.Op == js.EqToken { + if src, ok := item.(*js.VarDecl); ok { + // this happens when a variable declarations is converted to an expression + if mergeVarDecls(decl, src, forward) { + n++ + continue + } + } else if binaryExpr, ok := item.(*js.BinaryExpr); ok && binaryExpr.Op == js.EqToken { if v, ok := binaryExpr.X.(*js.Var); ok && v.Decl == js.VariableDecl { if addDefinition(decl, v, binaryExpr.Y, forward) { n++