//===--- DefaultArgumentsCallsCheck.cpp - clang-tidy-----------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "DefaultArgumentsCallsCheck.h"

using namespace clang::ast_matchers;

namespace clang {
namespace tidy {
namespace fuchsia {

void DefaultArgumentsCallsCheck::registerMatchers(MatchFinder *Finder) {
  // Calling a function which uses default arguments is disallowed.
  Finder->addMatcher(cxxDefaultArgExpr().bind("stmt"), this);
}

void DefaultArgumentsCallsCheck::check(const MatchFinder::MatchResult &Result) {
  const auto *S = Result.Nodes.getNodeAs<CXXDefaultArgExpr>("stmt");
  if (!S)
    return;

  diag(S->getUsedLocation(),
       "calling a function that uses a default argument is disallowed");
  diag(S->getParam()->getBeginLoc(), "default parameter was declared here",
       DiagnosticIDs::Note);
}

} // namespace fuchsia
} // namespace tidy
} // namespace clang
