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()->getLocStart(),
31 "default parameter was declared here",
33 }
else if (
const ParmVarDecl *D =
34 Result.Nodes.getNodeAs<ParmVarDecl>(
"decl")) {
35 SourceRange DefaultArgRange = D->getDefaultArgRange();
37 if (DefaultArgRange.getEnd() != D->getLocEnd()) {
39 }
else if (DefaultArgRange.getBegin().isMacroID()) {
40 diag(D->getLocStart(),
41 "declaring a parameter with a default argument is disallowed");
43 SourceLocation StartLocation = D->getName().empty() ?
44 D->getLocStart() : D->getLocation();
46 SourceRange RemovalRange(Lexer::getLocForEndOfToken(
48 *Result.SourceManager,
49 Result.Context->getLangOpts()
51 DefaultArgRange.getEnd()
54 diag(D->getLocStart(),
55 "declaring a parameter with a default argument is disallowed")
57 << FixItHint::CreateRemoval(RemovalRange);
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//