MLIR 22.0.0git
CompilationDatabase.h
Go to the documentation of this file.
1//===- CompilationDatabase.h - LSP Compilation Database ---------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains a definition of a generic compilation database that can be
10// used to provide information about the compilation of a given source file. It
11// contains generic components, leaving more complex interpretation to the
12// specific language servers that consume it.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef MLIR_TOOLS_LSPSERVERSUPPORT_COMPILATIONDATABASE_H
17#define MLIR_TOOLS_LSPSERVERSUPPORT_COMPILATIONDATABASE_H
18
19#include "mlir/Support/LLVM.h"
20#include "llvm/ADT/StringMap.h"
21#include <memory>
22#include <string>
23#include <vector>
24
25namespace mlir {
26namespace lsp {
27/// This class contains a collection of compilation information for files
28/// provided to the language server, such as the available include directories.
29/// This database acts as an aggregate in-memory form of compilation databases
30/// used by the current language client. The textual form of a compilation
31/// database is a YAML file containing documents of the following form:
32///
33/// --- !FileInfo:
34/// filepath: <string> - Absolute file path of the file.
35/// includes: <string> - Semi-colon delimited list of include directories.
36///
38public:
39 /// Compilation information for a specific file within the database.
40 struct FileInfo {
41 FileInfo() = default;
42 FileInfo(std::vector<std::string> &&includeDirs)
43 : includeDirs(std::move(includeDirs)) {}
44
45 /// The include directories available for the file.
46 std::vector<std::string> includeDirs;
47 };
48
49 /// Construct a compilation database from the provided files containing YAML
50 /// descriptions of the database.
52
53 /// Get the compilation information for the provided file.
54 const FileInfo &getFileInfo(StringRef filename) const;
55
56private:
57 /// Load the given database file into this database.
58 void loadDatabase(StringRef filename);
59
60 /// A map of filename to file information for each known file within the
61 /// databases.
62 llvm::StringMap<FileInfo> files;
63
64 /// A default file info that contains basic information for use by files that
65 /// weren't explicitly in the database.
66 FileInfo defaultFileInfo;
67};
68} // namespace lsp
69} // namespace mlir
70
71#endif // MLIR_TOOLS_LSPSERVERSUPPORT_COMPILATIONDATABASE_H
const FileInfo & getFileInfo(StringRef filename) const
Get the compilation information for the provided file.
CompilationDatabase(ArrayRef< std::string > databases)
Construct a compilation database from the provided files containing YAML descriptions of the database...
Include the generated interface declarations.
Compilation information for a specific file within the database.
FileInfo(std::vector< std::string > &&includeDirs)
std::vector< std::string > includeDirs
The include directories available for the file.