1/*===-- clang-c/CXCompilationDatabase.h - Compilation database ---*- C -*-===*\ 2|* *| 3|* The LLVM Compiler Infrastructure *| 4|* *| 5|* This file is distributed under the University of Illinois Open Source *| 6|* License. See LICENSE.TXT for details. *| 7|* *| 8|*===----------------------------------------------------------------------===*| 9|* *| 10|* This header provides a public inferface to use CompilationDatabase without *| 11|* the full Clang C++ API. *| 12|* *| 13\*===----------------------------------------------------------------------===*/ 14 15#ifndef LLVM_CLANG_C_CXCOMPILATIONDATABASE_H 16#define LLVM_CLANG_C_CXCOMPILATIONDATABASE_H 17 18#include "clang-c/Platform.h" 19#include "clang-c/CXString.h" 20 21#ifdef __cplusplus 22extern "C" { 23#endif 24 25/** \defgroup COMPILATIONDB CompilationDatabase functions 26 * \ingroup CINDEX 27 * 28 * @{ 29 */ 30 31/** 32 * A compilation database holds all information used to compile files in a 33 * project. For each file in the database, it can be queried for the working 34 * directory or the command line used for the compiler invocation. 35 * 36 * Must be freed by \c clang_CompilationDatabase_dispose 37 */ 38typedef void * CXCompilationDatabase; 39 40/** 41 * \brief Contains the results of a search in the compilation database 42 * 43 * When searching for the compile command for a file, the compilation db can 44 * return several commands, as the file may have been compiled with 45 * different options in different places of the project. This choice of compile 46 * commands is wrapped in this opaque data structure. It must be freed by 47 * \c clang_CompileCommands_dispose. 48 */ 49typedef void * CXCompileCommands; 50 51/** 52 * \brief Represents the command line invocation to compile a specific file. 53 */ 54typedef void * CXCompileCommand; 55 56/** 57 * \brief Error codes for Compilation Database 58 */ 59typedef enum { 60 /* 61 * \brief No error occurred 62 */ 63 CXCompilationDatabase_NoError = 0, 64 65 /* 66 * \brief Database can not be loaded 67 */ 68 CXCompilationDatabase_CanNotLoadDatabase = 1 69 70} CXCompilationDatabase_Error; 71 72/** 73 * \brief Creates a compilation database from the database found in directory 74 * buildDir. For example, CMake can output a compile_commands.json which can 75 * be used to build the database. 76 * 77 * It must be freed by \c clang_CompilationDatabase_dispose. 78 */ 79CINDEX_LINKAGE CXCompilationDatabase 80clang_CompilationDatabase_fromDirectory(const char *BuildDir, 81 CXCompilationDatabase_Error *ErrorCode); 82 83/** 84 * \brief Free the given compilation database 85 */ 86CINDEX_LINKAGE void 87clang_CompilationDatabase_dispose(CXCompilationDatabase); 88 89/** 90 * \brief Find the compile commands used for a file. The compile commands 91 * must be freed by \c clang_CompileCommands_dispose. 92 */ 93CINDEX_LINKAGE CXCompileCommands 94clang_CompilationDatabase_getCompileCommands(CXCompilationDatabase, 95 const char *CompleteFileName); 96 97/** 98 * \brief Get all the compile commands in the given compilation database. 99 */ 100CINDEX_LINKAGE CXCompileCommands 101clang_CompilationDatabase_getAllCompileCommands(CXCompilationDatabase); 102 103/** 104 * \brief Free the given CompileCommands 105 */ 106CINDEX_LINKAGE void clang_CompileCommands_dispose(CXCompileCommands); 107 108/** 109 * \brief Get the number of CompileCommand we have for a file 110 */ 111CINDEX_LINKAGE unsigned 112clang_CompileCommands_getSize(CXCompileCommands); 113 114/** 115 * \brief Get the I'th CompileCommand for a file 116 * 117 * Note : 0 <= i < clang_CompileCommands_getSize(CXCompileCommands) 118 */ 119CINDEX_LINKAGE CXCompileCommand 120clang_CompileCommands_getCommand(CXCompileCommands, unsigned I); 121 122/** 123 * \brief Get the working directory where the CompileCommand was executed from 124 */ 125CINDEX_LINKAGE CXString 126clang_CompileCommand_getDirectory(CXCompileCommand); 127 128/** 129 * \brief Get the filename associated with the CompileCommand. 130 */ 131CINDEX_LINKAGE CXString 132clang_CompileCommand_getFilename(CXCompileCommand); 133 134/** 135 * \brief Get the number of arguments in the compiler invocation. 136 * 137 */ 138CINDEX_LINKAGE unsigned 139clang_CompileCommand_getNumArgs(CXCompileCommand); 140 141/** 142 * \brief Get the I'th argument value in the compiler invocations 143 * 144 * Invariant : 145 * - argument 0 is the compiler executable 146 */ 147CINDEX_LINKAGE CXString 148clang_CompileCommand_getArg(CXCompileCommand, unsigned I); 149 150/** 151 * \brief Get the number of source mappings for the compiler invocation. 152 */ 153CINDEX_LINKAGE unsigned 154clang_CompileCommand_getNumMappedSources(CXCompileCommand); 155 156/** 157 * \brief Get the I'th mapped source path for the compiler invocation. 158 */ 159CINDEX_LINKAGE CXString 160clang_CompileCommand_getMappedSourcePath(CXCompileCommand, unsigned I); 161 162/** 163 * \brief Get the I'th mapped source content for the compiler invocation. 164 */ 165CINDEX_LINKAGE CXString 166clang_CompileCommand_getMappedSourceContent(CXCompileCommand, unsigned I); 167 168/** 169 * @} 170 */ 171 172#ifdef __cplusplus 173} 174#endif 175#endif 176 177