Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
/*===-- clang-c/CXDiagnostic.h - C Index Diagnostics --------------*- C -*-===*\
2
|*                                                                            *|
3
|* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
4
|* Exceptions.                                                                *|
5
|* See https://llvm.org/LICENSE.txt for license information.                  *|
6
|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
7
|*                                                                            *|
8
|*===----------------------------------------------------------------------===*|
9
|*                                                                            *|
10
|* This header provides the interface to C Index diagnostics.                 *|
11
|*                                                                            *|
12
\*===----------------------------------------------------------------------===*/
13
 
14
#ifndef LLVM_CLANG_C_CXDIAGNOSTIC_H
15
#define LLVM_CLANG_C_CXDIAGNOSTIC_H
16
 
17
#include "clang-c/CXSourceLocation.h"
18
#include "clang-c/CXString.h"
19
#include "clang-c/ExternC.h"
20
#include "clang-c/Platform.h"
21
 
22
LLVM_CLANG_C_EXTERN_C_BEGIN
23
 
24
/**
25
 * \defgroup CINDEX_DIAG Diagnostic reporting
26
 *
27
 * @{
28
 */
29
 
30
/**
31
 * Describes the severity of a particular diagnostic.
32
 */
33
enum CXDiagnosticSeverity {
34
  /**
35
   * A diagnostic that has been suppressed, e.g., by a command-line
36
   * option.
37
   */
38
  CXDiagnostic_Ignored = 0,
39
 
40
  /**
41
   * This diagnostic is a note that should be attached to the
42
   * previous (non-note) diagnostic.
43
   */
44
  CXDiagnostic_Note = 1,
45
 
46
  /**
47
   * This diagnostic indicates suspicious code that may not be
48
   * wrong.
49
   */
50
  CXDiagnostic_Warning = 2,
51
 
52
  /**
53
   * This diagnostic indicates that the code is ill-formed.
54
   */
55
  CXDiagnostic_Error = 3,
56
 
57
  /**
58
   * This diagnostic indicates that the code is ill-formed such
59
   * that future parser recovery is unlikely to produce useful
60
   * results.
61
   */
62
  CXDiagnostic_Fatal = 4
63
};
64
 
65
/**
66
 * A single diagnostic, containing the diagnostic's severity,
67
 * location, text, source ranges, and fix-it hints.
68
 */
69
typedef void *CXDiagnostic;
70
 
71
/**
72
 * A group of CXDiagnostics.
73
 */
74
typedef void *CXDiagnosticSet;
75
 
76
/**
77
 * Determine the number of diagnostics in a CXDiagnosticSet.
78
 */
79
CINDEX_LINKAGE unsigned clang_getNumDiagnosticsInSet(CXDiagnosticSet Diags);
80
 
81
/**
82
 * Retrieve a diagnostic associated with the given CXDiagnosticSet.
83
 *
84
 * \param Diags the CXDiagnosticSet to query.
85
 * \param Index the zero-based diagnostic number to retrieve.
86
 *
87
 * \returns the requested diagnostic. This diagnostic must be freed
88
 * via a call to \c clang_disposeDiagnostic().
89
 */
90
CINDEX_LINKAGE CXDiagnostic clang_getDiagnosticInSet(CXDiagnosticSet Diags,
91
                                                     unsigned Index);
92
 
93
/**
94
 * Describes the kind of error that occurred (if any) in a call to
95
 * \c clang_loadDiagnostics.
96
 */
97
enum CXLoadDiag_Error {
98
  /**
99
   * Indicates that no error occurred.
100
   */
101
  CXLoadDiag_None = 0,
102
 
103
  /**
104
   * Indicates that an unknown error occurred while attempting to
105
   * deserialize diagnostics.
106
   */
107
  CXLoadDiag_Unknown = 1,
108
 
109
  /**
110
   * Indicates that the file containing the serialized diagnostics
111
   * could not be opened.
112
   */
113
  CXLoadDiag_CannotLoad = 2,
114
 
115
  /**
116
   * Indicates that the serialized diagnostics file is invalid or
117
   * corrupt.
118
   */
119
  CXLoadDiag_InvalidFile = 3
120
};
121
 
122
/**
123
 * Deserialize a set of diagnostics from a Clang diagnostics bitcode
124
 * file.
125
 *
126
 * \param file The name of the file to deserialize.
127
 * \param error A pointer to a enum value recording if there was a problem
128
 *        deserializing the diagnostics.
129
 * \param errorString A pointer to a CXString for recording the error string
130
 *        if the file was not successfully loaded.
131
 *
132
 * \returns A loaded CXDiagnosticSet if successful, and NULL otherwise.  These
133
 * diagnostics should be released using clang_disposeDiagnosticSet().
134
 */
135
CINDEX_LINKAGE CXDiagnosticSet clang_loadDiagnostics(
136
    const char *file, enum CXLoadDiag_Error *error, CXString *errorString);
137
 
138
/**
139
 * Release a CXDiagnosticSet and all of its contained diagnostics.
140
 */
141
CINDEX_LINKAGE void clang_disposeDiagnosticSet(CXDiagnosticSet Diags);
142
 
143
/**
144
 * Retrieve the child diagnostics of a CXDiagnostic.
145
 *
146
 * This CXDiagnosticSet does not need to be released by
147
 * clang_disposeDiagnosticSet.
148
 */
149
CINDEX_LINKAGE CXDiagnosticSet clang_getChildDiagnostics(CXDiagnostic D);
150
 
151
/**
152
 * Destroy a diagnostic.
153
 */
154
CINDEX_LINKAGE void clang_disposeDiagnostic(CXDiagnostic Diagnostic);
155
 
156
/**
157
 * Options to control the display of diagnostics.
158
 *
159
 * The values in this enum are meant to be combined to customize the
160
 * behavior of \c clang_formatDiagnostic().
161
 */
162
enum CXDiagnosticDisplayOptions {
163
  /**
164
   * Display the source-location information where the
165
   * diagnostic was located.
166
   *
167
   * When set, diagnostics will be prefixed by the file, line, and
168
   * (optionally) column to which the diagnostic refers. For example,
169
   *
170
   * \code
171
   * test.c:28: warning: extra tokens at end of #endif directive
172
   * \endcode
173
   *
174
   * This option corresponds to the clang flag \c -fshow-source-location.
175
   */
176
  CXDiagnostic_DisplaySourceLocation = 0x01,
177
 
178
  /**
179
   * If displaying the source-location information of the
180
   * diagnostic, also include the column number.
181
   *
182
   * This option corresponds to the clang flag \c -fshow-column.
183
   */
184
  CXDiagnostic_DisplayColumn = 0x02,
185
 
186
  /**
187
   * If displaying the source-location information of the
188
   * diagnostic, also include information about source ranges in a
189
   * machine-parsable format.
190
   *
191
   * This option corresponds to the clang flag
192
   * \c -fdiagnostics-print-source-range-info.
193
   */
194
  CXDiagnostic_DisplaySourceRanges = 0x04,
195
 
196
  /**
197
   * Display the option name associated with this diagnostic, if any.
198
   *
199
   * The option name displayed (e.g., -Wconversion) will be placed in brackets
200
   * after the diagnostic text. This option corresponds to the clang flag
201
   * \c -fdiagnostics-show-option.
202
   */
203
  CXDiagnostic_DisplayOption = 0x08,
204
 
205
  /**
206
   * Display the category number associated with this diagnostic, if any.
207
   *
208
   * The category number is displayed within brackets after the diagnostic text.
209
   * This option corresponds to the clang flag
210
   * \c -fdiagnostics-show-category=id.
211
   */
212
  CXDiagnostic_DisplayCategoryId = 0x10,
213
 
214
  /**
215
   * Display the category name associated with this diagnostic, if any.
216
   *
217
   * The category name is displayed within brackets after the diagnostic text.
218
   * This option corresponds to the clang flag
219
   * \c -fdiagnostics-show-category=name.
220
   */
221
  CXDiagnostic_DisplayCategoryName = 0x20
222
};
223
 
224
/**
225
 * Format the given diagnostic in a manner that is suitable for display.
226
 *
227
 * This routine will format the given diagnostic to a string, rendering
228
 * the diagnostic according to the various options given. The
229
 * \c clang_defaultDiagnosticDisplayOptions() function returns the set of
230
 * options that most closely mimics the behavior of the clang compiler.
231
 *
232
 * \param Diagnostic The diagnostic to print.
233
 *
234
 * \param Options A set of options that control the diagnostic display,
235
 * created by combining \c CXDiagnosticDisplayOptions values.
236
 *
237
 * \returns A new string containing for formatted diagnostic.
238
 */
239
CINDEX_LINKAGE CXString clang_formatDiagnostic(CXDiagnostic Diagnostic,
240
                                               unsigned Options);
241
 
242
/**
243
 * Retrieve the set of display options most similar to the
244
 * default behavior of the clang compiler.
245
 *
246
 * \returns A set of display options suitable for use with \c
247
 * clang_formatDiagnostic().
248
 */
249
CINDEX_LINKAGE unsigned clang_defaultDiagnosticDisplayOptions(void);
250
 
251
/**
252
 * Determine the severity of the given diagnostic.
253
 */
254
CINDEX_LINKAGE enum CXDiagnosticSeverity
255
    clang_getDiagnosticSeverity(CXDiagnostic);
256
 
257
/**
258
 * Retrieve the source location of the given diagnostic.
259
 *
260
 * This location is where Clang would print the caret ('^') when
261
 * displaying the diagnostic on the command line.
262
 */
263
CINDEX_LINKAGE CXSourceLocation clang_getDiagnosticLocation(CXDiagnostic);
264
 
265
/**
266
 * Retrieve the text of the given diagnostic.
267
 */
268
CINDEX_LINKAGE CXString clang_getDiagnosticSpelling(CXDiagnostic);
269
 
270
/**
271
 * Retrieve the name of the command-line option that enabled this
272
 * diagnostic.
273
 *
274
 * \param Diag The diagnostic to be queried.
275
 *
276
 * \param Disable If non-NULL, will be set to the option that disables this
277
 * diagnostic (if any).
278
 *
279
 * \returns A string that contains the command-line option used to enable this
280
 * warning, such as "-Wconversion" or "-pedantic".
281
 */
282
CINDEX_LINKAGE CXString clang_getDiagnosticOption(CXDiagnostic Diag,
283
                                                  CXString *Disable);
284
 
285
/**
286
 * Retrieve the category number for this diagnostic.
287
 *
288
 * Diagnostics can be categorized into groups along with other, related
289
 * diagnostics (e.g., diagnostics under the same warning flag). This routine
290
 * retrieves the category number for the given diagnostic.
291
 *
292
 * \returns The number of the category that contains this diagnostic, or zero
293
 * if this diagnostic is uncategorized.
294
 */
295
CINDEX_LINKAGE unsigned clang_getDiagnosticCategory(CXDiagnostic);
296
 
297
/**
298
 * Retrieve the name of a particular diagnostic category.  This
299
 *  is now deprecated.  Use clang_getDiagnosticCategoryText()
300
 *  instead.
301
 *
302
 * \param Category A diagnostic category number, as returned by
303
 * \c clang_getDiagnosticCategory().
304
 *
305
 * \returns The name of the given diagnostic category.
306
 */
307
CINDEX_DEPRECATED CINDEX_LINKAGE CXString
308
clang_getDiagnosticCategoryName(unsigned Category);
309
 
310
/**
311
 * Retrieve the diagnostic category text for a given diagnostic.
312
 *
313
 * \returns The text of the given diagnostic category.
314
 */
315
CINDEX_LINKAGE CXString clang_getDiagnosticCategoryText(CXDiagnostic);
316
 
317
/**
318
 * Determine the number of source ranges associated with the given
319
 * diagnostic.
320
 */
321
CINDEX_LINKAGE unsigned clang_getDiagnosticNumRanges(CXDiagnostic);
322
 
323
/**
324
 * Retrieve a source range associated with the diagnostic.
325
 *
326
 * A diagnostic's source ranges highlight important elements in the source
327
 * code. On the command line, Clang displays source ranges by
328
 * underlining them with '~' characters.
329
 *
330
 * \param Diagnostic the diagnostic whose range is being extracted.
331
 *
332
 * \param Range the zero-based index specifying which range to
333
 *
334
 * \returns the requested source range.
335
 */
336
CINDEX_LINKAGE CXSourceRange clang_getDiagnosticRange(CXDiagnostic Diagnostic,
337
                                                      unsigned Range);
338
 
339
/**
340
 * Determine the number of fix-it hints associated with the
341
 * given diagnostic.
342
 */
343
CINDEX_LINKAGE unsigned clang_getDiagnosticNumFixIts(CXDiagnostic Diagnostic);
344
 
345
/**
346
 * Retrieve the replacement information for a given fix-it.
347
 *
348
 * Fix-its are described in terms of a source range whose contents
349
 * should be replaced by a string. This approach generalizes over
350
 * three kinds of operations: removal of source code (the range covers
351
 * the code to be removed and the replacement string is empty),
352
 * replacement of source code (the range covers the code to be
353
 * replaced and the replacement string provides the new code), and
354
 * insertion (both the start and end of the range point at the
355
 * insertion location, and the replacement string provides the text to
356
 * insert).
357
 *
358
 * \param Diagnostic The diagnostic whose fix-its are being queried.
359
 *
360
 * \param FixIt The zero-based index of the fix-it.
361
 *
362
 * \param ReplacementRange The source range whose contents will be
363
 * replaced with the returned replacement string. Note that source
364
 * ranges are half-open ranges [a, b), so the source code should be
365
 * replaced from a and up to (but not including) b.
366
 *
367
 * \returns A string containing text that should be replace the source
368
 * code indicated by the \c ReplacementRange.
369
 */
370
CINDEX_LINKAGE CXString clang_getDiagnosticFixIt(
371
    CXDiagnostic Diagnostic, unsigned FixIt, CXSourceRange *ReplacementRange);
372
 
373
/**
374
 * @}
375
 */
376
 
377
LLVM_CLANG_C_EXTERN_C_END
378
 
379
#endif