forked from OSchip/llvm-project
103 lines
3.9 KiB
C++
103 lines
3.9 KiB
C++
//===--- ClangTidy.h - clang-tidy -------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDY_H
|
|
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDY_H
|
|
|
|
#include "ClangTidyCheck.h"
|
|
#include "ClangTidyDiagnosticConsumer.h"
|
|
#include "ClangTidyOptions.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
namespace clang {
|
|
|
|
class CompilerInstance;
|
|
namespace tooling {
|
|
class CompilationDatabase;
|
|
}
|
|
|
|
namespace tidy {
|
|
|
|
class ClangTidyCheckFactories;
|
|
|
|
class ClangTidyASTConsumerFactory {
|
|
public:
|
|
ClangTidyASTConsumerFactory(
|
|
ClangTidyContext &Context,
|
|
IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> OverlayFS = nullptr);
|
|
|
|
/// \brief Returns an ASTConsumer that runs the specified clang-tidy checks.
|
|
std::unique_ptr<clang::ASTConsumer>
|
|
CreateASTConsumer(clang::CompilerInstance &Compiler, StringRef File);
|
|
|
|
/// \brief Get the list of enabled checks.
|
|
std::vector<std::string> getCheckNames();
|
|
|
|
/// \brief Get the union of options from all checks.
|
|
ClangTidyOptions::OptionMap getCheckOptions();
|
|
|
|
private:
|
|
ClangTidyContext &Context;
|
|
IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> OverlayFS;
|
|
std::unique_ptr<ClangTidyCheckFactories> CheckFactories;
|
|
};
|
|
|
|
/// \brief Fills the list of check names that are enabled when the provided
|
|
/// filters are applied.
|
|
std::vector<std::string> getCheckNames(const ClangTidyOptions &Options,
|
|
bool AllowEnablingAnalyzerAlphaCheckers);
|
|
|
|
/// \brief Returns the effective check-specific options.
|
|
///
|
|
/// The method configures ClangTidy with the specified \p Options and collects
|
|
/// effective options from all created checks. The returned set of options
|
|
/// includes default check-specific options for all keys not overridden by \p
|
|
/// Options.
|
|
ClangTidyOptions::OptionMap
|
|
getCheckOptions(const ClangTidyOptions &Options,
|
|
bool AllowEnablingAnalyzerAlphaCheckers);
|
|
|
|
/// \brief Run a set of clang-tidy checks on a set of files.
|
|
///
|
|
/// \param EnableCheckProfile If provided, it enables check profile collection
|
|
/// in MatchFinder, and will contain the result of the profile.
|
|
/// \param StoreCheckProfile If provided, and EnableCheckProfile is true,
|
|
/// the profile will not be output to stderr, but will instead be stored
|
|
/// as a JSON file in the specified directory.
|
|
std::vector<ClangTidyError>
|
|
runClangTidy(clang::tidy::ClangTidyContext &Context,
|
|
const tooling::CompilationDatabase &Compilations,
|
|
ArrayRef<std::string> InputFiles,
|
|
llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> BaseFS,
|
|
bool EnableCheckProfile = false,
|
|
llvm::StringRef StoreCheckProfile = StringRef());
|
|
|
|
// FIXME: This interface will need to be significantly extended to be useful.
|
|
// FIXME: Implement confidence levels for displaying/fixing errors.
|
|
//
|
|
/// \brief Displays the found \p Errors to the users. If \p Fix is true, \p
|
|
/// Errors containing fixes are automatically applied and reformatted. If no
|
|
/// clang-format configuration file is found, the given \P FormatStyle is used.
|
|
void handleErrors(llvm::ArrayRef<ClangTidyError> Errors,
|
|
ClangTidyContext &Context, bool Fix,
|
|
unsigned &WarningsAsErrorsCount,
|
|
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> BaseFS);
|
|
|
|
/// \brief Serializes replacements into YAML and writes them to the specified
|
|
/// output stream.
|
|
void exportReplacements(StringRef MainFilePath,
|
|
const std::vector<ClangTidyError> &Errors,
|
|
raw_ostream &OS);
|
|
|
|
} // end namespace tidy
|
|
} // end namespace clang
|
|
|
|
#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDY_H
|