Author: sstwcw Date: 2025-10-23T13:17:36Z New Revision: 53b9441f5355fcdca07dc5b6ddc4fa5bb7ce4920
URL: https://github.com/llvm/llvm-project/commit/53b9441f5355fcdca07dc5b6ddc4fa5bb7ce4920 DIFF: https://github.com/llvm/llvm-project/commit/53b9441f5355fcdca07dc5b6ddc4fa5bb7ce4920.diff LOG: [clang-format] Break the line within ObjC `@selector` (#164674) after, with style `{ColumnLimit: 60}` ```Objective-C [objectName respondsToSelector: @selector( somelonglonglonglongnameeeeeeee: loooooooooanotherlonglonglonglongnametopush: otherlongnameforlimit:)]; ``` before ```Objective-C [objectName respondsToSelector: @selector( somelonglonglonglongnameeeeeeee:loooooooooanotherlonglonglonglongnametopush:otherlongnameforlimit:)]; ``` Fixes #164574. The stuff inside the parentheses got a new type in 2a059042882ed. I neglected to add it to the logic for breaking lines. Added: Modified: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTestObjC.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index c97a9e81eb59e..1d0dfd0b9c151 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -4407,8 +4407,12 @@ unsigned TokenAnnotator::splitPenalty(const AnnotatedLine &Line, // breaking after it. if (Right.is(TT_SelectorName)) return 0; - if (Left.is(tok::colon) && Left.is(TT_ObjCMethodExpr)) - return Line.MightBeFunctionDecl ? 50 : 500; + if (Left.is(tok::colon)) { + if (Left.is(TT_ObjCMethodExpr)) + return Line.MightBeFunctionDecl ? 50 : 500; + if (Left.is(TT_ObjCSelector)) + return 500; + } // In Objective-C type declarations, avoid breaking after the category's // open paren (we'll prefer breaking after the protocol list's opening @@ -6291,7 +6295,9 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line, TT_BitFieldColon)) { return false; } - if (Left.is(tok::colon) && Left.isOneOf(TT_DictLiteral, TT_ObjCMethodExpr)) { + if (Left.is(tok::colon) && Left.isOneOf(TT_ObjCSelector, TT_ObjCMethodExpr)) + return true; + if (Left.is(tok::colon) && Left.is(TT_DictLiteral)) { if (Style.isProto()) { if (!Style.AlwaysBreakBeforeMultilineStrings && Right.isStringLiteral()) return false; diff --git a/clang/unittests/Format/FormatTestObjC.cpp b/clang/unittests/Format/FormatTestObjC.cpp index 700d7cf8efca6..cf8143ace7b45 100644 --- a/clang/unittests/Format/FormatTestObjC.cpp +++ b/clang/unittests/Format/FormatTestObjC.cpp @@ -949,6 +949,12 @@ TEST_F(FormatTestObjC, FormatObjCMethodExpr) { "[aaaaaaaaaaaaaaaaaaaaaaaaa\n" " aaaaaaaaaaaaaaaaa:aaaaaaaa\n" " aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa];"); + verifyFormat("[objectName\n" + " respondsToSelector:\n" + " @selector(\n" + " somelonglonglonglongnameeeeeeee:\n" + " loooooooooanotherlonglonglonglongnametopush:\n" + " otherlongnameforlimit:)];"); Style = getChromiumStyle(FormatStyle::LK_ObjC); Style.ColumnLimit = 80; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
