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 1730a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth#include "clang/AST/Comment.h" 18a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko#include "clang/Basic/Diagnostic.h" 198d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "clang/Basic/SourceLocation.h" 208d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "llvm/ADT/ArrayRef.h" 2196b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko#include "llvm/ADT/StringMap.h" 2230a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth#include "llvm/ADT/StringRef.h" 238d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "llvm/Support/Allocator.h" 248d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 258d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkonamespace clang { 26a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkoclass Decl; 27a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkoclass SourceMgr; 281952354bd376062c3ab3d328c0fc6c36530c9309Dmitri Gribenkoclass Preprocessor; 29a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 308d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkonamespace comments { 31aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenkoclass CommandTraits; 328d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 338d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkoclass Sema { 34da5922f4864b5da254c6676af8833c42adaa6d86Dmitri Gribenko Sema(const Sema &) LLVM_DELETED_FUNCTION; 35da5922f4864b5da254c6676af8833c42adaa6d86Dmitri Gribenko void operator=(const Sema &) LLVM_DELETED_FUNCTION; 366f36366c85dc81d67d70efdeeea4cfc382053febDmitri Gribenko 37a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Allocator for AST nodes. 388d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko llvm::BumpPtrAllocator &Allocator; 398d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 40a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Source manager for the comment being parsed. 41a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko const SourceManager &SourceMgr; 42a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 43a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko DiagnosticsEngine &Diags; 44a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 45e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko CommandTraits &Traits; 46aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 471952354bd376062c3ab3d328c0fc6c36530c9309Dmitri Gribenko const Preprocessor *PP; 481952354bd376062c3ab3d328c0fc6c36530c9309Dmitri Gribenko 491ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko /// Information about the declaration this comment is attached to. 501ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko DeclInfo *ThisDeclInfo; 518487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 5296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko /// Comment AST nodes that correspond to parameter names in 5396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko /// \c TemplateParameters. 5496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko /// 551ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko /// Contains a valid value if \c DeclInfo->IsFilled is true. 5696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko llvm::StringMap<TParamCommandComment *> TemplateParameterDocs; 5796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 589443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko /// AST node for the \\brief command and its aliases. 599443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko const BlockCommandComment *BriefCommand; 609443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko 61f843a580c4a54ca147f22422ee8ccfd2347784fcFariborz Jahanian /// AST node for the \\headerfile command. 62f843a580c4a54ca147f22422ee8ccfd2347784fcFariborz Jahanian const BlockCommandComment *HeaderfileCommand; 639443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko 64a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) { 65a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko return Diags.Report(Loc, DiagID); 66a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko } 67a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 68a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// A stack of HTML tags that are currently open (not matched with closing 69a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// tags). 703f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko SmallVector<HTMLStartTagComment *, 8> HTMLOpenTags; 71a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 728d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkopublic: 73a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko Sema(llvm::BumpPtrAllocator &Allocator, const SourceManager &SourceMgr, 741952354bd376062c3ab3d328c0fc6c36530c9309Dmitri Gribenko DiagnosticsEngine &Diags, CommandTraits &Traits, 751952354bd376062c3ab3d328c0fc6c36530c9309Dmitri Gribenko const Preprocessor *PP); 76a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 77a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko void setDecl(const Decl *D); 788d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7996b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko /// Returns a copy of array, owned by Sema's allocator. 8096b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko template<typename T> 8196b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko ArrayRef<T> copyArray(ArrayRef<T> Source) { 8296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko size_t Size = Source.size(); 8396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko if (Size != 0) { 8496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko T *Mem = Allocator.Allocate<T>(Size); 8596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko std::uninitialized_copy(Source.begin(), Source.end(), Mem); 8696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko return llvm::makeArrayRef(Mem, Size); 876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return ArrayRef<T>(); 8996b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko } 9096b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 918d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ParagraphComment *actOnParagraphComment( 928d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ArrayRef<InlineContentComment *> Content); 938d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 948d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko BlockCommandComment *actOnBlockCommandStart(SourceLocation LocBegin, 958d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 968536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian unsigned CommandID, 97808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko CommandMarkerKind CommandMarker); 988d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 997d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnBlockCommandArgs(BlockCommandComment *Command, 1007d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ArrayRef<BlockCommandComment::Argument> Args); 1018d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1027d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnBlockCommandFinish(BlockCommandComment *Command, 1037d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ParagraphComment *Paragraph); 1048d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1058d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ParamCommandComment *actOnParamCommandStart(SourceLocation LocBegin, 1068d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 1078536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian unsigned CommandID, 108808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko CommandMarkerKind CommandMarker); 1098d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1107d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnParamCommandDirectionArg(ParamCommandComment *Command, 1117d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation ArgLocBegin, 1127d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation ArgLocEnd, 1137d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko StringRef Arg); 114a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1157d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnParamCommandParamNameArg(ParamCommandComment *Command, 1167d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation ArgLocBegin, 1177d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation ArgLocEnd, 1187d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko StringRef Arg); 1198d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1207d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnParamCommandFinish(ParamCommandComment *Command, 1217d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ParagraphComment *Paragraph); 1228d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 12396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko TParamCommandComment *actOnTParamCommandStart(SourceLocation LocBegin, 12496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko SourceLocation LocEnd, 1258536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian unsigned CommandID, 126808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko CommandMarkerKind CommandMarker); 12796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 1287d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnTParamCommandParamNameArg(TParamCommandComment *Command, 1297d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation ArgLocBegin, 1307d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation ArgLocEnd, 1317d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko StringRef Arg); 13296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 1337d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnTParamCommandFinish(TParamCommandComment *Command, 1347d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ParagraphComment *Paragraph); 13596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 1368d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko InlineCommandComment *actOnInlineCommand(SourceLocation CommandLocBegin, 1378d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation CommandLocEnd, 138e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko unsigned CommandID); 1398d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1408d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko InlineCommandComment *actOnInlineCommand(SourceLocation CommandLocBegin, 1418d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation CommandLocEnd, 142e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko unsigned CommandID, 1438d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation ArgLocBegin, 1448d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation ArgLocEnd, 1458d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Arg); 1468d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1478d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko InlineContentComment *actOnUnknownCommand(SourceLocation LocBegin, 1488d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 149b0b8a96df25660cbdbf35d23c3ff5887c33f82f9Dmitri Gribenko StringRef CommandName); 150b0b8a96df25660cbdbf35d23c3ff5887c33f82f9Dmitri Gribenko 151b0b8a96df25660cbdbf35d23c3ff5887c33f82f9Dmitri Gribenko InlineContentComment *actOnUnknownCommand(SourceLocation LocBegin, 152b0b8a96df25660cbdbf35d23c3ff5887c33f82f9Dmitri Gribenko SourceLocation LocEnd, 153b0b8a96df25660cbdbf35d23c3ff5887c33f82f9Dmitri Gribenko unsigned CommandID); 1548d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1558d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko TextComment *actOnText(SourceLocation LocBegin, 1568d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 1578d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Text); 1588d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1598d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimBlockComment *actOnVerbatimBlockStart(SourceLocation Loc, 160e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko unsigned CommandID); 1618d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1628d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimBlockLineComment *actOnVerbatimBlockLine(SourceLocation Loc, 1638d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Text); 1648d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1657d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnVerbatimBlockFinish(VerbatimBlockComment *Block, 1667d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation CloseNameLocBegin, 1677d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko StringRef CloseName, 1687d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ArrayRef<VerbatimBlockLineComment *> Lines); 1698d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1708d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimLineComment *actOnVerbatimLine(SourceLocation LocBegin, 171e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko unsigned CommandID, 1728d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation TextBegin, 1738d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Text); 1748d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1753f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko HTMLStartTagComment *actOnHTMLStartTagStart(SourceLocation LocBegin, 1763f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko StringRef TagName); 1778d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1787d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnHTMLStartTagFinish(HTMLStartTagComment *Tag, 1797d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ArrayRef<HTMLStartTagComment::Attribute> Attrs, 1807d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation GreaterLoc, 1817d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko bool IsSelfClosing); 1828d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1833f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko HTMLEndTagComment *actOnHTMLEndTag(SourceLocation LocBegin, 1843f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko SourceLocation LocEnd, 1853f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko StringRef TagName); 1868d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1878d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko FullComment *actOnFullComment(ArrayRef<BlockContentComment *> Blocks); 1888d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 189a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko void checkBlockCommandEmptyParagraph(BlockCommandComment *Command); 190a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 19189ab7d0012ffe02a335b765eeb9b48977a5ecd79Dmitri Gribenko void checkReturnsCommand(const BlockCommandComment *Command); 19289ab7d0012ffe02a335b765eeb9b48977a5ecd79Dmitri Gribenko 1939443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko /// Emit diagnostics about duplicate block commands that should be 1949443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko /// used only once per comment, e.g., \\brief and \\returns. 1959443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko void checkBlockCommandDuplicate(const BlockCommandComment *Command); 1969443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko 1970bd9838751384181ff387f2fb346896792b89617Dmitri Gribenko void checkDeprecatedCommand(const BlockCommandComment *Comment); 1982a268f2629b49958427e8eb02f2c3d565be71accFariborz Jahanian 1992a268f2629b49958427e8eb02f2c3d565be71accFariborz Jahanian void checkFunctionDeclVerbatimLine(const BlockCommandComment *Comment); 20028c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian 20128c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian void checkContainerDeclVerbatimLine(const BlockCommandComment *Comment); 20228c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian 20328c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian void checkContainerDecl(const BlockCommandComment *Comment); 2040bd9838751384181ff387f2fb346896792b89617Dmitri Gribenko 2059edd2c8a2ff6c6326ff2d5b081929e4baaa798edDmitri Gribenko /// Resolve parameter names to parameter indexes in function declaration. 2069edd2c8a2ff6c6326ff2d5b081929e4baaa798edDmitri Gribenko /// Emit diagnostics about unknown parametrs. 2079edd2c8a2ff6c6326ff2d5b081929e4baaa798edDmitri Gribenko void resolveParamCommandIndexes(const FullComment *FC); 2089edd2c8a2ff6c6326ff2d5b081929e4baaa798edDmitri Gribenko 2098487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko bool isFunctionDecl(); 210eb8f69f094e95d0132e4a6817a2111ad188ab087Fariborz Jahanian bool isAnyFunctionDecl(); 211a558d2e29817e36798875c96efb62251e53ff024Dmitri Gribenko 212a558d2e29817e36798875c96efb62251e53ff024Dmitri Gribenko /// \returns \c true if declaration that this comment is attached to declares 213a558d2e29817e36798875c96efb62251e53ff024Dmitri Gribenko /// a function pointer. 21499a7057098c56211e641705e1ff38d4b7c8b309dFariborz Jahanian bool isFunctionPointerVarDecl(); 215c5b0054693b3b3cafe6a13549358c22e07fcd4ffDmitri Gribenko bool isFunctionOrMethodVariadic(); 21699a7057098c56211e641705e1ff38d4b7c8b309dFariborz Jahanian bool isObjCMethodDecl(); 217664e860beb2550bef24fb8946192f61648a71d7fFariborz Jahanian bool isObjCPropertyDecl(); 21804bf29eb1b197e0a103139ab5d63b0b97432f004Dmitri Gribenko bool isTemplateOrSpecialization(); 219b421b56d5a83c5bcae576b714ebd9df7b745368dFariborz Jahanian bool isRecordLikeDecl(); 220b421b56d5a83c5bcae576b714ebd9df7b745368dFariborz Jahanian bool isClassOrStructDecl(); 22128c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian bool isUnionDecl(); 22228c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian bool isObjCInterfaceDecl(); 22328c1cd2138f700742235e1e720c1f7e6dc75a11aFariborz Jahanian bool isObjCProtocolDecl(); 2242d588b4bc7127adf1a1c621002dfe452a99fef6fFariborz Jahanian bool isClassTemplateDecl(); 2252d588b4bc7127adf1a1c621002dfe452a99fef6fFariborz Jahanian bool isFunctionTemplateDecl(); 22696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 2278487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko ArrayRef<const ParmVarDecl *> getParamVars(); 2288487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 2291ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko /// Extract all important semantic information from 2301ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko /// \c ThisDeclInfo->ThisDecl into \c ThisDeclInfo members. 2318487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko void inspectThisDecl(); 2328487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 233a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Returns index of a function parameter with a given name. 234a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko unsigned resolveParmVarReference(StringRef Name, 2358487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko ArrayRef<const ParmVarDecl *> ParamVars); 236a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 237a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Returns index of a function parameter with the name closest to a given 238a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// typo. 239a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko unsigned correctTypoInParmVarReference(StringRef Typo, 2408487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko ArrayRef<const ParmVarDecl *> ParamVars); 241a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 24296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko bool resolveTParamReference(StringRef Name, 24396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko const TemplateParameterList *TemplateParameters, 24496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko SmallVectorImpl<unsigned> *Position); 24596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 24696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko StringRef correctTypoInTParamReference( 24796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko StringRef Typo, 24896b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko const TemplateParameterList *TemplateParameters); 24996b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 2502d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko InlineCommandComment::RenderKind 2512d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko getInlineCommandRenderKind(StringRef Name) const; 2528d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko}; 2538d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 2548d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} // end namespace comments 2558d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} // end namespace clang 2568d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 2578d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#endif 2588d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 259