Index: lib/Format/UnwrappedLineFormatter.h =================================================================== --- lib/Format/UnwrappedLineFormatter.h +++ lib/Format/UnwrappedLineFormatter.h @@ -77,7 +77,8 @@ /// For example, 'public:' labels in classes are offset by 1 or 2 /// characters to the left from their level. int getIndentOffset(const FormatToken &RootToken) { - if (Style.Language == FormatStyle::LK_Java) + if (Style.Language == FormatStyle::LK_Java || + Style.Language == FormatStyle::LK_JavaScript) return 0; if (RootToken.isAccessSpecifier(false) || RootToken.isObjCAccessSpecifier()) return Style.AccessModifierOffset; Index: lib/Format/UnwrappedLineParser.cpp =================================================================== --- lib/Format/UnwrappedLineParser.cpp +++ lib/Format/UnwrappedLineParser.cpp @@ -693,7 +693,8 @@ case tok::kw_public: case tok::kw_protected: case tok::kw_private: - if (Style.Language == FormatStyle::LK_Java) + if (Style.Language == FormatStyle::LK_Java || + Style.Language == FormatStyle::LK_JavaScript) nextToken(); else parseAccessSpecifier(); @@ -824,7 +825,10 @@ } nextToken(); if (Line->Tokens.size() == 1) { - if (FormatTok->Tok.is(tok::colon)) { + if (FormatTok->Tok.is(tok::colon) && + // Colon in class bodies is a typed member variable in JS. + (Style.Language != FormatStyle::LK_JavaScript || + !Line->MustBeDeclaration)) { parseLabel(); return; } Index: unittests/Format/FormatTestJS.cpp =================================================================== --- unittests/Format/FormatTestJS.cpp +++ unittests/Format/FormatTestJS.cpp @@ -500,5 +500,15 @@ verifyFormat("var x: P string>;"); } +TEST_F(FormatTestJS, ClassDeclarations) { + verifyFormat("class C {\n x: string = 12;\n}"); + verifyFormat("class C {\n x(): string => 12;\n}"); + verifyFormat("class C {\n ['x' + 2]: string = 12;\n}"); + verifyFormat("class C {\n private x: string = 12;\n}"); + verifyFormat("class C {\n private static x: string = 12;\n}"); + verifyFormat("class C {\n static x(): string { return 'asd'; }\n}"); + verifyFormat("class C extends P implements I {}"); +} + } // end namespace tooling } // end namespace clang