xref: /llvm-project/clang-tools-extra/clang-tidy/NoLintDirectiveHandler.h (revision f59b600c21add076d6a876f29f94990b24b8e321)
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