diff --git a/build.gradle.kts b/build.gradle.kts index 2cbe0cc..fa133cb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,6 +21,8 @@ dependencies { intellij { version.set("2023.1") updateSinceUntilBuild.set(false) + + plugins.add("tanvd.grazi") } tasks.patchPluginXml { diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/GrazieSupport.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/GrazieSupport.kt new file mode 100644 index 0000000..425da33 --- /dev/null +++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/compatibility/GrazieSupport.kt @@ -0,0 +1,15 @@ +package com.chylex.intellij.inspectionlens.compatibility + +import com.chylex.intellij.inspectionlens.editor.LensSeverity +import com.intellij.grazie.ide.TextProblemSeverities +import com.intellij.openapi.project.Project +import com.intellij.openapi.startup.ProjectActivity + +class GrazieSupport : ProjectActivity { + override suspend fun execute(project: Project) { + LensSeverity.registerMapping(TextProblemSeverities.GRAMMAR_ERROR, LensSeverity.ERROR) + LensSeverity.registerMapping(TextProblemSeverities.STYLE_ERROR, LensSeverity.GRAZIE) + LensSeverity.registerMapping(TextProblemSeverities.STYLE_WARNING, LensSeverity.GRAZIE) + LensSeverity.registerMapping(TextProblemSeverities.STYLE_SUGGESTION, LensSeverity.GRAZIE) + } +} diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverity.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverity.kt index c4aaa9e..c19dd36 100644 --- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverity.kt +++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/LensSeverity.kt @@ -1,10 +1,12 @@ package com.chylex.intellij.inspectionlens.editor import com.intellij.lang.annotation.HighlightSeverity +import com.intellij.spellchecker.SpellCheckerSeveritiesProvider import com.intellij.ui.ColorUtil import com.intellij.ui.JBColor import java.awt.Color import java.awt.Font +import java.util.Collections /** * Determines properties of inspection lenses based on severity. @@ -15,6 +17,8 @@ enum class LensSeverity(baseColor: Color, lightThemeDarkening: Int, darkThemeBri WARNING (Color(190, 145, 23), lightThemeDarkening = 4, darkThemeBrightening = 1), WEAK_WARNING (Color(117, 109, 86), lightThemeDarkening = 3, darkThemeBrightening = 3), SERVER_PROBLEM (Color(176, 97, 0), lightThemeDarkening = 4, darkThemeBrightening = 2), + GRAZIE (Color( 53, 146, 196), lightThemeDarkening = 2, darkThemeBrightening = 1), + TYPO (Color( 73, 156, 84), lightThemeDarkening = 3, darkThemeBrightening = 1), OTHER (Color(128, 128, 128), lightThemeDarkening = 1, darkThemeBrightening = 2); val colorAttributes: LensSeverityTextAttributes @@ -28,12 +32,23 @@ enum class LensSeverity(baseColor: Color, lightThemeDarkening: Int, darkThemeBri } companion object { - fun from(severity: HighlightSeverity) = when (severity) { - HighlightSeverity.ERROR -> ERROR - HighlightSeverity.WARNING -> WARNING - HighlightSeverity.WEAK_WARNING -> WEAK_WARNING - HighlightSeverity.GENERIC_SERVER_ERROR_OR_WARNING -> SERVER_PROBLEM - else -> OTHER + private val mapping = Collections.synchronizedMap(mapOf( + HighlightSeverity.ERROR to ERROR, + HighlightSeverity.WARNING to WARNING, + HighlightSeverity.WEAK_WARNING to WEAK_WARNING, + HighlightSeverity.GENERIC_SERVER_ERROR_OR_WARNING to SERVER_PROBLEM, + SpellCheckerSeveritiesProvider.TYPO to TYPO, + )) + + /** + * Registers a mapping from a [HighlightSeverity] to a [LensSeverity]. Does not refresh existing editors. + */ + internal fun registerMapping(severity: HighlightSeverity, lensSeverity: LensSeverity) { + mapping[severity] = lensSeverity + } + + fun from(severity: HighlightSeverity): LensSeverity { + return mapping.getOrDefault(severity, OTHER) } } } diff --git a/src/main/resources/META-INF/compatibility/InspectionLens-Grazie.xml b/src/main/resources/META-INF/compatibility/InspectionLens-Grazie.xml new file mode 100644 index 0000000..71fe702 --- /dev/null +++ b/src/main/resources/META-INF/compatibility/InspectionLens-Grazie.xml @@ -0,0 +1,5 @@ +<idea-plugin> + <extensions defaultExtensionNs="com.intellij"> + <postStartupActivity implementation="com.chylex.intellij.inspectionlens.compatibility.GrazieSupport" /> + </extensions> +</idea-plugin> diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index e357d43..abf0e63 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -39,6 +39,7 @@ ]]></change-notes> <depends>com.intellij.modules.platform</depends> + <depends optional="true" config-file="compatibility/InspectionLens-Grazie.xml">tanvd.grazi</depends> <extensions defaultExtensionNs="com.intellij"> <applicationService serviceImplementation="com.chylex.intellij.inspectionlens.InspectionLensPluginDisposableService" />