diff --git a/blink/internal/fixer/rules/array_indentation.go b/blink/internal/fixer/rules/array_indentation.go index 035ffbb381..5ecd4bd2cd 100644 --- a/blink/internal/fixer/rules/array_indentation.go +++ b/blink/internal/fixer/rules/array_indentation.go @@ -165,7 +165,14 @@ func isArrayLiteralOpen(s *tokens.Stream, open int) bool { return false case token.Punct: switch t.Value { - case ")", "]", "}": + case ")": + // a cast before "[" ("(object) [...]") opens an array literal, not an + // access on a call result + if o := s.MatchBackward(p); o >= 0 && isCastParen(s, o) { + return true + } + return false + case "]", "}": return false } } diff --git a/blink/internal/fixer/rules/array_list_item_newline.go b/blink/internal/fixer/rules/array_list_item_newline.go index 7f97987ac7..39bdd4b525 100644 --- a/blink/internal/fixer/rules/array_list_item_newline.go +++ b/blink/internal/fixer/rules/array_list_item_newline.go @@ -30,6 +30,9 @@ func (ArrayListItemNewline) Fix(s *tokens.Stream) bool { if !isArrayLiteralOpen(s, open) { continue } + if isDestructuringAssignOpen(s, open) { + continue // "[$a, $b] = ..." is a destructuring target, not an array literal + } closeIdx := s.MatchForward(open) if closeIdx < 0 || sigNext(s, open) == closeIdx { continue // empty [] diff --git a/blink/internal/fixer/rules/array_list_item_newline_test.go b/blink/internal/fixer/rules/array_list_item_newline_test.go index e64315ccc3..8d32c5c82a 100644 --- a/blink/internal/fixer/rules/array_list_item_newline_test.go +++ b/blink/internal/fixer/rules/array_list_item_newline_test.go @@ -26,4 +26,15 @@ func TestArrayListItemNewline(t *testing.T) { if _, changed := apply(t, f, " 1,\n];"); changed { t.Fatal("already-multiline array must be a no-op") } + + // a cast before "[" opens an array literal, so it still splits + got, changed = apply(t, f, " 1, 'y' => 2];") + if want := " 1,\n 'y' => 2,\n];"; !changed || got != want { + t.Fatalf("cast: changed=%v got=%q", changed, got) + } + + // an index access on a call result is not an array literal, so it is left alone + if _, changed := apply(t, f, "