15da7c040SSalman Javed //===-- clang-tools-extra/clang-tidy/NoLintDirectiveHandler.h ----*- C++ *-===// 25da7c040SSalman Javed // 35da7c040SSalman Javed // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45da7c040SSalman Javed // See https://llvm.org/LICENSE.txt for license information. 55da7c040SSalman Javed // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65da7c040SSalman Javed // 75da7c040SSalman Javed //===----------------------------------------------------------------------===// 85da7c040SSalman Javed 95da7c040SSalman Javed #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_NOLINTDIRECTIVEHANDLER_H 105da7c040SSalman Javed #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_NOLINTDIRECTIVEHANDLER_H 115da7c040SSalman Javed 125da7c040SSalman Javed #include "clang/Basic/Diagnostic.h" 135da7c040SSalman Javed #include "llvm/ADT/StringRef.h" 145da7c040SSalman Javed #include <memory> 155da7c040SSalman Javed 164718da50SCarlos Galvez namespace clang::tooling { 175da7c040SSalman Javed struct Diagnostic; 184718da50SCarlos Galvez } // namespace clang::tooling 195da7c040SSalman Javed 205da7c040SSalman Javed namespace llvm { 215da7c040SSalman Javed template <typename T> class SmallVectorImpl; 225da7c040SSalman Javed } // namespace llvm 235da7c040SSalman Javed 244718da50SCarlos Galvez namespace clang::tidy { 255da7c040SSalman Javed 265da7c040SSalman Javed /// This class is used to locate NOLINT comments in the file being analyzed, to 275da7c040SSalman Javed /// decide whether a diagnostic should be suppressed. 285da7c040SSalman Javed /// This class keeps a cache of every NOLINT comment found so that files do not 295da7c040SSalman Javed /// have to be repeatedly parsed each time a new diagnostic is raised. 305da7c040SSalman Javed class NoLintDirectiveHandler { 315da7c040SSalman Javed public: 325da7c040SSalman Javed NoLintDirectiveHandler(); 335da7c040SSalman Javed ~NoLintDirectiveHandler(); 34*f59b600cSZahira Ammarguellat NoLintDirectiveHandler(const NoLintDirectiveHandler &) = delete; 35*f59b600cSZahira Ammarguellat NoLintDirectiveHandler &operator=(const NoLintDirectiveHandler &) = delete; 365da7c040SSalman Javed 375da7c040SSalman Javed bool shouldSuppress(DiagnosticsEngine::Level DiagLevel, 385da7c040SSalman Javed const Diagnostic &Diag, llvm::StringRef DiagName, 395da7c040SSalman Javed llvm::SmallVectorImpl<tooling::Diagnostic> &NoLintErrors, 405da7c040SSalman Javed bool AllowIO, bool EnableNoLintBlocks); 415da7c040SSalman Javed 425da7c040SSalman Javed private: 435da7c040SSalman Javed class Impl; 445da7c040SSalman Javed std::unique_ptr<Impl> PImpl; 455da7c040SSalman Javed }; 465da7c040SSalman Javed 474718da50SCarlos Galvez } // namespace clang::tidy 485da7c040SSalman Javed 495da7c040SSalman Javed #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_NOLINTDIRECTIVEHANDLER_H 50