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