[clang] e708808 - [clang-format] Support TypeScript override keyword
Krasimir Georgiev via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 25 05:12:55 PDT 2021
Author: Jan Kuehle
Date: 2021-08-25T14:11:50+02:00
New Revision: e708808f875f58344ecaad66d9e6e167ca7ac90a
URL: https://github.com/llvm/llvm-project/commit/e708808f875f58344ecaad66d9e6e167ca7ac90a
DIFF: https://github.com/llvm/llvm-project/commit/e708808f875f58344ecaad66d9e6e167ca7ac90a.diff
LOG: [clang-format] Support TypeScript override keyword
TypeScript 4.3 added a new "override" keyword for class members. This
lets clang-format know about it, so it can format code using it
properly.
Reviewed By: krasimir
Differential Revision: https://reviews.llvm.org/D108692
Added:
Modified:
clang/lib/Format/FormatToken.h
clang/lib/Format/TokenAnnotator.cpp
clang/lib/Format/UnwrappedLineFormatter.cpp
clang/lib/Format/UnwrappedLineParser.cpp
clang/unittests/Format/FormatTestJS.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h
index 0506cd554bcba..bbce27f799bc7 100644
--- a/clang/lib/Format/FormatToken.h
+++ b/clang/lib/Format/FormatToken.h
@@ -934,8 +934,8 @@ struct AdditionalKeywords {
// already initialized.
JsExtraKeywords = std::unordered_set<IdentifierInfo *>(
{kw_as, kw_async, kw_await, kw_declare, kw_finally, kw_from,
- kw_function, kw_get, kw_import, kw_is, kw_let, kw_module, kw_readonly,
- kw_set, kw_type, kw_typeof, kw_var, kw_yield,
+ kw_function, kw_get, kw_import, kw_is, kw_let, kw_module, kw_override,
+ kw_readonly, kw_set, kw_type, kw_typeof, kw_var, kw_yield,
// Keywords from the Java section.
kw_abstract, kw_extends, kw_implements, kw_instanceof, kw_interface});
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index 703eced09d446..887f6e363db82 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -3957,8 +3957,9 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line,
tok::kw_return, Keywords.kw_yield, tok::kw_continue, tok::kw_break,
tok::kw_throw, Keywords.kw_interface, Keywords.kw_type,
tok::kw_static, tok::kw_public, tok::kw_private, tok::kw_protected,
- Keywords.kw_readonly, Keywords.kw_abstract, Keywords.kw_get,
- Keywords.kw_set, Keywords.kw_async, Keywords.kw_await))
+ Keywords.kw_readonly, Keywords.kw_override, Keywords.kw_abstract,
+ Keywords.kw_get, Keywords.kw_set, Keywords.kw_async,
+ Keywords.kw_await))
return false; // Otherwise automatic semicolon insertion would trigger.
if (Right.NestingLevel == 0 &&
(Left.Tok.getIdentifierInfo() ||
diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp
index cca85c1074de5..2577aea3a480d 100644
--- a/clang/lib/Format/UnwrappedLineFormatter.cpp
+++ b/clang/lib/Format/UnwrappedLineFormatter.cpp
@@ -632,10 +632,11 @@ class LineJoiner {
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, tok::kw_public,
- tok::kw_private, tok::kw_protected, Keywords.kw_internal))
+ RecordTok->isOneOf(tok::kw_typedef, tok::kw_export,
+ Keywords.kw_declare, Keywords.kw_abstract,
+ tok::kw_default, Keywords.kw_override,
+ tok::kw_public, tok::kw_private,
+ tok::kw_protected, Keywords.kw_internal))
RecordTok = RecordTok->Next;
if (RecordTok &&
RecordTok->isOneOf(tok::kw_class, tok::kw_union, tok::kw_struct,
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index 8487875064aa8..18dc5c4244706 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -962,8 +962,8 @@ static bool mustBeJSIdent(const AdditionalKeywords &Keywords,
Keywords.kw_function, Keywords.kw_import, Keywords.kw_is,
Keywords.kw_let, Keywords.kw_var, tok::kw_const,
Keywords.kw_abstract, Keywords.kw_extends, Keywords.kw_implements,
- Keywords.kw_instanceof, Keywords.kw_interface, Keywords.kw_throws,
- Keywords.kw_from));
+ Keywords.kw_instanceof, Keywords.kw_interface,
+ Keywords.kw_override, Keywords.kw_throws, Keywords.kw_from));
}
static bool mustBeJSIdentOrValue(const AdditionalKeywords &Keywords,
diff --git a/clang/unittests/Format/FormatTestJS.cpp b/clang/unittests/Format/FormatTestJS.cpp
index 311881dde273c..0c8329dddd536 100644
--- a/clang/unittests/Format/FormatTestJS.cpp
+++ b/clang/unittests/Format/FormatTestJS.cpp
@@ -854,6 +854,26 @@ TEST_F(FormatTestJS, AsyncFunctions) {
"}\n");
}
+TEST_F(FormatTestJS, OverriddenMembers) {
+ verifyFormat(
+ "class C extends P {\n"
+ " protected override "
+ "anOverlyLongPropertyNameSoLongItHasToGoInASeparateLineWhenOverriden:\n"
+ " undefined;\n"
+ "}\n");
+ verifyFormat(
+ "class C extends P {\n"
+ " protected override "
+ "anOverlyLongMethodNameSoLongItHasToGoInASeparateLineWhenOverriden() {\n"
+ " }\n"
+ "}\n");
+ verifyFormat("class C extends P {\n"
+ " protected override aMethodName<ATypeParam extends {},\n"
+ " BTypeParam "
+ "extends {}>() {}\n"
+ "}\n");
+}
+
TEST_F(FormatTestJS, FunctionParametersTrailingComma) {
verifyFormat("function trailingComma(\n"
" p1,\n"
More information about the cfe-commits
mailing list