From d9ae467dcd21907532b5dde0f2e9c7431b0988ab Mon Sep 17 00:00:00 2001 From: Aleksei Berezkin Date: Thu, 11 Jul 2024 20:38:11 +0200 Subject: [PATCH] WEB-67976 Limit inlay hints margin change to only JS / TS GitOrigin-RevId: e8268c53d1b08c2e3b1898e26546f9d6c61f9860 --- platform/lang-api/api-dump-unreviewed.txt | 16 +++++++++++++--- .../codeInsight/hints/declarative/HintFormat.kt | 8 ++++++++ .../hints/declarative/impl/InlayData.kt | 6 ++++-- .../declarative/impl/InlayPresentationList.kt | 10 +++++++--- 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/platform/lang-api/api-dump-unreviewed.txt b/platform/lang-api/api-dump-unreviewed.txt index 33dc672bac21..e78c56685ec5 100644 --- a/platform/lang-api/api-dump-unreviewed.txt +++ b/platform/lang-api/api-dump-unreviewed.txt @@ -1263,19 +1263,29 @@ e:com.intellij.codeInsight.hints.declarative.HintFontSize - s:values():com.intellij.codeInsight.hints.declarative.HintFontSize[] f:com.intellij.codeInsight.hints.declarative.HintFormat - sf:Companion:com.intellij.codeInsight.hints.declarative.HintFormat$Companion -- (com.intellij.codeInsight.hints.declarative.HintColorKind,com.intellij.codeInsight.hints.declarative.HintFontSize):V +- (com.intellij.codeInsight.hints.declarative.HintColorKind,com.intellij.codeInsight.hints.declarative.HintFontSize,com.intellij.codeInsight.hints.declarative.HintMarginPadding):V - f:component1():com.intellij.codeInsight.hints.declarative.HintColorKind - f:component2():com.intellij.codeInsight.hints.declarative.HintFontSize -- f:copy(com.intellij.codeInsight.hints.declarative.HintColorKind,com.intellij.codeInsight.hints.declarative.HintFontSize):com.intellij.codeInsight.hints.declarative.HintFormat -- bs:copy$default(com.intellij.codeInsight.hints.declarative.HintFormat,com.intellij.codeInsight.hints.declarative.HintColorKind,com.intellij.codeInsight.hints.declarative.HintFontSize,I,java.lang.Object):com.intellij.codeInsight.hints.declarative.HintFormat +- f:component3():com.intellij.codeInsight.hints.declarative.HintMarginPadding +- f:copy(com.intellij.codeInsight.hints.declarative.HintColorKind,com.intellij.codeInsight.hints.declarative.HintFontSize,com.intellij.codeInsight.hints.declarative.HintMarginPadding):com.intellij.codeInsight.hints.declarative.HintFormat +- bs:copy$default(com.intellij.codeInsight.hints.declarative.HintFormat,com.intellij.codeInsight.hints.declarative.HintColorKind,com.intellij.codeInsight.hints.declarative.HintFontSize,com.intellij.codeInsight.hints.declarative.HintMarginPadding,I,java.lang.Object):com.intellij.codeInsight.hints.declarative.HintFormat - equals(java.lang.Object):Z - f:getColorKind():com.intellij.codeInsight.hints.declarative.HintColorKind - f:getFontSize():com.intellij.codeInsight.hints.declarative.HintFontSize +- f:getHorizontalMarginPadding():com.intellij.codeInsight.hints.declarative.HintMarginPadding - hashCode():I - f:withColorKind(com.intellij.codeInsight.hints.declarative.HintColorKind):com.intellij.codeInsight.hints.declarative.HintFormat - f:withFontSize(com.intellij.codeInsight.hints.declarative.HintFontSize):com.intellij.codeInsight.hints.declarative.HintFormat +- f:withHorizontalMargin(com.intellij.codeInsight.hints.declarative.HintMarginPadding):com.intellij.codeInsight.hints.declarative.HintFormat f:com.intellij.codeInsight.hints.declarative.HintFormat$Companion - f:getDefault():com.intellij.codeInsight.hints.declarative.HintFormat +e:com.intellij.codeInsight.hints.declarative.HintMarginPadding +- java.lang.Enum +- sf:MarginAndSmallerPadding:com.intellij.codeInsight.hints.declarative.HintMarginPadding +- sf:OnlyPadding:com.intellij.codeInsight.hints.declarative.HintMarginPadding +- s:getEntries():kotlin.enums.EnumEntries +- s:valueOf(java.lang.String):com.intellij.codeInsight.hints.declarative.HintMarginPadding +- s:values():com.intellij.codeInsight.hints.declarative.HintMarginPadding[] f:com.intellij.codeInsight.hints.declarative.InlayActionData - (com.intellij.codeInsight.hints.declarative.InlayActionPayload,java.lang.String):V - equals(java.lang.Object):Z diff --git a/platform/lang-api/src/com/intellij/codeInsight/hints/declarative/HintFormat.kt b/platform/lang-api/src/com/intellij/codeInsight/hints/declarative/HintFormat.kt index 9a5819b5ddc9..7e7d7770ea34 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/hints/declarative/HintFormat.kt +++ b/platform/lang-api/src/com/intellij/codeInsight/hints/declarative/HintFormat.kt @@ -4,16 +4,19 @@ package com.intellij.codeInsight.hints.declarative data class HintFormat( val colorKind: HintColorKind, val fontSize: HintFontSize, + val horizontalMarginPadding: HintMarginPadding, ) { companion object { val default = HintFormat( HintColorKind.Default, HintFontSize.AsInEditor, + HintMarginPadding.OnlyPadding, ) } fun withColorKind(newColorKind: HintColorKind) = copy(colorKind = newColorKind) fun withFontSize(newFontSize: HintFontSize) = copy(fontSize = newFontSize) + fun withHorizontalMargin(newHorizontalMarginPadding: HintMarginPadding) = copy(horizontalMarginPadding = newHorizontalMarginPadding) } /** @@ -29,3 +32,8 @@ enum class HintFontSize { AsInEditor, ABitSmallerThanInEditor } + +enum class HintMarginPadding { + OnlyPadding, + MarginAndSmallerPadding, +} diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/declarative/impl/InlayData.kt b/platform/lang-impl/src/com/intellij/codeInsight/hints/declarative/impl/InlayData.kt index 3d6b4ce7b746..f89a14cd47ea 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/declarative/impl/InlayData.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/declarative/impl/InlayData.kt @@ -30,7 +30,7 @@ data class InlayData( companion object { // increment on format changed - private const val SERDE_VERSION = 5 + private const val SERDE_VERSION = 6 } override fun serdeVersion(): Int = SERDE_VERSION + treeExternalizer.serdeVersion() @@ -40,6 +40,7 @@ data class InlayData( writeTooltip(output, inlayData.tooltip) output.writeUTF(inlayData.hintFormat.colorKind.name) output.writeUTF(inlayData.hintFormat.fontSize.name) + output.writeUTF(inlayData.hintFormat.horizontalMarginPadding.name) treeExternalizer.save(output, inlayData.tree) writeUTF(output, inlayData.providerId) output.writeBoolean(inlayData.disabled) @@ -52,13 +53,14 @@ data class InlayData( val tooltip: String? = readTooltip(input) val hintColorKind: HintColorKind = HintColorKind.valueOf(input.readUTF()) val hintFontSize: HintFontSize = HintFontSize.valueOf(input.readUTF()) + val hintHorizontalMarginPadding = HintMarginPadding.valueOf(input.readUTF()) val tree: TinyTree = treeExternalizer.read(input) val providerId: String = readUTF(input) val disabled: Boolean = input.readBoolean() val payloads: List? = readPayloads(input) val providerClass: Class<*> = ZombieInlayHintsProvider::class.java val sourceId: String = readSourceId(input) - return InlayData(position, tooltip, HintFormat(hintColorKind, hintFontSize), tree, providerId, disabled, payloads, providerClass, sourceId) + return InlayData(position, tooltip, HintFormat(hintColorKind, hintFontSize, hintHorizontalMarginPadding), tree, providerId, disabled, payloads, providerClass, sourceId) } private fun writePosition(output: DataOutput, position: InlayPosition) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/declarative/impl/InlayPresentationList.kt b/platform/lang-impl/src/com/intellij/codeInsight/hints/declarative/impl/InlayPresentationList.kt index 51e9a111e908..df9477a20810 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/declarative/impl/InlayPresentationList.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/declarative/impl/InlayPresentationList.kt @@ -16,6 +16,7 @@ import com.intellij.openapi.editor.markup.TextAttributes import com.intellij.openapi.util.NlsContexts import com.intellij.ui.LightweightHint import com.intellij.util.concurrency.annotations.RequiresEdt +import com.intellij.util.containers.enumMapOf import com.intellij.util.ui.GraphicsUtil import com.intellij.util.ui.withTranslated import org.jetbrains.annotations.TestOnly @@ -37,8 +38,10 @@ class InlayPresentationList( ) { companion object { private val NOT_COMPUTED = DeclarativeHintWidth(-1, -1, -1) - private const val HORIZONTAL_PADDING = 6 - private const val HORIZONTAL_MARGIN = 2 + private val MARGIN_PADDING_BY_FORMAT = enumMapOf>().apply { + put(HintMarginPadding.OnlyPadding, 0 to 7) + put(HintMarginPadding.MarginAndSmallerPadding, 2 to 6) + } private const val ARC_WIDTH = 8 private const val ARC_HEIGHT = 8 private const val BACKGROUND_ALPHA: Float = 0.55f @@ -153,7 +156,8 @@ class InlayPresentationList( size = metrics.font.size2D fontName = metrics.font.family val textWidth = entries.sumOf { it.computeWidth(metrics) } - computedWidth = DeclarativeHintWidth(HORIZONTAL_MARGIN, HORIZONTAL_PADDING, textWidth) + val (margin, padding) = MARGIN_PADDING_BY_FORMAT[hintFormat.horizontalMarginPadding]!! + computedWidth = DeclarativeHintWidth(margin, padding, textWidth) return computedWidth } return computedWidth