KT-22815: Use bold for root identifier, and not for keywords

This commit is contained in:
Simon Ogorodnik
2018-07-09 20:21:01 +03:00
parent 33a6721270
commit 84b299d7dc
8 changed files with 36 additions and 27 deletions
@@ -24,7 +24,7 @@ import java.util.*
interface ClassifierNamePolicy {
object SHORT : ClassifierNamePolicy {
override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String {
if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name)
if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name, false)
val qualifiedNameElements = ArrayList<Name>()
@@ -42,7 +42,7 @@ interface ClassifierNamePolicy {
object FULLY_QUALIFIED : ClassifierNamePolicy {
override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String {
if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name)
if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name, false)
return renderer.renderFqName(DescriptorUtils.getFqName(classifier))
}
@@ -48,7 +48,7 @@ abstract class DescriptorRenderer {
fun renderFunctionParameters(functionDescriptor: FunctionDescriptor): String
= renderValueParameters(functionDescriptor.valueParameters, functionDescriptor.hasSynthesizedParameterNames())
abstract fun renderName(name: Name): String
abstract fun renderName(name: Name, rootRenderedElement: Boolean): String
abstract fun renderFqName(fqName: FqNameUnsafe): String
@@ -198,6 +198,8 @@ interface DescriptorRendererOptions {
val includeAnnotationArguments: Boolean get() = annotationArgumentsRenderingPolicy.includeAnnotationArguments
val includeEmptyAnnotationArguments: Boolean get() = annotationArgumentsRenderingPolicy.includeEmptyAnnotationArguments
var boldForNamesInHtml: Boolean
var includePropertyConstant: Boolean
var parameterNameRenderingPolicy: ParameterNameRenderingPolicy
var withoutTypeParameters: Boolean
@@ -48,7 +48,7 @@ internal class DescriptorRendererImpl(
private fun renderKeyword(keyword: String): String {
when (textFormat) {
RenderingFormat.PLAIN -> return keyword
RenderingFormat.HTML -> return "<b>$keyword</b>"
RenderingFormat.HTML -> return if (boldForNamesInHtml) keyword else "<b>$keyword</b>"
}
}
@@ -79,12 +79,16 @@ internal class DescriptorRendererImpl(
}
/* NAMES RENDERING */
override fun renderName(name: Name): String {
return escape(name.render())
override fun renderName(name: Name, rootRenderedElement: Boolean): String {
val escaped = escape(name.render())
if (boldForNamesInHtml && textFormat == RenderingFormat.HTML && rootRenderedElement) {
return "<b>$escaped</b>"
}
return escaped
}
private fun renderName(descriptor: DeclarationDescriptor, builder: StringBuilder) {
builder.append(renderName(descriptor.name))
private fun renderName(descriptor: DeclarationDescriptor, builder: StringBuilder, rootRenderedElement: Boolean) {
builder.append(renderName(descriptor.name, rootRenderedElement))
}
private fun renderCompanionObjectName(descriptor: DeclarationDescriptor, builder: StringBuilder) {
@@ -96,12 +100,12 @@ internal class DescriptorRendererImpl(
val containingDeclaration = descriptor.containingDeclaration
if (containingDeclaration != null) {
builder.append("of ")
builder.append(renderName(containingDeclaration.name))
builder.append(renderName(containingDeclaration.name, false))
}
}
if (verbose || descriptor.name != SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT) {
if (!startFromName) renderSpaceIfNeeded(builder)
builder.append(renderName(descriptor.name))
builder.append(renderName(descriptor.name, true))
}
}
@@ -267,7 +271,7 @@ internal class DescriptorRendererImpl(
possiblyInnerType.outerType?.let {
renderPossiblyInnerType(it)
append('.')
append(renderName(possiblyInnerType.classifierDescriptor.name))
append(renderName(possiblyInnerType.classifierDescriptor.name, false))
} ?: append(renderTypeConstructor(possiblyInnerType.classifierDescriptor.typeConstructor))
append(renderTypeArguments(possiblyInnerType.arguments))
@@ -351,7 +355,7 @@ internal class DescriptorRendererImpl(
val name = if (parameterNamesInFunctionalTypes) typeProjection.type.extractParameterNameFromFunctionTypeArgument() else null
if (name != null) {
append(renderName(name))
append(renderName(name, false))
append(": ")
}
@@ -560,7 +564,7 @@ internal class DescriptorRendererImpl(
builder.renderAnnotations(typeParameter)
renderName(typeParameter, builder)
renderName(typeParameter, builder, topLevel)
val upperBoundsCount = typeParameter.upperBounds.size
if ((upperBoundsCount > 1 && !topLevel) || upperBoundsCount == 1) {
val upperBound = typeParameter.upperBounds.iterator().next()
@@ -655,7 +659,7 @@ internal class DescriptorRendererImpl(
renderReceiver(function, builder)
}
renderName(function, builder)
renderName(function, builder, true)
renderValueParameters(function.valueParameters, function.hasSynthesizedParameterNames(), builder)
@@ -703,7 +707,7 @@ internal class DescriptorRendererImpl(
if (renderConstructorKeyword) {
builder.append(" ")
}
renderName(classDescriptor, builder)
renderName(classDescriptor, builder, true)
renderTypeParameters(constructor.typeParameters, builder, false)
}
@@ -722,7 +726,7 @@ internal class DescriptorRendererImpl(
for (typeParameter in typeParameters) {
typeParameter.upperBounds
.drop(1) // first parameter is rendered by renderTypeParameter
.mapTo(upperBoundStrings) { renderName(typeParameter.name) + " : " + renderType(it) }
.mapTo(upperBoundStrings) { renderName(typeParameter.name, false) + " : " + renderType(it) }
}
if (!upperBoundStrings.isEmpty()) {
@@ -797,7 +801,7 @@ internal class DescriptorRendererImpl(
}
if (includeName) {
renderName(variable, builder)
renderName(variable, builder, topLevel)
builder.append(": ")
}
@@ -827,7 +831,7 @@ internal class DescriptorRendererImpl(
renderReceiver(property, builder)
}
renderName(property, builder)
renderName(property, builder, true)
builder.append(": ").append(renderType(property.type))
renderReceiverAfterName(property, builder)
@@ -850,7 +854,7 @@ internal class DescriptorRendererImpl(
renderVisibility(typeAlias.visibility, builder)
renderMemberModifiers(typeAlias, builder)
builder.append(renderKeyword("typealias")).append(" ")
renderName(typeAlias, builder)
renderName(typeAlias, builder, true)
renderTypeParameters(typeAlias.declaredTypeParameters, builder, false)
renderCapturedTypeParametersIfRequired(typeAlias, builder)
@@ -891,7 +895,7 @@ internal class DescriptorRendererImpl(
if (!isCompanionObject(klass)) {
if (!startFromName) renderSpaceIfNeeded(builder)
renderName(klass, builder)
renderName(klass, builder, true)
}
else {
renderCompanionObjectName(klass, builder)
@@ -941,7 +945,7 @@ internal class DescriptorRendererImpl(
renderPackageHeader(packageView.fqName, "package", builder)
if (debugMode) {
builder.append(" in context of ")
renderName(packageView.module, builder)
renderName(packageView.module, builder, false)
}
}
@@ -949,7 +953,7 @@ internal class DescriptorRendererImpl(
renderPackageHeader(fragment.fqName, "package-fragment", builder)
if (debugMode) {
builder.append(" in ")
renderName(fragment.containingDeclaration, builder)
renderName(fragment.containingDeclaration, builder, false)
}
}
@@ -1028,7 +1032,7 @@ internal class DescriptorRendererImpl(
}
override fun visitModuleDeclaration(descriptor: ModuleDescriptor, builder: StringBuilder) {
renderName(descriptor, builder)
renderName(descriptor, builder, true)
}
override fun visitScriptDescriptor(scriptDescriptor: ScriptDescriptor, builder: StringBuilder) {
@@ -119,4 +119,6 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
override var renderFunctionContracts: Boolean by property(false)
override var presentableUnresolvedTypes: Boolean by property(false)
override var boldForNamesInHtml: Boolean by property(false)
}
@@ -57,7 +57,7 @@ internal object ReflectionObjectRenderer {
return buildString {
append(if (descriptor.isVar) "var " else "val ")
appendReceivers(descriptor)
append(renderer.renderName(descriptor.name))
append(renderer.renderName(descriptor.name, true))
append(": ")
append(renderType(descriptor.type))
@@ -68,7 +68,7 @@ internal object ReflectionObjectRenderer {
return buildString {
append("fun ")
appendReceivers(descriptor)
append(renderer.renderName(descriptor.name))
append(renderer.renderName(descriptor.name, true))
descriptor.valueParameters.joinTo(this, separator = ", ", prefix = "(", postfix = ")") {
renderType(it.type) // TODO: vararg
@@ -172,6 +172,7 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() {
renderCompanionObjectName = true
withDefinedIn = false
eachAnnotationOnNewLine = true
boldForNamesInHtml = true
}
private fun renderEnumSpecialFunction(element: KtClass, functionDescriptor: FunctionDescriptor, quickNavigation: Boolean): String {
@@ -40,7 +40,7 @@ class SpecifyExplicitLambdaSignatureIntention : SelfTargetingOffsetIndependentIn
}
private fun ValueParameterDescriptor.render(psiName: String?): String = IdeDescriptorRenderers.SOURCE_CODE.let {
"${psiName ?: it.renderName(name)}: ${it.renderType(type)}"
"${psiName ?: it.renderName(name, true)}: ${it.renderType(type)}"
}
override fun applyTo(element: KtLambdaExpression, editor: Editor?) {
@@ -56,7 +56,7 @@ class ImportAwareClassifierNamePolicy(
}
private fun shortNameWithCompanionNameSkip(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String {
if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name)
if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name, false)
val qualifiedNameParts = classifier.parentsWithSelf
.takeWhile { it is ClassifierDescriptor }