mitchell-stellar created this revision. mitchell-stellar added a reviewer: MyDeveloperDay. mitchell-stellar added a project: clang-format. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Lambda captures allow for a lone `&` capture, so `&]` needs to be properly handled. Repository: rC Clang https://reviews.llvm.org/D70249 Files: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10638,6 +10638,7 @@ verifyFormat("return [ i, args... ] {};", Spaces); verifyFormat("int foo = [ &bar ]() {};", Spaces); verifyFormat("int foo = [ = ]() {};", Spaces); + verifyFormat("int foo = [ & ]() {};", Spaces); verifyFormat("int foo = [ =, &bar ]() {};", Spaces); verifyFormat("int foo = [ &bar, = ]() {};", Spaces); } Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2996,14 +2996,18 @@ return true; } if (Left.is(TT_UnaryOperator)) { - // The alternative operators for ~ and ! are "compl" and "not". - // If they are used instead, we do not want to combine them with - // the token to the right, unless that is a left paren. if (!Right.is(tok::l_paren)) { + // The alternative operators for ~ and ! are "compl" and "not". + // If they are used instead, we do not want to combine them with + // the token to the right, unless that is a left paren. if (Left.is(tok::exclaim) && Left.TokenText == "not") return true; if (Left.is(tok::tilde) && Left.TokenText == "compl") return true; + // Lambda captures allow for a lone &, so "&]" needs to be properly + // handled. + if (Left.is(tok::amp) && Right.is(tok::r_square)) + return Style.SpacesInSquareBrackets; } return (Style.SpaceAfterLogicalNot && Left.is(tok::exclaim)) || Right.is(TT_BinaryOperator);
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10638,6 +10638,7 @@ verifyFormat("return [ i, args... ] {};", Spaces); verifyFormat("int foo = [ &bar ]() {};", Spaces); verifyFormat("int foo = [ = ]() {};", Spaces); + verifyFormat("int foo = [ & ]() {};", Spaces); verifyFormat("int foo = [ =, &bar ]() {};", Spaces); verifyFormat("int foo = [ &bar, = ]() {};", Spaces); } Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2996,14 +2996,18 @@ return true; } if (Left.is(TT_UnaryOperator)) { - // The alternative operators for ~ and ! are "compl" and "not". - // If they are used instead, we do not want to combine them with - // the token to the right, unless that is a left paren. if (!Right.is(tok::l_paren)) { + // The alternative operators for ~ and ! are "compl" and "not". + // If they are used instead, we do not want to combine them with + // the token to the right, unless that is a left paren. if (Left.is(tok::exclaim) && Left.TokenText == "not") return true; if (Left.is(tok::tilde) && Left.TokenText == "compl") return true; + // Lambda captures allow for a lone &, so "&]" needs to be properly + // handled. + if (Left.is(tok::amp) && Right.is(tok::r_square)) + return Style.SpacesInSquareBrackets; } return (Style.SpaceAfterLogicalNot && Left.is(tok::exclaim)) || Right.is(TT_BinaryOperator);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits