31 const MatchFinder::MatchResult &Result) {
32 const auto *Lambda = Result.Nodes.getNodeAs<LambdaExpr>(
"lambda");
34 const LangOptions &LangOpts = getLangOpts();
36 const FunctionTypeLoc FTL = Lambda->getCallOperator()->getFunctionTypeLoc();
37 const SourceLocation LParenLoc = FTL.getLParenLoc();
38 const SourceLocation RParenLoc = FTL.getRParenLoc();
40 if (LParenLoc.isInvalid() || RParenLoc.isInvalid())
44 const std::optional<Token> FirstInParens =
46 LParenLoc, *Result.SourceManager, LangOpts);
48 if (!FirstInParens || FirstInParens->getLocation() != RParenLoc)
51 const std::optional<Token> NextAfterParenTok =
53 RParenLoc, *Result.SourceManager, LangOpts);
55 if (!NextAfterParenTok || NextAfterParenTok->is(tok::l_square))
58 if (!LangOpts.CPlusPlus23 && NextAfterParenTok->isNot(tok::l_brace))
61 diag(LParenLoc,
"redundant empty parameter list in lambda expression")
62 << FixItHint::CreateRemoval(LParenLoc)
63 << FixItHint::CreateRemoval(RParenLoc);