This provides a format for externally specifying the include directories for a source file. The format of the tablegen database is exactly the same as that for PDLL, namely it includes the absolute source file name and the set of include directories. The database format is shared to simplify the infra, and also because the format itself is general enough to share. Even if we desire to expand in the future to contain the actual compilation command, nothing there is specific enough that we would need two different formats. As with PDLL, support for generating the database is added to our mlir_tablegen cmake command. Differential Revision: https://reviews.llvm.org/D125441
71 lines
2.6 KiB
C++
71 lines
2.6 KiB
C++
//===- 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 <memory>
|
|
#include <string>
|
|
|
|
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: <string> - Absolute file path of the file.
|
|
/// includes: <string> - 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<std::string> &&includeDirs)
|
|
: includeDirs(std::move(includeDirs)) {}
|
|
|
|
/// The include directories available for the file.
|
|
std::vector<std::string> includeDirs;
|
|
};
|
|
|
|
/// Construct a compilation database from the provided files containing YAML
|
|
/// descriptions of the database.
|
|
CompilationDatabase(ArrayRef<std::string> 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<FileInfo> 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_
|