summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorMartin Probst <martin@probst.io>2017-11-25 09:35:33 +0000
committerMartin Probst <martin@probst.io>2017-11-25 09:35:33 +0000
commitc160cfaf66c7e37afda23ab21f24fbe96a54e5f8 (patch)
tree97a3aa08c451235f5866d4a543dfa384ef1e40b6 /clang
parente8e27ca866d89a40639c8592032ca21fdf4848bf (diff)
downloadbcm5719-llvm-c160cfaf66c7e37afda23ab21f24fbe96a54e5f8.tar.gz
bcm5719-llvm-c160cfaf66c7e37afda23ab21f24fbe96a54e5f8.zip
clang-format: [JS] do not collapse short classes.
Summary: clang-format does not collapse short records, interfaces, unions, etc., but fails to do so if the record is preceded by certain modifiers (export, default, abstract, declare). This change skips over all modifiers, and thus handles all record definitions uniformly. Before: export class Foo { bar: string; } class Baz { bam: string; } After: export class Foo { bar: string; } class Baz { bam: string; } Reviewers: djasper Subscribers: klimek Differential Revision: https://reviews.llvm.org/D40430 llvm-svn: 318976
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Format/UnwrappedLineFormatter.cpp9
-rw-r--r--clang/unittests/Format/FormatTestJS.cpp16
2 files changed, 19 insertions, 6 deletions
diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp
index 2e9d803a191..60dc1a7169d 100644
--- a/clang/lib/Format/UnwrappedLineFormatter.cpp
+++ b/clang/lib/Format/UnwrappedLineFormatter.cpp
@@ -517,8 +517,13 @@ private:
} else if (Limit != 0 && !Line.startsWith(tok::kw_namespace) &&
!startsExternCBlock(Line)) {
// We don't merge short records.
- FormatToken *RecordTok =
- Line.First->is(tok::kw_typedef) ? Line.First->Next : Line.First;
+ FormatToken *RecordTok = Line.First;
+ // Skip record modifiers.
+ while (RecordTok->Next &&
+ RecordTok->isOneOf(tok::kw_typedef, tok::kw_export,
+ Keywords.kw_declare, Keywords.kw_abstract,
+ tok::kw_default))
+ RecordTok = RecordTok->Next;
if (RecordTok &&
RecordTok->isOneOf(tok::kw_class, tok::kw_union, tok::kw_struct,
Keywords.kw_interface))
diff --git a/clang/unittests/Format/FormatTestJS.cpp b/clang/unittests/Format/FormatTestJS.cpp
index 187b50221d1..390772db8ba 100644
--- a/clang/unittests/Format/FormatTestJS.cpp
+++ b/clang/unittests/Format/FormatTestJS.cpp
@@ -1674,9 +1674,15 @@ TEST_F(FormatTestJS, Modules) {
" x: number;\n"
" y: string;\n"
"}");
- verifyFormat("export class X { y: number; }");
- verifyFormat("export abstract class X { y: number; }");
- verifyFormat("export default class X { y: number }");
+ verifyFormat("export class X {\n"
+ " y: number;\n"
+ "}");
+ verifyFormat("export abstract class X {\n"
+ " y: number;\n"
+ "}");
+ verifyFormat("export default class X {\n"
+ " y: number\n"
+ "}");
verifyFormat("export default function() {\n return 1;\n}");
verifyFormat("export var x = 12;");
verifyFormat("class C {}\n"
@@ -1698,7 +1704,9 @@ TEST_F(FormatTestJS, Modules) {
"];");
verifyFormat("export default [];");
verifyFormat("export default () => {};");
- verifyFormat("export interface Foo { foo: number; }\n"
+ verifyFormat("export interface Foo {\n"
+ " foo: number;\n"
+ "}\n"
"export class Bar {\n"
" blah(): string {\n"
" return this.blah;\n"
OpenPOWER on IntegriCloud