Skip to content

Commit 1d1a115

Browse files
committed
fix #122
1 parent dd05823 commit 1d1a115

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

src/main/kotlin/org/ton/intellij/func/inspection/FuncMissingReturnInspection.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,31 @@ class FuncMissingReturnInspection : FuncInspectionBase() {
1818
val block = function.blockStatement ?: return
1919
val atomicType = function.type as? FuncAtomicType ?: return
2020
val isVoid = atomicType is FuncHoleType || (atomicType as? FuncTensorType)?.typeList?.isEmpty() == true
21-
if (isVoid || isTerminating(block)) return
22-
val brace = block.rBrace
23-
holder.registerProblem(brace ?: block, "Missing return at end of function")
21+
if (isVoid) return
22+
holder.isTerminating(block)
2423
}
2524

26-
private fun isTerminating(element: FuncElement?): Boolean {
25+
private fun ProblemsHolder.isTerminating(element: FuncElement?): Boolean {
2726
ProgressIndicatorProvider.checkCanceled()
2827
return when (element) {
2928
null -> false
3029
is FuncReturnStatement -> true
31-
is FuncBlockStatement -> isTerminating(element.statementList.lastOrNull())
30+
is FuncBlockStatement -> {
31+
val result = isTerminating(element.statementList.lastOrNull())
32+
if (!result) {
33+
val brace = element.rBrace
34+
registerProblem(brace ?: element, "Missing `return`")
35+
}
36+
result
37+
}
3238
is FuncIfStatement -> isTerminating(element.blockStatement) && isTerminating(
3339
element.`else` ?: element.elseIf
3440
)
35-
3641
is FuncElse -> isTerminating(element.blockStatement)
3742
is FuncElseIf ->
3843
isTerminating(element.blockStatement) && isTerminating(element.`else` ?: element.elseIf)
39-
44+
is FuncTryStatement -> isTerminating(element.blockStatement) && isTerminating(element.catch)
45+
is FuncCatch -> isTerminating(element.blockStatement)
4046
else -> false
4147
}
4248
}

0 commit comments

Comments
 (0)