Skip to content

Commit d0aa6e3

Browse files
committed
Fix traits w/o bodies not getting the correct docstring
1 parent 6c2781e commit d0aa6e3

File tree

2 files changed

+38
-13
lines changed

2 files changed

+38
-13
lines changed

src/dotty/tools/dotc/parsing/Scanners.scala

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -185,14 +185,12 @@ object Scanners {
185185
/** The currently closest docstring, replaced every time a new docstring is
186186
* encountered
187187
*/
188-
var closestDocString: Option[Comment] = None
188+
val closestDocString: mutable.Queue[Comment] = mutable.Queue.empty
189189

190190
/** Returns `closestDocString`'s raw string and sets it to `None` */
191-
def getDocString(): Option[String] = {
192-
val current = closestDocString.map(_.chrs)
193-
closestDocString = None
194-
current
195-
}
191+
def getDocString(): Option[String] =
192+
if (closestDocString.isEmpty) None
193+
else Some(closestDocString.dequeue.chrs)
196194

197195
/** A buffer for comments */
198196
val commentBuf = new StringBuilder
@@ -570,9 +568,8 @@ object Scanners {
570568
val pos = Position(start, charOffset, start)
571569
val comment = Comment(pos, flushBuf(commentBuf))
572570

573-
closestDocString =
574-
if (comment.isDocComment) Option(comment)
575-
else closestDocString
571+
if (comment.isDocComment)
572+
closestDocString.enqueue(comment)
576573

577574
if (keepComments)
578575
revComments = comment :: revComments

test/test/DottyDocTests.scala

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ object DottyDocTests extends DottyTest {
5959
MultipleClassesInPackage,
6060
SingleCaseClassWithoutPackage,
6161
SingleTraitWihoutPackage,
62-
MultipleTraitsWithoutPackage
62+
MultipleTraitsWithoutPackage,
63+
MultipleMixedEntitiesWithPackage
6364
)
6465

6566
def main(args: Array[String]): Unit = {
@@ -140,14 +141,13 @@ case object SingleTraitWihoutPackage extends DottyDocTest {
140141
}
141142

142143
case object MultipleTraitsWithoutPackage extends DottyDocTest {
143-
//TODO: This will fail if the tratis don't have bodies, because of the Scanner
144144
override val source =
145145
"""
146146
|/** Trait1 docstring */
147-
|trait Trait1 {}
147+
|trait Trait1
148148
|
149149
|/** Trait2 docstring */
150-
|trait Trait2 {}
150+
|trait Trait2
151151
""".stripMargin
152152

153153
override def assertion = {
@@ -157,3 +157,31 @@ case object MultipleTraitsWithoutPackage extends DottyDocTest {
157157
}
158158
}
159159
}
160+
161+
case object MultipleMixedEntitiesWithPackage extends DottyDocTest {
162+
override val source =
163+
"""
164+
|/** Trait1 docstring */
165+
|trait Trait1
166+
|
167+
|/** Class2 docstring */
168+
|class Class2(val x: Int)
169+
|
170+
|/** CaseClass3 docstring */
171+
|case class CaseClass3()
172+
|
173+
|case class NoComment()
174+
|
175+
|/** AbstractClass4 docstring */
176+
|abstract class AbstractClass4(val x: Int)
177+
""".stripMargin
178+
179+
override def assertion = {
180+
case PackageDef(_, Seq(t1 @ TypeDef(_,_), c2 @ TypeDef(_,_), cc3 @ TypeDef(_,_), _, ac4 @ TypeDef(_,_))) => {
181+
checkDocString(t1.rawComment, "/** Trait1 docstring */")
182+
checkDocString(c2.rawComment, "/** Class2 docstring */")
183+
checkDocString(cc3.rawComment, "/** CaseClass3 docstring */")
184+
checkDocString(ac4.rawComment, "/** AbstractClass4 docstring */")
185+
}
186+
}
187+
}

0 commit comments

Comments
 (0)