From 3eb9c6973969617cfd77275a9bc3f56da568d571 Mon Sep 17 00:00:00 2001 From: WhiteMemory99 Date: Tue, 19 Dec 2023 00:47:57 +0700 Subject: [PATCH] Add an option to show single hints --- .../PythonInlayParameterHintsProvider.kt | 25 ++++++++++--------- .../Parameters/hints.single.parameters.py | 5 ++++ 2 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 src/main/resources/inlayProviders/Parameters/hints.single.parameters.py diff --git a/src/main/kotlin/space/whitememory/pythoninlayparams/PythonInlayParameterHintsProvider.kt b/src/main/kotlin/space/whitememory/pythoninlayparams/PythonInlayParameterHintsProvider.kt index 27a7b3c..1783248 100644 --- a/src/main/kotlin/space/whitememory/pythoninlayparams/PythonInlayParameterHintsProvider.kt +++ b/src/main/kotlin/space/whitememory/pythoninlayparams/PythonInlayParameterHintsProvider.kt @@ -1,3 +1,5 @@ +@file:Suppress("UnstableApiUsage") + package space.whitememory.pythoninlayparams import com.intellij.codeInsight.hints.InlayInfo @@ -14,12 +16,6 @@ import com.jetbrains.python.psi.types.TypeEvalContext @Suppress("UnstableApiUsage") class PythonInlayParameterHintsProvider : InlayParameterHintsProvider { - companion object { - val classHints = Option("hints.classes.parameters", { "Class hints" }, true) - val functionHints = Option("hints.functions.parameters", { "Function hints" }, true) - val hideOverlaps = Option("hints.overlaps.parameters", { "Hide overlaps" }, true) - } - private val forbiddenBuiltinFiles = setOf("builtins.pyi", "typing.pyi") override fun getDefaultBlackList() = setOf() @@ -28,7 +24,7 @@ class PythonInlayParameterHintsProvider : InlayParameterHintsProvider { override fun getDescription() = "Help you pass correct arguments by showing parameter names at call sites" - override fun getSupportedOptions() = listOf(classHints, functionHints, hideOverlaps) + override fun getSupportedOptions() = listOf(classHints, functionHints, showOverlaps, showSingleHints) override fun getProperty(key: String?): String? { val prefix = "inlay.parameters.hints" @@ -69,9 +65,9 @@ class PythonInlayParameterHintsProvider : InlayParameterHintsProvider { !it.isSelf && it.parameter !is PySingleStarParameter && it.parameter !is PySlashParameter } ?: return inlayInfos - // Don't need a hint if there's only one parameter, - // Make an exception for *args - if (resolvedParameters.size == 1 && !resolvedParameters[0].isPositionalContainer) return inlayInfos + // Don't need a hint if there's only one parameter, unless required by the settings or contains *args + if (resolvedParameters.size == 1 && !showSingleHints.isEnabled() && !resolvedParameters[0].isPositionalContainer) + return inlayInfos resolvedParameters.zip(element.arguments).forEach { (param, arg) -> val paramName = param.name ?: return@forEach @@ -115,7 +111,7 @@ class PythonInlayParameterHintsProvider : InlayParameterHintsProvider { argument.name?.lowercase() ?: return true } - if (hideOverlaps.isEnabled() && paramName in argumentName) return false + if (!showOverlaps.isEnabled() && paramName in argumentName) return false return paramName != argumentName } @@ -128,4 +124,9 @@ class PythonInlayParameterHintsProvider : InlayParameterHintsProvider { val fileName = callableType.callable?.containingFile?.name ?: return false return fileName in forbiddenBuiltinFiles } -} \ No newline at end of file +} + +val classHints = Option("hints.classes.parameters", { "Class hints" }, true) +val functionHints = Option("hints.functions.parameters", { "Function hints" }, true) +val showOverlaps = Option("hints.overlaps.parameters", { "Show overlaps" }, false) +val showSingleHints = Option("hints.single.parameters", { "Show single hints" }, false) \ No newline at end of file diff --git a/src/main/resources/inlayProviders/Parameters/hints.single.parameters.py b/src/main/resources/inlayProviders/Parameters/hints.single.parameters.py new file mode 100644 index 0000000..75f7c45 --- /dev/null +++ b/src/main/resources/inlayProviders/Parameters/hints.single.parameters.py @@ -0,0 +1,5 @@ +def give_age(age: int) -> str: + return f"Your age is {age}" + +give_age(16) +give_age(age=16)