Skip to content

Commit 507cbbc

Browse files
committed
feat: enhance inlay hints
1 parent 12a154d commit 507cbbc

3 files changed

Lines changed: 19 additions & 7 deletions

File tree

build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ intellijPlatform {
7979

8080
ideaVersion {
8181
sinceBuild = providers.gradleProperty("pluginSinceBuild")
82-
untilBuild = providers.gradleProperty("pluginUntilBuild")
8382
}
8483
}
8584

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ pluginRepositoryUrl = https://github.com/xepozz/crontab-plugin
66
pluginVersion=2025.0.35
77

88
# Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
9-
pluginSinceBuild=241
9+
pluginSinceBuild=242
1010
pluginUntilBuild=251.*
1111

1212
# IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension

src/main/kotlin/com/github/xepozz/crontab/ide/CrontabInlayHintsProvider.kt

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,34 @@ import com.intellij.codeInsight.hints.declarative.InlayTreeSink
1010
import com.intellij.codeInsight.hints.declarative.InlineInlayPosition
1111
import com.intellij.codeInsight.hints.declarative.SharedBypassCollector
1212
import com.intellij.openapi.editor.Editor
13+
import com.intellij.openapi.util.text.StringUtil
1314
import com.intellij.psi.PsiElement
1415
import com.intellij.psi.PsiFile
16+
import com.intellij.psi.PsiLanguageInjectionHost
17+
import com.intellij.psi.PsiLiteralValue
1518
import com.intellij.psi.util.PsiTreeUtil
1619
import com.intellij.psi.util.endOffset
1720

1821
class CrontabInlayHintsProvider : InlayHintsProvider {
22+
companion object {
23+
val QUOTES = arrayOf<Char>('"', '\'', '`')
24+
}
25+
1926
override fun createCollector(
2027
file: PsiFile,
2128
editor: Editor
2229
): InlayHintsCollector {
2330
return object : SharedBypassCollector {
2431
override fun collectFromElement(element: PsiElement, sink: InlayTreeSink) {
25-
val crontabFile = CrontabElementFactory.createFile(element.project, element.text)
32+
if (element !is PsiLiteralValue && element !is PsiLanguageInjectionHost) return
33+
34+
val text = QUOTES.fold(element.text) { acc, string -> StringUtil.unquoteString(acc, string) }
35+
36+
val crontabFile = CrontabElementFactory.createFile(element.project, text)
2637
val expression = crontabFile.children.getOrNull(0) as? CrontabCronExpression ?: return
27-
if (expression.schedule.text != element.text) {
28-
return
38+
when {
39+
expression.schedule.text != text -> return
40+
text.startsWith("@") -> return
2941
}
3042

3143
val schedules = PsiTreeUtil.findChildrenOfType(crontabFile, CrontabSchedule::class.java)
@@ -34,17 +46,18 @@ class CrontabInlayHintsProvider : InlayHintsProvider {
3446
if (schedules.isNotEmpty()) {
3547

3648
val offset = when {
37-
element.nextSibling.text in arrayOf("\"", "'", "`") -> element.nextSibling.endOffset
49+
(element.nextSibling?.text?.getOrNull(0)) in QUOTES -> element.nextSibling.endOffset
3850
else -> element.endOffset
3951
}
4052
sink.addPresentation(
4153
position = InlineInlayPosition(offset, false, 100),
4254
hintFormat = HintFormat.default,
4355
) {
44-
text(CronScheduleDescriber.asHumanReadable(element.text))
56+
text(CronScheduleDescriber.asHumanReadable(text))
4557
}
4658
}
4759
}
4860
}
4961
}
62+
5063
}

0 commit comments

Comments
 (0)