summaryrefslogtreecommitdiff
path: root/test/scaladoc
diff options
context:
space:
mode:
Diffstat (limited to 'test/scaladoc')
-rw-r--r--test/scaladoc/resources/SI-4014_0.scala4
-rw-r--r--test/scaladoc/resources/SI-4014_1.scala5
-rw-r--r--test/scaladoc/resources/SI-4014_2.scala6
-rw-r--r--test/scaladoc/resources/SI-8144.scala17
-rw-r--r--test/scaladoc/resources/SI-8514.scala10
-rw-r--r--test/scaladoc/resources/SI_4715.scala4
-rw-r--r--test/scaladoc/resources/Trac4325.scala4
-rw-r--r--test/scaladoc/resources/doc-root/Any.scala2
-rw-r--r--test/scaladoc/resources/doc-root/AnyRef.scala2
-rw-r--r--test/scaladoc/resources/doc-root/Nothing.scala2
-rw-r--r--test/scaladoc/resources/doc-root/Null.scala2
-rw-r--r--test/scaladoc/resources/implicits-base-res.scala80
-rw-r--r--test/scaladoc/resources/links.scala2
-rwxr-xr-xtest/scaladoc/run/SI-191-deprecated.check1
-rwxr-xr-xtest/scaladoc/run/SI-191-deprecated.scala72
-rw-r--r--test/scaladoc/run/SI-4676.scala3
-rw-r--r--test/scaladoc/run/SI-6812.check1
-rw-r--r--test/scaladoc/run/SI-6812.scala6
-rw-r--r--test/scaladoc/run/SI-6812b.check1
-rw-r--r--test/scaladoc/run/SI-6812b.scala24
-rw-r--r--test/scaladoc/run/diagrams-base.scala2
-rw-r--r--test/scaladoc/run/diagrams-filtering.scala2
-rw-r--r--test/scaladoc/run/implicits-base.scala148
-rw-r--r--test/scaladoc/run/links.scala2
-rw-r--r--test/scaladoc/run/t5527.check132
-rw-r--r--test/scaladoc/run/t5527.scala155
-rw-r--r--test/scaladoc/run/t7124.check3
-rw-r--r--test/scaladoc/run/t7124.scala22
-rw-r--r--test/scaladoc/run/t7876.check1
-rw-r--r--test/scaladoc/run/t7876.scala19
-rw-r--r--test/scaladoc/run/t7876b.check3
-rw-r--r--test/scaladoc/run/t7876b.scala24
-rw-r--r--test/scaladoc/run/t8407.check4
-rw-r--r--test/scaladoc/run/t8407.scala20
-rw-r--r--test/scaladoc/run/t8557.check1
-rw-r--r--test/scaladoc/run/t8557.scala32
-rw-r--r--test/scaladoc/run/t8672.check4
-rw-r--r--test/scaladoc/run/t8672.scala32
-rw-r--r--test/scaladoc/scalacheck/CommentFactoryTest.scala6
-rw-r--r--test/scaladoc/scalacheck/HtmlFactoryTest.scala137
-rw-r--r--test/scaladoc/scalacheck/IndexScriptTest.scala16
-rw-r--r--test/scaladoc/scalacheck/IndexTest.scala23
42 files changed, 809 insertions, 227 deletions
diff --git a/test/scaladoc/resources/SI-4014_0.scala b/test/scaladoc/resources/SI-4014_0.scala
new file mode 100644
index 0000000000..c398fcc1e0
--- /dev/null
+++ b/test/scaladoc/resources/SI-4014_0.scala
@@ -0,0 +1,4 @@
+/** A template without authors.
+ *
+ */
+trait Foo \ No newline at end of file
diff --git a/test/scaladoc/resources/SI-4014_1.scala b/test/scaladoc/resources/SI-4014_1.scala
new file mode 100644
index 0000000000..34386b515e
--- /dev/null
+++ b/test/scaladoc/resources/SI-4014_1.scala
@@ -0,0 +1,5 @@
+/** A template with one author.
+ *
+ * @author The Only Author
+ */
+trait Foo \ No newline at end of file
diff --git a/test/scaladoc/resources/SI-4014_2.scala b/test/scaladoc/resources/SI-4014_2.scala
new file mode 100644
index 0000000000..514f7a1e4c
--- /dev/null
+++ b/test/scaladoc/resources/SI-4014_2.scala
@@ -0,0 +1,6 @@
+/** A template with more than one author.
+ *
+ * @author The First Author
+ * @author The Second Author
+ */
+trait Foo \ No newline at end of file
diff --git a/test/scaladoc/resources/SI-8144.scala b/test/scaladoc/resources/SI-8144.scala
new file mode 100644
index 0000000000..7b225acb32
--- /dev/null
+++ b/test/scaladoc/resources/SI-8144.scala
@@ -0,0 +1,17 @@
+package some.pack
+
+class SomeType(arg: String) {
+
+ type TypeAlias = String
+
+ def >@<(): TypeAlias = "Tricky method name"
+
+ def >#<(): Int = 1
+
+}
+
+object SomeType {
+
+ val someVal = "Some arbitrary companion object value"
+
+}
diff --git a/test/scaladoc/resources/SI-8514.scala b/test/scaladoc/resources/SI-8514.scala
new file mode 100644
index 0000000000..4c5476604b
--- /dev/null
+++ b/test/scaladoc/resources/SI-8514.scala
@@ -0,0 +1,10 @@
+package a {
+ class DeveloperApi extends scala.annotation.StaticAnnotation
+
+ /** Some doc here */
+ @DeveloperApi
+ class A
+
+ @DeveloperApi
+ class B
+}
diff --git a/test/scaladoc/resources/SI_4715.scala b/test/scaladoc/resources/SI_4715.scala
index 29daf43717..de286956bc 100644
--- a/test/scaladoc/resources/SI_4715.scala
+++ b/test/scaladoc/resources/SI_4715.scala
@@ -1,7 +1,7 @@
class SI_4715 {
type :+:[X,Y] = Map[X,Y]
- val withType: Int :+: Double = error("")
+ val withType: Int :+: Double = sys.error("")
trait :-:[X,Y]
- val withTrait: Int :-: Double = error("")
+ val withTrait: Int :-: Double = sys.error("")
}
diff --git a/test/scaladoc/resources/Trac4325.scala b/test/scaladoc/resources/Trac4325.scala
index ffb968d571..ccc2f1900a 100644
--- a/test/scaladoc/resources/Trac4325.scala
+++ b/test/scaladoc/resources/Trac4325.scala
@@ -1,5 +1,5 @@
-case class WithSynthetic
+case class WithSynthetic()
-case class WithObject
+case class WithObject()
object WithObject
diff --git a/test/scaladoc/resources/doc-root/Any.scala b/test/scaladoc/resources/doc-root/Any.scala
index 031b7d9d8c..fd4c287b4f 100644
--- a/test/scaladoc/resources/doc-root/Any.scala
+++ b/test/scaladoc/resources/doc-root/Any.scala
@@ -1,6 +1,6 @@
/* __ *\
** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2002-2010, LAMP/EPFL **
+** / __/ __// _ | / / / _ | (c) 2002-2013, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
diff --git a/test/scaladoc/resources/doc-root/AnyRef.scala b/test/scaladoc/resources/doc-root/AnyRef.scala
index 7d8b9f9e76..362fbcf0f5 100644
--- a/test/scaladoc/resources/doc-root/AnyRef.scala
+++ b/test/scaladoc/resources/doc-root/AnyRef.scala
@@ -1,6 +1,6 @@
/* __ *\
** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2002-2010, LAMP/EPFL **
+** / __/ __// _ | / / / _ | (c) 2002-2013, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
diff --git a/test/scaladoc/resources/doc-root/Nothing.scala b/test/scaladoc/resources/doc-root/Nothing.scala
index eed6066039..57f6fac3f9 100644
--- a/test/scaladoc/resources/doc-root/Nothing.scala
+++ b/test/scaladoc/resources/doc-root/Nothing.scala
@@ -1,6 +1,6 @@
/* __ *\
** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2002-2010, LAMP/EPFL **
+** / __/ __// _ | / / / _ | (c) 2002-2013, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
diff --git a/test/scaladoc/resources/doc-root/Null.scala b/test/scaladoc/resources/doc-root/Null.scala
index 7455e78ae7..931beb2d1a 100644
--- a/test/scaladoc/resources/doc-root/Null.scala
+++ b/test/scaladoc/resources/doc-root/Null.scala
@@ -1,6 +1,6 @@
/* __ *\
** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2002-2010, LAMP/EPFL **
+** / __/ __// _ | / / / _ | (c) 2002-2013, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
diff --git a/test/scaladoc/resources/implicits-base-res.scala b/test/scaladoc/resources/implicits-base-res.scala
index d6c0332c10..1d17e9a6d3 100644
--- a/test/scaladoc/resources/implicits-base-res.scala
+++ b/test/scaladoc/resources/implicits-base-res.scala
@@ -11,21 +11,21 @@ trait MyNumeric[R]
* - tests the complete type inference
* - the following inherited methods should appear:
* {{{
- * def convToGtColonDoubleA(x: Double) // pimpA3: with a constraint that T <: Double
- * def convToIntA(x: Int) // pimpA2: with a constraint that T = Int
- * def convToManifestA(x: T) // pimpA7: with 2 constraints: T: Manifest and T <: Double
- * def convToMyNumericA(x: T) // pimpA6: with a constraint that there is x: MyNumeric[T] implicit in scope
- * def convToNumericA(x: T) // pimpA1: with a constraint that there is x: Numeric[T] implicit in scope
- * def convToPimpedA(x: Bar[Foo[T]]) // pimpA5: no constraints, SHADOWED
- * def convToPimpedA(x: S) // pimpA4: with 3 constraints: T = Foo[Bar[S]], S: Foo and S: Bar, SHADOWED
- * def convToPimpedA(x: T) // pimpA0: with no constraints, SHADOWED
- * def convToTraversableOps(x: T) // pimpA7: with 2 constraints: T: Manifest and T <: Double
+ * def convToGtColonDoubleA(x: Double) // enrichA3: with a constraint that T <: Double
+ * def convToIntA(x: Int) // enrichA2: with a constraint that T = Int
+ * def convToManifestA(x: T) // enrichA7: with 2 constraints: T: Manifest and T <: Double
+ * def convToMyNumericA(x: T) // enrichA6: with a constraint that there is x: MyNumeric[T] implicit in scope
+ * def convToNumericA(x: T) // enrichA1: with a constraint that there is x: Numeric[T] implicit in scope
+ * def convToEnrichedA(x: Bar[Foo[T]]) // enrichA5: no constraints, SHADOWED
+ * def convToEnrichedA(x: S) // enrichA4: with 3 constraints: T = Foo[Bar[S]], S: Foo and S: Bar, SHADOWED
+ * def convToEnrichedA(x: T) // enrichA0: with no constraints, SHADOWED
+ * def convToTraversableOps(x: T) // enrichA7: with 2 constraints: T: Manifest and T <: Double
* // should not be abstract!
* }}}
*/
class A[T] {
- /** This should prevent the implicitly inherited `def convToPimpedA: T` from `pimpA0` from showing up */
- def convToPimpedA(x: T): T = sys.error("Let's check it out!")
+ /** This should prevent the implicitly inherited `def convToEnrichedA: T` from `enrichA0` from showing up */
+ def convToEnrichedA(x: T): T = sys.error("Let's check it out!")
/** This should check implicit member elimination in the case of subtyping */
def foo(a: T, b: AnyRef): T
}
@@ -33,15 +33,15 @@ class A[T] {
object A {
import language.implicitConversions // according to SIP18
- implicit def pimpA0[V](a: A[V]) = new PimpedA(a)
- implicit def pimpA1[ZBUR: Numeric](a: A[ZBUR]) = new NumericA[ZBUR](a)
- implicit def pimpA2(a: A[Int]) = new IntA(a)
- implicit def pimpA3(a: A[T] forSome { type T <: Double }) = new GtColonDoubleA(a)
- implicit def pimpA4[S](a: A[Foo[Bar[S]]])(implicit foo: Foo[S], bar: Bar[S]): PimpedA[S] = sys.error("not implemented")
- implicit def pimpA5[Z](a: A[Z]): PimpedA[Bar[Foo[Z]]] = sys.error("not implemented")
- implicit def pimpA6[Z: MyNumeric](a: A[Z]) = new MyNumericA[Z](a)
+ implicit def enrichA0[V](a: A[V]) = new EnrichedA(a)
+ implicit def enrichA1[ZBUR: Numeric](a: A[ZBUR]) = new NumericA[ZBUR](a)
+ implicit def enrichA2(a: A[Int]) = new IntA(a)
+ implicit def enrichA3(a: A[T] forSome { type T <: Double }) = new GtColonDoubleA(a)
+ implicit def enrichA4[S](a: A[Foo[Bar[S]]])(implicit foo: Foo[S], bar: Bar[S]): EnrichedA[S] = sys.error("not implemented")
+ implicit def enrichA5[Z](a: A[Z]): EnrichedA[Bar[Foo[Z]]] = sys.error("not implemented")
+ implicit def enrichA6[Z: MyNumeric](a: A[Z]) = new MyNumericA[Z](a)
// TODO: Add H <: Double and see why it crashes for C and D -- context bounds, need to check!
- implicit def pimpA7[H <: Double : Manifest](a: A[H]) = new ManifestA[H](a) with MyTraversableOps[H] { def convToTraversableOps(x: H): H = sys.error("no") }
+ implicit def enrichA7[H <: Double : Manifest](a: A[H]) = new ManifestA[H](a) with MyTraversableOps[H] { def convToTraversableOps(x: H): H = sys.error("no") }
}
@@ -49,14 +49,14 @@ object A {
* - tests the existential type solving
* - the following inherited methods should appear:
* {{{
- * def convToGtColonDoubleA(x: Double) // pimpA3: no constraints
- * def convToManifestA(x: Double) // pimpA7: no constraints
- * def convToMyNumericA(x: Double) // pimpA6: (if showAll is set) with a constraint that there is x: MyNumeric[Double] implicit in scope
- * def convToNumericA(x: Double) // pimpA1: no constraintsd
- * def convToPimpedA(x: Bar[Foo[Double]]) // pimpA5: no constraints, SHADOWED
- * def convToPimpedA(x: Double) // pimpA0: no constraints, SHADOWED
- * def convToTraversableOps(x: Double) // pimpA7: no constraints
- * // should not be abstract!
+ * def convToGtColonDoubleA(x: Double) // enrichA3: no constraints
+ * def convToManifestA(x: Double) // enrichA7: no constraints
+ * def convToMyNumericA(x: Double) // enrichA6: (if showAll is set) with a constraint that there is x: MyNumeric[Double] implicit in scope
+ * def convToNumericA(x: Double) // enrichA1: no constraintsd
+ * def convToEnrichedA(x: Bar[Foo[Double]]) // enrichA5: no constraints, SHADOWED
+ * def convToEnrichedA(x: Double) // enrichA0: no constraints, SHADOWED
+ * def convToTraversableOps(x: Double) // enrichA7: no constraints
+ * // should not be abstract!
* }}}
*/
class B extends A[Double]
@@ -67,11 +67,11 @@ object B extends A
* - tests asSeenFrom
* - the following inherited methods should appear:
* {{{
- * def convToIntA(x: Int) // pimpA2: no constraints
- * def convToMyNumericA(x: Int) // pimpA6: (if showAll is set) with a constraint that there is x: MyNumeric[Int] implicit in scope
- * def convToNumericA(x: Int) // pimpA1: no constraints
- * def convToPimpedA(x: Int) // pimpA0: no constraints, SHADOWED
- * def convToPimpedA(x: Bar[Foo[Int]]) // pimpA5: no constraints, SHADOWED
+ * def convToIntA(x: Int) // enrichA2: no constraints
+ * def convToMyNumericA(x: Int) // enrichA6: (if showAll is set) with a constraint that there is x: MyNumeric[Int] implicit in scope
+ * def convToNumericA(x: Int) // enrichA1: no constraints
+ * def convToEnrichedA(x: Int) // enrichA0: no constraints, SHADOWED
+ * def convToEnrichedA(x: Bar[Foo[Int]]) // enrichA5: no constraints, SHADOWED
* }}}
*/
class C extends A[Int]
@@ -82,10 +82,10 @@ object C extends A
* - tests implicit elimination
* - the following inherited methods should appear:
* {{{
- * def convToMyNumericA(x: String) // pimpA6: (if showAll is set) with a constraint that there is x: MyNumeric[String] implicit in scope
- * def convToNumericA(x: String) // pimpA1: (if showAll is set) with a constraint that there is x: Numeric[String] implicit in scope
- * def convToPimpedA(x: Bar[Foo[String]]) // pimpA5: no constraints, SHADOWED
- * def convToPimpedA(x: String) // pimpA0: no constraints, SHADOWED
+ * def convToMyNumericA(x: String) // enrichA6: (if showAll is set) with a constraint that there is x: MyNumeric[String] implicit in scope
+ * def convToNumericA(x: String) // enrichA1: (if showAll is set) with a constraint that there is x: Numeric[String] implicit in scope
+ * def convToEnrichedA(x: Bar[Foo[String]]) // enrichA5: no constraints, SHADOWED
+ * def convToEnrichedA(x: String) // enrichA0: no constraints, SHADOWED
* }}}
*/
class D extends A[String]
@@ -93,12 +93,12 @@ class D extends A[String]
object D extends A
-/** PimpedA class <br/>
+/** EnrichedA class <br/>
* - tests simple inheritance and asSeenFrom
* - A, B and C should be implicitly converted to this */
-class PimpedA[V](a: A[V]) {
- /** The convToPimpedA: V documentation... */
- def convToPimpedA(x: V): V = sys.error("Not implemented")
+class EnrichedA[V](a: A[V]) {
+ /** The convToEnrichedA: V documentation... */
+ def convToEnrichedA(x: V): V = sys.error("Not implemented")
}
/** NumericA class <br/>
diff --git a/test/scaladoc/resources/links.scala b/test/scaladoc/resources/links.scala
index bd69665357..ecac9c63cf 100644
--- a/test/scaladoc/resources/links.scala
+++ b/test/scaladoc/resources/links.scala
@@ -25,6 +25,7 @@ package scala.test.scaladoc.links {
object Target {
type T = Int => Int
type S = Int
+ type ::[X] = scala.collection.immutable.::[X]
class C
def foo(i: Int) = 2
def foo(z: String) = 3
@@ -46,6 +47,7 @@ package scala.test.scaladoc.links {
* - [[[[Target!.foo[A[_[_]]]* trait Target -> def foo with 3 nested tparams]]]] (should exercise nested parens)
* - [[Target$.T object Target -> type T]]
* - [[Target$.S object Target -> type S]]
+ * - [[Target$.:: object Target -> type ::]]
* - [[Target$.foo(z:Str* object Target -> def foo]]
* - [[Target$.bar object Target -> def bar]]
* - [[[[Target$.foo[A[_[_]]]* trait Target -> def foo with 3 nested tparams]]]] (should exercise nested parens)
diff --git a/test/scaladoc/run/SI-191-deprecated.check b/test/scaladoc/run/SI-191-deprecated.check
deleted file mode 100755
index 3925a0d464..0000000000
--- a/test/scaladoc/run/SI-191-deprecated.check
+++ /dev/null
@@ -1 +0,0 @@
-Done. \ No newline at end of file
diff --git a/test/scaladoc/run/SI-191-deprecated.scala b/test/scaladoc/run/SI-191-deprecated.scala
deleted file mode 100755
index 4ed24ff8d1..0000000000
--- a/test/scaladoc/run/SI-191-deprecated.scala
+++ /dev/null
@@ -1,72 +0,0 @@
-import scala.tools.nsc.doc.model._
-import scala.tools.nsc.doc.base._
-import scala.tools.nsc.doc.base.comment._
-import scala.tools.partest.ScaladocModelTest
-import java.net.{URI, URL}
-import java.io.File
-
-object Test extends ScaladocModelTest {
-
- override def code =
- """
- /** See:
- * - [[scala.collection.Map]] Simple linking
- * - [[scala.collection.immutable.::]] Linking with symbolic name
- * - [[scala.Int]].toLong Linking to a class
- * - [[scala.Predef]] Linking to an object
- * - [[scala.Int.toLong]] Linking to a method
- * - [[scala]] Linking to a package
- * - [[scala.AbstractMethodError]] Linking to a member in the package object
- * - [[scala.Predef.String]] Linking to a member in an object
- *
- * Don't look at:
- * - [[scala.NoLink]] Not linking :)
- */
- object Test {
- def foo(param: Any) {}
- def barr(l: scala.collection.immutable.List[Any]) {}
- def bar(l: List[String]) {} // TODO: Should be able to link to type aliases
- def baz(d: java.util.Date) {} // Should not be resolved
- }
- """
-
- def scalaURL = "http://bog.us"
-
- override def scaladocSettings = "-no-link-warnings -external-urls scala=" + scalaURL
-
- def testModel(rootPackage: Package) {
- import access._
- val test = rootPackage._object("Test")
-
- def check(memberDef: Def, expected: Int) {
- val externals = memberDef.valueParams(0)(0).resultType.refEntity collect {
- case (_, (LinkToExternal(name, url), _)) => assert(url.contains(scalaURL)); name
- }
- assert(externals.size == expected)
- }
-
- check(test._method("foo"), 1)
- check(test._method("bar"), 0)
- check(test._method("barr"), 2)
- check(test._method("baz"), 0)
-
- val expectedUrls = collection.mutable.Set[String](
- "scala.collection.Map",
- "scala.collection.immutable.::",
- "scala.Int",
- "scala.Predef$",
- "scala.Int@toLong:Long",
- "scala.package",
- "scala.package@AbstractMethodError=AbstractMethodError",
- "scala.Predef$@String=String"
- ).map(scalaURL + "/index.html#" + _)
-
- def isExpectedExternalLink(l: EntityLink) = l.link match {
- case LinkToExternal(name, url) => assert(expectedUrls contains url, url); true
- case _ => false
- }
-
- assert(countLinks(test.comment.get, isExpectedExternalLink) == 8,
- countLinks(test.comment.get, isExpectedExternalLink) + " == 8")
- }
-}
diff --git a/test/scaladoc/run/SI-4676.scala b/test/scaladoc/run/SI-4676.scala
index b83a59a472..99b3c5568a 100644
--- a/test/scaladoc/run/SI-4676.scala
+++ b/test/scaladoc/run/SI-4676.scala
@@ -21,6 +21,7 @@ object Test extends ScaladocModelTest {
// check correct expansion of the use case signature
val x = rootPackage._class("SI_4676")._method("x")
- assert(x.valueParams(0)(0).resultType.name == "(String, String)", "parameter ss of method x has type (String, String")
+ val resultType = x.valueParams(0)(0).resultType.name
+ assert(resultType == "SS", s"parameter ss of method x has type $resultType, expected SS!")
}
} \ No newline at end of file
diff --git a/test/scaladoc/run/SI-6812.check b/test/scaladoc/run/SI-6812.check
index 619c56180b..3be8a300e7 100644
--- a/test/scaladoc/run/SI-6812.check
+++ b/test/scaladoc/run/SI-6812.check
@@ -1 +1,2 @@
+warning: -Ymacro-no-expand is deprecated: Use -Ymacro-expand:none
Done.
diff --git a/test/scaladoc/run/SI-6812.scala b/test/scaladoc/run/SI-6812.scala
index fbd9588ede..90005b8db4 100644
--- a/test/scaladoc/run/SI-6812.scala
+++ b/test/scaladoc/run/SI-6812.scala
@@ -5,12 +5,12 @@ import language._
object Test extends ScaladocModelTest {
override def code = """
- import scala.reflect.macros.Context
+ import scala.reflect.macros.blackbox.Context
import language.experimental.macros
object Macros {
def impl(c: Context) = c.literalUnit
- def foo = macro impl
+ def foo: Unit = macro impl
}
class C {
@@ -19,6 +19,6 @@ object Test extends ScaladocModelTest {
"""
def scaladocSettings = ""
- override def extraSettings = super.extraSettings + " -Ymacro-no-expand"
+ override def extraSettings = super.extraSettings + " -Ymacro-no-expand -deprecation"
def testModel(root: Package) = ()
}
diff --git a/test/scaladoc/run/SI-6812b.check b/test/scaladoc/run/SI-6812b.check
new file mode 100644
index 0000000000..619c56180b
--- /dev/null
+++ b/test/scaladoc/run/SI-6812b.check
@@ -0,0 +1 @@
+Done.
diff --git a/test/scaladoc/run/SI-6812b.scala b/test/scaladoc/run/SI-6812b.scala
new file mode 100644
index 0000000000..74dbd130a3
--- /dev/null
+++ b/test/scaladoc/run/SI-6812b.scala
@@ -0,0 +1,24 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+import language._
+
+object Test extends ScaladocModelTest {
+
+ override def code = """
+ import scala.reflect.macros.blackbox.Context
+ import language.experimental.macros
+
+ object Macros {
+ def impl(c: Context) = c.literalUnit
+ def foo: Unit = macro impl
+ }
+
+ class C {
+ def bar = Macros.foo
+ }
+ """
+
+ def scaladocSettings = ""
+ override def extraSettings = super.extraSettings + " -Ymacro-expand:none"
+ def testModel(root: Package) = ()
+}
diff --git a/test/scaladoc/run/diagrams-base.scala b/test/scaladoc/run/diagrams-base.scala
index b7aeed51d2..1e83a78b38 100644
--- a/test/scaladoc/run/diagrams-base.scala
+++ b/test/scaladoc/run/diagrams-base.scala
@@ -46,7 +46,7 @@ object Test extends ScaladocModelTest {
val (incoming, outgoing) = diag.edges.partition(!_._1.isThisNode)
assert(incoming.length == 5)
- assert(outgoing.head._2.length == 4)
+ assert(outgoing.head._2.length == 4, s"${outgoing.head._2} has length ${outgoing.head._2.length}, expecting 4")
val (outgoingSuperclass, outgoingImplicit) = outgoing.head._2.partition(_.isNormalNode)
assert(outgoingSuperclass.length == 3)
diff --git a/test/scaladoc/run/diagrams-filtering.scala b/test/scaladoc/run/diagrams-filtering.scala
index 54e3e9ac63..12b5f4caba 100644
--- a/test/scaladoc/run/diagrams-filtering.scala
+++ b/test/scaladoc/run/diagrams-filtering.scala
@@ -57,7 +57,7 @@ object Test extends ScaladocModelTest {
// Assert we have just 3 nodes and 2 edges
val A = base._trait("A")
val ADiag = A.inheritanceDiagram.get
- assert(ADiag.nodes.length == 3)
+ assert(ADiag.nodes.length == 3, s"${ADiag.nodes} has length ${ADiag.nodes.length}, expected 3")
assert(ADiag.edges.map(_._2.length).sum == 2)
// trait C
diff --git a/test/scaladoc/run/implicits-base.scala b/test/scaladoc/run/implicits-base.scala
index 3d57306f5d..8f8652cdb3 100644
--- a/test/scaladoc/run/implicits-base.scala
+++ b/test/scaladoc/run/implicits-base.scala
@@ -25,54 +25,54 @@ object Test extends ScaladocModelTest {
val A = base._class("A")
- // def convToPimpedA(x: T) // pimpA0: with no constraints, SHADOWED
- conv = A._conversion(A.qualifiedName + ".pimpA0")
+ // def convToEnrichedA(x: T) // enrichA0: with no constraints, SHADOWED
+ conv = A._conversion(A.qualifiedName + ".enrichA0")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
- assert(isShadowed(conv._member("convToPimpedA")))
- assert(conv._member("convToPimpedA").resultType.name == "T")
+ assert(isShadowed(conv._member("convToEnrichedA")))
+ assert(conv._member("convToEnrichedA").resultType.name == "T")
- // def convToNumericA: T // pimpA1: with a constraint that there is x: Numeric[T] implicit in scope
- conv = A._conversion(A.qualifiedName + ".pimpA1")
+ // def convToNumericA: T // enrichA1: with a constraint that there is x: Numeric[T] implicit in scope
+ conv = A._conversion(A.qualifiedName + ".enrichA1")
assert(conv.members.length == 1)
assert(conv.constraints.length == 1)
assert(conv._member("convToNumericA").resultType.name == "T")
- // def convToIntA: Int // pimpA2: with a constraint that T = Int
- conv = A._conversion(A.qualifiedName + ".pimpA2")
+ // def convToIntA: Int // enrichA2: with a constraint that T = Int
+ conv = A._conversion(A.qualifiedName + ".enrichA2")
assert(conv.members.length == 1)
assert(conv.constraints.length == 1)
assert(conv._member("convToIntA").resultType.name == "Int")
- // def convToGtColonDoubleA: Double // pimpA3: with a constraint that T <: Double
- conv = A._conversion(A.qualifiedName + ".pimpA3")
+ // def convToGtColonDoubleA: Double // enrichA3: with a constraint that T <: Double
+ conv = A._conversion(A.qualifiedName + ".enrichA3")
assert(conv.members.length == 1)
assert(conv.constraints.length == 1)
assert(conv._member("convToGtColonDoubleA").resultType.name == "Double")
- // def convToPimpedA: S // pimpA4: with 3 constraints: T = Foo[Bar[S]], S: Foo and S: Bar
- conv = A._conversion(A.qualifiedName + ".pimpA4")
+ // def convToEnrichedA: S // enrichA4: with 3 constraints: T = Foo[Bar[S]], S: Foo and S: Bar
+ conv = A._conversion(A.qualifiedName + ".enrichA4")
assert(conv.members.length == 1)
assert(conv.constraints.length == 3)
- assert(conv._member("convToPimpedA").resultType.name == "S")
+ assert(conv._member("convToEnrichedA").resultType.name == "S")
- // def convToPimpedA: Bar[Foo[T]] // pimpA5: no constraints
- conv = A._conversion(A.qualifiedName + ".pimpA5")
+ // def convToEnrichedA: Bar[Foo[T]] // enrichA5: no constraints
+ conv = A._conversion(A.qualifiedName + ".enrichA5")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
- assert(isShadowed(conv._member("convToPimpedA")))
- assert(conv._member("convToPimpedA").resultType.name == "Bar[Foo[T]]")
+ assert(isShadowed(conv._member("convToEnrichedA")))
+ assert(conv._member("convToEnrichedA").resultType.name == "Bar[Foo[T]]")
- // def convToMyNumericA: T // pimpA6: with a constraint that there is x: MyNumeric[T] implicit in scope
- conv = A._conversion(A.qualifiedName + ".pimpA6")
+ // def convToMyNumericA: T // enrichA6: with a constraint that there is x: MyNumeric[T] implicit in scope
+ conv = A._conversion(A.qualifiedName + ".enrichA6")
assert(conv.members.length == 1)
assert(conv.constraints.length == 1)
assert(conv._member("convToMyNumericA").resultType.name == "T")
- // def convToManifestA: T // pimpA7: with 2 constraints: T: Manifest and T <: Double
- // def convToTraversableOps: T // pimpA7: with 2 constraints: T: Manifest and T <: Double
+ // def convToManifestA: T // enrichA7: with 2 constraints: T: Manifest and T <: Double
+ // def convToTraversableOps: T // enrichA7: with 2 constraints: T: Manifest and T <: Double
// should not be abstract!
- conv = A._conversion(A.qualifiedName + ".pimpA7")
+ conv = A._conversion(A.qualifiedName + ".enrichA7")
assert(conv.members.length == 2)
assert(conv.constraints.length == 2)
assert(conv._member("convToManifestA").resultType.name == "T")
@@ -84,45 +84,45 @@ object Test extends ScaladocModelTest {
val B = base._class("B")
// these conversions should not affect B
- assert(B._conversions(A.qualifiedName + ".pimpA2").isEmpty)
- assert(B._conversions(A.qualifiedName + ".pimpA4").isEmpty)
+ assert(B._conversions(A.qualifiedName + ".enrichA2").isEmpty)
+ assert(B._conversions(A.qualifiedName + ".enrichA4").isEmpty)
- // def convToPimpedA(x: Double) // pimpA0: no constraints, SHADOWED
- conv = B._conversion(A.qualifiedName + ".pimpA0")
+ // def convToEnrichedA(x: Double) // enrichA0: no constraints, SHADOWED
+ conv = B._conversion(A.qualifiedName + ".enrichA0")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
- assert(isShadowed(conv._member("convToPimpedA")))
- assert(conv._member("convToPimpedA").resultType.name == "Double")
+ assert(isShadowed(conv._member("convToEnrichedA")))
+ assert(conv._member("convToEnrichedA").resultType.name == "Double")
- // def convToNumericA: Double // pimpA1: no constraintsd
- conv = B._conversion(A.qualifiedName + ".pimpA1")
+ // def convToNumericA: Double // enrichA1: no constraintsd
+ conv = B._conversion(A.qualifiedName + ".enrichA1")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
assert(conv._member("convToNumericA").resultType.name == "Double")
- // def convToGtColonDoubleA: Double // pimpA3: no constraints
- conv = B._conversion(A.qualifiedName + ".pimpA3")
+ // def convToGtColonDoubleA: Double // enrichA3: no constraints
+ conv = B._conversion(A.qualifiedName + ".enrichA3")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
assert(conv._member("convToGtColonDoubleA").resultType.name == "Double")
- // def convToPimpedA: Bar[Foo[Double]] // pimpA5: no constraints
- conv = B._conversion(A.qualifiedName + ".pimpA5")
+ // def convToEnrichedA: Bar[Foo[Double]] // enrichA5: no constraints
+ conv = B._conversion(A.qualifiedName + ".enrichA5")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
- assert(isShadowed(conv._member("convToPimpedA")))
- assert(conv._member("convToPimpedA").resultType.name == "Bar[Foo[Double]]")
+ assert(isShadowed(conv._member("convToEnrichedA")))
+ assert(conv._member("convToEnrichedA").resultType.name == "Bar[Foo[Double]]")
- // def convToMyNumericA: Double // pimpA6: (if showAll is set) with a constraint that there is x: MyNumeric[Double] implicit in scope
- conv = B._conversion(A.qualifiedName + ".pimpA6")
+ // def convToMyNumericA: Double // enrichA6: (if showAll is set) with a constraint that there is x: MyNumeric[Double] implicit in scope
+ conv = B._conversion(A.qualifiedName + ".enrichA6")
assert(conv.members.length == 1)
assert(conv.constraints.length == 1)
assert(conv._member("convToMyNumericA").resultType.name == "Double")
- // def convToManifestA: Double // pimpA7: no constraints
- // def convToTraversableOps: Double // pimpA7: no constraints
+ // def convToManifestA: Double // enrichA7: no constraints
+ // def convToTraversableOps: Double // enrichA7: no constraints
// // should not be abstract!
- conv = B._conversion(A.qualifiedName + ".pimpA7")
+ conv = B._conversion(A.qualifiedName + ".enrichA7")
assert(conv.members.length == 2)
assert(conv.constraints.length == 0)
assert(conv._member("convToManifestA").resultType.name == "Double")
@@ -134,38 +134,38 @@ object Test extends ScaladocModelTest {
val C = base._class("C")
// these conversions should not affect C
- assert(C._conversions(A.qualifiedName + ".pimpA3").isEmpty)
- assert(C._conversions(A.qualifiedName + ".pimpA4").isEmpty)
- assert(C._conversions(A.qualifiedName + ".pimpA7").isEmpty)
+ assert(C._conversions(A.qualifiedName + ".enrichA3").isEmpty)
+ assert(C._conversions(A.qualifiedName + ".enrichA4").isEmpty)
+ assert(C._conversions(A.qualifiedName + ".enrichA7").isEmpty)
- // def convToPimpedA(x: Int) // pimpA0: no constraints, SHADOWED
- conv = C._conversion(A.qualifiedName + ".pimpA0")
+ // def convToEnrichedA(x: Int) // enrichA0: no constraints, SHADOWED
+ conv = C._conversion(A.qualifiedName + ".enrichA0")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
- assert(isShadowed(conv._member("convToPimpedA")))
- assert(conv._member("convToPimpedA").resultType.name == "Int")
+ assert(isShadowed(conv._member("convToEnrichedA")))
+ assert(conv._member("convToEnrichedA").resultType.name == "Int")
- // def convToNumericA: Int // pimpA1: no constraints
- conv = C._conversion(A.qualifiedName + ".pimpA1")
+ // def convToNumericA: Int // enrichA1: no constraints
+ conv = C._conversion(A.qualifiedName + ".enrichA1")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
assert(conv._member("convToNumericA").resultType.name == "Int")
- // def convToIntA: Int // pimpA2: no constraints
- conv = C._conversion(A.qualifiedName + ".pimpA2")
+ // def convToIntA: Int // enrichA2: no constraints
+ conv = C._conversion(A.qualifiedName + ".enrichA2")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
assert(conv._member("convToIntA").resultType.name == "Int")
- // def convToPimpedA: Bar[Foo[Int]] // pimpA5: no constraints
- conv = C._conversion(A.qualifiedName + ".pimpA5")
+ // def convToEnrichedA: Bar[Foo[Int]] // enrichA5: no constraints
+ conv = C._conversion(A.qualifiedName + ".enrichA5")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
- assert(isShadowed(conv._member("convToPimpedA")))
- assert(conv._member("convToPimpedA").resultType.name == "Bar[Foo[Int]]")
+ assert(isShadowed(conv._member("convToEnrichedA")))
+ assert(conv._member("convToEnrichedA").resultType.name == "Bar[Foo[Int]]")
- // def convToMyNumericA: Int // pimpA6: (if showAll is set) with a constraint that there is x: MyNumeric[Int] implicit in scope
- conv = C._conversion(A.qualifiedName + ".pimpA6")
+ // def convToMyNumericA: Int // enrichA6: (if showAll is set) with a constraint that there is x: MyNumeric[Int] implicit in scope
+ conv = C._conversion(A.qualifiedName + ".enrichA6")
assert(conv.members.length == 1)
assert(conv.constraints.length == 1)
assert(conv._member("convToMyNumericA").resultType.name == "Int")
@@ -175,33 +175,33 @@ object Test extends ScaladocModelTest {
val D = base._class("D")
// these conversions should not affect D
- assert(D._conversions(A.qualifiedName + ".pimpA2").isEmpty)
- assert(D._conversions(A.qualifiedName + ".pimpA3").isEmpty)
- assert(D._conversions(A.qualifiedName + ".pimpA4").isEmpty)
- assert(D._conversions(A.qualifiedName + ".pimpA7").isEmpty)
+ assert(D._conversions(A.qualifiedName + ".enrichA2").isEmpty)
+ assert(D._conversions(A.qualifiedName + ".enrichA3").isEmpty)
+ assert(D._conversions(A.qualifiedName + ".enrichA4").isEmpty)
+ assert(D._conversions(A.qualifiedName + ".enrichA7").isEmpty)
- // def convToPimpedA(x: String) // pimpA0: no constraints, SHADOWED
- conv = D._conversion(A.qualifiedName + ".pimpA0")
+ // def convToEnrichedA(x: String) // enrichA0: no constraints, SHADOWED
+ conv = D._conversion(A.qualifiedName + ".enrichA0")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
- assert(isShadowed(conv._member("convToPimpedA")))
- assert(conv._member("convToPimpedA").resultType.name == "String")
+ assert(isShadowed(conv._member("convToEnrichedA")))
+ assert(conv._member("convToEnrichedA").resultType.name == "String")
- // def convToNumericA: String // pimpA1: (if showAll is set) with a constraint that there is x: Numeric[String] implicit in scope
- conv = D._conversion(A.qualifiedName + ".pimpA1")
+ // def convToNumericA: String // enrichA1: (if showAll is set) with a constraint that there is x: Numeric[String] implicit in scope
+ conv = D._conversion(A.qualifiedName + ".enrichA1")
assert(conv.members.length == 1)
assert(conv.constraints.length == 1)
assert(conv._member("convToNumericA").resultType.name == "String")
- // def convToPimpedA: Bar[Foo[String]] // pimpA5: no constraints
- conv = D._conversion(A.qualifiedName + ".pimpA5")
+ // def convToEnrichedA: Bar[Foo[String]] // enrichA5: no constraints
+ conv = D._conversion(A.qualifiedName + ".enrichA5")
assert(conv.members.length == 1)
assert(conv.constraints.length == 0)
- assert(isShadowed(conv._member("convToPimpedA")))
- assert(conv._member("convToPimpedA").resultType.name == "Bar[Foo[String]]")
+ assert(isShadowed(conv._member("convToEnrichedA")))
+ assert(conv._member("convToEnrichedA").resultType.name == "Bar[Foo[String]]")
- // def convToMyNumericA: String // pimpA6: (if showAll is set) with a constraint that there is x: MyNumeric[String] implicit in scope
- conv = D._conversion(A.qualifiedName + ".pimpA6")
+ // def convToMyNumericA: String // enrichA6: (if showAll is set) with a constraint that there is x: MyNumeric[String] implicit in scope
+ conv = D._conversion(A.qualifiedName + ".enrichA6")
assert(conv.members.length == 1)
assert(conv.constraints.length == 1)
assert(conv._member("convToMyNumericA").resultType.name == "String")
diff --git a/test/scaladoc/run/links.scala b/test/scaladoc/run/links.scala
index fde24edb2a..64441c2d95 100644
--- a/test/scaladoc/run/links.scala
+++ b/test/scaladoc/run/links.scala
@@ -26,7 +26,7 @@ object Test extends ScaladocModelTest {
val memberLinks = countLinks(TEST.comment.get, _.link.isInstanceOf[LinkToMember[_, _]])
val templateLinks = countLinks(TEST.comment.get, _.link.isInstanceOf[LinkToTpl[_]])
- assert(memberLinks == 17, memberLinks + " == 17 (the member links in object TEST)")
+ assert(memberLinks == 18, memberLinks + " == 18 (the member links in object TEST)")
assert(templateLinks == 6, templateLinks + " == 6 (the template links in object TEST)")
}
}
diff --git a/test/scaladoc/run/t5527.check b/test/scaladoc/run/t5527.check
new file mode 100644
index 0000000000..bfaa4ad0ed
--- /dev/null
+++ b/test/scaladoc/run/t5527.check
@@ -0,0 +1,132 @@
+newSource1.scala:47: warning: discarding unmoored doc comment
+ /** Document this crucial constant for posterity.
+ ^
+newSource1.scala:64: warning: discarding unmoored doc comment
+ /*************************\
+ ^
+newSource1.scala:73: warning: discarding unmoored doc comment
+ val i = 10 */** Important!
+ ^
+[[syntax trees at end of parser]] // newSource1.scala
+package <empty> {
+ object UselessComments extends scala.AnyRef {
+ def <init>() = {
+ super.<init>();
+ ()
+ };
+ var z = 0;
+ def test1 = {
+ object Maybe extends scala.AnyRef {
+ def <init>() = {
+ super.<init>();
+ ()
+ };
+ /** Some comment inside */
+ def nothing() = ()
+ };
+ ()
+ };
+ def test2 = {
+ var x = 4;
+ if (true)
+ {
+ x = 5;
+ val y = 6;
+ ()
+ }
+ else
+ ()
+ };
+ def test3 = {
+ if (true)
+ z = 3
+ else
+ ();
+ val t = 4;
+ 0.to(4).foreach(((i) => println(i)))
+ };
+ val test4 = 'a' match {
+ case ('0'| '1'| '2'| '3'| '4'| '5'| '6'| '7'| '8'| '9') => true
+ case _ => false
+ };
+ def test5: scala.Unit = if (true)
+ $qmark$qmark$qmark
+ else
+ ();
+ def test6 = {
+ val u = 4;
+ 0.to(u).foreach(((i) => println(i)))
+ };
+ def test7 = {
+ val u = 4;
+ 0.to(u).foreach(((i) => println(i)))
+ };
+ def test8 = {
+ val z = "fancy";
+ z.replace("fanc", "arts")
+ };
+ def test9 = {
+ val i = 10.$times(10);
+ assert(i.$eq$eq(100))
+ }
+ };
+ /** comments that we should keep */
+ object UsefulComments extends scala.AnyRef {
+ def <init>() = {
+ super.<init>();
+ ()
+ };
+ /** class A */
+ class A extends scala.AnyRef {
+ def <init>() = {
+ super.<init>();
+ ()
+ };
+ /** f */
+ def f(i: Int) = i;
+ /** v */
+ val v = 1;
+ /** u */
+ var u = 2
+ };
+ /** trait B */
+ abstract trait B extends scala.AnyRef {
+ def $init$() = {
+ ()
+ };
+ /** T */
+ type T;
+ /** f */
+ def f(i: Int): scala.Unit;
+ /** v */
+ val v = 1;
+ /** u */
+ var u = 2
+ };
+ /** object C */
+ object C extends scala.AnyRef {
+ def <init>() = {
+ super.<init>();
+ ()
+ };
+ /** f */
+ def f(i: Int) = i;
+ /** v */
+ val v = 1;
+ /** u */
+ var u = 2
+ };
+ /** class D */
+ @new deprecated("use ... instead", "2.10.0") class D extends scala.AnyRef {
+ def <init>() = {
+ super.<init>();
+ ()
+ }
+ };
+ /** Get the simple value.
+ * @return the default value
+ */
+ def value: Int = 7
+ }
+}
+
diff --git a/test/scaladoc/run/t5527.scala b/test/scaladoc/run/t5527.scala
new file mode 100644
index 0000000000..770d4ad13f
--- /dev/null
+++ b/test/scaladoc/run/t5527.scala
@@ -0,0 +1,155 @@
+import scala.tools.partest._
+import java.io._
+import scala.tools.nsc._
+import scala.tools.cmd.CommandLineParser
+import scala.tools.nsc.doc.{Settings, DocFactory}
+import scala.tools.nsc.reporters.ConsoleReporter
+
+object Test extends DirectTest {
+
+ override def extraSettings: String = "-usejavacp -Xprint:parser -Yrangepos -Ystop-after:parser -d " + testOutput.path
+
+ override def code = """
+ // SI-5527
+ object UselessComments {
+
+ var z = 0
+
+ def test1 = {
+ /** Some comment here */
+ object Maybe {
+ /** Some comment inside */
+ def nothing() = ()
+ }
+ }
+
+ def test2 = {
+ var x = 4
+ if (true) {
+ /** Testing 123 */
+ x = 5
+ val y = 6
+ }
+ }
+
+ def test3 = {
+ if (true)
+ z = 3
+
+ /** Calculate this result. */
+ val t = 4
+ for (i <- 0 to 4)
+ println(i)
+ }
+
+ val test4 = ('a') match {
+ /** Another digit is a giveaway. */
+ case '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' =>
+ true
+ case _ =>
+ false
+ }
+
+ def test5 {
+ /** @martin is this right? It shouldn't flag me as scaladoc. */
+ if (true) ???
+ }
+
+ def test6 = {
+ /** Document this crucial constant for posterity.
+ * Don't forget to dedoc this comment if you refactor to a local.
+ * @author Paul Phillips
+ */
+ val u = 4
+ for (i <- 0 to u)
+ println(i)
+ }
+ def test7 = {
+ /** Some standard tags are tolerated locally and shouldn't trigger a warning.
+ * @note Don't change this unless you know what you're doing. This means you.
+ */
+ val u = 4
+ for (i <- 0 to u)
+ println(i)
+ }
+ def test8 = {
+ /*************************\
+ * Fancy ASCII Art Block *
+ * @author som-snytt *
+ \*************************/
+ // this is just a local
+ val z = "fancy"
+ z replace ("fanc", "arts")
+ }
+ def test9 = {
+ val i = 10 */** Important!
+ * We have to multiply here!
+ * @author community
+ * @see SI-1234
+ */
+ 10
+ assert(i == 100)
+ }
+ }
+
+ /** comments that we should keep */
+ object UsefulComments {
+ /** class A */
+ class A {
+ /** f */
+ def f(i: Int) = i
+ /** v */
+ val v = 1
+ /** u */
+ var u = 2
+ }
+ /** trait B */
+ trait B {
+ /** T */
+ type T
+ /** f */
+ def f(i: Int)
+ /** v */
+ val v = 1
+ /** u */
+ var u = 2
+ }
+ /** object C */
+ object C {
+ /** f */
+ def f(i: Int) = i
+ /** v */
+ val v = 1
+ /** u */
+ var u = 2
+ }
+ /** class D */
+ @deprecated("use ... instead", "2.10.0")
+ class D
+
+ /** Get the simple value.
+ * @return the default value
+ */
+ // an intervening line comment
+ /* I had more to say, but didn't want to pollute the scaladoc. */
+ def value: Int = 7
+ }
+ """.trim
+
+ override def show(): Unit = {
+ // redirect err to out, for logging
+ val prevErr = System.err
+ System.setErr(System.out)
+ compile()
+ System.setErr(prevErr)
+ }
+
+ override def newCompiler(args: String*): Global = {
+ // we want the Scaladoc compiler here, because it keeps DocDef nodes in the tree
+ val settings = new Settings(_ => ())
+ val command = new ScalaDoc.Command((CommandLineParser tokenize extraSettings) ++ args.toList, settings)
+ new DocFactory(new ConsoleReporter(settings), settings).compiler
+ }
+
+ override def isDebug = false // so we don't get the newSettings warning
+}
diff --git a/test/scaladoc/run/t7124.check b/test/scaladoc/run/t7124.check
new file mode 100644
index 0000000000..96b627a322
--- /dev/null
+++ b/test/scaladoc/run/t7124.check
@@ -0,0 +1,3 @@
+List()
+List(Paragraph(Text(macro)))
+Done.
diff --git a/test/scaladoc/run/t7124.scala b/test/scaladoc/run/t7124.scala
new file mode 100644
index 0000000000..e8272000d2
--- /dev/null
+++ b/test/scaladoc/run/t7124.scala
@@ -0,0 +1,22 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+
+ override def code = """
+ import scala.language.experimental.macros
+ class Test {
+ def print(): Unit = macro ???
+ }
+ """
+
+ def scaladocSettings = ""
+
+ def testModel(root: Package) = {
+ import access._
+ val p = root._class("Test")._method("print")
+
+ println(p.annotations) // no annotations
+ println(p.flags) // a 'macro' flag
+ }
+}
diff --git a/test/scaladoc/run/t7876.check b/test/scaladoc/run/t7876.check
new file mode 100644
index 0000000000..619c56180b
--- /dev/null
+++ b/test/scaladoc/run/t7876.check
@@ -0,0 +1 @@
+Done.
diff --git a/test/scaladoc/run/t7876.scala b/test/scaladoc/run/t7876.scala
new file mode 100644
index 0000000000..63c63f8a0c
--- /dev/null
+++ b/test/scaladoc/run/t7876.scala
@@ -0,0 +1,19 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+
+ override def code = """
+ import language.higherKinds
+ trait T[M[_]]
+ class C extends T[Function0]
+ class D extends T[Tuple1]
+ """
+
+ def scaladocSettings = ""
+
+ def testModel(rootPackage: Package) = {
+ import access._
+ // did not crash
+ }
+}
diff --git a/test/scaladoc/run/t7876b.check b/test/scaladoc/run/t7876b.check
new file mode 100644
index 0000000000..21aaf3b295
--- /dev/null
+++ b/test/scaladoc/run/t7876b.check
@@ -0,0 +1,3 @@
+foo: FInt
+foo: TInt
+Done.
diff --git a/test/scaladoc/run/t7876b.scala b/test/scaladoc/run/t7876b.scala
new file mode 100644
index 0000000000..4d5b8c22cf
--- /dev/null
+++ b/test/scaladoc/run/t7876b.scala
@@ -0,0 +1,24 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+// Don't dealias just to print a Function or Tuple type.
+object Test extends ScaladocModelTest {
+
+ override def code = """
+ class Test {
+ type FInt = Function0[Int]
+ type TInt = Tuple1[Int]
+ def foo: FInt
+ def bar: TInt
+ }
+ """
+
+ def scaladocSettings = ""
+
+ def testModel(rootPackage: Package) = {
+ import access._
+ List("foo", "bar").foreach { name =>
+ println("foo: " + rootPackage._class("Test")._method(name).resultType.name)
+ }
+ }
+}
diff --git a/test/scaladoc/run/t8407.check b/test/scaladoc/run/t8407.check
new file mode 100644
index 0000000000..06c860b3eb
--- /dev/null
+++ b/test/scaladoc/run/t8407.check
@@ -0,0 +1,4 @@
+newSource:4: warning: not found: type $NotFound
+ * @usecase def zipWithIndex: $NotFound
+ ^
+Done.
diff --git a/test/scaladoc/run/t8407.scala b/test/scaladoc/run/t8407.scala
new file mode 100644
index 0000000000..2df9f4f1ac
--- /dev/null
+++ b/test/scaladoc/run/t8407.scala
@@ -0,0 +1,20 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+ override def code = """
+class C {
+ /**
+ * @usecase def zipWithIndex: $NotFound
+ *
+ */
+ def zipWithIndex: Int = ???
+}
+ """
+
+ def scaladocSettings = ""
+
+ def testModel(root: Package) = {
+ // just testing that it doesn't error out.
+ }
+}
diff --git a/test/scaladoc/run/t8557.check b/test/scaladoc/run/t8557.check
new file mode 100644
index 0000000000..619c56180b
--- /dev/null
+++ b/test/scaladoc/run/t8557.check
@@ -0,0 +1 @@
+Done.
diff --git a/test/scaladoc/run/t8557.scala b/test/scaladoc/run/t8557.scala
new file mode 100644
index 0000000000..451f004d7d
--- /dev/null
+++ b/test/scaladoc/run/t8557.scala
@@ -0,0 +1,32 @@
+import scala.tools.nsc.doc.base._
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+
+ override def code = """
+ package scala.test.scaladoc.T8857
+
+ /**
+ * A link:
+ *
+ * [[scala.Option$ object Option]].
+ */
+ class A
+ """
+
+ // a non-canonical path to scala-library.jar should still work
+ // this is a bit fragile (depends on the current directory being the root of the repo ;
+ // ant & partest seem to do that properly)
+ def scaladocSettings = "-doc-external-doc build/pack/bin/../lib/scala-library.jar#http://www.scala-lang.org/api/current/"
+
+ def testModel(rootPackage: Package) = {
+ // get the quick access implicit defs in scope (_package(s), _class(es), _trait(s), object(s) _method(s), _value(s))
+ import access._
+
+ val a = rootPackage._package("scala")._package("test")._package("scaladoc")._package("T8857")._class("A")
+
+ val links = countLinks(a.comment.get, _.link.isInstanceOf[LinkToExternal])
+ assert(links == 1, links + " == 1 (the links to external in class A)")
+ }
+}
diff --git a/test/scaladoc/run/t8672.check b/test/scaladoc/run/t8672.check
new file mode 100644
index 0000000000..d7194c73bf
--- /dev/null
+++ b/test/scaladoc/run/t8672.check
@@ -0,0 +1,4 @@
+Some(Chain(List(Text(New in release 1.2.3.4, it works), Text(.))))
+Some(Text(Sentence no period))
+Some(Chain(List(Text(Sentence period at end), Text(.))))
+Done.
diff --git a/test/scaladoc/run/t8672.scala b/test/scaladoc/run/t8672.scala
new file mode 100644
index 0000000000..8a9b5086bd
--- /dev/null
+++ b/test/scaladoc/run/t8672.scala
@@ -0,0 +1,32 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+ override def code = """
+ class C {
+
+ /**
+ * New in release 1.2.3.4, it works. Next sentence.
+ * Next Line.
+ */
+ def method1 = 0
+
+ /** Sentence no period */
+ def method2 = 0
+
+ /** Sentence period at end.*/
+ def method3 = 0
+ }
+ """
+
+ def scaladocSettings = ""
+
+ def testModel(root: Package) = {
+ import access._
+ val ms = List("method1", "method2", "method3")
+ for (m <- ms) {
+ val method = root._class("C")._method(m)
+ println(method.comment.get.body.summary)
+ }
+ }
+}
diff --git a/test/scaladoc/scalacheck/CommentFactoryTest.scala b/test/scaladoc/scalacheck/CommentFactoryTest.scala
index 96174d29d1..ff64a25602 100644
--- a/test/scaladoc/scalacheck/CommentFactoryTest.scala
+++ b/test/scaladoc/scalacheck/CommentFactoryTest.scala
@@ -25,10 +25,10 @@ class Factory(val g: Global, val s: doc.Settings)
}
def parseComment(s: String): Option[Inline] =
- strip(parse(s, "", scala.tools.nsc.util.NoPosition))
+ strip(parse(s, "", scala.tools.nsc.util.NoPosition, null))
def createBody(s: String) =
- parse(s, "", scala.tools.nsc.util.NoPosition).body
+ parse(s, "", scala.tools.nsc.util.NoPosition, null).body
}
object Test extends Properties("CommentFactory") {
@@ -45,7 +45,7 @@ object Test extends Properties("CommentFactory") {
with MemberLookup)
}
- def parse(src: String, dst: Inline) = {
+ def parse(src: String, dst: Inline): Boolean = {
factory.parseComment(src) match {
case Some(inline) =>
inline == dst
diff --git a/test/scaladoc/scalacheck/HtmlFactoryTest.scala b/test/scaladoc/scalacheck/HtmlFactoryTest.scala
index 13eacf79a5..ef70e0bf21 100644
--- a/test/scaladoc/scalacheck/HtmlFactoryTest.scala
+++ b/test/scaladoc/scalacheck/HtmlFactoryTest.scala
@@ -2,6 +2,8 @@ import org.scalacheck._
import org.scalacheck.Prop._
import java.net.{URLClassLoader, URLDecoder}
+import scala.collection.mutable
+import scala.xml.NodeSeq
object XMLUtil {
import scala.xml._
@@ -34,21 +36,25 @@ object Test extends Properties("HtmlFactory") {
// this test previously relied on the assumption that the current thread's classloader is an url classloader and contains all the classpaths
// does partest actually guarantee this? to quote Leonard Nimoy: The answer, of course, is no.
// this test _will_ fail again some time in the future.
- val paths = Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader].getURLs.map(u => URLDecoder.decode(u.getPath))
- val morepaths = Thread.currentThread.getContextClassLoader.getParent.asInstanceOf[URLClassLoader].getURLs.map(u => URLDecoder.decode(u.getPath))
- (paths ++ morepaths).mkString(java.io.File.pathSeparator)
+ // Footnote: java.lang.ClassCastException: org.apache.tools.ant.loader.AntClassLoader5 cannot be cast to java.net.URLClassLoader
+ val loader = Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader]
+ val paths = loader.getURLs.map(u => URLDecoder.decode(u.getPath))
+ paths mkString java.io.File.pathSeparator
}
def createFactory = {
val settings = new Settings({Console.err.println(_)})
+ settings.scaladocQuietRun = true
+ settings.nowarn.value = true
settings.classpath.value = getClasspath
+ settings.docAuthor.value = true
val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings)
new DocFactory(reporter, settings)
}
- def createTemplates(basename: String) = {
- val result = scala.collection.mutable.Map[String, scala.xml.NodeSeq]()
+ def createTemplates(basename: String): collection.Map[String, NodeSeq] = {
+ val result = mutable.Map[String, NodeSeq]()
createFactory.makeUniverse(Left(List(RESOURCES+basename))) match {
case Some(universe) => {
@@ -57,7 +63,7 @@ object Test extends Properties("HtmlFactory") {
result += (page.absoluteLinkTo(page.path) -> page.body)
})
}
- case _ => ;
+ case _ =>
}
result
@@ -143,7 +149,6 @@ object Test extends Properties("HtmlFactory") {
result
}
-
def shortComments(root: scala.xml.Node) =
XMLUtil.stripGroup(root).descendant.flatMap {
case e: scala.xml.Elem => {
@@ -411,7 +416,7 @@ object Test extends Properties("HtmlFactory") {
checkText("SI_5054_q1.scala")(
(None,"""def test(): Int""", true)
//Disabled because the full signature is now displayed
- //(None,"""def test(implicit lost: Int): Int""", false)
+ //(None, """def test(implicit lost: Int): Int""", false)
)
property("SI-5054: Use cases should keep their flags - final should not be lost") =
@@ -564,6 +569,7 @@ object Test extends Properties("HtmlFactory") {
The base comment. And another sentence...
The base comment. And another sentence...
Ending line
+ Author: StartAuthor a Scala developer EndAuthor
T StartT the type of the first argument EndT
arg1 Start1 The T term comment End1
arg2 Start2 The string comment End2
@@ -590,6 +596,7 @@ object Test extends Properties("HtmlFactory") {
The base comment. And another sentence...
The base comment. And another sentence...
Ending line
+ Author: StartAuthor a Scala developer EndAuthor
T StartT the type of the first argument EndT
arg1 Start1 The T term comment End1
arg2 Start2 The string comment End2
@@ -658,6 +665,45 @@ object Test extends Properties("HtmlFactory") {
}
}
+ property("SI-4014: Scaladoc omits @author: no authors") = {
+ val noAuthors = createTemplates("SI-4014_0.scala")("Foo.html")
+
+ noAuthors match {
+ case node: scala.xml.Node => {
+ val s = node.toString
+ ! s.contains("Author")
+ }
+ case _ => false
+ }
+ }
+
+ property("SI-4014: Scaladoc omits @author: one author") = {
+ val oneAuthor = createTemplates("SI-4014_1.scala")("Foo.html")
+
+ oneAuthor match {
+ case node: scala.xml.Node => {
+ val s = node.toString
+ s.contains("<h6>Author:</h6>")
+ s.contains("<p>The Only Author\n</p>")
+ }
+ case _ => false
+ }
+ }
+
+ property("SI-4014: Scaladoc omits @author: two authors") = {
+ val twoAuthors = createTemplates("SI-4014_2.scala")("Foo.html")
+
+ twoAuthors match {
+ case node: scala.xml.Node => {
+ val s = node.toString
+ s.contains("<h6>Authors:</h6>")
+ s.contains("<p>The First Author\n</p>")
+ s.contains("<p>The Second Author\n</p>")
+ }
+ case _ => false
+ }
+ }
+
{
val files = createTemplates("basic.scala")
//println(files)
@@ -680,7 +726,7 @@ object Test extends Properties("HtmlFactory") {
property("package object") = files("com/example/p1/package.html") match {
case node: scala.xml.Node =>
- node.toString contains "com.example.p1.package#packageObjectMethod"
+ node.toString contains "com.example.p1#packageObjectMethod"
case _ => false
}
@@ -693,5 +739,78 @@ object Test extends Properties("HtmlFactory") {
case node: scala.xml.Node => true
case _ => false
}
+
+ property("SI-8514: No inconsistencies") =
+ checkText("SI-8514.scala")(
+ (Some("a/package"),
+ """class A extends AnyRef
+ Some doc here
+ Some doc here
+ Annotations @DeveloperApi()
+ """, true),
+ (Some("a/package"),
+ """class B extends AnyRef
+ Annotations @DeveloperApi()
+ """, true)
+ )
+ }
+
+ // SI-8144
+ {
+ implicit class AttributesAwareNode(val node: NodeSeq) {
+
+ def \@(attrName: String): String =
+ node \ ("@" + attrName) text
+
+ def \@(attrName: String, attrValue: String): NodeSeq =
+ node filter { _ \ ("@" + attrName) exists (_.text == attrValue) }
+ }
+
+ implicit class AssertionAwareNode(node: scala.xml.NodeSeq) {
+
+ def assertTypeLink(expectedUrl: String): Boolean = {
+ val linkElement: NodeSeq = node \\ "div" \@ ("id", "definition") \\ "span" \@ ("class", "permalink") \ "a"
+ linkElement \@ "href" == expectedUrl && linkElement \@ "target" == "_top"
+ }
+
+ def assertMemberLink(group: String)(memberName: String, expectedUrl: String): Boolean = {
+ val linkElement: NodeSeq = node \\ "div" \@ ("id", group) \\ "li" \@ ("name", memberName) \\ "span" \@ ("class", "permalink") \ "a"
+ linkElement \@ "href" == expectedUrl && linkElement \@ "target" == "_top"
+ }
+
+ }
+
+ val files = createTemplates("SI-8144.scala")
+
+ def check(pagePath: String)(f: NodeSeq => org.scalacheck.Prop): org.scalacheck.Prop =
+ files(pagePath) match {
+ case node: scala.xml.Node => f(XMLUtil.stripGroup(node))
+ case _ => false
+ }
+
+ property("SI-8144: Members' permalink - package") = check("some/package.html") { node =>
+ ("type link" |: node.assertTypeLink("../index.html#some.package")) &&
+ ("member: some.pack" |: node.assertMemberLink("values")("some.pack", "../index.html#some.package@pack"))
+ }
+
+ property("SI-8144: Members' permalink - inner package") = check("some/pack/package.html") { node =>
+ ("type link" |: node.assertTypeLink("../../index.html#some.pack.package")) &&
+ ("member: SomeType (object)" |: node.assertMemberLink("values")("some.pack.SomeType", "../../index.html#some.pack.package@SomeType")) &&
+ ("member: SomeType (class)" |: node.assertMemberLink("types")("some.pack.SomeType", "../../index.html#some.pack.package@SomeTypeextendsAnyRef"))
+ }
+
+ property("SI-8144: Members' permalink - companion object") = check("some/pack/SomeType$.html") { node =>
+ ("type link" |: node.assertTypeLink("../../index.html#some.pack.SomeType$")) &&
+ ("member: someVal" |: node.assertMemberLink("allMembers")("some.pack.SomeType#someVal", "../../index.html#some.pack.SomeType$@someVal:String"))
+ }
+
+ property("SI-8144: Members' permalink - class") = check("some/pack/SomeType.html") { node =>
+ ("type link" |: node.assertTypeLink("../../index.html#some.pack.SomeType")) &&
+ ("constructor " |: node.assertMemberLink("constructors")("some.pack.SomeType#<init>", "../../index.html#some.pack.SomeType@<init>(arg:String):some.pack.SomeType")) &&
+ ( "member: type TypeAlias" |: node.assertMemberLink("types")("some.pack.SomeType.TypeAlias", "../../index.html#some.pack.SomeType@TypeAlias=String")) &&
+ ( "member: def >#<():Int " |: node.assertMemberLink("values")("some.pack.SomeType#>#<", "../../index.html#some.pack.SomeType@>#<():Int")) &&
+ ( "member: def >@<():TypeAlias " |: node.assertMemberLink("values")("some.pack.SomeType#>@<", "../../index.html#some.pack.SomeType@>@<():SomeType.this.TypeAlias"))
+ }
+
}
}
diff --git a/test/scaladoc/scalacheck/IndexScriptTest.scala b/test/scaladoc/scalacheck/IndexScriptTest.scala
index 5aef38e00a..b8b9f92965 100644
--- a/test/scaladoc/scalacheck/IndexScriptTest.scala
+++ b/test/scaladoc/scalacheck/IndexScriptTest.scala
@@ -8,14 +8,20 @@ import java.net.{URLClassLoader, URLDecoder}
object Test extends Properties("IndexScript") {
def getClasspath = {
- val loader = Thread.currentThread.getContextClassLoader
- val paths = loader.asInstanceOf[URLClassLoader].getURLs
- val morepaths = loader.getParent.asInstanceOf[URLClassLoader].getURLs
- (paths ++ morepaths).map(u => URLDecoder.decode(u.getPath)).mkString(java.io.File.pathSeparator)
+ // these things can be tricky
+ // this test previously relied on the assumption that the current thread's classloader is an url classloader and contains all the classpaths
+ // does partest actually guarantee this? to quote Leonard Nimoy: The answer, of course, is no.
+ // this test _will_ fail again some time in the future.
+ // Footnote: java.lang.ClassCastException: org.apache.tools.ant.loader.AntClassLoader5 cannot be cast to java.net.URLClassLoader
+ val loader = Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader]
+ val paths = loader.getURLs.map(u => URLDecoder.decode(u.getPath))
+ paths mkString java.io.File.pathSeparator
}
val docFactory = {
val settings = new doc.Settings({Console.err.println(_)})
+ settings.scaladocQuietRun = true
+ settings.nowarn.value = true
settings.classpath.value = getClasspath
val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings)
new doc.DocFactory(reporter, settings)
@@ -35,7 +41,7 @@ object Test extends Properties("IndexScript") {
}
property("allPackages") = {
- createIndexScript("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match {
+ createIndexScript("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
case Some(index) =>
index.allPackages.map(_.toString) == List(
"scala",
diff --git a/test/scaladoc/scalacheck/IndexTest.scala b/test/scaladoc/scalacheck/IndexTest.scala
index e114767264..abc0e5da01 100644
--- a/test/scaladoc/scalacheck/IndexTest.scala
+++ b/test/scaladoc/scalacheck/IndexTest.scala
@@ -12,19 +12,19 @@ object Test extends Properties("Index") {
// this test previously relied on the assumption that the current thread's classloader is an url classloader and contains all the classpaths
// does partest actually guarantee this? to quote Leonard Nimoy: The answer, of course, is no.
// this test _will_ fail again some time in the future.
- val paths = Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader].getURLs.map(u => URLDecoder.decode(u.getPath))
- val morepaths = Thread.currentThread.getContextClassLoader.getParent.asInstanceOf[URLClassLoader].getURLs.map(u => URLDecoder.decode(u.getPath))
- (paths ++ morepaths).mkString(java.io.File.pathSeparator)
+ // Footnote: java.lang.ClassCastException: org.apache.tools.ant.loader.AntClassLoader5 cannot be cast to java.net.URLClassLoader
+ val loader = Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader]
+ val paths = loader.getURLs.map(u => URLDecoder.decode(u.getPath))
+ paths mkString java.io.File.pathSeparator
}
val docFactory = {
val settings = new doc.Settings({Console.err.println(_)})
-
+ settings.scaladocQuietRun = true
+ settings.nowarn.value = true
settings.classpath.value = getClasspath
- println(settings.classpath.value)
val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings)
-
new doc.DocFactory(reporter, settings)
}
@@ -56,7 +56,7 @@ object Test extends Properties("Index") {
}
property("path") = {
- createIndex("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match {
+ createIndex("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
case Some(index) =>
index.path == List("index.html")
case None => false
@@ -64,14 +64,21 @@ object Test extends Properties("Index") {
}
property("title") = {
- createIndex("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match {
+ createIndex("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
case Some(index) =>
index.title == ""
case None => false
}
}
+ property("browser contants a script element") = {
+ createIndex("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
+ case Some(index) =>
+ (index.browser \ "script").size == 1
+ case None => false
+ }
+ }
property("package objects in index") = {
createIndex("test/scaladoc/resources/SI-5558.scala") match {
case Some(index) =>