28 const MatchFinder::MatchResult &Result) {
30 const CharSourceRange FileRange = Lexer::makeFileCharRange(
32 *Result.SourceManager, Result.Context->getLangOpts());
34 if (FileRange.isInvalid())
38 tok::kw_const, FileRange, *Result.Context, *Result.SourceManager);
56 const MatchFinder::MatchResult &Result) {
57 const auto *Func = Result.Nodes.getNodeAs<FunctionDecl>(
"func");
58 const auto *Param = Result.Nodes.getNodeAs<ParmVarDecl>(
"param");
60 if (!Param->getType().isLocalConstQualified())
64 (Param->getBeginLoc().isMacroID() || Param->getEndLoc().isMacroID())) {
70 const auto ConstLocation = Tok ? Tok->getLocation() : Param->getBeginLoc();
72 auto Diag = diag(ConstLocation,
73 "parameter %0 is const-qualified in the function "
74 "declaration; const-qualification of parameters only has an "
75 "effect in function definitions");
76 if (Param->getName().empty()) {
77 for (
unsigned int I = 0; I < Func->getNumParams(); ++I) {
78 if (Param == Func->getParamDecl(I)) {
87 if (Param->getBeginLoc().isMacroID() != Param->getEndLoc().isMacroID()) {
95 Diag << FixItHint::CreateRemoval(
96 CharSourceRange::getTokenRange(Tok->getLocation(), Tok->getLocation()));
std::optional< Token > getQualifyingToken(tok::TokenKind TK, CharSourceRange Range, const ASTContext &Context, const SourceManager &SM)
Assuming that Range spans a CVR-qualified type, returns the token in Range that is responsible for th...