brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · e238f23 Raw
138 lines · c
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#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDY_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDY_H11 12#include "ClangTidyDiagnosticConsumer.h"13#include "ClangTidyOptions.h"14#include "llvm/ADT/StringSet.h"15#include <memory>16#include <vector>17 18namespace llvm {19class raw_ostream;20} // namespace llvm21 22namespace clang {23 24class ASTConsumer;25class CompilerInstance;26namespace tooling {27class CompilationDatabase;28} // namespace tooling29 30namespace tidy {31 32class ClangTidyCheckFactories;33 34class ClangTidyASTConsumerFactory {35public:36  ClangTidyASTConsumerFactory(37      ClangTidyContext &Context,38      IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> OverlayFS = nullptr);39 40  /// Returns an ASTConsumer that runs the specified clang-tidy checks.41  std::unique_ptr<clang::ASTConsumer>42  createASTConsumer(clang::CompilerInstance &Compiler, StringRef File);43 44  /// Get the list of enabled checks.45  std::vector<std::string> getCheckNames();46 47  /// Get the union of options from all checks.48  ClangTidyOptions::OptionMap getCheckOptions();49 50private:51  ClangTidyContext &Context;52  IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> OverlayFS;53  std::unique_ptr<ClangTidyCheckFactories> CheckFactories;54};55 56/// Fills the list of check names that are enabled when the provided57/// filters are applied.58std::vector<std::string> getCheckNames(const ClangTidyOptions &Options,59                                       bool AllowEnablingAnalyzerAlphaCheckers,60                                       bool ExperimentalCustomChecks);61 62struct ChecksAndOptions {63  llvm::StringSet<> Checks;64  llvm::StringSet<> Options;65};66 67ChecksAndOptions getAllChecksAndOptions(bool AllowEnablingAnalyzerAlphaCheckers,68                                        bool ExperimentalCustomChecks);69 70/// Returns the effective check-specific options.71///72/// The method configures ClangTidy with the specified \p Options and collects73/// effective options from all created checks. The returned set of options74/// includes default check-specific options for all keys not overridden by \p75/// Options.76ClangTidyOptions::OptionMap77getCheckOptions(const ClangTidyOptions &Options,78                bool AllowEnablingAnalyzerAlphaCheckers,79                bool ExperimentalCustomChecks);80 81/// Filters CheckOptions in \p Options to only include options specified in82/// the \p EnabledChecks which is a sorted vector.83void filterCheckOptions(ClangTidyOptions &Options,84                        const std::vector<std::string> &EnabledChecks);85 86/// Run a set of clang-tidy checks on a set of files.87///88/// \param EnableCheckProfile If provided, it enables check profile collection89/// in MatchFinder, and will contain the result of the profile.90/// \param StoreCheckProfile If provided, and EnableCheckProfile is true,91/// the profile will not be output to stderr, but will instead be stored92/// as a JSON file in the specified directory.93std::vector<ClangTidyError>94runClangTidy(clang::tidy::ClangTidyContext &Context,95             const tooling::CompilationDatabase &Compilations,96             ArrayRef<std::string> InputFiles,97             llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> BaseFS,98             bool ApplyAnyFix, bool EnableCheckProfile = false,99             llvm::StringRef StoreCheckProfile = StringRef(),100             bool Quiet = false);101 102/// Controls what kind of fixes clang-tidy is allowed to apply.103enum FixBehaviour {104  /// Don't try to apply any fix.105  FB_NoFix,106  /// Only apply fixes added to warnings.107  FB_Fix,108  /// Apply fixes found in notes.109  FB_FixNotes110};111 112// FIXME: This interface will need to be significantly extended to be useful.113// FIXME: Implement confidence levels for displaying/fixing errors.114//115/// Displays the found \p Errors to the users. If \p Fix is \ref FB_Fix or \ref116/// FB_FixNotes, \p Errors containing fixes are automatically applied and117/// reformatted. If no clang-format configuration file is found, the given \P118/// FormatStyle is used.119void handleErrors(llvm::ArrayRef<ClangTidyError> Errors,120                  ClangTidyContext &Context, FixBehaviour Fix,121                  unsigned &WarningsAsErrorsCount,122                  llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> BaseFS);123 124/// Serializes replacements into YAML and writes them to the specified125/// output stream.126void exportReplacements(StringRef MainFilePath,127                        const std::vector<ClangTidyError> &Errors,128                        raw_ostream &OS);129 130namespace custom {131extern void (*RegisterCustomChecks)(const ClangTidyOptions &O,132                                    ClangTidyCheckFactories &Factories);133} // namespace custom134} // end namespace tidy135} // end namespace clang136 137#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDY_H138