KT-22815: Show documentation for function value/type params

This commit is contained in:
Simon Ogorodnik
2018-07-12 17:08:33 +03:00
parent e4d76382b8
commit 9ec0ce6ec8
3 changed files with 16 additions and 6 deletions
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.idea.kdoc
import com.intellij.psi.PsiElement
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource
@@ -62,13 +63,16 @@ fun KtElement.findKDoc(descriptorToPsi: (DeclarationDescriptorWithSource) -> Psi
}
if (this is KtParameter) {
val classKDoc = containingClassOrObject?.getChildOfType<KDoc>()
if (this is KtParameter || this is KtTypeParameter) {
val containingDeclaration =
PsiTreeUtil.getParentOfType(this, KtDeclarationWithBody::class.java, KtClassOrObject::class.java, KtScript::class.java)
val classKDoc = containingDeclaration?.getChildOfType<KDoc>()
val subjectName = name
if (classKDoc != null && subjectName != null) {
val propertySection =
classKDoc.findSectionByTag(KDocKnownTag.PROPERTY, subjectName)?.takeIf { this.isPropertyParameter() }
?: classKDoc.findDescendantOfType<KDocTag> { it.knownTag == KDocKnownTag.PARAM && it.getSubjectName() == subjectName }
classKDoc.findSectionByTag(KDocKnownTag.PROPERTY, subjectName)?.takeIf { this is KtParameter && this.isPropertyParameter() }
?: classKDoc.findDescendantOfType<KDocTag> { it.knownTag == KDocKnownTag.PARAM && it.getSubjectName() == subjectName }
if (propertySection != null) {
return propertySection
}
+4 -1
View File
@@ -1,3 +1,6 @@
/**
* @param f docs for param f
*/
fun some(<caret>f: (Int) -> String) : String? = null
//INFO: <div class='definition'><pre>value-parameter <b>f</b>: (Int) &rarr; String</pre></div>
//INFO: <div class='definition'><pre>value-parameter <b>f</b>: (Int) &rarr; String</pre></div><div class='content'><p>docs for param f</p></div><table class='sections'></table>
+4 -1
View File
@@ -1,5 +1,8 @@
interface Base
/**
* @param T this is docs for T
*/
class Some<<caret>T: Base>
//INFO: <div class='definition'><pre><a href="psi_element://Some"><code>Some</code></a><br>&lt;<b>T</b> : <a href="psi_element://Base">Base</a>&gt;</pre></div>
//INFO: <div class='definition'><pre><a href="psi_element://Some"><code>Some</code></a><br>&lt;<b>T</b> : <a href="psi_element://Base">Base</a>&gt;</pre></div><div class='content'><p>this is docs for T</p></div><table class='sections'></table>