//===- GuessTargetAndModeCompilationDatabase.cpp --------------------------===// // // 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 // //===----------------------------------------------------------------------===// #include "clang/Tooling/CompilationDatabase.h" #include "clang/Tooling/Tooling.h" #include namespace clang { namespace tooling { namespace { class TargetAndModeAdderDatabase : public CompilationDatabase { public: TargetAndModeAdderDatabase(std::unique_ptr Base) : Base(std::move(Base)) { assert(this->Base != nullptr); } std::vector getAllFiles() const override { return Base->getAllFiles(); } std::vector getAllCompileCommands() const override { return addTargetAndMode(Base->getAllCompileCommands()); } std::vector getCompileCommands(StringRef FilePath) const override { return addTargetAndMode(Base->getCompileCommands(FilePath)); } private: std::vector addTargetAndMode(std::vector Cmds) const { for (auto &Cmd : Cmds) { if (Cmd.CommandLine.empty()) continue; addTargetAndModeForProgramName(Cmd.CommandLine, Cmd.CommandLine.front()); } return Cmds; } std::unique_ptr Base; }; } // namespace std::unique_ptr inferTargetAndDriverMode(std::unique_ptr Base) { return std::make_unique(std::move(Base)); } } // namespace tooling } // namespace clang