forked from OSchip/llvm-project
[Tooling] Acknowledge that many CompilationDatabases don't support enumeration.
Summary: Provide default implementations so that only getCompileCommands() is mandatory. Reviewers: ioeric Subscribers: cfe-commits, bkramer, klimek Differential Revision: https://reviews.llvm.org/D40409 llvm-svn: 318943
This commit is contained in:
parent
70cec59e23
commit
b50a36c8bc
|
@ -64,10 +64,12 @@ struct CompileCommand {
|
|||
|
||||
/// \brief Interface for compilation databases.
|
||||
///
|
||||
/// A compilation database allows the user to retrieve all compile command lines
|
||||
/// that a specified file is compiled with in a project.
|
||||
/// The retrieved compile command lines can be used to run clang tools over
|
||||
/// a subset of the files in a project.
|
||||
/// A compilation database allows the user to retrieve compile command lines
|
||||
/// for the files in a project.
|
||||
///
|
||||
/// Many implementations are enumerable, allowing all command lines to be
|
||||
/// retrieved. These can be used to run clang tools over a subset of the files
|
||||
/// in a project.
|
||||
class CompilationDatabase {
|
||||
public:
|
||||
virtual ~CompilationDatabase();
|
||||
|
@ -114,7 +116,10 @@ public:
|
|||
StringRef FilePath) const = 0;
|
||||
|
||||
/// \brief Returns the list of all files available in the compilation database.
|
||||
virtual std::vector<std::string> getAllFiles() const = 0;
|
||||
///
|
||||
/// 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
|
||||
/// database.
|
||||
|
@ -122,7 +127,10 @@ public:
|
|||
/// FIXME: Add a layer in Tooling that provides an interface to run a tool
|
||||
/// over all files in a compilation database. Not all build systems have the
|
||||
/// ability to provide a feasible implementation for \c getAllCompileCommands.
|
||||
virtual std::vector<CompileCommand> getAllCompileCommands() const = 0;
|
||||
///
|
||||
/// By default, this is implemented in terms of getAllFiles() and
|
||||
/// getCompileCommands(). Subclasses may override this for efficiency.
|
||||
virtual std::vector<CompileCommand> getAllCompileCommands() const;
|
||||
};
|
||||
|
||||
/// \brief Interface for compilation database plugins.
|
||||
|
@ -149,6 +157,7 @@ public:
|
|||
/// \brief 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 "--".
|
||||
|
@ -199,17 +208,6 @@ public:
|
|||
std::vector<CompileCommand>
|
||||
getCompileCommands(StringRef FilePath) const override;
|
||||
|
||||
/// \brief Returns the list of all files available in the compilation database.
|
||||
///
|
||||
/// Note: This is always an empty list for the fixed compilation database.
|
||||
std::vector<std::string> getAllFiles() const override;
|
||||
|
||||
/// \brief Returns all compile commands for all the files in the compilation
|
||||
/// database.
|
||||
///
|
||||
/// Note: This is always an empty list for the fixed compilation database.
|
||||
std::vector<CompileCommand> getAllCompileCommands() const override;
|
||||
|
||||
private:
|
||||
/// This is built up to contain a single entry vector to be returned from
|
||||
/// getCompileCommands after adding the positional argument.
|
||||
|
|
|
@ -112,6 +112,15 @@ CompilationDatabase::autoDetectFromDirectory(StringRef SourceDir,
|
|||
return DB;
|
||||
}
|
||||
|
||||
std::vector<CompileCommand> CompilationDatabase::getAllCompileCommands() const {
|
||||
std::vector<CompileCommand> Result;
|
||||
for (const auto &File : getAllFiles()) {
|
||||
auto C = getCompileCommands(File);
|
||||
std::move(C.begin(), C.end(), std::back_inserter(Result));
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
|
||||
CompilationDatabasePlugin::~CompilationDatabasePlugin() {}
|
||||
|
||||
namespace {
|
||||
|
@ -342,16 +351,6 @@ FixedCompilationDatabase::getCompileCommands(StringRef FilePath) const {
|
|||
return Result;
|
||||
}
|
||||
|
||||
std::vector<std::string>
|
||||
FixedCompilationDatabase::getAllFiles() const {
|
||||
return std::vector<std::string>();
|
||||
}
|
||||
|
||||
std::vector<CompileCommand>
|
||||
FixedCompilationDatabase::getAllCompileCommands() const {
|
||||
return std::vector<CompileCommand>();
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
class FixedCompilationDatabasePlugin : public CompilationDatabasePlugin {
|
||||
|
|
Loading…
Reference in New Issue