forked from OSchip/llvm-project
clang-format: [JS] Support classes.
This adds support for JavaScript class definitions (again following TypeScript & AtScript style). This only required support for visibility modifiers in JS, everything else was already working. Patch by Martin Probst, thank you. llvm-svn: 229701
This commit is contained in:
parent
b10bdff337
commit
8370908667
|
@ -77,7 +77,8 @@ private:
|
|||
/// 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;
|
||||
|
|
|
@ -693,7 +693,8 @@ void UnwrappedLineParser::parseStructuralElement() {
|
|||
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();
|
||||
|
@ -823,13 +824,17 @@ void UnwrappedLineParser::parseStructuralElement() {
|
|||
break;
|
||||
}
|
||||
nextToken();
|
||||
if (Line->Tokens.size() == 1) {
|
||||
if (Line->Tokens.size() == 1 &&
|
||||
// JS doesn't have macros, and within classes colons indicate fields,
|
||||
// not labels.
|
||||
(Style.Language != FormatStyle::LK_JavaScript ||
|
||||
!Line->MustBeDeclaration)) {
|
||||
if (FormatTok->Tok.is(tok::colon)) {
|
||||
parseLabel();
|
||||
return;
|
||||
}
|
||||
// Recognize function-like macro usages without trailing semicolon as
|
||||
// well as free-standing macrose like Q_OBJECT.
|
||||
// well as free-standing macros like Q_OBJECT.
|
||||
bool FunctionLike = FormatTok->is(tok::l_paren);
|
||||
if (FunctionLike)
|
||||
parseParens();
|
||||
|
|
|
@ -500,5 +500,15 @@ TEST_F(FormatTestJS, TypeAnnotations) {
|
|||
verifyFormat("var x: P<string, (a: number) => 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
|
||||
|
|
Loading…
Reference in New Issue