[clang] befb9dc - [clang-format] keep TypeScript argument decorators in line
Krasimir Georgiev via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 24 03:37:58 PDT 2021
Author: Krasimir Georgiev
Date: 2021-08-24T12:37:08+02:00
New Revision: befb9dc3694e95355f21650de7acb058ac89f993
URL: https://github.com/llvm/llvm-project/commit/befb9dc3694e95355f21650de7acb058ac89f993
DIFF: https://github.com/llvm/llvm-project/commit/befb9dc3694e95355f21650de7acb058ac89f993.diff
LOG: [clang-format] keep TypeScript argument decorators in line
As a follow-up from https://reviews.llvm.org/D108538, ensure TypeScript
argument decorators are kept in line with the argument.
Reviewed By: MyDeveloperDay
Differential Revision: https://reviews.llvm.org/D108620
Added:
Modified:
clang/lib/Format/ContinuationIndenter.cpp
clang/unittests/Format/FormatTestJS.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp
index 9561e3489c40e..1bf63cb909e06 100644
--- a/clang/lib/Format/ContinuationIndenter.cpp
+++ b/clang/lib/Format/ContinuationIndenter.cpp
@@ -19,6 +19,7 @@
#include "clang/Basic/OperatorPrecedence.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Format/Format.h"
+#include "llvm/ADT/StringSet.h"
#include "llvm/Support/Debug.h"
#define DEBUG_TYPE "format-indenter"
@@ -492,8 +493,12 @@ bool ContinuationIndenter::mustBreak(const LineState &State) {
return true;
}
- // Break after the closing parenthesis of TypeScript decorators.
+ // Break after the closing parenthesis of TypeScript decorators before
+ // functions, getters and setters.
+ static const llvm::StringSet<> BreakBeforeDecoratedTokens = {"get", "set",
+ "function"};
if (Style.Language == FormatStyle::LK_JavaScript &&
+ BreakBeforeDecoratedTokens.contains(Current.TokenText) &&
Previous.is(tok::r_paren) && Previous.is(TT_JavaAnnotation)) {
return true;
}
diff --git a/clang/unittests/Format/FormatTestJS.cpp b/clang/unittests/Format/FormatTestJS.cpp
index 8da822d0ccfc0..311881dde273c 100644
--- a/clang/unittests/Format/FormatTestJS.cpp
+++ b/clang/unittests/Format/FormatTestJS.cpp
@@ -701,8 +701,12 @@ TEST_F(FormatTestJS, FormatsFreestandingFunctions) {
getGoogleJSStyleWithColumns(20)));
}
-TEST_F(FormatTestJS, FormatsDecoratedFunctions) {
- // Regression test: ensure that there is a break before `get`.
+TEST_F(FormatTestJS, FormatsDecorators) {
+ // No line break after argument decorators.
+ verifyFormat("class A {\n"
+ " constructor(@arg(DECOR) private arg: Type) {}\n"
+ "}");
+ // Ensure that there is a break before functions, getters and setters.
EXPECT_EQ("class A {\n"
" private p = () => {}\n"
"\n"
@@ -710,6 +714,24 @@ TEST_F(FormatTestJS, FormatsDecoratedFunctions) {
" get f() {\n"
" return result;\n"
" }\n"
+ "}\n"
+ "\n"
+ "class B {\n"
+ " private p = () => {}\n"
+ "\n"
+ " @decorated('a')\n"
+ " set f() {\n"
+ " return result;\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "class C {\n"
+ " private p = () => {}\n"
+ "\n"
+ " @decorated('a')\n"
+ " function f() {\n"
+ " return result;\n"
+ " }\n"
"}",
format("class A {\n"
" private p = () => {}\n"
@@ -718,6 +740,24 @@ TEST_F(FormatTestJS, FormatsDecoratedFunctions) {
" get f() {\n"
" return result;\n"
" }\n"
+ "}\n"
+ "\n"
+ "class B {\n"
+ " private p = () => {}\n"
+ "\n"
+ " @decorated('a')\n"
+ " set f() {\n"
+ " return result;\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "class C {\n"
+ " private p = () => {}\n"
+ "\n"
+ " @decorated('a')\n"
+ " function f() {\n"
+ " return result;\n"
+ " }\n"
"}",
getGoogleJSStyleWithColumns(50)));
}
More information about the cfe-commits
mailing list