Skip to content

Commit 089e120

Browse files
authored
Merge pull request #7576 from bitjammer/tag-markup-field
[Markup] Add Tag field rdar://problem/30563792
2 parents 6752266 + 2dd61ad commit 089e120

File tree

5 files changed

+21
-3
lines changed

5 files changed

+21
-3
lines changed

include/swift/AST/Comment.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ class DocComment {
3939
return Parts;
4040
}
4141

42+
ArrayRef<StringRef> getTags() const {
43+
return Parts.Tags;
44+
}
45+
4246
Optional<const swift::markup::Paragraph *> getBrief() const {
4347
return Parts.Brief;
4448
}

include/swift/Markup/AST.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class MarkupASTNode;
2626
class Paragraph;
2727
class ParamField;
2828
class ReturnsField;
29+
class TagField;
2930
class ThrowsField;
3031

3132
/// The basic structure of a doc comment attached to a Swift
@@ -36,6 +37,7 @@ struct CommentParts {
3637
ArrayRef<ParamField *> ParamFields;
3738
Optional<const ReturnsField *> ReturnsField;
3839
Optional<const ThrowsField *> ThrowsField;
40+
ArrayRef<StringRef> Tags;
3941

4042
bool isEmpty() const {
4143
return !Brief.hasValue() &&

include/swift/Markup/ASTNodes.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ MARKUP_AST_NODE(PrivateExtension, MarkupASTNode)
7272
MARKUP_AST_NODE(RequiresField, PrivateExtension)
7373
MARKUP_AST_NODE(SeeField, PrivateExtension)
7474
MARKUP_AST_NODE(SinceField, PrivateExtension)
75+
MARKUP_AST_NODE(TagField, PrivateExtension)
7576
MARKUP_AST_NODE(TODOField, PrivateExtension)
7677
MARKUP_AST_NODE(ThrowsField, PrivateExtension)
7778
MARKUP_AST_NODE(VersionField, PrivateExtension)

include/swift/Markup/SimpleFields.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ MARKUP_SIMPLE_FIELD(ThrowsField, throws, Throws)
4343
MARKUP_SIMPLE_FIELD(RequiresField, requires, Requires)
4444
MARKUP_SIMPLE_FIELD(SeeField, seealso, See)
4545
MARKUP_SIMPLE_FIELD(SinceField, since, Since)
46+
MARKUP_SIMPLE_FIELD(TagField, tag, Tag)
4647
MARKUP_SIMPLE_FIELD(TODOField, todo, TODO)
4748
MARKUP_SIMPLE_FIELD(VersionField, version, Version)
4849
MARKUP_SIMPLE_FIELD(WarningField, warning, Warning)

lib/AST/DocComment.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "swift/AST/PrettyStackTrace.h"
2323
#include "swift/AST/RawComment.h"
2424
#include "swift/Markup/Markup.h"
25+
#include "llvm/ADT/SetVector.h"
2526

2627
using namespace swift;
2728

@@ -214,6 +215,7 @@ bool extractSimpleField(
214215
SmallVectorImpl<const swift::markup::MarkupASTNode *> &BodyNodes) {
215216
auto Children = L->getChildren();
216217
SmallVector<swift::markup::MarkupASTNode *, 8> NormalItems;
218+
llvm::SmallSetVector<StringRef, 8> Tags;
217219
for (auto Child : Children) {
218220
auto I = dyn_cast<swift::markup::Item>(Child);
219221
if (!I) {
@@ -261,17 +263,25 @@ bool extractSimpleField(
261263
ParagraphText->setLiteralContent(Remainder);
262264
auto Field = swift::markup::createSimpleField(MC, Tag, ItemChildren);
263265

264-
if (auto RF = dyn_cast<swift::markup::ReturnsField>(Field))
266+
if (auto RF = dyn_cast<swift::markup::ReturnsField>(Field)) {
265267
Parts.ReturnsField = RF;
266-
else if (auto TF = dyn_cast<swift::markup::ThrowsField>(Field))
268+
} else if (auto TF = dyn_cast<swift::markup::ThrowsField>(Field)) {
267269
Parts.ThrowsField = TF;
268-
else
270+
} else if (auto TF = dyn_cast<swift::markup::TagField>(Field)) {
271+
llvm::SmallString<64> Scratch;
272+
llvm::raw_svector_ostream OS(Scratch);
273+
printInlinesUnder(TF, OS);
274+
Tags.insert(MC.allocateCopy(OS.str()));
275+
} else {
269276
BodyNodes.push_back(Field);
277+
}
270278
}
271279

272280
if (NormalItems.size() != Children.size())
273281
L->setChildren(NormalItems);
274282

283+
Parts.Tags = MC.allocateCopy(Tags.getArrayRef());
284+
275285
return NormalItems.size() == 0;
276286
}
277287

0 commit comments

Comments
 (0)