28 const MatchFinder::MatchResult &Result) {
29 const CharSourceRange FileRange = Lexer::makeFileCharRange(
31 *Result.SourceManager, Result.Context->getLangOpts());
33 if (FileRange.isInvalid())
37 tok::kw_const, FileRange, *Result.Context, *Result.SourceManager);
55 const MatchFinder::MatchResult &Result) {
56 const auto *Func = Result.Nodes.getNodeAs<FunctionDecl>(
"func");
57 const auto *Param = Result.Nodes.getNodeAs<ParmVarDecl>(
"param");
59 if (!Param->getType().isLocalConstQualified())
63 (Param->getBeginLoc().isMacroID() || Param->getEndLoc().isMacroID())) {
69 const auto ConstLocation = Tok ? Tok->getLocation() : Param->getBeginLoc();
71 auto Diag = diag(ConstLocation,
72 "parameter %0 is const-qualified in the function "
73 "declaration; const-qualification of parameters only has an "
74 "effect in function definitions");
75 if (Param->getName().empty()) {
76 for (
unsigned int I = 0; I < Func->getNumParams(); ++I) {
77 if (Param == Func->getParamDecl(I)) {
86 if (Param->getBeginLoc().isMacroID() != Param->getEndLoc().isMacroID()) {
94 Diag << FixItHint::CreateRemoval(
95 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...