InlayHints: make possible to enable/disable parameter hints by language

GitOrigin-RevId: cf70ebde957855034e1f19b78fc952c0a2f0af31
This commit is contained in:
Roman.Ivanov
2019-07-02 06:52:16 +03:00
committed by intellij-monorepo-bot
parent a06b7f402b
commit 98b8ec8386
4 changed files with 38 additions and 5 deletions
@@ -44,6 +44,7 @@ class ParameterNameHintsSettings : PersistentStateComponent<Element> {
private val removedPatterns = hashMapOf<String, Set<String>>()
private val addedPatterns = hashMapOf<String, Set<String>>()
private val options = hashMapOf<String, Boolean>()
private val disabledLanguages = hashSetOf<String>()
fun addIgnorePattern(language: Language, pattern: String) {
val patternsBefore = getAddedPatterns(language)
@@ -95,6 +96,18 @@ class ParameterNameHintsSettings : PersistentStateComponent<Element> {
return root
}
fun setIsEnabledForLanguage(enabled: Boolean, language: Language) {
if (!enabled) {
disabledLanguages.add(language.id)
} else {
disabledLanguages.remove(language.id)
}
}
fun isEnabledForLanguage(language: Language): Boolean {
return language.id !in disabledLanguages
}
override fun loadState(state: Element) {
addedPatterns.clear()
removedPatterns.clear()
@@ -2,8 +2,10 @@
package com.intellij.codeInsight.hints
import com.intellij.codeInsight.hints.filtering.MatcherConstructor
import com.intellij.codeInsight.hints.settings.ParameterNameHintsSettings
import com.intellij.lang.Language
import com.intellij.lang.LanguageExtensionPoint
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.util.text.StringUtil
import java.util.*
@@ -47,4 +49,17 @@ fun getBaseLanguagesWithProviders(): List<Language> {
.map { (first) -> first }
.sorted(Comparator.comparing<Language, String> { l -> l.displayName })
.collect(Collectors.toList())
}
fun isHintsEnabledForLanguage(language: Language): Boolean {
if (!EditorSettingsExternalizable.getInstance().isShowParameterNameHints) return false
return ParameterNameHintsSettings.getInstance().isEnabledForLanguage(language)
}
fun setShowAllParameterHints(value: Boolean) {
EditorSettingsExternalizable.getInstance().isShowParameterNameHints = value
}
fun setShowParameterHintsForLanguage(value: Boolean, language: Language) {
ParameterNameHintsSettings.getInstance().setIsEnabledForLanguage(value, language)
}
@@ -21,7 +21,6 @@ import com.intellij.diff.util.DiffUtil;
import com.intellij.lang.Language;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.Inlay;
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
import com.intellij.openapi.editor.ex.util.EditorScrollingPositionKeeper;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.util.ProgressIndicatorBase;
@@ -78,13 +77,13 @@ public class ParameterHintsPass extends EditorBoundHighlightingPass {
Language language = myFile.getLanguage();
InlayParameterHintsProvider provider = InlayParameterHintsExtension.INSTANCE.forLanguage(language);
if (provider == null || !provider.canShowHintsWhenDisabled() && !isEnabled() || DiffUtil.isDiffEditor(myEditor)) return;
if (provider == null || !provider.canShowHintsWhenDisabled() && !isEnabled(language) || DiffUtil.isDiffEditor(myEditor)) return;
myTraverser.forEach(element -> process(element, provider));
}
private static boolean isEnabled() {
return EditorSettingsExternalizable.getInstance().isShowParameterNameHints();
private static boolean isEnabled(Language language) {
return HintUtilsKt.isHintsEnabledForLanguage(language);
}
private void process(PsiElement element, InlayParameterHintsProvider provider) {
@@ -28,6 +28,8 @@ import javax.swing.JComponent
import javax.swing.JPanel
import javax.swing.SwingUtilities
// Note: old parameter hints panel is special cased as it rely on global settings, so it doesn't fit to this model,
// but logically belongs to this settings
internal class SingleLanguageInlayHintsSettingsPanel(
val project: Project,
val language: Language,
@@ -188,7 +190,11 @@ internal class SingleLanguageInlayHintsSettingsPanel(
settingsWrapper.apply()
}
for (providerType in providerTypes) {
settings.changeHintTypeStatus(providerType.key, language, providerType.isEnabled())
if (providerType.isOldParameterHints) {
setShowParameterHintsForLanguage(providerType.isEnabled(), language)
} else {
settings.changeHintTypeStatus(providerType.key, language, providerType.isEnabled())
}
}
parameterHintsPanel?.saveOptions()
}