formatter: fix when first array element is omitted
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSTransformer.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSTransformer.java
index 970c07f..fcce6e4 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSTransformer.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSTransformer.java
@@ -1887,14 +1887,22 @@
final Tree item = child.getChild(0);
if (item != null) {
array.getItems().add(transformExpression(item, array));
+ if (i != itemCount - 1) {
+ final int nextComma = getTokenOffset(JSParser.COMMA,
+ child.getTokenStopIndex() + 1, node.getChild(i + 1)
+ .getTokenStartIndex());
+ array.getCommas().add(nextComma);
+ }
} else {
- array.getItems().add(new EmptyExpression(getParent()));
- }
- if (i > 0) {
- array.getCommas().add(
- getTokenOffset(JSParser.COMMA, node.getChild(i - 1)
- .getTokenStopIndex() + 1, child
- .getTokenStartIndex()));
+ assert i != itemCount - 1;
+ final int nextComma = getTokenOffset(JSParser.COMMA,
+ child.getTokenStopIndex() + 1, node.getChild(i + 1)
+ .getTokenStartIndex());
+ final EmptyExpression empty = new EmptyExpression(array);
+ empty.setStart(nextComma);
+ empty.setEnd(nextComma);
+ array.getItems().add(empty);
+ array.getCommas().add(nextComma);
}
}
array.setRB(getTokenOffset(node.getChild(itemCount)
diff --git a/tests/org.eclipse.dltk.javascript.formatter.tests/scripts/arrays.js b/tests/org.eclipse.dltk.javascript.formatter.tests/scripts/arrays.js
index 5dfda2d..9bdca70 100644
--- a/tests/org.eclipse.dltk.javascript.formatter.tests/scripts/arrays.js
+++ b/tests/org.eclipse.dltk.javascript.formatter.tests/scripts/arrays.js
@@ -10,6 +10,10 @@
var vArray = [ 1 ,2 ,,, 3 ]
==
var vArray = [1, 2, , , 3]
+==== array-with-first-empty-element
+var array = [ , "" ] ;
+==
+var array = [, ""];
====
==> formatter.braces.array = next.line
==== array-brackets-next-line