From bc46b939e647b9ded4ccad7de7694b388369291a Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Sun, 15 Mar 2015 13:59:51 +0000 Subject: [PATCH] clang-format: [JS] support cast syntax and type arguments. Casts in TS syntax (foo = bar;) should not be followed by whitespace. Patch by Martin Probst. Thank you. llvm-svn: 232321 --- clang/lib/Format/TokenAnnotator.cpp | 7 +++++++ clang/unittests/Format/FormatTestJS.cpp | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index c6c81a48..911d52d 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1779,6 +1779,13 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line, if ((Left.is(tok::l_brace) || Right.is(tok::r_brace)) && Line.First->isOneOf(Keywords.kw_import, tok::kw_export)) return false; + if (Left.is(TT_TemplateCloser) && + !Right.isOneOf(tok::l_brace, tok::comma, tok::l_square, + Keywords.kw_implements, Keywords.kw_extends)) + // Type assertions ('expr') are not followed by whitespace. Other + // locations that should have whitespace following are identified by the + // above set of follower tokens. + return false; } else if (Style.Language == FormatStyle::LK_Java) { if (Left.is(tok::r_square) && Right.is(tok::l_brace)) return true; diff --git a/clang/unittests/Format/FormatTestJS.cpp b/clang/unittests/Format/FormatTestJS.cpp index 045b280..5707024 100644 --- a/clang/unittests/Format/FormatTestJS.cpp +++ b/clang/unittests/Format/FormatTestJS.cpp @@ -616,5 +616,17 @@ TEST_F(FormatTestJS, TemplateStrings) { verifyFormat("var x = `hello` == `hello`;"); } +TEST_F(FormatTestJS, CastSyntax) { + verifyFormat("var x = foo;"); +} + +TEST_F(FormatTestJS, TypeArguments) { + verifyFormat("class X {}"); + verifyFormat("new X();"); + verifyFormat("foo(a);"); + verifyFormat("var x: X[];"); + verifyFormat("class C extends D implements F, H {}"); +} + } // end namespace tooling } // end namespace clang -- 2.7.4