xref: /llvm-project/clang/tools/libclang/CXComment.h (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
15e4fe00eSDmitri Gribenko //===- CXComment.h - Routines for manipulating CXComments -----------------===//
25e4fe00eSDmitri Gribenko //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65e4fe00eSDmitri Gribenko //
75e4fe00eSDmitri Gribenko //===----------------------------------------------------------------------===//
85e4fe00eSDmitri Gribenko //
95e4fe00eSDmitri Gribenko // This file defines routines for manipulating CXComments.
105e4fe00eSDmitri Gribenko //
115e4fe00eSDmitri Gribenko //===----------------------------------------------------------------------===//
125e4fe00eSDmitri Gribenko 
132f5db8b3SBenjamin Kramer #ifndef LLVM_CLANG_TOOLS_LIBCLANG_CXCOMMENT_H
142f5db8b3SBenjamin Kramer #define LLVM_CLANG_TOOLS_LIBCLANG_CXCOMMENT_H
155e4fe00eSDmitri Gribenko 
167acbf00fSDmitri Gribenko #include "CXTranslationUnit.h"
1759c6bc58SAlp Toker #include "clang-c/Documentation.h"
18575bc3baSChandler Carruth #include "clang-c/Index.h"
197acbf00fSDmitri Gribenko #include "clang/AST/ASTContext.h"
20cc0694c8SChandler Carruth #include "clang/AST/Comment.h"
217acbf00fSDmitri Gribenko #include "clang/Frontend/ASTUnit.h"
225e4fe00eSDmitri Gribenko 
235e4fe00eSDmitri Gribenko namespace clang {
247acbf00fSDmitri Gribenko namespace comments {
257acbf00fSDmitri Gribenko   class CommandTraits;
267acbf00fSDmitri Gribenko }
277acbf00fSDmitri Gribenko 
285e4fe00eSDmitri Gribenko namespace cxcomment {
295e4fe00eSDmitri Gribenko 
createCXComment(const comments::Comment * C,CXTranslationUnit TU)30ff431602SDmitri Gribenko static inline CXComment createCXComment(const comments::Comment *C,
317acbf00fSDmitri Gribenko                                         CXTranslationUnit TU) {
325e4fe00eSDmitri Gribenko   CXComment Result;
337acbf00fSDmitri Gribenko   Result.ASTNode = C;
347acbf00fSDmitri Gribenko   Result.TranslationUnit = TU;
355e4fe00eSDmitri Gribenko   return Result;
365e4fe00eSDmitri Gribenko }
375e4fe00eSDmitri Gribenko 
getASTNode(CXComment CXC)38ff431602SDmitri Gribenko static inline const comments::Comment *getASTNode(CXComment CXC) {
397acbf00fSDmitri Gribenko   return static_cast<const comments::Comment *>(CXC.ASTNode);
405e4fe00eSDmitri Gribenko }
415e4fe00eSDmitri Gribenko 
425e4fe00eSDmitri Gribenko template<typename T>
getASTNodeAs(CXComment CXC)43ff431602SDmitri Gribenko static inline const T *getASTNodeAs(CXComment CXC) {
445e4fe00eSDmitri Gribenko   const comments::Comment *C = getASTNode(CXC);
455e4fe00eSDmitri Gribenko   if (!C)
4669186e73SCraig Topper     return nullptr;
475e4fe00eSDmitri Gribenko 
485e4fe00eSDmitri Gribenko   return dyn_cast<T>(C);
495e4fe00eSDmitri Gribenko }
505e4fe00eSDmitri Gribenko 
getASTContext(CXComment CXC)51ff431602SDmitri Gribenko static inline ASTContext &getASTContext(CXComment CXC) {
52c22ea1ceSDmitri Gribenko   return cxtu::getASTUnit(CXC.TranslationUnit)->getASTContext();
537acbf00fSDmitri Gribenko }
547acbf00fSDmitri Gribenko 
getCommandTraits(CXComment CXC)55ff431602SDmitri Gribenko static inline comments::CommandTraits &getCommandTraits(CXComment CXC) {
567acbf00fSDmitri Gribenko   return getASTContext(CXC).getCommentCommandTraits();
577acbf00fSDmitri Gribenko }
587acbf00fSDmitri Gribenko 
595e4fe00eSDmitri Gribenko } // end namespace cxcomment
605e4fe00eSDmitri Gribenko } // end namespace clang
615e4fe00eSDmitri Gribenko 
625e4fe00eSDmitri Gribenko #endif
635e4fe00eSDmitri Gribenko 
64