diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 0461531c32b18b..3592862c2885ad 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1248,7 +1248,7 @@ class AnnotatingParser { case tok::question: if (Style.isJavaScript() && Tok->Next && Tok->Next->isOneOf(tok::semi, tok::comma, tok::colon, tok::r_paren, - tok::r_brace)) { + tok::r_brace, tok::r_square)) { // Question marks before semicolons, colons, etc. indicate optional // types (fields, parameters), e.g. // function(x?: string, y?) {...} diff --git a/clang/unittests/Format/FormatTestJS.cpp b/clang/unittests/Format/FormatTestJS.cpp index 5291cb7adaaf68..6f07d8b084f567 100644 --- a/clang/unittests/Format/FormatTestJS.cpp +++ b/clang/unittests/Format/FormatTestJS.cpp @@ -2221,6 +2221,7 @@ TEST_F(FormatTestJS, OptionalTypes) { " aaaaaaaaaaaaaaa?: boolean,\n" " aaaaaa?: List\n" "}) {}"); + verifyFormat("type X = [y?];"); } TEST_F(FormatTestJS, IndexSignature) {