//===- CompilationDatabase.h - LSP Compilation Database ---------*- 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 // //===----------------------------------------------------------------------===// // // This file contains a definition of a generic compilation database that can be // used to provide information about the compilation of a given source file. It // contains generic components, leaving more complex interpretation to the // specific language servers that consume it. // //===----------------------------------------------------------------------===// #ifndef LIB_MLIR_TOOLS_LSPSERVERSUPPORT_COMPILATIONDATABASE_H_ #define LIB_MLIR_TOOLS_LSPSERVERSUPPORT_COMPILATIONDATABASE_H_ #include "mlir/Support/LLVM.h" #include "llvm/ADT/StringMap.h" #include #include namespace mlir { namespace lsp { /// This class contains a collection of compilation information for files /// provided to the language server, such as the available include directories. /// This database acts as an aggregate in-memory form of compilation databases /// used by the current language client. The textual form of a compilation /// database is a YAML file containing documents of the following form: /// /// --- !FileInfo: /// filepath: - Absolute file path of the file. /// includes: - Semi-colon delimited list of include directories. /// class CompilationDatabase { public: /// Compilation information for a specific file within the database. struct FileInfo { FileInfo() = default; FileInfo(std::vector &&includeDirs) : includeDirs(std::move(includeDirs)) {} /// The include directories available for the file. std::vector includeDirs; }; /// Construct a compilation database from the provided files containing YAML /// descriptions of the database. CompilationDatabase(ArrayRef databases); /// Get the compilation information for the provided file. const FileInfo &getFileInfo(StringRef filename) const; private: /// Load the given database file into this database. void loadDatabase(StringRef filename); /// A map of filename to file information for each known file within the /// databases. llvm::StringMap files; /// A default file info that contains basic information for use by files that /// weren't explicitly in the database. FileInfo defaultFileInfo; }; } // namespace lsp } // namespace mlir #endif // LIB_MLIR_TOOLS_LSPSERVERSUPPORT_COMPILATIONDATABASE_H_