diff --git a/scala3doc/src/dotty/dokka/DocContext.scala b/scala3doc/src/dotty/dokka/DocContext.scala index 8470b909b69d..6471d7f662c4 100644 --- a/scala3doc/src/dotty/dokka/DocContext.scala +++ b/scala3doc/src/dotty/dokka/DocContext.scala @@ -32,7 +32,6 @@ val report = dotty.tools.dotc.report def relativePath(p: Path)(using Context): Path = val root = Paths.get("").toAbsolutePath() val absPath = p.toAbsolutePath - println(Seq(p, absPath, absPath.startsWith(root), root.relativize(absPath))) if absPath.startsWith(root) then root.relativize(p.toAbsolutePath()) else p diff --git a/scala3doc/src/dotty/dokka/site/StaticSiteContext.scala b/scala3doc/src/dotty/dokka/site/StaticSiteContext.scala index 630142fed440..786d6d577260 100644 --- a/scala3doc/src/dotty/dokka/site/StaticSiteContext.scala +++ b/scala3doc/src/dotty/dokka/site/StaticSiteContext.scala @@ -150,18 +150,21 @@ class StaticSiteContext( dir("docs").flatMap(_.listFiles()).flatMap(loadTemplate(_, isBlog = false)) ++ dir("blog").flatMap(loadTemplate(_, isBlog = true)) - def driForLink(template: TemplateFile, link: String): Option[DRI] = - val pathDri = Try { + def driForLink(template: TemplateFile, link: String): Seq[DRI] = + val pathsDri: Option[Seq[DRI]] = Try { val baseFile = if link.startsWith("/") then root.toPath.resolve(link.drop(1)) else template.file.toPath.getParent().resolve(link).normalize() val baseFileName = baseFile.getFileName.toString val mdFile = baseFile.resolveSibling(baseFileName.stripSuffix(".html") + ".md") + def trySuffix(pref: String) = + if baseFileName == pref then Seq(baseFile.getParent) else Nil + val strippedIndexes = trySuffix("index.html") ++ trySuffix("index.md") - Seq(baseFile, mdFile).find(Files.exists(_)).map(driFor) - }.toOption.flatten - pathDri.orElse(memberLinkResolver(link)) + (Seq(baseFile, mdFile) ++ strippedIndexes).filter(Files.exists(_)).map(driFor) + }.toOption + pathsDri.getOrElse(memberLinkResolver(link).toList) def driFor(dest: Path): DRI = mkDRI(s"_.${root.toPath.relativize(dest)}") diff --git a/scala3doc/src/dotty/dokka/site/common.scala b/scala3doc/src/dotty/dokka/site/common.scala index 70a5c9ca955f..c6b571288222 100644 --- a/scala3doc/src/dotty/dokka/site/common.scala +++ b/scala3doc/src/dotty/dokka/site/common.scala @@ -22,7 +22,7 @@ import org.jetbrains.dokka.pages._ import scala.collection.JavaConverters._ -val docsRootDRI: DRI = mkDRI(extra = "_top_level_index") +val docsRootDRI: DRI = mkDRI("_.docs") val docsDRI: DRI = mkDRI(extra = "_docs_level_index") val apiPageDRI: DRI = mkDRI(packageName = "api", extra = "__api__") diff --git a/scala3doc/src/dotty/renderers/ScalaHtmlRenderer.scala b/scala3doc/src/dotty/renderers/ScalaHtmlRenderer.scala index 6d9915d66f4a..bd48d774d012 100644 --- a/scala3doc/src/dotty/renderers/ScalaHtmlRenderer.scala +++ b/scala3doc/src/dotty/renderers/ScalaHtmlRenderer.scala @@ -260,14 +260,11 @@ class ScalaHtmlRenderer(using ctx: DokkaContext) extends HtmlRenderer(ctx) { case HashRegex(path, prefix) => (path, prefix) case _ => (str, "") - // TODO (https://github.com/lampepfl/scala3doc/issues/238) proper warnings about unresolved links - prc.context.driForLink(prc.template.templateFile, path) - .flatMap(dri => Option(getLocationProvider.resolve(dri, sourceSets, page))) - .map(_ + prefix) - .getOrElse { - report.warn(s"Unable to resolve link '$str'", prc.template.file) - str - } + val dri = prc.context.driForLink(prc.template.templateFile, path) + val res = dri.flatMap(dri => Option(getLocationProvider.resolve(dri, sourceSets, page))) + if res.isEmpty then + report.warn(s"Unable to resolve link '$str'", prc.template.file) + res.headOption.fold(str)(_ + prefix) def processLocalLink(str: String): String = if str.startsWith("#") || str.isEmpty then str