From a19e6bf68499493ef9ecffdb018ef264f46ca28a Mon Sep 17 00:00:00 2001 From: Islon Scherer Date: Wed, 28 May 2025 18:08:38 +0200 Subject: [PATCH] Fix doc dependency link (#1078) --- .../packages/birds@0.5.0/birds@0.5.0.json | 2 +- .../packages/fruit@1.0.5/fruit@1.0.5.json | 1 - .../org/pkl/commons/test/PackageServer.kt | 4 +-- .../input/packages/packages1.pkl | 2 +- .../input/packages/packages2.pkl | 2 +- .../projects/project4/PklProject.deps.json | 2 +- .../output/packages/packages2.pcf | 4 +-- .../main/kotlin/org/pkl/doc/DocPackageInfo.kt | 7 +++++ .../src/main/kotlin/org/pkl/doc/DocScope.kt | 9 +++++-- .../main/kotlin/org/pkl/doc/PageGenerator.kt | 27 ++++++++++++------- .../output/com.package1/1.2.3/index.html | 2 +- .../birds/0.5.0/Bird/index.html | 2 +- .../localhost(3a)0/birds/0.5.0/index.html | 4 +-- 13 files changed, 44 insertions(+), 24 deletions(-) diff --git a/pkl-commons-test/src/main/files/packages/birds@0.5.0/birds@0.5.0.json b/pkl-commons-test/src/main/files/packages/birds@0.5.0/birds@0.5.0.json index fe28814d..ca047007 100644 --- a/pkl-commons-test/src/main/files/packages/birds@0.5.0/birds@0.5.0.json +++ b/pkl-commons-test/src/main/files/packages/birds@0.5.0/birds@0.5.0.json @@ -7,7 +7,7 @@ "fruities": { "uri": "package://localhost:0/fruit@1.0.5", "checksums": { - "sha256": "34a15b02346e6acb85da5bd71d8b0738a79008b38a7fc805e5869d9129ad27d2" + "sha256": "8ff80e5ac882650e817f261c8af024bf0db9b07888c9d18c20017457e04ffe06" } } }, diff --git a/pkl-commons-test/src/main/files/packages/fruit@1.0.5/fruit@1.0.5.json b/pkl-commons-test/src/main/files/packages/fruit@1.0.5/fruit@1.0.5.json index 3eaa93b7..a7ea204d 100644 --- a/pkl-commons-test/src/main/files/packages/fruit@1.0.5/fruit@1.0.5.json +++ b/pkl-commons-test/src/main/files/packages/fruit@1.0.5/fruit@1.0.5.json @@ -9,7 +9,6 @@ "sha256": "$computedChecksum" }, "sourceCode": "https://example.com/fruit", - "documentation": "https://example.com/fruit-docs", "license": "UNLICENSED", "authors": [ "apple-1@example.com", diff --git a/pkl-commons-test/src/main/kotlin/org/pkl/commons/test/PackageServer.kt b/pkl-commons-test/src/main/kotlin/org/pkl/commons/test/PackageServer.kt index cafaebe7..afd7140b 100644 --- a/pkl-commons-test/src/main/kotlin/org/pkl/commons/test/PackageServer.kt +++ b/pkl-commons-test/src/main/kotlin/org/pkl/commons/test/PackageServer.kt @@ -44,8 +44,8 @@ import kotlin.io.path.* @OptIn(ExperimentalPathApi::class) class PackageServer : AutoCloseable { companion object { - const val BIRDS_SHA = "6f18af649b47986530cd6dc39abe17888db2701bc5381c385fb86a32fda2685e" - const val FRUIT_SHA = "34a15b02346e6acb85da5bd71d8b0738a79008b38a7fc805e5869d9129ad27d2" + const val BIRDS_SHA = "b27206b80f4f227752b6f02143887f3ea41e554542cec38f7b572b987566c4de" + const val FRUIT_SHA = "8ff80e5ac882650e817f261c8af024bf0db9b07888c9d18c20017457e04ffe06" const val FRUIT_1_1_SHA = "8d982761d182f2185e4180c82190791d9a60c721cb3393bb2e946fab90131e8c" fun populateCacheDir(cacheDir: Path) { diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/packages/packages1.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/packages/packages1.pkl index 61d1d34a..4dd40d55 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/input/packages/packages1.pkl +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/packages/packages1.pkl @@ -16,7 +16,7 @@ examples { import("package://localhost:0/birds@0.5.0#/catalog/Ostrich.pkl") } ["importing while specifying checksum"] { - import("package://localhost:0/birds@0.5.0::sha256:6f18af649b47986530cd6dc39abe17888db2701bc5381c385fb86a32fda2685e#/catalog/Swallow.pkl") + import("package://localhost:0/birds@0.5.0::sha256:b27206b80f4f227752b6f02143887f3ea41e554542cec38f7b572b987566c4de#/catalog/Swallow.pkl") } ["reads"] { read("package://localhost:0/birds@0.5.0#/Bird.pkl") diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/packages/packages2.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/packages/packages2.pkl index 0a479a3d..b0b25fdd 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/input/packages/packages2.pkl +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/packages/packages2.pkl @@ -20,6 +20,6 @@ examples { import("package://localhost:0/birds@0.5.0#/allFruit.pkl").fruitFiles } ["glob import while specifying checksum"] { - import*("package://localhost:0/birds@0.5.0::sha256:6f18af649b47986530cd6dc39abe17888db2701bc5381c385fb86a32fda2685e#/catalog/*.pkl") + import*("package://localhost:0/birds@0.5.0::sha256:b27206b80f4f227752b6f02143887f3ea41e554542cec38f7b572b987566c4de#/catalog/*.pkl") } } diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/projects/project4/PklProject.deps.json b/pkl-core/src/test/files/LanguageSnippetTests/input/projects/project4/PklProject.deps.json index 681310c7..e0ff4ede 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/input/projects/project4/PklProject.deps.json +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/projects/project4/PklProject.deps.json @@ -5,7 +5,7 @@ "type": "remote", "uri": "projectpackage://localhost:0/fruit@1.0.5", "checksums": { - "sha256": "34a15b02346e6acb85da5bd71d8b0738a79008b38a7fc805e5869d9129ad27d2" + "sha256": "8ff80e5ac882650e817f261c8af024bf0db9b07888c9d18c20017457e04ffe06" } } } diff --git a/pkl-core/src/test/files/LanguageSnippetTests/output/packages/packages2.pcf b/pkl-core/src/test/files/LanguageSnippetTests/output/packages/packages2.pcf index 012f5793..d4dfd5f0 100644 --- a/pkl-core/src/test/files/LanguageSnippetTests/output/packages/packages2.pcf +++ b/pkl-core/src/test/files/LanguageSnippetTests/output/packages/packages2.pcf @@ -118,13 +118,13 @@ examples { } ["glob import while specifying checksum"] { new { - ["package://localhost:0/birds@0.5.0::sha256:6f18af649b47986530cd6dc39abe17888db2701bc5381c385fb86a32fda2685e#/catalog/Ostrich.pkl"] { + ["package://localhost:0/birds@0.5.0::sha256:b27206b80f4f227752b6f02143887f3ea41e554542cec38f7b572b987566c4de#/catalog/Ostrich.pkl"] { name = "Ostrich" favoriteFruit { name = "Orange" } } - ["package://localhost:0/birds@0.5.0::sha256:6f18af649b47986530cd6dc39abe17888db2701bc5381c385fb86a32fda2685e#/catalog/Swallow.pkl"] { + ["package://localhost:0/birds@0.5.0::sha256:b27206b80f4f227752b6f02143887f3ea41e554542cec38f7b572b987566c4de#/catalog/Swallow.pkl"] { name = "Swallow" favoriteFruit { name = "Apple" diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/DocPackageInfo.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/DocPackageInfo.kt index f312e420..4ae684b5 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/DocPackageInfo.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/DocPackageInfo.kt @@ -23,6 +23,7 @@ import org.pkl.core.Member.SourceLocation import org.pkl.core.PModule import org.pkl.core.PObject import org.pkl.core.TypeAlias +import org.pkl.core.packages.PackageUri /** API equivalent of standard library module `pkl.DocPackageInfo`. */ data class DocPackageInfo( @@ -198,6 +199,12 @@ data class DocPackageInfo( ) { internal val prefix = "$name." + val qualifiedName: String = + if (uri != null) { + val packageUri = PackageUri(uri) + "${uri.authority}${packageUri.pathWithoutVersion}" + } else name + /** Note: Returns an absolute URI, or an URI relative to the current site. */ internal fun getModuleDocUrl(moduleName: String): URI? = when { diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/DocScope.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/DocScope.kt index 8a79fbd2..c111926e 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/DocScope.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/DocScope.kt @@ -35,7 +35,7 @@ internal sealed class DocScope { abstract val parent: DocScope? - private val siteScope: SiteScope? by lazy { + val siteScope: SiteScope? by lazy { var scope = this while (scope !is SiteScope) { scope = scope.parent ?: return@lazy null @@ -122,7 +122,7 @@ internal abstract class PageScope : DocScope() { // equality is identity internal class SiteScope( - docPackages: List, + val docPackages: List, private val overviewImports: Map, private val importResolver: (URI) -> ModuleSchema, outputDir: Path, @@ -259,6 +259,11 @@ internal class PackageScope( override val url: URI by lazy { parent.url.resolve("./${name.pathEncoded}/$version/index.html") } + fun urlForVersionRelativeTo(scope: DocScope, version: String): URI { + val myVersion = parent.url.resolve("./${name.pathEncoded}/$version/index.html") + return IoUtils.relativize(myVersion, scope.url) + } + override val dataUrl: URI by lazy { parent.url.resolve("./data/${name.pathEncoded}/$version/index.js") } diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/PageGenerator.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/PageGenerator.kt index 04c0136a..bbbdedaa 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/PageGenerator.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/PageGenerator.kt @@ -525,15 +525,16 @@ internal abstract class PageGenerator( var first = true for (dep in dependencies) { if (first) first = false else +", " - a { - href = - dep.documentation?.toString() - ?: pageScope.relativeSiteUrl - .resolve("${dep.name}/${dep.version}/index.html") - .toString() - +dep.name - +":" - +dep.version + val link = getDependencyLink(dep) + if (link != null) { + a { + href = link + +dep.name + +":" + +dep.version + } + } else { + span { +"${dep.name}:${dep.version}" } } } } @@ -556,6 +557,14 @@ internal abstract class PageGenerator( return result } + private fun getDependencyLink(dep: DocPackageInfo.PackageDependency): String? { + val siteScope = pageScope.siteScope ?: return null + return siteScope.packageScopes.values + .find { it.name == dep.qualifiedName } + ?.urlForVersionRelativeTo(pageScope, dep.version) + ?.toString() + } + protected class MemberInfoKey(val name: String, val classes: Set = setOf()) protected fun collectMemberInfo( diff --git a/pkl-doc/src/test/files/DocGeneratorTest/output/com.package1/1.2.3/index.html b/pkl-doc/src/test/files/DocGeneratorTest/output/com.package1/1.2.3/index.html index 0d4c7910..b87173d1 100644 --- a/pkl-doc/src/test/files/DocGeneratorTest/output/com.package1/1.2.3/index.html +++ b/pkl-doc/src/test/files/DocGeneratorTest/output/com.package1/1.2.3/index.html @@ -39,7 +39,7 @@
Issue tracker:
https://issues.apple.com/package1/
Dependencies:
-
com.package2:4.5.6, com.externalpackage:7.8.9
+
com.package2:4.5.6, com.externalpackage:7.8.9
diff --git a/pkl-doc/src/test/files/DocGeneratorTest/output/localhost(3a)0/birds/0.5.0/Bird/index.html b/pkl-doc/src/test/files/DocGeneratorTest/output/localhost(3a)0/birds/0.5.0/Bird/index.html index 8329ca76..5cac4646 100644 --- a/pkl-doc/src/test/files/DocGeneratorTest/output/localhost(3a)0/birds/0.5.0/Bird/index.html +++ b/pkl-doc/src/test/files/DocGeneratorTest/output/localhost(3a)0/birds/0.5.0/Bird/index.html @@ -74,7 +74,7 @@
-
favoriteFruit: FruitSource
+
favoriteFruit: FruitSource
diff --git a/pkl-doc/src/test/files/DocGeneratorTest/output/localhost(3a)0/birds/0.5.0/index.html b/pkl-doc/src/test/files/DocGeneratorTest/output/localhost(3a)0/birds/0.5.0/index.html index 56ee5113..98431ae2 100644 --- a/pkl-doc/src/test/files/DocGeneratorTest/output/localhost(3a)0/birds/0.5.0/index.html +++ b/pkl-doc/src/test/files/DocGeneratorTest/output/localhost(3a)0/birds/0.5.0/index.html @@ -37,9 +37,9 @@
Issue tracker:
https://example.com/birds/issues
Dependencies:
-
fruit:1.0.5
+
fruit:1.0.5
Checksum:
-
6f18af649b47986530cd6dc39abe17888db2701bc5381c385fb86a32fda2685e
+
b27206b80f4f227752b6f02143887f3ea41e554542cec38f7b572b987566c4de