mirror of
https://github.com/chylex/IntelliJ-Inspection-Lens.git
synced 2025-01-29 19:45:59 +01:00
Compare commits
4 Commits
603b35abdb
...
c2004c77d5
Author | SHA1 | Date | |
---|---|---|---|
c2004c77d5 | |||
2a4764fa15 | |||
4bd0931d71 | |||
0f41b22872 |
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
@ -1,3 +1,2 @@
|
||||
github: chylex
|
||||
patreon: chylex
|
||||
ko_fi: chylex
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
Displays errors, warnings, and other inspections inline. Highlights the background of lines with inspections. Supports light and dark themes out of the box.
|
||||
|
||||
By default, the plugin shows **Errors**, **Warnings**, **Weak Warnings**, **Server Problems**, **Grammar Errors**, **Typos**, and other inspections with a high enough severity level. Configure visible severities in **Settings | Tools | Inspection Lens**.
|
||||
By default, the plugin shows **Errors**, **Warnings**, **Weak Warnings**, **Server Problems**, **Grammar Errors**, **Typos**, and other inspections with a high enough severity level. Left-click an inspection to show quick fixes. Middle-click an inspection to navigate to the relevant code in the editor.
|
||||
|
||||
Left-click an inspection to show quick fixes. Middle-click an inspection to navigate to the relevant code in the editor.
|
||||
Configure appearance, behavior of clicking on inspections, and visible severities in **Settings | Tools | Inspection Lens**.
|
||||
|
||||
Inspired by [Error Lens](https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens) for Visual Studio Code, and [Inline Error](https://plugins.jetbrains.com/plugin/17302-inlineerror) for IntelliJ Platform.
|
||||
|
||||
|
@ -8,7 +8,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = "com.chylex.intellij.inspectionlens"
|
||||
version = "1.5"
|
||||
version = "1.5.1"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.chylex.intellij.inspectionlens.editor.lens
|
||||
|
||||
import com.chylex.intellij.inspectionlens.settings.LensHoverMode
|
||||
import com.chylex.intellij.inspectionlens.settings.LensSettingsState
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo
|
||||
import com.intellij.codeInsight.daemon.impl.HintRenderer
|
||||
@ -16,6 +17,7 @@ import com.intellij.ui.paint.EffectPainter
|
||||
import java.awt.Cursor
|
||||
import java.awt.Graphics
|
||||
import java.awt.Graphics2D
|
||||
import java.awt.MouseInfo
|
||||
import java.awt.Point
|
||||
import java.awt.Rectangle
|
||||
import java.awt.event.MouseEvent
|
||||
@ -25,8 +27,7 @@ import javax.swing.SwingUtilities
|
||||
/**
|
||||
* Renders the text of an inspection lens.
|
||||
*/
|
||||
class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState) : HintRenderer(null), InputHandler {
|
||||
private val useEditorFont = settings.useEditorFont
|
||||
class LensRenderer(private var info: HighlightInfo, private val settings: LensSettingsState) : HintRenderer(null), InputHandler {
|
||||
private lateinit var inlay: Inlay<*>
|
||||
private lateinit var attributes: LensSeverityTextAttributes
|
||||
private var extraRightPadding = 0
|
||||
@ -54,7 +55,7 @@ class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState)
|
||||
fixBaselineForTextRendering(r)
|
||||
super.paint(inlay, g, r, textAttributes)
|
||||
|
||||
if (hovered) {
|
||||
if (hovered && isHoveringText()) {
|
||||
paintHoverEffect(inlay, g, r)
|
||||
}
|
||||
}
|
||||
@ -80,7 +81,7 @@ class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState)
|
||||
}
|
||||
|
||||
override fun useEditorFont(): Boolean {
|
||||
return useEditorFont
|
||||
return settings.useEditorFont
|
||||
}
|
||||
|
||||
override fun mouseMoved(event: MouseEvent, translated: Point) {
|
||||
@ -92,6 +93,10 @@ class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState)
|
||||
}
|
||||
|
||||
private fun setHovered(hovered: Boolean) {
|
||||
if (hovered && settings.lensHoverMode == LensHoverMode.DISABLED) {
|
||||
return
|
||||
}
|
||||
|
||||
if (this.hovered == hovered) {
|
||||
return
|
||||
}
|
||||
@ -108,22 +113,33 @@ class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState)
|
||||
}
|
||||
|
||||
override fun mousePressed(event: MouseEvent, translated: Point) {
|
||||
if (!isHoveringText(translated)) {
|
||||
val hoverMode = settings.lensHoverMode
|
||||
if (hoverMode == LensHoverMode.DISABLED || !isHoveringText(translated)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (SwingUtilities.isLeftMouseButton(event) || SwingUtilities.isMiddleMouseButton(event)) {
|
||||
if (event.button.let { it == MouseEvent.BUTTON1 || it == MouseEvent.BUTTON2 }) {
|
||||
event.consume()
|
||||
|
||||
val editor = inlay.editor
|
||||
moveToOffset(editor, info.actualStartOffset)
|
||||
|
||||
if (SwingUtilities.isLeftMouseButton(event)) {
|
||||
if ((event.button == MouseEvent.BUTTON1) xor (hoverMode != LensHoverMode.DEFAULT)) {
|
||||
IntentionsPopup.show(editor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun isHoveringText(): Boolean {
|
||||
val bounds = inlay.bounds ?: return false
|
||||
val translatedPoint = MouseInfo.getPointerInfo().location.apply {
|
||||
SwingUtilities.convertPointFromScreen(this, inlay.editor.contentComponent)
|
||||
translate(-bounds.x, -bounds.y)
|
||||
}
|
||||
|
||||
return isHoveringText(translatedPoint)
|
||||
}
|
||||
|
||||
private fun isHoveringText(point: Point): Boolean {
|
||||
return point.x >= HOVER_HORIZONTAL_PADDING
|
||||
&& point.y >= 4
|
||||
|
@ -13,11 +13,13 @@ import com.intellij.openapi.ui.DialogPanel
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.ui.DisabledTraversalPolicy
|
||||
import com.intellij.ui.EditorTextFieldCellRenderer.SimpleRendererComponent
|
||||
import com.intellij.ui.SimpleListCellRenderer
|
||||
import com.intellij.ui.components.JBCheckBox
|
||||
import com.intellij.ui.dsl.builder.Cell
|
||||
import com.intellij.ui.dsl.builder.RightGap
|
||||
import com.intellij.ui.dsl.builder.Row
|
||||
import com.intellij.ui.dsl.builder.RowLayout
|
||||
import com.intellij.ui.dsl.builder.bindItem
|
||||
import com.intellij.ui.dsl.builder.bindSelected
|
||||
import com.intellij.ui.dsl.builder.panel
|
||||
import java.awt.Cursor
|
||||
@ -74,6 +76,20 @@ class LensApplicationConfigurable : BoundConfigurable("Inspection Lens"), Config
|
||||
val settings = settingsService.state
|
||||
|
||||
return panel {
|
||||
group("Appearance") {
|
||||
row {
|
||||
checkBox("Use editor font").bindSelected(settings::useEditorFont)
|
||||
}
|
||||
}
|
||||
|
||||
group("Behavior") {
|
||||
row("Hover mode:") {
|
||||
val items = LensHoverMode.values().toList()
|
||||
val renderer = SimpleListCellRenderer.create("", LensHoverMode::description)
|
||||
comboBox(items, renderer).bindItem(settings::lensHoverMode) { settings.lensHoverMode = it ?: LensHoverMode.DEFAULT }
|
||||
}
|
||||
}
|
||||
|
||||
group("Shown Severities") {
|
||||
for ((id, severity, textAttributes) in allSeverities) {
|
||||
row {
|
||||
@ -89,12 +105,6 @@ class LensApplicationConfigurable : BoundConfigurable("Inspection Lens"), Config
|
||||
checkBox("Other").bindSelected(settings::showUnknownSeverities)
|
||||
}
|
||||
}
|
||||
|
||||
group("Appearance") {
|
||||
row {
|
||||
checkBox("Use editor font").bindSelected(settings::useEditorFont)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,7 @@
|
||||
package com.chylex.intellij.inspectionlens.settings
|
||||
|
||||
enum class LensHoverMode(val description: String) {
|
||||
DISABLED("Disabled"),
|
||||
DEFAULT("Left click shows intentions, middle click jumps to highlight"),
|
||||
SWAPPED("Left click jumps to highlight, middle click shows intentions")
|
||||
}
|
@ -21,6 +21,7 @@ class LensSettingsState : SimplePersistentStateComponent<LensSettingsState.State
|
||||
|
||||
var showUnknownSeverities by property(true)
|
||||
var useEditorFont by property(true)
|
||||
var lensHoverMode by enum(LensHoverMode.DEFAULT)
|
||||
}
|
||||
|
||||
@get:Synchronized
|
||||
@ -31,6 +32,9 @@ class LensSettingsState : SimplePersistentStateComponent<LensSettingsState.State
|
||||
val useEditorFont
|
||||
get() = state.useEditorFont
|
||||
|
||||
val lensHoverMode
|
||||
get() = state.lensHoverMode
|
||||
|
||||
override fun loadState(state: State) {
|
||||
super.loadState(state)
|
||||
update()
|
||||
|
@ -6,14 +6,20 @@
|
||||
<description><![CDATA[
|
||||
Displays errors, warnings, and other inspections inline. Highlights the background of lines with inspections. Supports light and dark themes out of the box.
|
||||
<br><br>
|
||||
By default, the plugin shows <b>Errors</b>, <b>Warnings</b>, <b>Weak Warnings</b>, <b>Server Problems</b>, <b>Grammar Errors</b>, <b>Typos</b>, and other inspections with a high enough severity level. Configure visible severities in <b>Settings | Tools | Inspection Lens</a>.
|
||||
By default, the plugin shows <b>Errors</b>, <b>Warnings</b>, <b>Weak Warnings</b>, <b>Server Problems</b>, <b>Grammar Errors</b>, <b>Typos</b>, and other inspections with a high enough severity level. Left-click an inspection to show quick fixes. Middle-click an inspection to navigate to the relevant code in the editor.
|
||||
<br><br>
|
||||
Left-click an inspection to show quick fixes. Middle-click an inspection to navigate to the relevant code in the editor.
|
||||
Configure appearance, behavior of clicking on inspections, and visible severities in <b>Settings | Tools | Inspection Lens</b>.
|
||||
<br><br>
|
||||
Inspired by <a href="https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens">Error Lens</a> for VS Code, and <a href="https://plugins.jetbrains.com/plugin/17302-inlineerror">Inline Error</a> for IntelliJ Platform.
|
||||
]]></description>
|
||||
|
||||
<change-notes><![CDATA[
|
||||
<b>Version 1.5.1</b>
|
||||
<ul>
|
||||
<li>Added option to change the behavior of clicking on inspections.</li>
|
||||
<li>Fixed broken quick fixes in Rider and CLion Nova.</li>
|
||||
<li>Fixed hover underline not rendering correctly with some combinations of high DPI and line height settings.</li>
|
||||
</ul>
|
||||
<b>Version 1.5</b>
|
||||
<ul>
|
||||
<li>Added possibility to left-click an inspection to show quick fixes.</li>
|
||||
|
Loading…
Reference in New Issue
Block a user