CommentSema.h revision 3d986980bd02594b1a5aa7b9f9f68d201621ced7
18d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko//===--- CommentSema.h - Doxygen comment semantic analysis ------*- C++ -*-===// 28d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// 38d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// The LLVM Compiler Infrastructure 48d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// 58d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// This file is distributed under the University of Illinois Open Source 68d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// License. See LICENSE.TXT for details. 78d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// 88d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko//===----------------------------------------------------------------------===// 98d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// 108d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// This file defines the semantic analysis class for Doxygen comments. 118d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// 128d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko//===----------------------------------------------------------------------===// 138d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 148d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#ifndef LLVM_CLANG_AST_COMMENT_SEMA_H 158d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#define LLVM_CLANG_AST_COMMENT_SEMA_H 168d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 17a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko#include "clang/Basic/Diagnostic.h" 188d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "clang/Basic/SourceLocation.h" 198d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "clang/AST/Comment.h" 208d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "llvm/ADT/ArrayRef.h" 218d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "llvm/ADT/StringRef.h" 228d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "llvm/Support/Allocator.h" 238d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 248d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkonamespace clang { 25a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkoclass Decl; 26a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkoclass FunctionDecl; 27a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkoclass ParmVarDecl; 28a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkoclass SourceMgr; 29a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 308d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkonamespace comments { 318d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 328d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkoclass Sema { 33a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Allocator for AST nodes. 348d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko llvm::BumpPtrAllocator &Allocator; 358d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 36a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Source manager for the comment being parsed. 37a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko const SourceManager &SourceMgr; 38a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 39a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko DiagnosticsEngine &Diags; 40a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 41a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko const Decl *ThisDecl; 42a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 43a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) { 44a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko return Diags.Report(Loc, DiagID); 45a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko } 46a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 47a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// A stack of HTML tags that are currently open (not matched with closing 48a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// tags). 49a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko SmallVector<HTMLOpenTagComment *, 8> HTMLOpenTags; 50a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 518d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkopublic: 52a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko Sema(llvm::BumpPtrAllocator &Allocator, const SourceManager &SourceMgr, 53a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko DiagnosticsEngine &Diags); 54a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 55a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko void setDecl(const Decl *D); 568d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 578d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ParagraphComment *actOnParagraphComment( 588d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ArrayRef<InlineContentComment *> Content); 598d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 608d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko BlockCommandComment *actOnBlockCommandStart(SourceLocation LocBegin, 618d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 628d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Name); 638d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 648d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko BlockCommandComment *actOnBlockCommandArgs( 658d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko BlockCommandComment *Command, 668d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ArrayRef<BlockCommandComment::Argument> Args); 678d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 688d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko BlockCommandComment *actOnBlockCommandFinish(BlockCommandComment *Command, 698d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ParagraphComment *Paragraph); 708d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 718d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ParamCommandComment *actOnParamCommandStart(SourceLocation LocBegin, 728d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 738d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Name); 748d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 75a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ParamCommandComment *actOnParamCommandDirectionArg( 76a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ParamCommandComment *Command, 778d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation ArgLocBegin, 788d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation ArgLocEnd, 79a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko StringRef Arg); 80a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 81a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ParamCommandComment *actOnParamCommandParamNameArg( 82a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ParamCommandComment *Command, 83a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko SourceLocation ArgLocBegin, 84a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko SourceLocation ArgLocEnd, 85a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko StringRef Arg); 868d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 878d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ParamCommandComment *actOnParamCommandFinish(ParamCommandComment *Command, 888d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ParagraphComment *Paragraph); 898d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 908d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko InlineCommandComment *actOnInlineCommand(SourceLocation CommandLocBegin, 918d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation CommandLocEnd, 928d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef CommandName); 938d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 948d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko InlineCommandComment *actOnInlineCommand(SourceLocation CommandLocBegin, 958d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation CommandLocEnd, 968d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef CommandName, 978d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation ArgLocBegin, 988d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation ArgLocEnd, 998d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Arg); 1008d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1018d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko InlineContentComment *actOnUnknownCommand(SourceLocation LocBegin, 1028d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 1038d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Name); 1048d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1058d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko TextComment *actOnText(SourceLocation LocBegin, 1068d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 1078d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Text); 1088d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1098d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimBlockComment *actOnVerbatimBlockStart(SourceLocation Loc, 1108d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Name); 1118d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1128d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimBlockLineComment *actOnVerbatimBlockLine(SourceLocation Loc, 1138d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Text); 1148d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1158d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimBlockComment *actOnVerbatimBlockFinish( 1168d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimBlockComment *Block, 1178d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation CloseNameLocBegin, 1188d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef CloseName, 1198d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ArrayRef<VerbatimBlockLineComment *> Lines); 1208d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1218d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimLineComment *actOnVerbatimLine(SourceLocation LocBegin, 1228d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Name, 1238d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation TextBegin, 1248d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Text); 1258d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1268d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko HTMLOpenTagComment *actOnHTMLOpenTagStart(SourceLocation LocBegin, 1278d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef TagName); 1288d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1298d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko HTMLOpenTagComment *actOnHTMLOpenTagFinish( 1308d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko HTMLOpenTagComment *Tag, 1318d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ArrayRef<HTMLOpenTagComment::Attribute> Attrs, 132a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko SourceLocation GreaterLoc, 133a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko bool IsSelfClosing); 1348d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1358d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko HTMLCloseTagComment *actOnHTMLCloseTag(SourceLocation LocBegin, 1368d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 1378d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef TagName); 1388d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1398d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko FullComment *actOnFullComment(ArrayRef<BlockContentComment *> Blocks); 1408d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 141a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko void checkBlockCommandEmptyParagraph(BlockCommandComment *Command); 142a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 143a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Returns index of a function parameter with a given name. 144a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko unsigned resolveParmVarReference(StringRef Name, 145a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko const ParmVarDecl * const *ParamVars, 146a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko unsigned NumParams); 147a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 148a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Returns index of a function parameter with the name closest to a given 149a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// typo. 150a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko unsigned correctTypoInParmVarReference(StringRef Typo, 151a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko const ParmVarDecl * const *ParamVars, 152a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko unsigned NumParams); 153a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1548d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko bool isBlockCommand(StringRef Name); 1558d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko bool isParamCommand(StringRef Name); 1568d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko unsigned getBlockCommandNumArgs(StringRef Name); 1578d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1588d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko bool isInlineCommand(StringRef Name); 1593d986980bd02594b1a5aa7b9f9f68d201621ced7Dmitri Gribenko 1603d986980bd02594b1a5aa7b9f9f68d201621ced7Dmitri Gribenko bool isHTMLCloseTagOptional(StringRef Name); 1613d986980bd02594b1a5aa7b9f9f68d201621ced7Dmitri Gribenko bool isHTMLCloseTagForbidden(StringRef Name); 1628d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko}; 1638d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1648d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} // end namespace comments 1658d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} // end namespace clang 1668d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1678d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#endif 1688d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 169