diff options
Diffstat (limited to 'clang-tools-extra/module-map-checker/ModuleMapChecker.h')
| -rw-r--r-- | clang-tools-extra/module-map-checker/ModuleMapChecker.h | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/clang-tools-extra/module-map-checker/ModuleMapChecker.h b/clang-tools-extra/module-map-checker/ModuleMapChecker.h deleted file mode 100644 index b2a33a103d0..00000000000 --- a/clang-tools-extra/module-map-checker/ModuleMapChecker.h +++ /dev/null @@ -1,222 +0,0 @@ -//===-- ModuleMapChecker.h - Common defs for module-map-checker -*- C++ -*-==// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===--------------------------------------------------------------------===// -/// -/// \file -/// \brief Common definitions for ModuleMapChecker. -/// -//===--------------------------------------------------------------------===// - -#ifndef MODULEMAPCHECKER_H -#define MODULEMAPCHECKER_H - -#include "clang/Basic/Diagnostic.h" -#include "clang/Basic/FileManager.h" -#include "clang/Basic/LangOptions.h" -#include "clang/Basic/TargetInfo.h" -#include "clang/Basic/TargetOptions.h" -#include "clang/Frontend/TextDiagnosticPrinter.h" -#include "clang/Lex/HeaderSearch.h" -#include "clang/Lex/HeaderSearchOptions.h" -#include "clang/Lex/ModuleMap.h" -#include "clang/Lex/Preprocessor.h" -#include "llvm/ADT/StringSet.h" -#include "llvm/Support/Host.h" -#include <string> -#include <vector> - -/// Subclass TargetOptions so we can construct it inline with -/// the minimal option, the triple. -class ModuleMapTargetOptions : public clang::TargetOptions { -public: - ModuleMapTargetOptions() { Triple = llvm::sys::getDefaultTargetTriple(); } -}; - -/// Module map checker class. -/// This is the heart of the checker. -/// The doChecks function does the main work. -/// The data members store the options and internally collected data. -class ModuleMapChecker { - // Checker arguments. - - /// The module.modulemap file path. Can be relative or absolute. - llvm::StringRef ModuleMapPath; - /// The include paths to check for files. - /// (Note that other directories above these paths are ignored. - /// To expect all files to be accounted for from the module.modulemap - /// file directory on down, leave this empty.) - std::vector<std::string> IncludePaths; - /// Flag to dump the module map information during check. - bool DumpModuleMap; - /// The remaining arguments, to be passed to the front end. - llvm::ArrayRef<std::string> CommandLine; - - // Supporting objects. - - /// Options controlling the language variant. - std::shared_ptr<clang::LangOptions> LangOpts; - /// Diagnostic IDs. - const llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> DiagIDs; - /// Options controlling the diagnostic engine. - llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> DiagnosticOpts; - /// Diagnostic consumer. - clang::TextDiagnosticPrinter DC; - /// Diagnostic engine. - llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine> Diagnostics; - /// Options controlling the target. - std::shared_ptr<clang::TargetOptions> TargetOpts; - /// Target information. - llvm::IntrusiveRefCntPtr<clang::TargetInfo> Target; - /// Options controlling the file system manager. - clang::FileSystemOptions FileSystemOpts; - /// File system manager. - llvm::IntrusiveRefCntPtr<clang::FileManager> FileMgr; - /// Source manager. - llvm::IntrusiveRefCntPtr<clang::SourceManager> SourceMgr; - /// Options controlling the \#include directive. - llvm::IntrusiveRefCntPtr<clang::HeaderSearchOptions> HeaderSearchOpts; - /// Header search manager. - std::unique_ptr<clang::HeaderSearch> HeaderInfo; - /// The module map. - std::unique_ptr<clang::ModuleMap> ModMap; - - // Internal data. - - /// Directory containing the module map. - /// Might be relative to the current directory, or absolute. - std::string ModuleMapDirectory; - /// Set of all the headers found in the module map. - llvm::StringSet<llvm::MallocAllocator> ModuleMapHeadersSet; - /// All the headers found in the file system starting at the - /// module map, or the union of those from the include paths. - std::vector<std::string> FileSystemHeaders; - /// Headers found in file system, but not in module map. - std::vector<std::string> UnaccountedForHeaders; - -public: - /// Constructor. - /// You can use the static createModuleMapChecker to create an instance - /// of this object. - /// \param ModuleMapPath The module.modulemap file path. - /// Can be relative or absolute. - /// \param IncludePaths The include paths to check for files. - /// (Note that other directories above these paths are ignored. - /// To expect all files to be accounted for from the module.modulemap - /// file directory on down, leave this empty.) - /// \param DumpModuleMap Flag to dump the module map information - /// during check. - ModuleMapChecker(llvm::StringRef ModuleMapPath, - std::vector<std::string> &IncludePaths, bool DumpModuleMap, - llvm::ArrayRef<std::string> CommandLine); - - /// Create instance of ModuleMapChecker. - /// \param ModuleMapPath The module.modulemap file path. - /// Can be relative or absolute. - /// \param IncludePaths The include paths to check for files. - /// (Note that other directories above these paths are ignored. - /// To expect all files to be accounted for from the module.modulemap - /// file directory on down, leave this empty.) - /// \param DumpModuleMap Flag to dump the module map information - /// during check. - /// \returns Initialized ModuleMapChecker object. - static ModuleMapChecker *createModuleMapChecker( - llvm::StringRef ModuleMapPath, std::vector<std::string> &IncludePaths, - bool DumpModuleMap, llvm::ArrayRef<std::string> CommandLine); - - /// Do checks. - /// Starting from the directory of the module.modulemap file, - /// Find all header files, optionally looking only at files - /// covered by the include path options, and compare against - /// the headers referenced by the module.modulemap file. - /// Display warnings for unaccounted-for header files. - /// \returns 0 if there were no errors or warnings, 1 if there - /// were warnings, 2 if any other problem, such as a bad - /// module map path argument was specified. - std::error_code doChecks(); - - // The following functions are called by doChecks. - - /// Load module map. - /// \returns True if module.modulemap file loaded successfully. - bool loadModuleMap(); - - /// Collect module headers. - /// Walks the modules and collects referenced headers into - /// ModuleMapHeadersSet. - void collectModuleHeaders(); - - /// Collect referenced headers from one module. - /// Collects the headers referenced in the given module into - /// ModuleMapHeadersSet. - /// \param Mod The module reference. - /// \return True if no errors. - bool collectModuleHeaders(const clang::Module &Mod); - - /// Collect headers from an umbrella directory. - /// \param UmbrellaDirName The umbrella directory name. - /// \return True if no errors. - bool collectUmbrellaHeaders(llvm::StringRef UmbrellaDirName); - - /// Collect headers rferenced from an umbrella file. - /// \param UmbrellaHeaderName The umbrella file path. - /// \return True if no errors. - bool collectUmbrellaHeaderHeaders(llvm::StringRef UmbrellaHeaderName); - - /// Called from ModuleMapCheckerCallbacks to track a header included - /// from an umbrella header. - /// \param HeaderName The header file path. - void collectUmbrellaHeaderHeader(llvm::StringRef HeaderName); - - /// Collect file system header files. - /// This function scans the file system for header files, - /// starting at the directory of the module.modulemap file, - /// optionally filtering out all but the files covered by - /// the include path options. - /// \returns True if no errors. - bool collectFileSystemHeaders(); - - /// Collect file system header files from the given path. - /// This function scans the file system for header files, - /// starting at the given directory, which is assumed to be - /// relative to the directory of the module.modulemap file. - /// \returns True if no errors. - bool collectFileSystemHeaders(llvm::StringRef IncludePath); - - /// Find headers unaccounted-for in module map. - /// This function compares the list of collected header files - /// against those referenced in the module map. Display - /// warnings for unaccounted-for header files. - /// Save unaccounted-for file list for possible. - /// fixing action. - void findUnaccountedForHeaders(); - - // Utility functions. - - /// Get directory path component from file path. - /// \returns the component of the given path, which will be - /// relative if the given path is relative, absolute if the - /// given path is absolute, or "." if the path has no leading - /// path component. - std::string getDirectoryFromPath(llvm::StringRef Path); - - /// Convert header path to canonical form. - /// The canonical form is basically just use forward slashes, - /// and remove "./". - /// \param FilePath The file path. - /// \returns The file path in canonical form. - std::string getCanonicalPath(llvm::StringRef FilePath); - - /// Check for header file extension. - /// If the file extension is .h, .inc, or missing, it's - /// assumed to be a header. - /// \param FileName The file name. Must not be a directory. - /// \returns true if it has a header extension or no extension. - bool isHeader(llvm::StringRef FileName); -}; - -#endif // MODULEMAPCHECKER_H |

