diff options
author | mkondratek <mkondratek@virtuslab.com> | 2020-09-11 21:38:10 +0200 |
---|---|---|
committer | Andrzej Ratajczak <32793002+BarkingBad@users.noreply.github.com> | 2020-09-29 16:04:51 +0200 |
commit | 5a214c157e29145b8828b69060ba5111c7f1e166 (patch) | |
tree | 3b9829e139ef7d6f998eb3c78e1b4d1b1fc457d7 /plugins/base/src/main/kotlin/parsers/moduleAndPackage | |
parent | 26415d91fcf32f0c70af4f9cea9500bca8187b0e (diff) | |
download | dokka-5a214c157e29145b8828b69060ba5111c7f1e166.tar.gz dokka-5a214c157e29145b8828b69060ba5111c7f1e166.tar.bz2 dokka-5a214c157e29145b8828b69060ba5111c7f1e166.zip |
Add MD parser
Diffstat (limited to 'plugins/base/src/main/kotlin/parsers/moduleAndPackage')
-rw-r--r-- | plugins/base/src/main/kotlin/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContext.kt | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/plugins/base/src/main/kotlin/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContext.kt b/plugins/base/src/main/kotlin/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContext.kt index f11a5d13..64441447 100644 --- a/plugins/base/src/main/kotlin/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContext.kt +++ b/plugins/base/src/main/kotlin/parsers/moduleAndPackage/ModuleAndPackageDocumentationParsingContext.kt @@ -3,10 +3,17 @@ package org.jetbrains.dokka.base.parsers.moduleAndPackage import org.jetbrains.dokka.analysis.DokkaResolutionFacade +import org.jetbrains.dokka.analysis.from import org.jetbrains.dokka.base.parsers.MarkdownParser import org.jetbrains.dokka.base.parsers.moduleAndPackage.ModuleAndPackageDocumentation.Classifier.* +import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.model.doc.Description import org.jetbrains.dokka.model.doc.DocumentationNode import org.jetbrains.dokka.utilities.DokkaLogger +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.idea.kdoc.resolveKDocLink import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -22,15 +29,38 @@ internal fun ModuleAndPackageDocumentationParsingContext.parse( internal fun ModuleAndPackageDocumentationParsingContext( logger: DokkaLogger, - facade: DokkaResolutionFacade? = null, + facade: DokkaResolutionFacade? = null ) = ModuleAndPackageDocumentationParsingContext { fragment -> val descriptor = when (fragment.classifier) { Module -> facade?.moduleDescriptor?.getPackage(FqName.topLevel(Name.identifier(""))) Package -> facade?.moduleDescriptor?.getPackage(FqName(fragment.name)) } - MarkdownParser( - resolutionFacade = facade, - declarationDescriptor = descriptor, - logger = logger - ) + + val externalDri = { link: String -> + try { + if (facade != null && descriptor != null) { + resolveKDocLink( + facade.resolveSession.bindingContext, + facade, + descriptor, + null, + link.split('.') + ).sorted().firstOrNull()?.let { DRI.from(it) } + } else null + } catch (e1: IllegalArgumentException) { + logger.warn("Couldn't resolve link for $link") + null + } + } + + MarkdownParser(externalDri = externalDri) } + +private fun Collection<DeclarationDescriptor>.sorted() = sortedWith( + compareBy( + { it is ClassDescriptor }, + { (it as? FunctionDescriptor)?.name }, + { (it as? FunctionDescriptor)?.valueParameters?.size }, + { (it as? FunctionDescriptor)?.valueParameters?.joinToString { it.type.toString() } } + ) +) |