UseCmstrlenCheck.cxx 1005 B

12345678910111213141516171819202122232425262728293031323334
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #include "UseCmstrlenCheck.h"
  4. #include <clang/ASTMatchers/ASTMatchFinder.h>
  5. namespace clang {
  6. namespace tidy {
  7. namespace cmake {
  8. using namespace ast_matchers;
  9. UseCmstrlenCheck::UseCmstrlenCheck(StringRef Name, ClangTidyContext* Context)
  10. : ClangTidyCheck(Name, Context)
  11. {
  12. }
  13. void UseCmstrlenCheck::registerMatchers(MatchFinder* Finder)
  14. {
  15. Finder->addMatcher(callExpr(callee(functionDecl(hasName("::strlen"))),
  16. callee(expr().bind("callee")),
  17. hasArgument(0, stringLiteral())),
  18. this);
  19. }
  20. void UseCmstrlenCheck::check(const MatchFinder::MatchResult& Result)
  21. {
  22. const Expr* Node = Result.Nodes.getNodeAs<Expr>("callee");
  23. this->diag(Node->getBeginLoc(), "use cmStrLen() for string literals")
  24. << FixItHint::CreateReplacement(Node->getSourceRange(), "cmStrLen");
  25. }
  26. }
  27. }
  28. }