[Markup] Add Tag field

You can now specify multiple - Tag: simple fields in documentation
comments for general purpose use. These are not currently intended
to show up in rendered documentation but are for metadata purposes
only.
This commit is contained in:
David Farler
2017-02-16 16:36:56 -08:00
parent 3b48b4b697
commit 2dd61ad0eb
5 changed files with 21 additions and 3 deletions

View File

@@ -22,6 +22,7 @@
#include "swift/AST/PrettyStackTrace.h"
#include "swift/AST/RawComment.h"
#include "swift/Markup/Markup.h"
#include "llvm/ADT/SetVector.h"
using namespace swift;
@@ -214,6 +215,7 @@ bool extractSimpleField(
SmallVectorImpl<const swift::markup::MarkupASTNode *> &BodyNodes) {
auto Children = L->getChildren();
SmallVector<swift::markup::MarkupASTNode *, 8> NormalItems;
llvm::SmallSetVector<StringRef, 8> Tags;
for (auto Child : Children) {
auto I = dyn_cast<swift::markup::Item>(Child);
if (!I) {
@@ -261,17 +263,25 @@ bool extractSimpleField(
ParagraphText->setLiteralContent(Remainder);
auto Field = swift::markup::createSimpleField(MC, Tag, ItemChildren);
if (auto RF = dyn_cast<swift::markup::ReturnsField>(Field))
if (auto RF = dyn_cast<swift::markup::ReturnsField>(Field)) {
Parts.ReturnsField = RF;
else if (auto TF = dyn_cast<swift::markup::ThrowsField>(Field))
} else if (auto TF = dyn_cast<swift::markup::ThrowsField>(Field)) {
Parts.ThrowsField = TF;
else
} else if (auto TF = dyn_cast<swift::markup::TagField>(Field)) {
llvm::SmallString<64> Scratch;
llvm::raw_svector_ostream OS(Scratch);
printInlinesUnder(TF, OS);
Tags.insert(MC.allocateCopy(OS.str()));
} else {
BodyNodes.push_back(Field);
}
}
if (NormalItems.size() != Children.size())
L->setChildren(NormalItems);
Parts.Tags = MC.allocateCopy(Tags.getArrayRef());
return NormalItems.size() == 0;
}