@@ -13,6 +13,59 @@ trait CommentParser extends util.MemberLookup {
13
13
import Regexes ._
14
14
import model .internal ._
15
15
16
+ case class FullComment (
17
+ body : Body ,
18
+ authors : List [Body ],
19
+ see : List [Body ],
20
+ result : Option [Body ],
21
+ throws : Map [String , Body ],
22
+ valueParams : Map [String , Body ],
23
+ typeParams : Map [String , Body ],
24
+ version : Option [Body ],
25
+ since : Option [Body ],
26
+ todo : List [Body ],
27
+ deprecated : Option [Body ],
28
+ note : List [Body ],
29
+ example : List [Body ],
30
+ constructor : Option [Body ],
31
+ group : Option [Body ],
32
+ groupDesc : Map [String , Body ],
33
+ groupNames : Map [String , Body ],
34
+ groupPrio : Map [String , Body ],
35
+ hideImplicitConversions : List [Body ],
36
+ shortDescription : List [Body ]
37
+ ) {
38
+
39
+ /**
40
+ * Transform this CommentParser.FullComment to a Comment using the supplied
41
+ * Body transformer
42
+ */
43
+ def toComment (transform : Body => String ) = Comment (
44
+ transform(body),
45
+ short =
46
+ if (shortDescription.nonEmpty) shortDescription.map(transform).mkString
47
+ else body.summary.map(transform).getOrElse(" " ),
48
+ authors.map(transform),
49
+ see.map(transform),
50
+ result.map(transform),
51
+ throws.map { case (k, v) => (k, transform(v)) },
52
+ valueParams.map { case (k, v) => (k, transform(v)) },
53
+ typeParams.map { case (k, v) => (k, transform(v)) },
54
+ version.map(transform),
55
+ since.map(transform),
56
+ todo.map(transform),
57
+ deprecated.map(transform),
58
+ note.map(transform),
59
+ example.map(transform),
60
+ constructor.map(transform),
61
+ group.map(transform),
62
+ groupDesc.map { case (k, v) => (k, transform(v)) },
63
+ groupNames.map { case (k, v) => (k, transform(v)) },
64
+ groupPrio.map { case (k, v) => (k, transform(v)) },
65
+ hideImplicitConversions.map(transform)
66
+ )
67
+ }
68
+
16
69
/** Parses a raw comment string into a `Comment` object.
17
70
* @param packages all packages parsed by Scaladoc tool, used for lookup
18
71
* @param cleanComment a cleaned comment to be parsed
@@ -26,7 +79,7 @@ trait CommentParser extends util.MemberLookup {
26
79
src : String ,
27
80
pos : Position ,
28
81
site : Symbol = NoSymbol
29
- )(implicit ctx : Context ): Body = {
82
+ )(implicit ctx : Context ): FullComment = {
30
83
31
84
/** Parses a comment (in the form of a list of lines) to a `Comment`
32
85
* instance, recursively on lines. To do so, it splits the whole comment
@@ -48,7 +101,7 @@ trait CommentParser extends util.MemberLookup {
48
101
lastTagKey : Option [TagKey ],
49
102
remaining : List [String ],
50
103
inCodeBlock : Boolean
51
- ): Body = remaining match {
104
+ ): FullComment = remaining match {
52
105
53
106
case CodeBlockStartRegex (before, marker, after) :: ls if (! inCodeBlock) =>
54
107
if (! before.trim.isEmpty && ! after.trim.isEmpty)
@@ -155,8 +208,8 @@ trait CommentParser extends util.MemberLookup {
155
208
case _ => None
156
209
}
157
210
158
- def allTags (key : SimpleTagKey ): List [Body ] =
159
- (bodyTags remove key).getOrElse(Nil ).filterNot(_.blocks.isEmpty)
211
+ def allTags [ B ] (key : SimpleTagKey ): List [Body ] =
212
+ (bodyTags remove key).getOrElse(Nil ).filterNot(_.blocks.isEmpty).reverse
160
213
161
214
def allSymsOneTag (key : TagKey , filterEmpty : Boolean = true ): Map [String , Body ] = {
162
215
val keys : Seq [SymbolTagKey ] =
@@ -193,37 +246,33 @@ trait CommentParser extends util.MemberLookup {
193
246
}
194
247
}
195
248
196
- // TODO: this method should return a parsed comment with the members below
197
- // val com = createComment (
198
- // body0 = Some(parseWikiAtSymbol(docBody.toString, pos, site)),
199
- // authors0 = allTags(SimpleTagKey("author")),
200
- // see0 = allTags(SimpleTagKey("see")),
201
- // result0 = oneTag(SimpleTagKey("return")),
202
- // throws0 = linkedExceptions,
203
- // valueParams0 = allSymsOneTag(SimpleTagKey("param")),
204
- // typeParams0 = allSymsOneTag(SimpleTagKey("tparam")),
205
- // version0 = oneTag(SimpleTagKey("version")),
206
- // since0 = oneTag(SimpleTagKey("since")),
207
- // todo0 = allTags(SimpleTagKey("todo")),
208
- // deprecated0 = oneTag(SimpleTagKey("deprecated"), filterEmpty = false),
209
- // note0 = allTags(SimpleTagKey("note")),
210
- // example0 = allTags(SimpleTagKey("example")),
211
- // constructor0 = oneTag(SimpleTagKey("constructor")),
212
- // source0 = Some(clean(src).mkString("\n")),
213
- // inheritDiagram0 = inheritDiagramText,
214
- // contentDiagram0 = contentDiagramText,
215
- // group0 = oneTag(SimpleTagKey("group")),
216
- // groupDesc0 = allSymsOneTag(SimpleTagKey("groupdesc")),
217
- // groupNames0 = allSymsOneTag(SimpleTagKey("groupname")),
218
- // groupPrio0 = allSymsOneTag(SimpleTagKey("groupprio")),
219
- // hideImplicitConversions0 = allTags(SimpleTagKey("hideImplicitConversion")),
220
- // shortDescription0 = allTags(SimpleTagKey("shortDescription"))
221
- // )
222
- //
223
- // for ((key, _) <- bodyTags)
224
- // dottydoc.println(s"$pos: Tag '@${key.name}' is not recognised")
225
-
226
- parseWikiAtSymbol(entity, packages, docBody.toString, pos, site)
249
+ val cmt = FullComment (
250
+ body = parseWikiAtSymbol(entity, packages, docBody.toString, pos, site),
251
+ authors = allTags(SimpleTagKey (" author" )),
252
+ see = allTags(SimpleTagKey (" see" )),
253
+ result = oneTag(SimpleTagKey (" return" )),
254
+ throws = linkedExceptions,
255
+ valueParams = allSymsOneTag(SimpleTagKey (" param" )),
256
+ typeParams = allSymsOneTag(SimpleTagKey (" tparam" )),
257
+ version = oneTag(SimpleTagKey (" version" )),
258
+ since = oneTag(SimpleTagKey (" since" )),
259
+ todo = allTags(SimpleTagKey (" todo" )),
260
+ deprecated = oneTag(SimpleTagKey (" deprecated" ), filterEmpty = false ),
261
+ note = allTags(SimpleTagKey (" note" )),
262
+ example = allTags(SimpleTagKey (" example" )),
263
+ constructor = oneTag(SimpleTagKey (" constructor" )),
264
+ group = oneTag(SimpleTagKey (" group" )),
265
+ groupDesc = allSymsOneTag(SimpleTagKey (" groupdesc" )),
266
+ groupNames = allSymsOneTag(SimpleTagKey (" groupname" )),
267
+ groupPrio = allSymsOneTag(SimpleTagKey (" groupprio" )),
268
+ hideImplicitConversions = allTags(SimpleTagKey (" hideImplicitConversion" )),
269
+ shortDescription = allTags(SimpleTagKey (" shortDescription" ))
270
+ )
271
+
272
+ for ((key, _) <- bodyTags)
273
+ dottydoc.println(s " $pos: Tag '@ ${key.name}' is not recognised " )
274
+
275
+ cmt
227
276
}
228
277
}
229
278
0 commit comments