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, <br />). 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