/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file LICENSE.rst or https://cmake.org/licensing for details.  */
#include "UseBespokeEnumClassCheck.h"

#include <clang/AST/Type.h>
#include <clang/ASTMatchers/ASTMatchFinder.h>

namespace clang {
namespace tidy {
namespace cmake {
using namespace ast_matchers;

UseBespokeEnumClassCheck::UseBespokeEnumClassCheck(StringRef Name,
                                                   ClangTidyContext* Context)
  : ClangTidyCheck(Name, Context)
{
}

void UseBespokeEnumClassCheck::registerMatchers(MatchFinder* Finder)
{
  Finder->addMatcher(
    parmVarDecl(
      hasTypeLoc(typeLoc(loc(qualType(asString("_Bool")))).bind("type"))),
    this);
}

void UseBespokeEnumClassCheck::check(MatchFinder::MatchResult const& Result)
{
  TypeLoc const* Node = Result.Nodes.getNodeAs<TypeLoc>("type");
  this->diag(Node->getBeginLoc(),
             "use a bespoke enum class instead of booleans as parameters");
}
}
}
}
