Skip to content

Commit 74f118c

Browse files
committed
collapse equal range
1 parent 584cec6 commit 74f118c

File tree

4 files changed

+35
-6
lines changed

4 files changed

+35
-6
lines changed

src/main/kotlin/com/github/xepozz/crontab/ide/inspections/CrontabInspectionUtil.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,28 @@ object CrontabInspectionUtil {
3131
}
3232
)
3333
}
34+
35+
fun registerSimplifyRange(holder: ProblemsHolder, element: CrontabTimeRange) {
36+
val interval = "${element.first}"
37+
38+
holder.registerProblem(
39+
element,
40+
"Invalid time range. One of intervals can be eliminated.",
41+
object : CrontabScheduleQuickFix() {
42+
override fun getName() = "Replace with \"$interval\""
43+
44+
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
45+
val psiElement = descriptor.psiElement as? CrontabTimeRange ?: return
46+
if (psiElement.isWritable) {
47+
psiElement.replace(
48+
CrontabElementFactory.createCrontabTimeExact(
49+
project,
50+
psiElement.first,
51+
)
52+
)
53+
}
54+
}
55+
}
56+
)
57+
}
3458
}

src/main/kotlin/com/github/xepozz/crontab/ide/inspections/CrontabScheduleTimeRangeInspection.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ class CrontabScheduleTimeRangeInspection : LocalInspectionTool() {
1919
if (element.first > element.second) {
2020
CrontabInspectionUtil.registerSwapRange(holder, element)
2121
}
22+
if (element.first == element.second) {
23+
CrontabInspectionUtil.registerSimplifyRange(holder, element)
24+
}
2225
super.visitTimeRange(element)
2326
}
2427
}

src/main/kotlin/com/github/xepozz/crontab/language/psi/CrontabElementFactory.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ object CrontabElementFactory {
1111

1212
return PsiTreeUtil.findChildOfType(file, CrontabTimeRange::class.java) as CrontabTimeRange
1313
}
14+
fun createCrontabTimeExact(project: Project, value: Int): CrontabTimeExact {
15+
val file = createFile(project, "$value")
16+
17+
return PsiTreeUtil.findChildOfType(file, CrontabTimeExact::class.java) as CrontabTimeExact
18+
}
1419

1520
fun createFile(project: Project, text: String): CrontabFile {
1621
val name = "dummy.crontab"

src/main/kotlin/com/github/xepozz/crontab/language/psi/impl/CrontabImplUtil.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,11 @@ import com.github.xepozz.crontab.language.psi.CrontabTimeRange
44

55
object CrontabImplUtil {
66
@JvmStatic
7-
fun getFirst(element: CrontabTimeRange) = element.node.firstChildNode.text.toInt()
7+
fun getFirst(element: CrontabTimeRange) = element.node.firstChildNode.text.toIntOrNull() ?: 0
88

99
@JvmStatic
10-
fun getSecond(element: CrontabTimeRange): Int = element.node.lastChildNode.text.toInt()
10+
fun getSecond(element: CrontabTimeRange): Int = element.node.lastChildNode.text.toIntOrNull() ?: 0
1111

1212
@JvmStatic
13-
fun getIntRange(element: CrontabTimeRange): IntRange = IntRange(
14-
element.node.lastChildNode.text.toInt(),
15-
element.node.firstChildNode.text.toInt(),
16-
)
13+
fun getIntRange(element: CrontabTimeRange): IntRange = IntRange(element.first, element.second)
1714
}

0 commit comments

Comments
 (0)