CommentSema.h revision aa58081902ad31927df02e8537d972eabe29d6df
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" 2296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko#include "llvm/ADT/StringMap.h" 238d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#include "llvm/Support/Allocator.h" 248d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 258d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkonamespace clang { 26a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkoclass Decl; 27a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenkoclass SourceMgr; 28a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 298d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkonamespace comments { 30aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenkoclass CommandTraits; 318d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 328d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkoclass Sema { 336f36366c85dc81d67d70efdeeea4cfc382053febDmitri Gribenko Sema(const Sema&); // DO NOT IMPLEMENT 346f36366c85dc81d67d70efdeeea4cfc382053febDmitri Gribenko void operator=(const Sema&); // DO NOT IMPLEMENT 356f36366c85dc81d67d70efdeeea4cfc382053febDmitri Gribenko 36a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Allocator for AST nodes. 378d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko llvm::BumpPtrAllocator &Allocator; 388d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 39a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Source manager for the comment being parsed. 40a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko const SourceManager &SourceMgr; 41a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 42a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko DiagnosticsEngine &Diags; 43a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 44aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko const CommandTraits &Traits; 45aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko 461ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko /// Information about the declaration this comment is attached to. 471ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko DeclInfo *ThisDeclInfo; 488487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 496582277bfc8bb587602e2c0689b6b2ff4b9bef53Dmitri Gribenko /// Comment AST nodes that correspond to \c ParamVars for which we have 506582277bfc8bb587602e2c0689b6b2ff4b9bef53Dmitri Gribenko /// found a \\param command or NULL if no documentation was found so far. 516582277bfc8bb587602e2c0689b6b2ff4b9bef53Dmitri Gribenko /// 521ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko /// Has correct size and contains valid values if \c DeclInfo->IsFilled is 536582277bfc8bb587602e2c0689b6b2ff4b9bef53Dmitri Gribenko /// true. 546582277bfc8bb587602e2c0689b6b2ff4b9bef53Dmitri Gribenko llvm::SmallVector<ParamCommandComment *, 8> ParamVarDocs; 556582277bfc8bb587602e2c0689b6b2ff4b9bef53Dmitri Gribenko 5696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko /// Comment AST nodes that correspond to parameter names in 5796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko /// \c TemplateParameters. 5896b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko /// 591ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko /// Contains a valid value if \c DeclInfo->IsFilled is true. 6096b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko llvm::StringMap<TParamCommandComment *> TemplateParameterDocs; 6196b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 629443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko /// AST node for the \\brief command and its aliases. 639443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko const BlockCommandComment *BriefCommand; 649443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko 659443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko /// AST node for the \\returns command and its aliases. 669443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko const BlockCommandComment *ReturnsCommand; 679443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko 68a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) { 69a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko return Diags.Report(Loc, DiagID); 70a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko } 71a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 72a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// A stack of HTML tags that are currently open (not matched with closing 73a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// tags). 743f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko SmallVector<HTMLStartTagComment *, 8> HTMLOpenTags; 75a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 768d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenkopublic: 77a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko Sema(llvm::BumpPtrAllocator &Allocator, const SourceManager &SourceMgr, 78aa58081902ad31927df02e8537d972eabe29d6dfDmitri Gribenko DiagnosticsEngine &Diags, const CommandTraits &Traits); 79a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 80a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko void setDecl(const Decl *D); 818d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 8296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko /// Returns a copy of array, owned by Sema's allocator. 8396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko template<typename T> 8496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko ArrayRef<T> copyArray(ArrayRef<T> Source) { 8596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko size_t Size = Source.size(); 8696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko if (Size != 0) { 8796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko T *Mem = Allocator.Allocate<T>(Size); 8896b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko std::uninitialized_copy(Source.begin(), Source.end(), Mem); 8996b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko return llvm::makeArrayRef(Mem, Size); 9096b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko } else 9196b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko return llvm::makeArrayRef(static_cast<T *>(NULL), 0); 9296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko } 9396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 948d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ParagraphComment *actOnParagraphComment( 958d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ArrayRef<InlineContentComment *> Content); 968d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 978d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko BlockCommandComment *actOnBlockCommandStart(SourceLocation LocBegin, 988d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 998d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Name); 1008d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1017d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnBlockCommandArgs(BlockCommandComment *Command, 1027d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ArrayRef<BlockCommandComment::Argument> Args); 1038d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1047d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnBlockCommandFinish(BlockCommandComment *Command, 1057d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ParagraphComment *Paragraph); 1068d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1078d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ParamCommandComment *actOnParamCommandStart(SourceLocation LocBegin, 1088d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 1098d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Name); 1108d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1117d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnParamCommandDirectionArg(ParamCommandComment *Command, 1127d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation ArgLocBegin, 1137d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation ArgLocEnd, 1147d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko StringRef Arg); 115a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1167d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnParamCommandParamNameArg(ParamCommandComment *Command, 1177d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation ArgLocBegin, 1187d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation ArgLocEnd, 1197d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko StringRef Arg); 1208d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1217d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnParamCommandFinish(ParamCommandComment *Command, 1227d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ParagraphComment *Paragraph); 1238d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 12496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko TParamCommandComment *actOnTParamCommandStart(SourceLocation LocBegin, 12596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko SourceLocation LocEnd, 12696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko StringRef Name); 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, 1388d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef CommandName); 1398d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1408d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko InlineCommandComment *actOnInlineCommand(SourceLocation CommandLocBegin, 1418d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation CommandLocEnd, 1428d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef CommandName, 1438d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation ArgLocBegin, 1448d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation ArgLocEnd, 1458d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Arg); 1468d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1478d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko InlineContentComment *actOnUnknownCommand(SourceLocation LocBegin, 1488d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 1498d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Name); 1508d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1518d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko TextComment *actOnText(SourceLocation LocBegin, 1528d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation LocEnd, 1538d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Text); 1548d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1558d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimBlockComment *actOnVerbatimBlockStart(SourceLocation Loc, 1568d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Name); 1578d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1588d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimBlockLineComment *actOnVerbatimBlockLine(SourceLocation Loc, 1598d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Text); 1608d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1617d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnVerbatimBlockFinish(VerbatimBlockComment *Block, 1627d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation CloseNameLocBegin, 1637d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko StringRef CloseName, 1647d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ArrayRef<VerbatimBlockLineComment *> Lines); 1658d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1668d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko VerbatimLineComment *actOnVerbatimLine(SourceLocation LocBegin, 1678d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Name, 1688d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko SourceLocation TextBegin, 1698d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko StringRef Text); 1708d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1713f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko HTMLStartTagComment *actOnHTMLStartTagStart(SourceLocation LocBegin, 1723f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko StringRef TagName); 1738d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1747d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko void actOnHTMLStartTagFinish(HTMLStartTagComment *Tag, 1757d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko ArrayRef<HTMLStartTagComment::Attribute> Attrs, 1767d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko SourceLocation GreaterLoc, 1777d9b51107999c1c1fada7319c4687fe570eb2c0bDmitri Gribenko bool IsSelfClosing); 1788d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1793f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko HTMLEndTagComment *actOnHTMLEndTag(SourceLocation LocBegin, 1803f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko SourceLocation LocEnd, 1813f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko StringRef TagName); 1828d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1838d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko FullComment *actOnFullComment(ArrayRef<BlockContentComment *> Blocks); 1848d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 185a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko void checkBlockCommandEmptyParagraph(BlockCommandComment *Command); 186a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 18789ab7d0012ffe02a335b765eeb9b48977a5ecd79Dmitri Gribenko void checkReturnsCommand(const BlockCommandComment *Command); 18889ab7d0012ffe02a335b765eeb9b48977a5ecd79Dmitri Gribenko 1899443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko /// Emit diagnostics about duplicate block commands that should be 1909443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko /// used only once per comment, e.g., \\brief and \\returns. 1919443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko void checkBlockCommandDuplicate(const BlockCommandComment *Command); 1929443c57150e870e308406e1e4e6d9d64712b417eDmitri Gribenko 1938487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko bool isFunctionDecl(); 19404bf29eb1b197e0a103139ab5d63b0b97432f004Dmitri Gribenko bool isTemplateOrSpecialization(); 19596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 1968487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko ArrayRef<const ParmVarDecl *> getParamVars(); 1978487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 1981ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko /// Extract all important semantic information from 1991ca7ecc8854ffea215c033a0d8482551bf1b73f0Dmitri Gribenko /// \c ThisDeclInfo->ThisDecl into \c ThisDeclInfo members. 2008487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko void inspectThisDecl(); 2018487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko 202a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Returns index of a function parameter with a given name. 203a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko unsigned resolveParmVarReference(StringRef Name, 2048487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko ArrayRef<const ParmVarDecl *> ParamVars); 205a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 206a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// Returns index of a function parameter with the name closest to a given 207a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko /// typo. 208a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko unsigned correctTypoInParmVarReference(StringRef Typo, 2098487c524fdfcea3da858fd0af850b4784c8096d0Dmitri Gribenko ArrayRef<const ParmVarDecl *> ParamVars); 210a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 21196b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko bool resolveTParamReference(StringRef Name, 21296b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko const TemplateParameterList *TemplateParameters, 21396b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko SmallVectorImpl<unsigned> *Position); 21496b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 21596b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko StringRef correctTypoInTParamReference( 21696b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko StringRef Typo, 21796b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko const TemplateParameterList *TemplateParameters); 21896b098674908eaa59a9128f3305cda6fbbdad563Dmitri Gribenko 2192d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko InlineCommandComment::RenderKind 2202d66a5016d4aacce362f89290261c8a1a6eef0d3Dmitri Gribenko getInlineCommandRenderKind(StringRef Name) const; 2213d986980bd02594b1a5aa7b9f9f68d201621ced7Dmitri Gribenko 2223f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko bool isHTMLEndTagOptional(StringRef Name); 2233f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko bool isHTMLEndTagForbidden(StringRef Name); 2248d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko}; 2258d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 2268d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} // end namespace comments 2278d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} // end namespace clang 2288d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 2298d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko#endif 2308d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 231