diff options
Diffstat (limited to 'include/clang/Tooling/CompilationDatabase.h')
| -rw-r--r-- | include/clang/Tooling/CompilationDatabase.h | 67 |
1 files changed, 41 insertions, 26 deletions
diff --git a/include/clang/Tooling/CompilationDatabase.h b/include/clang/Tooling/CompilationDatabase.h index bc3e67b77de2..37e515fdc09e 100644 --- a/include/clang/Tooling/CompilationDatabase.h +++ b/include/clang/Tooling/CompilationDatabase.h @@ -1,4 +1,4 @@ -//===--- CompilationDatabase.h - --------------------------------*- C++ -*-===// +//===- CompilationDatabase.h ------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -34,35 +34,43 @@ #include "llvm/ADT/Twine.h" #include <memory> #include <string> +#include <utility> #include <vector> namespace clang { namespace tooling { -/// \brief Specifies the working directory and command of a compilation. +/// Specifies the working directory and command of a compilation. struct CompileCommand { - CompileCommand() {} + CompileCommand() = default; CompileCommand(Twine Directory, Twine Filename, std::vector<std::string> CommandLine, Twine Output) - : Directory(Directory.str()), - Filename(Filename.str()), - CommandLine(std::move(CommandLine)), - Output(Output.str()){} + : Directory(Directory.str()), Filename(Filename.str()), + CommandLine(std::move(CommandLine)), Output(Output.str()){} - /// \brief The working directory the command was executed from. + /// The working directory the command was executed from. std::string Directory; /// The source file associated with the command. std::string Filename; - /// \brief The command line that was executed. + /// The command line that was executed. std::vector<std::string> CommandLine; /// The output file associated with the command. std::string Output; + + friend bool operator==(const CompileCommand &LHS, const CompileCommand &RHS) { + return LHS.Directory == RHS.Directory && LHS.Filename == RHS.Filename && + LHS.CommandLine == RHS.CommandLine && LHS.Output == RHS.Output; + } + + friend bool operator!=(const CompileCommand &LHS, const CompileCommand &RHS) { + return !(LHS == RHS); + } }; -/// \brief Interface for compilation databases. +/// Interface for compilation databases. /// /// A compilation database allows the user to retrieve compile command lines /// for the files in a project. @@ -74,7 +82,7 @@ class CompilationDatabase { public: virtual ~CompilationDatabase(); - /// \brief Loads a compilation database from a build directory. + /// Loads a compilation database from a build directory. /// /// Looks at the specified 'BuildDirectory' and creates a compilation database /// that allows to query compile commands for source files in the @@ -89,21 +97,21 @@ public: static std::unique_ptr<CompilationDatabase> loadFromDirectory(StringRef BuildDirectory, std::string &ErrorMessage); - /// \brief Tries to detect a compilation database location and load it. + /// Tries to detect a compilation database location and load it. /// /// Looks for a compilation database in all parent paths of file 'SourceFile' /// by calling loadFromDirectory. static std::unique_ptr<CompilationDatabase> autoDetectFromSource(StringRef SourceFile, std::string &ErrorMessage); - /// \brief Tries to detect a compilation database location and load it. + /// Tries to detect a compilation database location and load it. /// /// Looks for a compilation database in directory 'SourceDir' and all /// its parent paths by calling loadFromDirectory. static std::unique_ptr<CompilationDatabase> autoDetectFromDirectory(StringRef SourceDir, std::string &ErrorMessage); - /// \brief Returns all compile commands in which the specified file was + /// Returns all compile commands in which the specified file was /// compiled. /// /// This includes compile commands that span multiple source files. @@ -113,15 +121,15 @@ public: /// A compilation database representing the project would return both command /// lines for a.cc and b.cc and only the first command line for t.cc. virtual std::vector<CompileCommand> getCompileCommands( - StringRef FilePath) const = 0; + StringRef FilePath) const = 0; - /// \brief Returns the list of all files available in the compilation database. + /// Returns the list of all files available in the compilation database. /// /// By default, returns nothing. Implementations should override this if they /// can enumerate their source files. virtual std::vector<std::string> getAllFiles() const { return {}; } - /// \brief Returns all compile commands for all the files in the compilation + /// Returns all compile commands for all the files in the compilation /// database. /// /// FIXME: Add a layer in Tooling that provides an interface to run a tool @@ -133,7 +141,7 @@ public: virtual std::vector<CompileCommand> getAllCompileCommands() const; }; -/// \brief Interface for compilation database plugins. +/// Interface for compilation database plugins. /// /// A compilation database plugin allows the user to register custom compilation /// databases that are picked up as compilation database if the corresponding @@ -147,20 +155,20 @@ class CompilationDatabasePlugin { public: virtual ~CompilationDatabasePlugin(); - /// \brief Loads a compilation database from a build directory. + /// Loads a compilation database from a build directory. /// /// \see CompilationDatabase::loadFromDirectory(). virtual std::unique_ptr<CompilationDatabase> loadFromDirectory(StringRef Directory, std::string &ErrorMessage) = 0; }; -/// \brief A compilation database that returns a single compile command line. +/// A compilation database that returns a single compile command line. /// /// Useful when we want a tool to behave more like a compiler invocation. /// This compilation database is not enumerable: getAllFiles() returns {}. class FixedCompilationDatabase : public CompilationDatabase { public: - /// \brief Creates a FixedCompilationDatabase from the arguments after "--". + /// Creates a FixedCompilationDatabase from the arguments after "--". /// /// Parses the given command line for "--". If "--" is found, the rest of /// the arguments will make up the command line in the returned @@ -196,11 +204,11 @@ public: static std::unique_ptr<FixedCompilationDatabase> loadFromFile(StringRef Path, std::string &ErrorMsg); - /// \brief Constructs a compilation data base from a specified directory + /// Constructs a compilation data base from a specified directory /// and command line. FixedCompilationDatabase(Twine Directory, ArrayRef<std::string> CommandLine); - /// \brief Returns the given compile command. + /// Returns the given compile command. /// /// Will always return a vector with one entry that contains the directory /// and command line specified at construction with "clang-tool" as argv[0] @@ -214,7 +222,14 @@ private: std::vector<CompileCommand> CompileCommands; }; -} // end namespace tooling -} // end namespace clang +/// Returns a wrapped CompilationDatabase that defers to the provided one, +/// but getCompileCommands() will infer commands for unknown files. +/// The return value of getAllFiles() or getAllCompileCommands() is unchanged. +/// See InterpolatingCompilationDatabase.cpp for details on heuristics. +std::unique_ptr<CompilationDatabase> + inferMissingCompileCommands(std::unique_ptr<CompilationDatabase>); + +} // namespace tooling +} // namespace clang -#endif +#endif // LLVM_CLANG_TOOLING_COMPILATIONDATABASE_H |
