Skip to content

Commit 546be93

Browse files
authored
Merge pull request #10507 from pikinier20/blog-links
Scala3doc: Adjust generated links for blogs to avoid 404 errors
2 parents 2f26fad + f4d9ef1 commit 546be93

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

scala3doc/src/dotty/dokka/site/StaticSiteLocationProvider.scala

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import org.jetbrains.dokka.pages.RootPageNode
1010
import org.jetbrains.dokka.plugability.DokkaContext
1111

1212
import scala.collection.JavaConverters._
13+
import java.nio.file.Paths
14+
import java.nio.file.Path
1315

1416
class StaticSiteLocationProviderFactory(private val ctx: DokkaContext) extends LocationProviderFactory:
1517
override def getLocationProvider(pageNode: RootPageNode): LocationProvider =
@@ -24,11 +26,23 @@ class StaticSiteLocationProvider(ctx: DokkaContext, pageNode: RootPageNode)
2426
val rawFilePath = context.root.toPath.relativize(page.template.file.toPath)
2527
val pageName = page.template.file.getName
2628
val dotIndex = pageName.lastIndexOf('.')
27-
val newPath =
28-
if (dotIndex < 0) rawFilePath.resolve("index")
29-
else rawFilePath.resolveSibling(pageName.substring(0, dotIndex))
3029

31-
newPath.iterator.asScala.map(_.toString).toList.asJava
30+
if (isBlogPostPath(rawFilePath)) {
31+
val regex = raw"(\d*)-(\d*)-(\d*)-(.*)\..*".r
32+
val blogPostPath = pageName.toString match {
33+
case regex(year, month, day, name) =>
34+
rawFilePath.getParent.resolveSibling(Paths.get(year, month, day, name))
35+
case _ =>
36+
println(s"Blog file at path: $rawFilePath doesn't match desired format.")
37+
rawFilePath.resolveSibling(pageName.substring(0, dotIndex))
38+
}
39+
blogPostPath.iterator.asScala.map(_.toString).toList.asJava
40+
} else {
41+
val newPath =
42+
if (dotIndex < 0) rawFilePath.resolve("index")
43+
else rawFilePath.resolveSibling(pageName.substring(0, dotIndex))
44+
newPath.iterator.asScala.map(_.toString).toList.asJava
45+
}
3246
}
3347

3448
case page: ContentPage if page.getDri.contains(docsDRI) =>
@@ -43,6 +57,8 @@ class StaticSiteLocationProvider(ctx: DokkaContext, pageNode: RootPageNode)
4357
case _ =>
4458
jpath
4559

60+
private def isBlogPostPath(path: Path): Boolean = path.startsWith(Paths.get("blog","_posts"))
61+
4662
override val getPathsIndex: JMap[PageNode, JList[String]] =
4763
super.getPathsIndex.asScala.mapValuesInPlace(updatePageEntry).asJava
4864

0 commit comments

Comments
 (0)