blob: b853d74bf53971efdd1b223c63b39b1b464f1c32 [file] [log] [blame]
Ted Kremenekd2fa5662009-08-26 22:36:44 +00001/*===-- clang-c/Index.h - Indexing Public C Interface -------------*- 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 a Clang library for extracting *|
11|* high-level symbol information from source files without exposing the full *|
12|* Clang C++ API. *|
13|* *|
14\*===----------------------------------------------------------------------===*/
15
16#ifndef CLANG_C_INDEX_H
17#define CLANG_C_INDEX_H
18
Steve Naroff88145032009-10-27 14:35:18 +000019#include <sys/stat.h>
Chandler Carruth3d315602009-12-17 09:27:29 +000020#include <time.h>
Steve Naroff88145032009-10-27 14:35:18 +000021
Ted Kremenekd2fa5662009-08-26 22:36:44 +000022#ifdef __cplusplus
23extern "C" {
24#endif
25
Steve Naroff88145032009-10-27 14:35:18 +000026/* MSVC DLL import/export. */
John Thompson2e06fc82009-10-27 13:42:56 +000027#ifdef _MSC_VER
28 #ifdef _CINDEX_LIB_
29 #define CINDEX_LINKAGE __declspec(dllexport)
30 #else
31 #define CINDEX_LINKAGE __declspec(dllimport)
32 #endif
33#else
34 #define CINDEX_LINKAGE
35#endif
36
Steve Naroff600866c2009-08-27 19:51:58 +000037/*
38 Clang indeX abstractions. The backing store for the following API's will be
Steve Naroffb7cd17c2009-09-01 17:13:31 +000039 clangs AST file (currently based on PCH). AST files are created as follows:
Steve Naroff600866c2009-08-27 19:51:58 +000040
Steve Naroffb7cd17c2009-09-01 17:13:31 +000041 "clang -emit-ast <sourcefile.langsuffix> -o <sourcefile.ast>".
Steve Naroff600866c2009-08-27 19:51:58 +000042
Steve Naroff600866c2009-08-27 19:51:58 +000043 Naming Conventions: To avoid namespace pollution, data types are prefixed
44 with "CX" and functions are prefixed with "clang_".
45*/
Steve Naroff50398192009-08-28 15:28:48 +000046typedef void *CXIndex; /* An indexing instance. */
Steve Naroff600866c2009-08-27 19:51:58 +000047
Steve Naroff50398192009-08-28 15:28:48 +000048typedef void *CXTranslationUnit; /* A translation unit instance. */
Steve Naroff600866c2009-08-27 19:51:58 +000049
Steve Naroff88145032009-10-27 14:35:18 +000050typedef void *CXFile; /* A source file */
Steve Naroff50398192009-08-28 15:28:48 +000051typedef void *CXDecl; /* A specific declaration within a translation unit. */
Steve Narofffb570422009-09-22 19:25:29 +000052typedef void *CXStmt; /* A specific statement within a function/method */
Steve Naroff600866c2009-08-27 19:51:58 +000053
Steve Naroffc857ea42009-09-02 13:28:54 +000054/* Cursors represent declarations, definitions, and references. */
Steve Naroff89922f82009-08-31 00:59:03 +000055enum CXCursorKind {
Steve Naroff89922f82009-08-31 00:59:03 +000056 /* Declarations */
57 CXCursor_FirstDecl = 1,
Steve Naroffc857ea42009-09-02 13:28:54 +000058 CXCursor_TypedefDecl = 2,
59 CXCursor_StructDecl = 3,
60 CXCursor_UnionDecl = 4,
61 CXCursor_ClassDecl = 5,
62 CXCursor_EnumDecl = 6,
63 CXCursor_FieldDecl = 7,
64 CXCursor_EnumConstantDecl = 8,
65 CXCursor_FunctionDecl = 9,
66 CXCursor_VarDecl = 10,
67 CXCursor_ParmDecl = 11,
68 CXCursor_ObjCInterfaceDecl = 12,
69 CXCursor_ObjCCategoryDecl = 13,
70 CXCursor_ObjCProtocolDecl = 14,
71 CXCursor_ObjCPropertyDecl = 15,
72 CXCursor_ObjCIvarDecl = 16,
73 CXCursor_ObjCInstanceMethodDecl = 17,
74 CXCursor_ObjCClassMethodDecl = 18,
75 CXCursor_LastDecl = 18,
Steve Naroff89922f82009-08-31 00:59:03 +000076
Steve Naroffc857ea42009-09-02 13:28:54 +000077 /* Definitions */
78 CXCursor_FirstDefn = 32,
79 CXCursor_FunctionDefn = 32,
80 CXCursor_ObjCClassDefn = 33,
81 CXCursor_ObjCCategoryDefn = 34,
82 CXCursor_ObjCInstanceMethodDefn = 35,
83 CXCursor_ObjCClassMethodDefn = 36,
84 CXCursor_LastDefn = 36,
85
Steve Naroff89922f82009-08-31 00:59:03 +000086 /* References */
Steve Narofffb570422009-09-22 19:25:29 +000087 CXCursor_FirstRef = 40, /* Decl references */
Steve Narofff334b4e2009-09-02 18:26:48 +000088 CXCursor_ObjCSuperClassRef = 40,
89 CXCursor_ObjCProtocolRef = 41,
Steve Narofffb570422009-09-22 19:25:29 +000090 CXCursor_ObjCClassRef = 42,
91
92 CXCursor_ObjCSelectorRef = 43, /* Expression references */
93 CXCursor_ObjCIvarRef = 44,
94 CXCursor_VarRef = 45,
95 CXCursor_FunctionRef = 46,
96 CXCursor_EnumConstantRef = 47,
97 CXCursor_MemberRef = 48,
98 CXCursor_LastRef = 48,
Steve Naroff77128dd2009-09-15 20:25:34 +000099
100 /* Error conditions */
101 CXCursor_FirstInvalid = 70,
102 CXCursor_InvalidFile = 70,
103 CXCursor_NoDeclFound = 71,
104 CXCursor_NotImplemented = 72,
105 CXCursor_LastInvalid = 72
Steve Naroff600866c2009-08-27 19:51:58 +0000106};
107
Douglas Gregor735df882009-12-02 09:21:34 +0000108/**
109 * \brief Provides the contents of a file that has not yet been saved to disk.
110 *
111 * Each CXUnsavedFile instance provides the name of a file on the
112 * system along with the current contents of that file that have not
113 * yet been saved to disk.
114 */
115struct CXUnsavedFile {
116 /**
117 * \brief The file whose contents have not yet been saved.
118 *
119 * This file must already exist in the file system.
120 */
121 const char *Filename;
122
123 /**
124 * \brief A null-terminated buffer containing the unsaved contents
125 * of this file.
126 */
127 const char *Contents;
128
129 /**
130 * \brief The length of the unsaved contents of this buffer, not
131 * counting the NULL at the end of the buffer.
132 */
133 unsigned long Length;
134};
135
Steve Naroff89922f82009-08-31 00:59:03 +0000136/* A cursor into the CXTranslationUnit. */
Steve Narofffb570422009-09-22 19:25:29 +0000137
Steve Naroff89922f82009-08-31 00:59:03 +0000138typedef struct {
139 enum CXCursorKind kind;
140 CXDecl decl;
Steve Narofffb570422009-09-22 19:25:29 +0000141 CXStmt stmt; /* expression reference */
Steve Naroff89922f82009-08-31 00:59:03 +0000142} CXCursor;
143
Steve Naroff50398192009-08-28 15:28:48 +0000144/* A unique token for looking up "visible" CXDecls from a CXTranslationUnit. */
Ted Kremenek31723832010-01-11 23:56:39 +0000145typedef struct {
146 CXIndex index;
147 void *data;
148} CXEntity;
Steve Naroff600866c2009-08-27 19:51:58 +0000149
Steve Naroffef0cef62009-11-09 17:45:52 +0000150/**
151 * For functions returning a string that might or might not need
152 * to be internally allocated and freed.
153 * Use clang_getCString to access the C string value.
154 * Use clang_disposeString to free the value.
155 * Treat it as an opaque type.
156 */
157typedef struct {
158 const char *Spelling;
159 /* A 1 value indicates the clang_ indexing API needed to allocate the string
160 (and it must be freed by clang_disposeString()). */
161 int MustFreeString;
162} CXString;
163
164/* Get C string pointer from a CXString. */
165CINDEX_LINKAGE const char *clang_getCString(CXString string);
166
167/* Free CXString. */
168CINDEX_LINKAGE void clang_disposeString(CXString string);
169
Steve Naroffe56b4ba2009-10-20 14:46:24 +0000170/**
171 * \brief clang_createIndex() provides a shared context for creating
172 * translation units. It provides two options:
173 *
174 * - excludeDeclarationsFromPCH: When non-zero, allows enumeration of "local"
175 * declarations (when loading any new translation units). A "local" declaration
176 * is one that belongs in the translation unit itself and not in a precompiled
177 * header that was used by the translation unit. If zero, all declarations
178 * will be enumerated.
179 *
180 * - displayDiagnostics: when non-zero, diagnostics will be output. If zero,
181 * diagnostics will be ignored.
Steve Naroffb4ece632009-10-20 16:36:34 +0000182 *
183 * Here is an example:
184 *
185 * // excludeDeclsFromPCH = 1, displayDiagnostics = 1
186 * Idx = clang_createIndex(1, 1);
187 *
188 * // IndexTest.pch was produced with the following command:
189 * // "clang -x c IndexTest.h -emit-ast -o IndexTest.pch"
190 * TU = clang_createTranslationUnit(Idx, "IndexTest.pch");
191 *
192 * // This will load all the symbols from 'IndexTest.pch'
193 * clang_loadTranslationUnit(TU, TranslationUnitVisitor, 0);
194 * clang_disposeTranslationUnit(TU);
195 *
196 * // This will load all the symbols from 'IndexTest.c', excluding symbols
197 * // from 'IndexTest.pch'.
198 * char *args[] = { "-Xclang", "-include-pch=IndexTest.pch", 0 };
199 * TU = clang_createTranslationUnitFromSourceFile(Idx, "IndexTest.c", 2, args);
200 * clang_loadTranslationUnit(TU, TranslationUnitVisitor, 0);
201 * clang_disposeTranslationUnit(TU);
202 *
203 * This process of creating the 'pch', loading it separately, and using it (via
204 * -include-pch) allows 'excludeDeclsFromPCH' to remove redundant callbacks
205 * (which gives the indexer the same performance benefit as the compiler).
Steve Naroffe56b4ba2009-10-20 14:46:24 +0000206 */
John Thompson2e06fc82009-10-27 13:42:56 +0000207CINDEX_LINKAGE CXIndex clang_createIndex(int excludeDeclarationsFromPCH,
Steve Naroffe56b4ba2009-10-20 14:46:24 +0000208 int displayDiagnostics);
Daniel Dunbar8506dde2009-12-03 01:54:28 +0000209CINDEX_LINKAGE void clang_disposeIndex(CXIndex index);
210CINDEX_LINKAGE CXString
211clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit);
212
213/*
214 * \brief Request that AST's be generated external for API calls which parse
215 * source code on the fly, e.g. \see createTranslationUnitFromSourceFile.
216 *
217 * Note: This is for debugging purposes only, and may be removed at a later
218 * date.
219 *
220 * \param index - The index to update.
221 * \param value - The new flag value.
222 */
223CINDEX_LINKAGE void clang_setUseExternalASTGeneration(CXIndex index,
224 int value);
Steve Naroffaf08ddc2009-09-03 15:49:00 +0000225
Steve Naroffe56b4ba2009-10-20 14:46:24 +0000226/*
227 * \brief Create a translation unit from an AST file (-emit-ast).
228 */
John Thompson2e06fc82009-10-27 13:42:56 +0000229CINDEX_LINKAGE CXTranslationUnit clang_createTranslationUnit(
Steve Naroffe56b4ba2009-10-20 14:46:24 +0000230 CXIndex, const char *ast_filename
Steve Naroff600866c2009-08-27 19:51:58 +0000231);
Daniel Dunbar8506dde2009-12-03 01:54:28 +0000232
Ted Kremenek13745982009-10-19 22:15:09 +0000233/**
234 * \brief Destroy the specified CXTranslationUnit object.
235 */
John Thompson2e06fc82009-10-27 13:42:56 +0000236CINDEX_LINKAGE void clang_disposeTranslationUnit(CXTranslationUnit);
Ted Kremenek13745982009-10-19 22:15:09 +0000237
238/**
Steve Naroffe56b4ba2009-10-20 14:46:24 +0000239 * \brief Return the CXTranslationUnit for a given source file and the provided
240 * command line arguments one would pass to the compiler.
241 *
Daniel Dunbar8506dde2009-12-03 01:54:28 +0000242 * Note: The 'source_filename' argument is optional. If the caller provides a
243 * NULL pointer, the name of the source file is expected to reside in the
244 * specified command line arguments.
Ted Kremenek139ba862009-10-22 00:03:57 +0000245 *
Daniel Dunbar8506dde2009-12-03 01:54:28 +0000246 * Note: When encountered in 'clang_command_line_args', the following options
247 * are ignored:
Ted Kremenek139ba862009-10-22 00:03:57 +0000248 *
249 * '-c'
250 * '-emit-ast'
251 * '-fsyntax-only'
252 * '-o <output file>' (both '-o' and '<output file>' are ignored)
253 *
Daniel Dunbar8506dde2009-12-03 01:54:28 +0000254 *
255 * \param source_filename - The name of the source file to load, or NULL if the
256 * source file is included in clang_command_line_args.
Ted Kremenek13745982009-10-19 22:15:09 +0000257 */
John Thompson2e06fc82009-10-27 13:42:56 +0000258CINDEX_LINKAGE CXTranslationUnit clang_createTranslationUnitFromSourceFile(
Daniel Dunbar8506dde2009-12-03 01:54:28 +0000259 CXIndex CIdx,
260 const char *source_filename,
Steve Naroff5b7d8e22009-10-15 20:04:39 +0000261 int num_clang_command_line_args,
Steve Naroffe56b4ba2009-10-20 14:46:24 +0000262 const char **clang_command_line_args
Steve Naroff5b7d8e22009-10-15 20:04:39 +0000263);
Steve Naroff600866c2009-08-27 19:51:58 +0000264
265/*
266 Usage: clang_loadTranslationUnit(). Will load the toplevel declarations
267 within a translation unit, issuing a 'callback' for each one.
268
269 void printObjCInterfaceNames(CXTranslationUnit X, CXCursor C) {
270 if (clang_getCursorKind(C) == Cursor_Declaration) {
271 CXDecl D = clang_getCursorDecl(C);
272 if (clang_getDeclKind(D) == CXDecl_ObjC_interface)
273 printf("@interface %s in file %s on line %d column %d\n",
274 clang_getDeclSpelling(D), clang_getCursorSource(C),
275 clang_getCursorLine(C), clang_getCursorColumn(C));
276 }
277 }
278 static void usage {
279 clang_loadTranslationUnit(CXTranslationUnit, printObjCInterfaceNames);
Daniel Dunbar8506dde2009-12-03 01:54:28 +0000280 }
Steve Naroff600866c2009-08-27 19:51:58 +0000281*/
Steve Naroff2b8ee6c2009-09-01 15:55:40 +0000282typedef void *CXClientData;
283typedef void (*CXTranslationUnitIterator)(CXTranslationUnit, CXCursor,
284 CXClientData);
Daniel Dunbar8506dde2009-12-03 01:54:28 +0000285CINDEX_LINKAGE void clang_loadTranslationUnit(CXTranslationUnit,
286 CXTranslationUnitIterator,
287 CXClientData);
Steve Naroff600866c2009-08-27 19:51:58 +0000288
289/*
290 Usage: clang_loadDeclaration(). Will load the declaration, issuing a
291 'callback' for each declaration/reference within the respective declaration.
292
293 For interface declarations, this will index the super class, protocols,
294 ivars, methods, etc. For structure declarations, this will index the fields.
295 For functions, this will index the parameters (and body, for function
296 definitions), local declarations/references.
297
298 void getInterfaceDetails(CXDecl X, CXCursor C) {
299 switch (clang_getCursorKind(C)) {
300 case Cursor_ObjC_ClassRef:
301 CXDecl SuperClass = clang_getCursorDecl(C);
302 case Cursor_ObjC_ProtocolRef:
303 CXDecl AdoptsProtocol = clang_getCursorDecl(C);
304 case Cursor_Declaration:
305 CXDecl AnIvarOrMethod = clang_getCursorDecl(C);
306 }
307 }
308 static void usage() {
309 if (clang_getDeclKind(D) == CXDecl_ObjC_interface) {
310 clang_loadDeclaration(D, getInterfaceDetails);
311 }
312 }
313*/
Steve Naroffc857ea42009-09-02 13:28:54 +0000314typedef void (*CXDeclIterator)(CXDecl, CXCursor, CXClientData);
Steve Naroff89922f82009-08-31 00:59:03 +0000315
John Thompson2e06fc82009-10-27 13:42:56 +0000316CINDEX_LINKAGE void clang_loadDeclaration(CXDecl, CXDeclIterator, CXClientData);
Steve Naroff600866c2009-08-27 19:51:58 +0000317
Steve Naroff50398192009-08-28 15:28:48 +0000318/*
Steve Naroff88145032009-10-27 14:35:18 +0000319 * CXFile Operations.
320 */
Douglas Gregor08b0e8d2009-10-31 15:48:08 +0000321CINDEX_LINKAGE const char *clang_getFileName(CXFile SFile);
322CINDEX_LINKAGE time_t clang_getFileTime(CXFile SFile);
Steve Naroff88145032009-10-27 14:35:18 +0000323
324/*
Steve Naroff50398192009-08-28 15:28:48 +0000325 * CXEntity Operations.
326 */
Ted Kremenek31723832010-01-11 23:56:39 +0000327
328/* clang_getDeclaration() maps from a CXEntity to the matching CXDecl (if any)
329 * in a specified translation unit. */
330CINDEX_LINKAGE CXDecl clang_getDeclaration(CXEntity, CXTranslationUnit);
331
Ted Kremenek1b6869a2010-01-05 22:06:45 +0000332CINDEX_LINKAGE const char *clang_getUSR(CXEntity);
Steve Naroff50398192009-08-28 15:28:48 +0000333/*
334 * CXDecl Operations.
335 */
John Thompson2e06fc82009-10-27 13:42:56 +0000336CINDEX_LINKAGE CXCursor clang_getCursorFromDecl(CXDecl);
Ted Kremenek31723832010-01-11 23:56:39 +0000337CINDEX_LINKAGE CXEntity clang_getEntityFromDecl(CXIndex, CXDecl);
Steve Naroffef0cef62009-11-09 17:45:52 +0000338CINDEX_LINKAGE CXString clang_getDeclSpelling(CXDecl);
John Thompson2e06fc82009-10-27 13:42:56 +0000339CINDEX_LINKAGE unsigned clang_getDeclLine(CXDecl);
340CINDEX_LINKAGE unsigned clang_getDeclColumn(CXDecl);
Ted Kremenek6ab9db12010-01-08 17:11:32 +0000341CINDEX_LINKAGE const char *clang_getDeclSource(CXDecl); /* deprecate */
Steve Naroff88145032009-10-27 14:35:18 +0000342CINDEX_LINKAGE CXFile clang_getDeclSourceFile(CXDecl);
Steve Naroff699a07d2009-09-25 21:32:34 +0000343
Ted Kremenekfe6fd3d2010-01-05 23:18:49 +0000344typedef struct CXSourceLineColumn {
345 unsigned line;
346 unsigned column;
347} CXSourceLineColumn;
348
349typedef struct CXDeclExtent {
350 CXSourceLineColumn begin;
351 CXSourceLineColumn end;
352} CXSourceExtent;
353
Daniel Dunbar3aacd532010-01-06 06:51:48 +0000354/* clang_getDeclExtent() returns the physical extent of a declaration. The
355 * beginning line/column pair points to the start of the first token in the
Ted Kremenekd8210652010-01-06 23:43:31 +0000356 * declaration, and the ending line/column pair points to the last character in
357 * the last token of the declaration.
Ted Kremenekfe6fd3d2010-01-05 23:18:49 +0000358 */
Daniel Dunbar3aacd532010-01-06 06:51:48 +0000359CINDEX_LINKAGE CXSourceExtent clang_getDeclExtent(CXDecl);
Ted Kremenekfe6fd3d2010-01-05 23:18:49 +0000360
Steve Naroff50398192009-08-28 15:28:48 +0000361/*
362 * CXCursor Operations.
363 */
Steve Naroff6a6de8b2009-10-21 13:56:23 +0000364/**
365 Usage: clang_getCursor() will translate a source/line/column position
366 into an AST cursor (to derive semantic information from the source code).
Steve Naroff6a6de8b2009-10-21 13:56:23 +0000367 */
Daniel Dunbar8506dde2009-12-03 01:54:28 +0000368CINDEX_LINKAGE CXCursor clang_getCursor(CXTranslationUnit,
369 const char *source_name,
370 unsigned line, unsigned column);
Ted Kremenek73885552009-11-17 19:28:59 +0000371
372CINDEX_LINKAGE CXCursor clang_getNullCursor(void);
Ted Kremenekfbcb2b72009-10-22 17:22:53 +0000373
John Thompson2e06fc82009-10-27 13:42:56 +0000374CINDEX_LINKAGE enum CXCursorKind clang_getCursorKind(CXCursor);
375CINDEX_LINKAGE unsigned clang_isDeclaration(enum CXCursorKind);
376CINDEX_LINKAGE unsigned clang_isReference(enum CXCursorKind);
377CINDEX_LINKAGE unsigned clang_isDefinition(enum CXCursorKind);
378CINDEX_LINKAGE unsigned clang_isInvalid(enum CXCursorKind);
Steve Naroff600866c2009-08-27 19:51:58 +0000379
Ted Kremenek73885552009-11-17 19:28:59 +0000380CINDEX_LINKAGE unsigned clang_equalCursors(CXCursor, CXCursor);
381
John Thompson2e06fc82009-10-27 13:42:56 +0000382CINDEX_LINKAGE unsigned clang_getCursorLine(CXCursor);
383CINDEX_LINKAGE unsigned clang_getCursorColumn(CXCursor);
Steve Naroffef0cef62009-11-09 17:45:52 +0000384CINDEX_LINKAGE CXString clang_getCursorSpelling(CXCursor);
Steve Naroff88145032009-10-27 14:35:18 +0000385CINDEX_LINKAGE const char *clang_getCursorSource(CXCursor); /* deprecate */
386CINDEX_LINKAGE CXFile clang_getCursorSourceFile(CXCursor);
Steve Narofff334b4e2009-09-02 18:26:48 +0000387
Steve Naroff4ade6d62009-09-23 17:52:52 +0000388/* for debug/testing */
John Thompson2e06fc82009-10-27 13:42:56 +0000389CINDEX_LINKAGE const char *clang_getCursorKindSpelling(enum CXCursorKind Kind);
390CINDEX_LINKAGE void clang_getDefinitionSpellingAndExtent(CXCursor,
Steve Naroff4ade6d62009-09-23 17:52:52 +0000391 const char **startBuf,
392 const char **endBuf,
393 unsigned *startLine,
394 unsigned *startColumn,
395 unsigned *endLine,
396 unsigned *endColumn);
Steve Naroff600866c2009-08-27 19:51:58 +0000397
Steve Naroff50398192009-08-28 15:28:48 +0000398/*
Chris Lattner459789b2009-09-16 20:18:54 +0000399 * If CXCursorKind == Cursor_Reference, then this will return the referenced
400 * declaration.
Steve Naroff50398192009-08-28 15:28:48 +0000401 * If CXCursorKind == Cursor_Declaration, then this will return the declaration.
402 */
John Thompson2e06fc82009-10-27 13:42:56 +0000403CINDEX_LINKAGE CXDecl clang_getCursorDecl(CXCursor);
Ted Kremenekd2fa5662009-08-26 22:36:44 +0000404
Douglas Gregor0c8296d2009-11-07 00:00:49 +0000405/**
406 * \brief A semantic string that describes a code-completion result.
407 *
408 * A semantic string that describes the formatting of a code-completion
409 * result as a single "template" of text that should be inserted into the
410 * source buffer when a particular code-completion result is selected.
411 * Each semantic string is made up of some number of "chunks", each of which
412 * contains some text along with a description of what that text means, e.g.,
413 * the name of the entity being referenced, whether the text chunk is part of
414 * the template, or whether it is a "placeholder" that the user should replace
415 * with actual code,of a specific kind. See \c CXCompletionChunkKind for a
416 * description of the different kinds of chunks.
417 */
418typedef void *CXCompletionString;
419
420/**
421 * \brief A single result of code completion.
422 */
423typedef struct {
424 /**
425 * \brief The kind of entity that this completion refers to.
426 *
427 * The cursor kind will be a macro, keyword, or a declaration (one of the
428 * *Decl cursor kinds), describing the entity that the completion is
429 * referring to.
430 *
431 * \todo In the future, we would like to provide a full cursor, to allow
432 * the client to extract additional information from declaration.
433 */
434 enum CXCursorKind CursorKind;
435
436 /**
437 * \brief The code-completion string that describes how to insert this
438 * code-completion result into the editing buffer.
439 */
440 CXCompletionString CompletionString;
441} CXCompletionResult;
442
443/**
444 * \brief Describes a single piece of text within a code-completion string.
445 *
446 * Each "chunk" within a code-completion string (\c CXCompletionString) is
447 * either a piece of text with a specific "kind" that describes how that text
448 * should be interpreted by the client or is another completion string.
449 */
450enum CXCompletionChunkKind {
451 /**
452 * \brief A code-completion string that describes "optional" text that
453 * could be a part of the template (but is not required).
454 *
455 * The Optional chunk is the only kind of chunk that has a code-completion
456 * string for its representation, which is accessible via
457 * \c clang_getCompletionChunkCompletionString(). The code-completion string
458 * describes an additional part of the template that is completely optional.
459 * For example, optional chunks can be used to describe the placeholders for
460 * arguments that match up with defaulted function parameters, e.g. given:
461 *
462 * \code
463 * void f(int x, float y = 3.14, double z = 2.71828);
464 * \endcode
465 *
466 * The code-completion string for this function would contain:
467 * - a TypedText chunk for "f".
468 * - a LeftParen chunk for "(".
469 * - a Placeholder chunk for "int x"
470 * - an Optional chunk containing the remaining defaulted arguments, e.g.,
471 * - a Comma chunk for ","
472 * - a Placeholder chunk for "float x"
473 * - an Optional chunk containing the last defaulted argument:
474 * - a Comma chunk for ","
475 * - a Placeholder chunk for "double z"
476 * - a RightParen chunk for ")"
477 *
478 * There are many ways two handle Optional chunks. Two simple approaches are:
479 * - Completely ignore optional chunks, in which case the template for the
480 * function "f" would only include the first parameter ("int x").
481 * - Fully expand all optional chunks, in which case the template for the
482 * function "f" would have all of the parameters.
483 */
484 CXCompletionChunk_Optional,
485 /**
486 * \brief Text that a user would be expected to type to get this
487 * code-completion result.
488 *
489 * There will be exactly one "typed text" chunk in a semantic string, which
490 * will typically provide the spelling of a keyword or the name of a
491 * declaration that could be used at the current code point. Clients are
492 * expected to filter the code-completion results based on the text in this
493 * chunk.
494 */
495 CXCompletionChunk_TypedText,
496 /**
497 * \brief Text that should be inserted as part of a code-completion result.
498 *
499 * A "text" chunk represents text that is part of the template to be
500 * inserted into user code should this particular code-completion result
501 * be selected.
502 */
503 CXCompletionChunk_Text,
504 /**
505 * \brief Placeholder text that should be replaced by the user.
506 *
507 * A "placeholder" chunk marks a place where the user should insert text
508 * into the code-completion template. For example, placeholders might mark
509 * the function parameters for a function declaration, to indicate that the
510 * user should provide arguments for each of those parameters. The actual
511 * text in a placeholder is a suggestion for the text to display before
512 * the user replaces the placeholder with real code.
513 */
514 CXCompletionChunk_Placeholder,
515 /**
516 * \brief Informative text that should be displayed but never inserted as
517 * part of the template.
518 *
519 * An "informative" chunk contains annotations that can be displayed to
520 * help the user decide whether a particular code-completion result is the
521 * right option, but which is not part of the actual template to be inserted
522 * by code completion.
523 */
524 CXCompletionChunk_Informative,
525 /**
526 * \brief Text that describes the current parameter when code-completion is
527 * referring to function call, message send, or template specialization.
528 *
529 * A "current parameter" chunk occurs when code-completion is providing
530 * information about a parameter corresponding to the argument at the
531 * code-completion point. For example, given a function
532 *
533 * \code
534 * int add(int x, int y);
535 * \endcode
536 *
537 * and the source code \c add(, where the code-completion point is after the
538 * "(", the code-completion string will contain a "current parameter" chunk
539 * for "int x", indicating that the current argument will initialize that
540 * parameter. After typing further, to \c add(17, (where the code-completion
541 * point is after the ","), the code-completion string will contain a
542 * "current paremeter" chunk to "int y".
543 */
544 CXCompletionChunk_CurrentParameter,
545 /**
546 * \brief A left parenthesis ('('), used to initiate a function call or
547 * signal the beginning of a function parameter list.
548 */
549 CXCompletionChunk_LeftParen,
550 /**
551 * \brief A right parenthesis (')'), used to finish a function call or
552 * signal the end of a function parameter list.
553 */
554 CXCompletionChunk_RightParen,
555 /**
556 * \brief A left bracket ('[').
557 */
558 CXCompletionChunk_LeftBracket,
559 /**
560 * \brief A right bracket (']').
561 */
562 CXCompletionChunk_RightBracket,
563 /**
564 * \brief A left brace ('{').
565 */
566 CXCompletionChunk_LeftBrace,
567 /**
568 * \brief A right brace ('}').
569 */
570 CXCompletionChunk_RightBrace,
571 /**
572 * \brief A left angle bracket ('<').
573 */
574 CXCompletionChunk_LeftAngle,
575 /**
576 * \brief A right angle bracket ('>').
577 */
578 CXCompletionChunk_RightAngle,
579 /**
580 * \brief A comma separator (',').
581 */
Douglas Gregorff5ce6e2009-12-18 18:53:37 +0000582 CXCompletionChunk_Comma,
583 /**
584 * \brief Text that specifies the result type of a given result.
585 *
586 * This special kind of informative chunk is not meant to be inserted into
587 * the text buffer. Rather, it is meant to illustrate the type that an
588 * expression using the given completion string would have.
589 */
Douglas Gregor01dfea02010-01-10 23:08:15 +0000590 CXCompletionChunk_ResultType,
591 /**
592 * \brief A colon (':').
593 */
594 CXCompletionChunk_Colon,
595 /**
596 * \brief A semicolon (';').
597 */
598 CXCompletionChunk_SemiColon,
599 /**
600 * \brief An '=' sign.
601 */
602 CXCompletionChunk_Equal,
603 /**
604 * Horizontal space (' ').
605 */
606 CXCompletionChunk_HorizontalSpace,
607 /**
608 * Vertical space ('\n'), after which it is generally a good idea to
609 * perform indentation.
610 */
611 CXCompletionChunk_VerticalSpace
Douglas Gregor0c8296d2009-11-07 00:00:49 +0000612};
Douglas Gregor0c8296d2009-11-07 00:00:49 +0000613
614/**
615 * \brief Determine the kind of a particular chunk within a completion string.
616 *
617 * \param completion_string the completion string to query.
618 *
619 * \param chunk_number the 0-based index of the chunk in the completion string.
620 *
621 * \returns the kind of the chunk at the index \c chunk_number.
622 */
623CINDEX_LINKAGE enum CXCompletionChunkKind
624clang_getCompletionChunkKind(CXCompletionString completion_string,
625 unsigned chunk_number);
626
627/**
628 * \brief Retrieve the text associated with a particular chunk within a
629 * completion string.
630 *
631 * \param completion_string the completion string to query.
632 *
633 * \param chunk_number the 0-based index of the chunk in the completion string.
634 *
635 * \returns the text associated with the chunk at index \c chunk_number.
636 */
637CINDEX_LINKAGE const char *
638clang_getCompletionChunkText(CXCompletionString completion_string,
639 unsigned chunk_number);
640
641/**
642 * \brief Retrieve the completion string associated with a particular chunk
643 * within a completion string.
644 *
645 * \param completion_string the completion string to query.
646 *
647 * \param chunk_number the 0-based index of the chunk in the completion string.
648 *
649 * \returns the completion string associated with the chunk at index
650 * \c chunk_number, or NULL if that chunk is not represented by a completion
651 * string.
652 */
653CINDEX_LINKAGE CXCompletionString
654clang_getCompletionChunkCompletionString(CXCompletionString completion_string,
655 unsigned chunk_number);
656
657/**
658 * \brief Retrieve the number of chunks in the given code-completion string.
659 */
660CINDEX_LINKAGE unsigned
661clang_getNumCompletionChunks(CXCompletionString completion_string);
662
663/**
Douglas Gregorec6762c2009-12-18 16:20:58 +0000664 * \brief Contains the results of code-completion.
665 *
666 * This data structure contains the results of code completion, as
667 * produced by \c clang_codeComplete. Its contents must be freed by
668 * \c clang_disposeCodeCompleteResults.
669 */
670typedef struct {
671 /**
672 * \brief The code-completion results.
673 */
674 CXCompletionResult *Results;
675
676 /**
677 * \brief The number of code-completion results stored in the
678 * \c Results array.
679 */
680 unsigned NumResults;
681} CXCodeCompleteResults;
682
683/**
Douglas Gregor0c8296d2009-11-07 00:00:49 +0000684 * \brief Perform code completion at a given location in a source file.
685 *
686 * This function performs code completion at a particular file, line, and
687 * column within source code, providing results that suggest potential
688 * code snippets based on the context of the completion. The basic model
689 * for code completion is that Clang will parse a complete source file,
690 * performing syntax checking up to the location where code-completion has
691 * been requested. At that point, a special code-completion token is passed
692 * to the parser, which recognizes this token and determines, based on the
693 * current location in the C/Objective-C/C++ grammar and the state of
694 * semantic analysis, what completions to provide. These completions are
Douglas Gregorec6762c2009-12-18 16:20:58 +0000695 * returned via a new \c CXCodeCompleteResults structure.
Douglas Gregor0c8296d2009-11-07 00:00:49 +0000696 *
697 * Code completion itself is meant to be triggered by the client when the
698 * user types punctuation characters or whitespace, at which point the
699 * code-completion location will coincide with the cursor. For example, if \c p
700 * is a pointer, code-completion might be triggered after the "-" and then
701 * after the ">" in \c p->. When the code-completion location is afer the ">",
702 * the completion results will provide, e.g., the members of the struct that
703 * "p" points to. The client is responsible for placing the cursor at the
704 * beginning of the token currently being typed, then filtering the results
705 * based on the contents of the token. For example, when code-completing for
706 * the expression \c p->get, the client should provide the location just after
707 * the ">" (e.g., pointing at the "g") to this code-completion hook. Then, the
708 * client can filter the results based on the current token text ("get"), only
709 * showing those results that start with "get". The intent of this interface
Douglas Gregorec6762c2009-12-18 16:20:58 +0000710 * is to separate the relatively high-latency acquisition of code-completion
Douglas Gregor0c8296d2009-11-07 00:00:49 +0000711 * results from the filtering of results on a per-character basis, which must
712 * have a lower latency.
713 *
714 * \param CIdx the \c CXIndex instance that will be used to perform code
715 * completion.
716 *
Daniel Dunbar8506dde2009-12-03 01:54:28 +0000717 * \param source_filename the name of the source file that should be parsed to
718 * perform code-completion. This source file must be the same as or include the
719 * filename described by \p complete_filename, or no code-completion results
720 * will be produced. NOTE: One can also specify NULL for this argument if the
721 * source file is included in command_line_args.
Douglas Gregor0c8296d2009-11-07 00:00:49 +0000722 *
723 * \param num_command_line_args the number of command-line arguments stored in
724 * \p command_line_args.
725 *
726 * \param command_line_args the command-line arguments to pass to the Clang
727 * compiler to build the given source file. This should include all of the
728 * necessary include paths, language-dialect switches, precompiled header
729 * includes, etc., but should not include any information specific to
730 * code completion.
731 *
Douglas Gregor735df882009-12-02 09:21:34 +0000732 * \param num_unsaved_files the number of unsaved file entries in \p
733 * unsaved_files.
734 *
735 * \param unsaved_files the files that have not yet been saved to disk
736 * but may be required for code completion, including the contents of
737 * those files.
738 *
Douglas Gregor0c8296d2009-11-07 00:00:49 +0000739 * \param complete_filename the name of the source file where code completion
740 * should be performed. In many cases, this name will be the same as the
741 * source filename. However, the completion filename may also be a file
742 * included by the source file, which is required when producing
743 * code-completion results for a header.
744 *
745 * \param complete_line the line at which code-completion should occur.
746 *
747 * \param complete_column the column at which code-completion should occur.
748 * Note that the column should point just after the syntactic construct that
749 * initiated code completion, and not in the middle of a lexical token.
750 *
Douglas Gregorec6762c2009-12-18 16:20:58 +0000751 * \returns if successful, a new CXCodeCompleteResults structure
752 * containing code-completion results, which should eventually be
753 * freed with \c clang_disposeCodeCompleteResults(). If code
754 * completion fails, returns NULL.
Douglas Gregor0c8296d2009-11-07 00:00:49 +0000755 */
Douglas Gregorec6762c2009-12-18 16:20:58 +0000756CINDEX_LINKAGE
757CXCodeCompleteResults *clang_codeComplete(CXIndex CIdx,
758 const char *source_filename,
759 int num_command_line_args,
760 const char **command_line_args,
761 unsigned num_unsaved_files,
762 struct CXUnsavedFile *unsaved_files,
763 const char *complete_filename,
764 unsigned complete_line,
765 unsigned complete_column);
766
767/**
768 * \brief Free the given set of code-completion results.
769 */
770CINDEX_LINKAGE
771void clang_disposeCodeCompleteResults(CXCodeCompleteResults *Results);
Douglas Gregor0c8296d2009-11-07 00:00:49 +0000772
Ted Kremenekd2fa5662009-08-26 22:36:44 +0000773#ifdef __cplusplus
774}
775#endif
776#endif
777