forked from OSchip/llvm-project
clang-format: [JS] prevent wraps before class members.
Summary: In JavaScript/TypeScript, class member definitions that use modifiers can be subject to Automatic Semicolon Insertion (ASI). For example, "class X { get \n foo }" defines a property called "get" and a property called "foo", both with no type annotation. This change prevents wrapping after the modifier keywords (visibility modifiers, static, get and set) to prevent accidental ASI. Reviewers: djasper, bkramer Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D32531 llvm-svn: 301397
This commit is contained in:
parent
e6a7708448
commit
19c7de0a22
|
@ -617,10 +617,12 @@ struct AdditionalKeywords {
|
|||
kw_finally = &IdentTable.get("finally");
|
||||
kw_from = &IdentTable.get("from");
|
||||
kw_function = &IdentTable.get("function");
|
||||
kw_get = &IdentTable.get("get");
|
||||
kw_import = &IdentTable.get("import");
|
||||
kw_is = &IdentTable.get("is");
|
||||
kw_let = &IdentTable.get("let");
|
||||
kw_module = &IdentTable.get("module");
|
||||
kw_set = &IdentTable.get("set");
|
||||
kw_type = &IdentTable.get("type");
|
||||
kw_var = &IdentTable.get("var");
|
||||
kw_yield = &IdentTable.get("yield");
|
||||
|
@ -675,10 +677,12 @@ struct AdditionalKeywords {
|
|||
IdentifierInfo *kw_finally;
|
||||
IdentifierInfo *kw_from;
|
||||
IdentifierInfo *kw_function;
|
||||
IdentifierInfo *kw_get;
|
||||
IdentifierInfo *kw_import;
|
||||
IdentifierInfo *kw_is;
|
||||
IdentifierInfo *kw_let;
|
||||
IdentifierInfo *kw_module;
|
||||
IdentifierInfo *kw_set;
|
||||
IdentifierInfo *kw_type;
|
||||
IdentifierInfo *kw_var;
|
||||
IdentifierInfo *kw_yield;
|
||||
|
|
|
@ -2543,7 +2543,11 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line,
|
|||
if (NonComment &&
|
||||
NonComment->isOneOf(tok::kw_return, tok::kw_continue, tok::kw_break,
|
||||
tok::kw_throw, Keywords.kw_interface,
|
||||
Keywords.kw_type))
|
||||
Keywords.kw_type, tok::kw_static, tok::kw_public,
|
||||
tok::kw_private, tok::kw_protected,
|
||||
Keywords.kw_abstract,
|
||||
Keywords.kw_get,
|
||||
Keywords.kw_set))
|
||||
return false; // Otherwise a semicolon is inserted.
|
||||
if (Left.is(TT_JsFatArrow) && Right.is(tok::l_brace))
|
||||
return false;
|
||||
|
|
|
@ -318,6 +318,25 @@ TEST_F(FormatTestJS, MethodsInObjectLiterals) {
|
|||
"};");
|
||||
}
|
||||
|
||||
TEST_F(FormatTestJS, GettersSettersVisibilityKeywords) {
|
||||
// Don't break after "protected"
|
||||
verifyFormat("class X {\n"
|
||||
" protected get getter():\n"
|
||||
" number {\n"
|
||||
" return 1;\n"
|
||||
" }\n"
|
||||
"}",
|
||||
getGoogleJSStyleWithColumns(12));
|
||||
// Don't break after "get"
|
||||
verifyFormat("class X {\n"
|
||||
" protected get someReallyLongGetterName():\n"
|
||||
" number {\n"
|
||||
" return 1;\n"
|
||||
" }\n"
|
||||
"}",
|
||||
getGoogleJSStyleWithColumns(40));
|
||||
}
|
||||
|
||||
TEST_F(FormatTestJS, SpacesInContainerLiterals) {
|
||||
verifyFormat("var arr = [1, 2, 3];");
|
||||
verifyFormat("f({a: 1, b: 2, c: 3});");
|
||||
|
|
Loading…
Reference in New Issue