18 void DefaultArgumentsCheck::registerMatchers(MatchFinder *Finder) {
20 Finder->addMatcher(cxxDefaultArgExpr().bind(
"stmt"),
this);
22 Finder->addMatcher(parmVarDecl(hasDefaultArgument()).bind(
"decl"),
this);
25 void DefaultArgumentsCheck::check(
const MatchFinder::MatchResult &
Result) {
27 Result.Nodes.getNodeAs<CXXDefaultArgExpr>(
"stmt")) {
28 diag(S->getUsedLocation(),
29 "calling a function that uses a default argument is disallowed");
30 diag(S->getParam()->getBeginLoc(),
"default parameter was declared here",
32 }
else if (
const ParmVarDecl *
D =
33 Result.Nodes.getNodeAs<ParmVarDecl>(
"decl")) {
34 SourceRange DefaultArgRange =
D->getDefaultArgRange();
36 if (DefaultArgRange.getEnd() !=
D->getEndLoc()) {
38 }
else if (DefaultArgRange.getBegin().isMacroID()) {
39 diag(
D->getBeginLoc(),
40 "declaring a parameter with a default argument is disallowed");
42 SourceLocation StartLocation =
43 D->getName().empty() ?
D->getBeginLoc() :
D->getLocation();
45 SourceRange RemovalRange(Lexer::getLocForEndOfToken(
47 *Result.SourceManager,
48 Result.Context->getLangOpts()
50 DefaultArgRange.getEnd()
53 diag(
D->getBeginLoc(),
54 "declaring a parameter with a default argument is disallowed")
55 <<
D << FixItHint::CreateRemoval(RemovalRange);
llvm::Optional< llvm::Expected< tooling::AtomicChanges > > Result
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//