brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 5ecfd38 Raw
37 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "AvoidDoWhileCheck.h"10#include "clang/ASTMatchers/ASTMatchFinder.h"11 12using namespace clang::ast_matchers;13 14namespace clang::tidy::cppcoreguidelines {15 16AvoidDoWhileCheck::AvoidDoWhileCheck(StringRef Name, ClangTidyContext *Context)17    : ClangTidyCheck(Name, Context),18      IgnoreMacros(Options.get("IgnoreMacros", false)) {}19 20void AvoidDoWhileCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {21  Options.store(Opts, "IgnoreMacros", IgnoreMacros);22}23 24void AvoidDoWhileCheck::registerMatchers(MatchFinder *Finder) {25  Finder->addMatcher(doStmt().bind("x"), this);26}27 28void AvoidDoWhileCheck::check(const MatchFinder::MatchResult &Result) {29  if (const auto *MatchedDecl = Result.Nodes.getNodeAs<DoStmt>("x")) {30    if (IgnoreMacros && MatchedDecl->getBeginLoc().isMacroID())31      return;32    diag(MatchedDecl->getBeginLoc(), "avoid do-while loops");33  }34}35 36} // namespace clang::tidy::cppcoreguidelines37