xref: /freebsd-src/contrib/llvm-project/clang/include/clang-c/Documentation.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
10b57cec5SDimitry Andric /*==-- clang-c/Documentation.h - Utilities for comment processing -*- C -*-===*\
20b57cec5SDimitry Andric |*                                                                            *|
30b57cec5SDimitry Andric |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
40b57cec5SDimitry Andric |* Exceptions.                                                                *|
50b57cec5SDimitry Andric |* See https://llvm.org/LICENSE.txt for license information.                  *|
60b57cec5SDimitry Andric |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
70b57cec5SDimitry Andric |*                                                                            *|
80b57cec5SDimitry Andric |*===----------------------------------------------------------------------===*|
90b57cec5SDimitry Andric |*                                                                            *|
100b57cec5SDimitry Andric |* This header provides a supplementary interface for inspecting              *|
110b57cec5SDimitry Andric |* documentation comments.                                                    *|
120b57cec5SDimitry Andric |*                                                                            *|
130b57cec5SDimitry Andric \*===----------------------------------------------------------------------===*/
140b57cec5SDimitry Andric 
150b57cec5SDimitry Andric #ifndef LLVM_CLANG_C_DOCUMENTATION_H
160b57cec5SDimitry Andric #define LLVM_CLANG_C_DOCUMENTATION_H
170b57cec5SDimitry Andric 
18*bdd1243dSDimitry Andric #include "clang-c/CXErrorCode.h"
19480093f4SDimitry Andric #include "clang-c/ExternC.h"
200b57cec5SDimitry Andric #include "clang-c/Index.h"
210b57cec5SDimitry Andric 
22480093f4SDimitry Andric LLVM_CLANG_C_EXTERN_C_BEGIN
230b57cec5SDimitry Andric 
240b57cec5SDimitry Andric /**
250b57cec5SDimitry Andric  * \defgroup CINDEX_COMMENT Comment introspection
260b57cec5SDimitry Andric  *
270b57cec5SDimitry Andric  * The routines in this group provide access to information in documentation
280b57cec5SDimitry Andric  * comments. These facilities are distinct from the core and may be subject to
290b57cec5SDimitry Andric  * their own schedule of stability and deprecation.
300b57cec5SDimitry Andric  *
310b57cec5SDimitry Andric  * @{
320b57cec5SDimitry Andric  */
330b57cec5SDimitry Andric 
340b57cec5SDimitry Andric /**
350b57cec5SDimitry Andric  * A parsed comment.
360b57cec5SDimitry Andric  */
370b57cec5SDimitry Andric typedef struct {
380b57cec5SDimitry Andric   const void *ASTNode;
390b57cec5SDimitry Andric   CXTranslationUnit TranslationUnit;
400b57cec5SDimitry Andric } CXComment;
410b57cec5SDimitry Andric 
420b57cec5SDimitry Andric /**
430b57cec5SDimitry Andric  * Given a cursor that represents a documentable entity (e.g.,
440b57cec5SDimitry Andric  * declaration), return the associated parsed comment as a
450b57cec5SDimitry Andric  * \c CXComment_FullComment AST node.
460b57cec5SDimitry Andric  */
470b57cec5SDimitry Andric CINDEX_LINKAGE CXComment clang_Cursor_getParsedComment(CXCursor C);
480b57cec5SDimitry Andric 
490b57cec5SDimitry Andric /**
500b57cec5SDimitry Andric  * Describes the type of the comment AST node (\c CXComment).  A comment
510b57cec5SDimitry Andric  * node can be considered block content (e. g., paragraph), inline content
520b57cec5SDimitry Andric  * (plain text) or neither (the root AST node).
530b57cec5SDimitry Andric  */
540b57cec5SDimitry Andric enum CXCommentKind {
550b57cec5SDimitry Andric   /**
560b57cec5SDimitry Andric    * Null comment.  No AST node is constructed at the requested location
570b57cec5SDimitry Andric    * because there is no text or a syntax error.
580b57cec5SDimitry Andric    */
590b57cec5SDimitry Andric   CXComment_Null = 0,
600b57cec5SDimitry Andric 
610b57cec5SDimitry Andric   /**
620b57cec5SDimitry Andric    * Plain text.  Inline content.
630b57cec5SDimitry Andric    */
640b57cec5SDimitry Andric   CXComment_Text = 1,
650b57cec5SDimitry Andric 
660b57cec5SDimitry Andric   /**
670b57cec5SDimitry Andric    * A command with word-like arguments that is considered inline content.
680b57cec5SDimitry Andric    *
690b57cec5SDimitry Andric    * For example: \\c command.
700b57cec5SDimitry Andric    */
710b57cec5SDimitry Andric   CXComment_InlineCommand = 2,
720b57cec5SDimitry Andric 
730b57cec5SDimitry Andric   /**
740b57cec5SDimitry Andric    * HTML start tag with attributes (name-value pairs).  Considered
750b57cec5SDimitry Andric    * inline content.
760b57cec5SDimitry Andric    *
770b57cec5SDimitry Andric    * For example:
780b57cec5SDimitry Andric    * \verbatim
790b57cec5SDimitry Andric    * <br> <br /> <a href="http://example.org/">
800b57cec5SDimitry Andric    * \endverbatim
810b57cec5SDimitry Andric    */
820b57cec5SDimitry Andric   CXComment_HTMLStartTag = 3,
830b57cec5SDimitry Andric 
840b57cec5SDimitry Andric   /**
850b57cec5SDimitry Andric    * HTML end tag.  Considered inline content.
860b57cec5SDimitry Andric    *
870b57cec5SDimitry Andric    * For example:
880b57cec5SDimitry Andric    * \verbatim
890b57cec5SDimitry Andric    * </a>
900b57cec5SDimitry Andric    * \endverbatim
910b57cec5SDimitry Andric    */
920b57cec5SDimitry Andric   CXComment_HTMLEndTag = 4,
930b57cec5SDimitry Andric 
940b57cec5SDimitry Andric   /**
950b57cec5SDimitry Andric    * A paragraph, contains inline comment.  The paragraph itself is
960b57cec5SDimitry Andric    * block content.
970b57cec5SDimitry Andric    */
980b57cec5SDimitry Andric   CXComment_Paragraph = 5,
990b57cec5SDimitry Andric 
1000b57cec5SDimitry Andric   /**
1010b57cec5SDimitry Andric    * A command that has zero or more word-like arguments (number of
1020b57cec5SDimitry Andric    * word-like arguments depends on command name) and a paragraph as an
1030b57cec5SDimitry Andric    * argument.  Block command is block content.
1040b57cec5SDimitry Andric    *
1050b57cec5SDimitry Andric    * Paragraph argument is also a child of the block command.
1060b57cec5SDimitry Andric    *
1070b57cec5SDimitry Andric    * For example: \has 0 word-like arguments and a paragraph argument.
1080b57cec5SDimitry Andric    *
1090b57cec5SDimitry Andric    * AST nodes of special kinds that parser knows about (e. g., \\param
1100b57cec5SDimitry Andric    * command) have their own node kinds.
1110b57cec5SDimitry Andric    */
1120b57cec5SDimitry Andric   CXComment_BlockCommand = 6,
1130b57cec5SDimitry Andric 
1140b57cec5SDimitry Andric   /**
1150b57cec5SDimitry Andric    * A \\param or \\arg command that describes the function parameter
1160b57cec5SDimitry Andric    * (name, passing direction, description).
1170b57cec5SDimitry Andric    *
1180b57cec5SDimitry Andric    * For example: \\param [in] ParamName description.
1190b57cec5SDimitry Andric    */
1200b57cec5SDimitry Andric   CXComment_ParamCommand = 7,
1210b57cec5SDimitry Andric 
1220b57cec5SDimitry Andric   /**
1230b57cec5SDimitry Andric    * A \\tparam command that describes a template parameter (name and
1240b57cec5SDimitry Andric    * description).
1250b57cec5SDimitry Andric    *
1260b57cec5SDimitry Andric    * For example: \\tparam T description.
1270b57cec5SDimitry Andric    */
1280b57cec5SDimitry Andric   CXComment_TParamCommand = 8,
1290b57cec5SDimitry Andric 
1300b57cec5SDimitry Andric   /**
1310b57cec5SDimitry Andric    * A verbatim block command (e. g., preformatted code).  Verbatim
1320b57cec5SDimitry Andric    * block has an opening and a closing command and contains multiple lines of
1330b57cec5SDimitry Andric    * text (\c CXComment_VerbatimBlockLine child nodes).
1340b57cec5SDimitry Andric    *
1350b57cec5SDimitry Andric    * For example:
1360b57cec5SDimitry Andric    * \\verbatim
1370b57cec5SDimitry Andric    * aaa
1380b57cec5SDimitry Andric    * \\endverbatim
1390b57cec5SDimitry Andric    */
1400b57cec5SDimitry Andric   CXComment_VerbatimBlockCommand = 9,
1410b57cec5SDimitry Andric 
1420b57cec5SDimitry Andric   /**
1430b57cec5SDimitry Andric    * A line of text that is contained within a
1440b57cec5SDimitry Andric    * CXComment_VerbatimBlockCommand node.
1450b57cec5SDimitry Andric    */
1460b57cec5SDimitry Andric   CXComment_VerbatimBlockLine = 10,
1470b57cec5SDimitry Andric 
1480b57cec5SDimitry Andric   /**
1490b57cec5SDimitry Andric    * A verbatim line command.  Verbatim line has an opening command,
1500b57cec5SDimitry Andric    * a single line of text (up to the newline after the opening command) and
1510b57cec5SDimitry Andric    * has no closing command.
1520b57cec5SDimitry Andric    */
1530b57cec5SDimitry Andric   CXComment_VerbatimLine = 11,
1540b57cec5SDimitry Andric 
1550b57cec5SDimitry Andric   /**
1560b57cec5SDimitry Andric    * A full comment attached to a declaration, contains block content.
1570b57cec5SDimitry Andric    */
1580b57cec5SDimitry Andric   CXComment_FullComment = 12
1590b57cec5SDimitry Andric };
1600b57cec5SDimitry Andric 
1610b57cec5SDimitry Andric /**
1620b57cec5SDimitry Andric  * The most appropriate rendering mode for an inline command, chosen on
1630b57cec5SDimitry Andric  * command semantics in Doxygen.
1640b57cec5SDimitry Andric  */
1650b57cec5SDimitry Andric enum CXCommentInlineCommandRenderKind {
1660b57cec5SDimitry Andric   /**
1670b57cec5SDimitry Andric    * Command argument should be rendered in a normal font.
1680b57cec5SDimitry Andric    */
1690b57cec5SDimitry Andric   CXCommentInlineCommandRenderKind_Normal,
1700b57cec5SDimitry Andric 
1710b57cec5SDimitry Andric   /**
1720b57cec5SDimitry Andric    * Command argument should be rendered in a bold font.
1730b57cec5SDimitry Andric    */
1740b57cec5SDimitry Andric   CXCommentInlineCommandRenderKind_Bold,
1750b57cec5SDimitry Andric 
1760b57cec5SDimitry Andric   /**
1770b57cec5SDimitry Andric    * Command argument should be rendered in a monospaced font.
1780b57cec5SDimitry Andric    */
1790b57cec5SDimitry Andric   CXCommentInlineCommandRenderKind_Monospaced,
1800b57cec5SDimitry Andric 
1810b57cec5SDimitry Andric   /**
1820b57cec5SDimitry Andric    * Command argument should be rendered emphasized (typically italic
1830b57cec5SDimitry Andric    * font).
1840b57cec5SDimitry Andric    */
185480093f4SDimitry Andric   CXCommentInlineCommandRenderKind_Emphasized,
186480093f4SDimitry Andric 
187480093f4SDimitry Andric   /**
188480093f4SDimitry Andric    * Command argument should not be rendered (since it only defines an anchor).
189480093f4SDimitry Andric    */
190480093f4SDimitry Andric   CXCommentInlineCommandRenderKind_Anchor
1910b57cec5SDimitry Andric };
1920b57cec5SDimitry Andric 
1930b57cec5SDimitry Andric /**
1940b57cec5SDimitry Andric  * Describes parameter passing direction for \\param or \\arg command.
1950b57cec5SDimitry Andric  */
1960b57cec5SDimitry Andric enum CXCommentParamPassDirection {
1970b57cec5SDimitry Andric   /**
1980b57cec5SDimitry Andric    * The parameter is an input parameter.
1990b57cec5SDimitry Andric    */
2000b57cec5SDimitry Andric   CXCommentParamPassDirection_In,
2010b57cec5SDimitry Andric 
2020b57cec5SDimitry Andric   /**
2030b57cec5SDimitry Andric    * The parameter is an output parameter.
2040b57cec5SDimitry Andric    */
2050b57cec5SDimitry Andric   CXCommentParamPassDirection_Out,
2060b57cec5SDimitry Andric 
2070b57cec5SDimitry Andric   /**
2080b57cec5SDimitry Andric    * The parameter is an input and output parameter.
2090b57cec5SDimitry Andric    */
2100b57cec5SDimitry Andric   CXCommentParamPassDirection_InOut
2110b57cec5SDimitry Andric };
2120b57cec5SDimitry Andric 
2130b57cec5SDimitry Andric /**
2140b57cec5SDimitry Andric  * \param Comment AST node of any kind.
2150b57cec5SDimitry Andric  *
2160b57cec5SDimitry Andric  * \returns the type of the AST node.
2170b57cec5SDimitry Andric  */
2180b57cec5SDimitry Andric CINDEX_LINKAGE enum CXCommentKind clang_Comment_getKind(CXComment Comment);
2190b57cec5SDimitry Andric 
2200b57cec5SDimitry Andric /**
2210b57cec5SDimitry Andric  * \param Comment AST node of any kind.
2220b57cec5SDimitry Andric  *
2230b57cec5SDimitry Andric  * \returns number of children of the AST node.
2240b57cec5SDimitry Andric  */
2250b57cec5SDimitry Andric CINDEX_LINKAGE unsigned clang_Comment_getNumChildren(CXComment Comment);
2260b57cec5SDimitry Andric 
2270b57cec5SDimitry Andric /**
2280b57cec5SDimitry Andric  * \param Comment AST node of any kind.
2290b57cec5SDimitry Andric  *
2300b57cec5SDimitry Andric  * \param ChildIdx child index (zero-based).
2310b57cec5SDimitry Andric  *
2320b57cec5SDimitry Andric  * \returns the specified child of the AST node.
2330b57cec5SDimitry Andric  */
2340b57cec5SDimitry Andric CINDEX_LINKAGE
2350b57cec5SDimitry Andric CXComment clang_Comment_getChild(CXComment Comment, unsigned ChildIdx);
2360b57cec5SDimitry Andric 
2370b57cec5SDimitry Andric /**
2380b57cec5SDimitry Andric  * A \c CXComment_Paragraph node is considered whitespace if it contains
2390b57cec5SDimitry Andric  * only \c CXComment_Text nodes that are empty or whitespace.
2400b57cec5SDimitry Andric  *
2410b57cec5SDimitry Andric  * Other AST nodes (except \c CXComment_Paragraph and \c CXComment_Text) are
2420b57cec5SDimitry Andric  * never considered whitespace.
2430b57cec5SDimitry Andric  *
2440b57cec5SDimitry Andric  * \returns non-zero if \c Comment is whitespace.
2450b57cec5SDimitry Andric  */
2460b57cec5SDimitry Andric CINDEX_LINKAGE unsigned clang_Comment_isWhitespace(CXComment Comment);
2470b57cec5SDimitry Andric 
2480b57cec5SDimitry Andric /**
2490b57cec5SDimitry Andric  * \returns non-zero if \c Comment is inline content and has a newline
2500b57cec5SDimitry Andric  * immediately following it in the comment text.  Newlines between paragraphs
2510b57cec5SDimitry Andric  * do not count.
2520b57cec5SDimitry Andric  */
2530b57cec5SDimitry Andric CINDEX_LINKAGE
2540b57cec5SDimitry Andric unsigned clang_InlineContentComment_hasTrailingNewline(CXComment Comment);
2550b57cec5SDimitry Andric 
2560b57cec5SDimitry Andric /**
2570b57cec5SDimitry Andric  * \param Comment a \c CXComment_Text AST node.
2580b57cec5SDimitry Andric  *
2590b57cec5SDimitry Andric  * \returns text contained in the AST node.
2600b57cec5SDimitry Andric  */
2610b57cec5SDimitry Andric CINDEX_LINKAGE CXString clang_TextComment_getText(CXComment Comment);
2620b57cec5SDimitry Andric 
2630b57cec5SDimitry Andric /**
2640b57cec5SDimitry Andric  * \param Comment a \c CXComment_InlineCommand AST node.
2650b57cec5SDimitry Andric  *
2660b57cec5SDimitry Andric  * \returns name of the inline command.
2670b57cec5SDimitry Andric  */
2680b57cec5SDimitry Andric CINDEX_LINKAGE
2690b57cec5SDimitry Andric CXString clang_InlineCommandComment_getCommandName(CXComment Comment);
2700b57cec5SDimitry Andric 
2710b57cec5SDimitry Andric /**
2720b57cec5SDimitry Andric  * \param Comment a \c CXComment_InlineCommand AST node.
2730b57cec5SDimitry Andric  *
2740b57cec5SDimitry Andric  * \returns the most appropriate rendering mode, chosen on command
2750b57cec5SDimitry Andric  * semantics in Doxygen.
2760b57cec5SDimitry Andric  */
2770b57cec5SDimitry Andric CINDEX_LINKAGE enum CXCommentInlineCommandRenderKind
2780b57cec5SDimitry Andric clang_InlineCommandComment_getRenderKind(CXComment Comment);
2790b57cec5SDimitry Andric 
2800b57cec5SDimitry Andric /**
2810b57cec5SDimitry Andric  * \param Comment a \c CXComment_InlineCommand AST node.
2820b57cec5SDimitry Andric  *
2830b57cec5SDimitry Andric  * \returns number of command arguments.
2840b57cec5SDimitry Andric  */
2850b57cec5SDimitry Andric CINDEX_LINKAGE
2860b57cec5SDimitry Andric unsigned clang_InlineCommandComment_getNumArgs(CXComment Comment);
2870b57cec5SDimitry Andric 
2880b57cec5SDimitry Andric /**
2890b57cec5SDimitry Andric  * \param Comment a \c CXComment_InlineCommand AST node.
2900b57cec5SDimitry Andric  *
2910b57cec5SDimitry Andric  * \param ArgIdx argument index (zero-based).
2920b57cec5SDimitry Andric  *
2930b57cec5SDimitry Andric  * \returns text of the specified argument.
2940b57cec5SDimitry Andric  */
2950b57cec5SDimitry Andric CINDEX_LINKAGE
2960b57cec5SDimitry Andric CXString clang_InlineCommandComment_getArgText(CXComment Comment,
2970b57cec5SDimitry Andric                                                unsigned ArgIdx);
2980b57cec5SDimitry Andric 
2990b57cec5SDimitry Andric /**
3000b57cec5SDimitry Andric  * \param Comment a \c CXComment_HTMLStartTag or \c CXComment_HTMLEndTag AST
3010b57cec5SDimitry Andric  * node.
3020b57cec5SDimitry Andric  *
3030b57cec5SDimitry Andric  * \returns HTML tag name.
3040b57cec5SDimitry Andric  */
3050b57cec5SDimitry Andric CINDEX_LINKAGE CXString clang_HTMLTagComment_getTagName(CXComment Comment);
3060b57cec5SDimitry Andric 
3070b57cec5SDimitry Andric /**
3080b57cec5SDimitry Andric  * \param Comment a \c CXComment_HTMLStartTag AST node.
3090b57cec5SDimitry Andric  *
3100b57cec5SDimitry Andric  * \returns non-zero if tag is self-closing (for example, &lt;br /&gt;).
3110b57cec5SDimitry Andric  */
3120b57cec5SDimitry Andric CINDEX_LINKAGE
3130b57cec5SDimitry Andric unsigned clang_HTMLStartTagComment_isSelfClosing(CXComment Comment);
3140b57cec5SDimitry Andric 
3150b57cec5SDimitry Andric /**
3160b57cec5SDimitry Andric  * \param Comment a \c CXComment_HTMLStartTag AST node.
3170b57cec5SDimitry Andric  *
3180b57cec5SDimitry Andric  * \returns number of attributes (name-value pairs) attached to the start tag.
3190b57cec5SDimitry Andric  */
3200b57cec5SDimitry Andric CINDEX_LINKAGE unsigned clang_HTMLStartTag_getNumAttrs(CXComment Comment);
3210b57cec5SDimitry Andric 
3220b57cec5SDimitry Andric /**
3230b57cec5SDimitry Andric  * \param Comment a \c CXComment_HTMLStartTag AST node.
3240b57cec5SDimitry Andric  *
3250b57cec5SDimitry Andric  * \param AttrIdx attribute index (zero-based).
3260b57cec5SDimitry Andric  *
3270b57cec5SDimitry Andric  * \returns name of the specified attribute.
3280b57cec5SDimitry Andric  */
3290b57cec5SDimitry Andric CINDEX_LINKAGE
3300b57cec5SDimitry Andric CXString clang_HTMLStartTag_getAttrName(CXComment Comment, unsigned AttrIdx);
3310b57cec5SDimitry Andric 
3320b57cec5SDimitry Andric /**
3330b57cec5SDimitry Andric  * \param Comment a \c CXComment_HTMLStartTag AST node.
3340b57cec5SDimitry Andric  *
3350b57cec5SDimitry Andric  * \param AttrIdx attribute index (zero-based).
3360b57cec5SDimitry Andric  *
3370b57cec5SDimitry Andric  * \returns value of the specified attribute.
3380b57cec5SDimitry Andric  */
3390b57cec5SDimitry Andric CINDEX_LINKAGE
3400b57cec5SDimitry Andric CXString clang_HTMLStartTag_getAttrValue(CXComment Comment, unsigned AttrIdx);
3410b57cec5SDimitry Andric 
3420b57cec5SDimitry Andric /**
3430b57cec5SDimitry Andric  * \param Comment a \c CXComment_BlockCommand AST node.
3440b57cec5SDimitry Andric  *
3450b57cec5SDimitry Andric  * \returns name of the block command.
3460b57cec5SDimitry Andric  */
3470b57cec5SDimitry Andric CINDEX_LINKAGE
3480b57cec5SDimitry Andric CXString clang_BlockCommandComment_getCommandName(CXComment Comment);
3490b57cec5SDimitry Andric 
3500b57cec5SDimitry Andric /**
3510b57cec5SDimitry Andric  * \param Comment a \c CXComment_BlockCommand AST node.
3520b57cec5SDimitry Andric  *
3530b57cec5SDimitry Andric  * \returns number of word-like arguments.
3540b57cec5SDimitry Andric  */
3550b57cec5SDimitry Andric CINDEX_LINKAGE
3560b57cec5SDimitry Andric unsigned clang_BlockCommandComment_getNumArgs(CXComment Comment);
3570b57cec5SDimitry Andric 
3580b57cec5SDimitry Andric /**
3590b57cec5SDimitry Andric  * \param Comment a \c CXComment_BlockCommand AST node.
3600b57cec5SDimitry Andric  *
3610b57cec5SDimitry Andric  * \param ArgIdx argument index (zero-based).
3620b57cec5SDimitry Andric  *
3630b57cec5SDimitry Andric  * \returns text of the specified word-like argument.
3640b57cec5SDimitry Andric  */
3650b57cec5SDimitry Andric CINDEX_LINKAGE
3660b57cec5SDimitry Andric CXString clang_BlockCommandComment_getArgText(CXComment Comment,
3670b57cec5SDimitry Andric                                               unsigned ArgIdx);
3680b57cec5SDimitry Andric 
3690b57cec5SDimitry Andric /**
3700b57cec5SDimitry Andric  * \param Comment a \c CXComment_BlockCommand or
3710b57cec5SDimitry Andric  * \c CXComment_VerbatimBlockCommand AST node.
3720b57cec5SDimitry Andric  *
3730b57cec5SDimitry Andric  * \returns paragraph argument of the block command.
3740b57cec5SDimitry Andric  */
3750b57cec5SDimitry Andric CINDEX_LINKAGE
3760b57cec5SDimitry Andric CXComment clang_BlockCommandComment_getParagraph(CXComment Comment);
3770b57cec5SDimitry Andric 
3780b57cec5SDimitry Andric /**
3790b57cec5SDimitry Andric  * \param Comment a \c CXComment_ParamCommand AST node.
3800b57cec5SDimitry Andric  *
3810b57cec5SDimitry Andric  * \returns parameter name.
3820b57cec5SDimitry Andric  */
3830b57cec5SDimitry Andric CINDEX_LINKAGE
3840b57cec5SDimitry Andric CXString clang_ParamCommandComment_getParamName(CXComment Comment);
3850b57cec5SDimitry Andric 
3860b57cec5SDimitry Andric /**
3870b57cec5SDimitry Andric  * \param Comment a \c CXComment_ParamCommand AST node.
3880b57cec5SDimitry Andric  *
3890b57cec5SDimitry Andric  * \returns non-zero if the parameter that this AST node represents was found
3900b57cec5SDimitry Andric  * in the function prototype and \c clang_ParamCommandComment_getParamIndex
3910b57cec5SDimitry Andric  * function will return a meaningful value.
3920b57cec5SDimitry Andric  */
3930b57cec5SDimitry Andric CINDEX_LINKAGE
3940b57cec5SDimitry Andric unsigned clang_ParamCommandComment_isParamIndexValid(CXComment Comment);
3950b57cec5SDimitry Andric 
3960b57cec5SDimitry Andric /**
3970b57cec5SDimitry Andric  * \param Comment a \c CXComment_ParamCommand AST node.
3980b57cec5SDimitry Andric  *
3990b57cec5SDimitry Andric  * \returns zero-based parameter index in function prototype.
4000b57cec5SDimitry Andric  */
4010b57cec5SDimitry Andric CINDEX_LINKAGE
4020b57cec5SDimitry Andric unsigned clang_ParamCommandComment_getParamIndex(CXComment Comment);
4030b57cec5SDimitry Andric 
4040b57cec5SDimitry Andric /**
4050b57cec5SDimitry Andric  * \param Comment a \c CXComment_ParamCommand AST node.
4060b57cec5SDimitry Andric  *
4070b57cec5SDimitry Andric  * \returns non-zero if parameter passing direction was specified explicitly in
4080b57cec5SDimitry Andric  * the comment.
4090b57cec5SDimitry Andric  */
4100b57cec5SDimitry Andric CINDEX_LINKAGE
4110b57cec5SDimitry Andric unsigned clang_ParamCommandComment_isDirectionExplicit(CXComment Comment);
4120b57cec5SDimitry Andric 
4130b57cec5SDimitry Andric /**
4140b57cec5SDimitry Andric  * \param Comment a \c CXComment_ParamCommand AST node.
4150b57cec5SDimitry Andric  *
4160b57cec5SDimitry Andric  * \returns parameter passing direction.
4170b57cec5SDimitry Andric  */
4180b57cec5SDimitry Andric CINDEX_LINKAGE
4190b57cec5SDimitry Andric enum CXCommentParamPassDirection clang_ParamCommandComment_getDirection(
4200b57cec5SDimitry Andric                                                             CXComment Comment);
4210b57cec5SDimitry Andric 
4220b57cec5SDimitry Andric /**
4230b57cec5SDimitry Andric  * \param Comment a \c CXComment_TParamCommand AST node.
4240b57cec5SDimitry Andric  *
4250b57cec5SDimitry Andric  * \returns template parameter name.
4260b57cec5SDimitry Andric  */
4270b57cec5SDimitry Andric CINDEX_LINKAGE
4280b57cec5SDimitry Andric CXString clang_TParamCommandComment_getParamName(CXComment Comment);
4290b57cec5SDimitry Andric 
4300b57cec5SDimitry Andric /**
4310b57cec5SDimitry Andric  * \param Comment a \c CXComment_TParamCommand AST node.
4320b57cec5SDimitry Andric  *
4330b57cec5SDimitry Andric  * \returns non-zero if the parameter that this AST node represents was found
4340b57cec5SDimitry Andric  * in the template parameter list and
4350b57cec5SDimitry Andric  * \c clang_TParamCommandComment_getDepth and
4360b57cec5SDimitry Andric  * \c clang_TParamCommandComment_getIndex functions will return a meaningful
4370b57cec5SDimitry Andric  * value.
4380b57cec5SDimitry Andric  */
4390b57cec5SDimitry Andric CINDEX_LINKAGE
4400b57cec5SDimitry Andric unsigned clang_TParamCommandComment_isParamPositionValid(CXComment Comment);
4410b57cec5SDimitry Andric 
4420b57cec5SDimitry Andric /**
4430b57cec5SDimitry Andric  * \param Comment a \c CXComment_TParamCommand AST node.
4440b57cec5SDimitry Andric  *
4450b57cec5SDimitry Andric  * \returns zero-based nesting depth of this parameter in the template parameter list.
4460b57cec5SDimitry Andric  *
4470b57cec5SDimitry Andric  * For example,
4480b57cec5SDimitry Andric  * \verbatim
4490b57cec5SDimitry Andric  *     template<typename C, template<typename T> class TT>
4500b57cec5SDimitry Andric  *     void test(TT<int> aaa);
4510b57cec5SDimitry Andric  * \endverbatim
4520b57cec5SDimitry Andric  * for C and TT nesting depth is 0,
4530b57cec5SDimitry Andric  * for T nesting depth is 1.
4540b57cec5SDimitry Andric  */
4550b57cec5SDimitry Andric CINDEX_LINKAGE
4560b57cec5SDimitry Andric unsigned clang_TParamCommandComment_getDepth(CXComment Comment);
4570b57cec5SDimitry Andric 
4580b57cec5SDimitry Andric /**
4590b57cec5SDimitry Andric  * \param Comment a \c CXComment_TParamCommand AST node.
4600b57cec5SDimitry Andric  *
4610b57cec5SDimitry Andric  * \returns zero-based parameter index in the template parameter list at a
4620b57cec5SDimitry Andric  * given nesting depth.
4630b57cec5SDimitry Andric  *
4640b57cec5SDimitry Andric  * For example,
4650b57cec5SDimitry Andric  * \verbatim
4660b57cec5SDimitry Andric  *     template<typename C, template<typename T> class TT>
4670b57cec5SDimitry Andric  *     void test(TT<int> aaa);
4680b57cec5SDimitry Andric  * \endverbatim
4690b57cec5SDimitry Andric  * for C and TT nesting depth is 0, so we can ask for index at depth 0:
4700b57cec5SDimitry Andric  * at depth 0 C's index is 0, TT's index is 1.
4710b57cec5SDimitry Andric  *
4720b57cec5SDimitry Andric  * For T nesting depth is 1, so we can ask for index at depth 0 and 1:
4730b57cec5SDimitry Andric  * at depth 0 T's index is 1 (same as TT's),
4740b57cec5SDimitry Andric  * at depth 1 T's index is 0.
4750b57cec5SDimitry Andric  */
4760b57cec5SDimitry Andric CINDEX_LINKAGE
4770b57cec5SDimitry Andric unsigned clang_TParamCommandComment_getIndex(CXComment Comment, unsigned Depth);
4780b57cec5SDimitry Andric 
4790b57cec5SDimitry Andric /**
4800b57cec5SDimitry Andric  * \param Comment a \c CXComment_VerbatimBlockLine AST node.
4810b57cec5SDimitry Andric  *
4820b57cec5SDimitry Andric  * \returns text contained in the AST node.
4830b57cec5SDimitry Andric  */
4840b57cec5SDimitry Andric CINDEX_LINKAGE
4850b57cec5SDimitry Andric CXString clang_VerbatimBlockLineComment_getText(CXComment Comment);
4860b57cec5SDimitry Andric 
4870b57cec5SDimitry Andric /**
4880b57cec5SDimitry Andric  * \param Comment a \c CXComment_VerbatimLine AST node.
4890b57cec5SDimitry Andric  *
4900b57cec5SDimitry Andric  * \returns text contained in the AST node.
4910b57cec5SDimitry Andric  */
4920b57cec5SDimitry Andric CINDEX_LINKAGE CXString clang_VerbatimLineComment_getText(CXComment Comment);
4930b57cec5SDimitry Andric 
4940b57cec5SDimitry Andric /**
4950b57cec5SDimitry Andric  * Convert an HTML tag AST node to string.
4960b57cec5SDimitry Andric  *
4970b57cec5SDimitry Andric  * \param Comment a \c CXComment_HTMLStartTag or \c CXComment_HTMLEndTag AST
4980b57cec5SDimitry Andric  * node.
4990b57cec5SDimitry Andric  *
5000b57cec5SDimitry Andric  * \returns string containing an HTML tag.
5010b57cec5SDimitry Andric  */
5020b57cec5SDimitry Andric CINDEX_LINKAGE CXString clang_HTMLTagComment_getAsString(CXComment Comment);
5030b57cec5SDimitry Andric 
5040b57cec5SDimitry Andric /**
5050b57cec5SDimitry Andric  * Convert a given full parsed comment to an HTML fragment.
5060b57cec5SDimitry Andric  *
5070b57cec5SDimitry Andric  * Specific details of HTML layout are subject to change.  Don't try to parse
5080b57cec5SDimitry Andric  * this HTML back into an AST, use other APIs instead.
5090b57cec5SDimitry Andric  *
5100b57cec5SDimitry Andric  * Currently the following CSS classes are used:
5110b57cec5SDimitry Andric  * \li "para-brief" for \paragraph and equivalent commands;
5120b57cec5SDimitry Andric  * \li "para-returns" for \\returns paragraph and equivalent commands;
5130b57cec5SDimitry Andric  * \li "word-returns" for the "Returns" word in \\returns paragraph.
5140b57cec5SDimitry Andric  *
5150b57cec5SDimitry Andric  * Function argument documentation is rendered as a \<dl\> list with arguments
5160b57cec5SDimitry Andric  * sorted in function prototype order.  CSS classes used:
5170b57cec5SDimitry Andric  * \li "param-name-index-NUMBER" for parameter name (\<dt\>);
5180b57cec5SDimitry Andric  * \li "param-descr-index-NUMBER" for parameter description (\<dd\>);
5190b57cec5SDimitry Andric  * \li "param-name-index-invalid" and "param-descr-index-invalid" are used if
5200b57cec5SDimitry Andric  * parameter index is invalid.
5210b57cec5SDimitry Andric  *
5220b57cec5SDimitry Andric  * Template parameter documentation is rendered as a \<dl\> list with
5230b57cec5SDimitry Andric  * parameters sorted in template parameter list order.  CSS classes used:
5240b57cec5SDimitry Andric  * \li "tparam-name-index-NUMBER" for parameter name (\<dt\>);
5250b57cec5SDimitry Andric  * \li "tparam-descr-index-NUMBER" for parameter description (\<dd\>);
5260b57cec5SDimitry Andric  * \li "tparam-name-index-other" and "tparam-descr-index-other" are used for
5270b57cec5SDimitry Andric  * names inside template template parameters;
5280b57cec5SDimitry Andric  * \li "tparam-name-index-invalid" and "tparam-descr-index-invalid" are used if
5290b57cec5SDimitry Andric  * parameter position is invalid.
5300b57cec5SDimitry Andric  *
5310b57cec5SDimitry Andric  * \param Comment a \c CXComment_FullComment AST node.
5320b57cec5SDimitry Andric  *
5330b57cec5SDimitry Andric  * \returns string containing an HTML fragment.
5340b57cec5SDimitry Andric  */
5350b57cec5SDimitry Andric CINDEX_LINKAGE CXString clang_FullComment_getAsHTML(CXComment Comment);
5360b57cec5SDimitry Andric 
5370b57cec5SDimitry Andric /**
5380b57cec5SDimitry Andric  * Convert a given full parsed comment to an XML document.
5390b57cec5SDimitry Andric  *
5400b57cec5SDimitry Andric  * A Relax NG schema for the XML can be found in comment-xml-schema.rng file
5410b57cec5SDimitry Andric  * inside clang source tree.
5420b57cec5SDimitry Andric  *
5430b57cec5SDimitry Andric  * \param Comment a \c CXComment_FullComment AST node.
5440b57cec5SDimitry Andric  *
5450b57cec5SDimitry Andric  * \returns string containing an XML document.
5460b57cec5SDimitry Andric  */
5470b57cec5SDimitry Andric CINDEX_LINKAGE CXString clang_FullComment_getAsXML(CXComment Comment);
5480b57cec5SDimitry Andric 
5490b57cec5SDimitry Andric /**
550*bdd1243dSDimitry Andric  * CXAPISet is an opaque type that represents a data structure containing all
551*bdd1243dSDimitry Andric  * the API information for a given translation unit. This can be used for a
552*bdd1243dSDimitry Andric  * single symbol symbol graph for a given symbol.
553*bdd1243dSDimitry Andric  */
554*bdd1243dSDimitry Andric typedef struct CXAPISetImpl *CXAPISet;
555*bdd1243dSDimitry Andric 
556*bdd1243dSDimitry Andric /**
557*bdd1243dSDimitry Andric  * Traverses the translation unit to create a \c CXAPISet.
558*bdd1243dSDimitry Andric  *
559*bdd1243dSDimitry Andric  * \param tu is the \c CXTranslationUnit to build the \c CXAPISet for.
560*bdd1243dSDimitry Andric  *
561*bdd1243dSDimitry Andric  * \param out_api is a pointer to the output of this function. It is needs to be
562*bdd1243dSDimitry Andric  * disposed of by calling clang_disposeAPISet.
563*bdd1243dSDimitry Andric  *
564*bdd1243dSDimitry Andric  * \returns Error code indicating success or failure of the APISet creation.
565*bdd1243dSDimitry Andric  */
566*bdd1243dSDimitry Andric CINDEX_LINKAGE enum CXErrorCode clang_createAPISet(CXTranslationUnit tu,
567*bdd1243dSDimitry Andric                                                    CXAPISet *out_api);
568*bdd1243dSDimitry Andric 
569*bdd1243dSDimitry Andric /**
570*bdd1243dSDimitry Andric  * Dispose of an APISet.
571*bdd1243dSDimitry Andric  *
572*bdd1243dSDimitry Andric  * The provided \c CXAPISet can not be used after this function is called.
573*bdd1243dSDimitry Andric  */
574*bdd1243dSDimitry Andric CINDEX_LINKAGE void clang_disposeAPISet(CXAPISet api);
575*bdd1243dSDimitry Andric 
576*bdd1243dSDimitry Andric /**
577*bdd1243dSDimitry Andric  * Generate a single symbol symbol graph for the given USR. Returns a null
578*bdd1243dSDimitry Andric  * string if the associated symbol can not be found in the provided \c CXAPISet.
579*bdd1243dSDimitry Andric  *
580*bdd1243dSDimitry Andric  * The output contains the symbol graph as well as some additional information
581*bdd1243dSDimitry Andric  * about related symbols.
582*bdd1243dSDimitry Andric  *
583*bdd1243dSDimitry Andric  * \param usr is a string containing the USR of the symbol to generate the
584*bdd1243dSDimitry Andric  * symbol graph for.
585*bdd1243dSDimitry Andric  *
586*bdd1243dSDimitry Andric  * \param api the \c CXAPISet to look for the symbol in.
587*bdd1243dSDimitry Andric  *
588*bdd1243dSDimitry Andric  * \returns a string containing the serialized symbol graph representation for
589*bdd1243dSDimitry Andric  * the symbol being queried or a null string if it can not be found in the
590*bdd1243dSDimitry Andric  * APISet.
591*bdd1243dSDimitry Andric  */
592*bdd1243dSDimitry Andric CINDEX_LINKAGE CXString clang_getSymbolGraphForUSR(const char *usr,
593*bdd1243dSDimitry Andric                                                    CXAPISet api);
594*bdd1243dSDimitry Andric 
595*bdd1243dSDimitry Andric /**
596*bdd1243dSDimitry Andric  * Generate a single symbol symbol graph for the declaration at the given
597*bdd1243dSDimitry Andric  * cursor. Returns a null string if the AST node for the cursor isn't a
598*bdd1243dSDimitry Andric  * declaration.
599*bdd1243dSDimitry Andric  *
600*bdd1243dSDimitry Andric  * The output contains the symbol graph as well as some additional information
601*bdd1243dSDimitry Andric  * about related symbols.
602*bdd1243dSDimitry Andric  *
603*bdd1243dSDimitry Andric  * \param cursor the declaration for which to generate the single symbol symbol
604*bdd1243dSDimitry Andric  * graph.
605*bdd1243dSDimitry Andric  *
606*bdd1243dSDimitry Andric  * \returns a string containing the serialized symbol graph representation for
607*bdd1243dSDimitry Andric  * the symbol being queried or a null string if it can not be found in the
608*bdd1243dSDimitry Andric  * APISet.
609*bdd1243dSDimitry Andric  */
610*bdd1243dSDimitry Andric CINDEX_LINKAGE CXString clang_getSymbolGraphForCursor(CXCursor cursor);
611*bdd1243dSDimitry Andric 
612*bdd1243dSDimitry Andric /**
6130b57cec5SDimitry Andric  * @}
6140b57cec5SDimitry Andric  */
6150b57cec5SDimitry Andric 
616480093f4SDimitry Andric LLVM_CLANG_C_EXTERN_C_END
6170b57cec5SDimitry Andric 
6180b57cec5SDimitry Andric #endif /* CLANG_C_DOCUMENTATION_H */
6190b57cec5SDimitry Andric 
620