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" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits