Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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
  380.