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++