diff --git a/lkql_checker/share/lkql/use_if_expressions.lkql b/lkql_checker/share/lkql/use_if_expressions.lkql index a183ec4f3..a03c70b88 100644 --- a/lkql_checker/share/lkql/use_if_expressions.lkql +++ b/lkql_checker/share/lkql/use_if_expressions.lkql @@ -1,6 +1,6 @@ -fun simple_return(l) = l.children_count == 1 and l[1] is ReturnStmt +fun simple_return(l) = l != null and l.children_count == 1 and l[1] is ReturnStmt fun simple_assignment(l) = - l.children_count == 1 and l[1] is AssignStmt(f_dest: Name) + l != null and l.children_count == 1 and l[1] is AssignStmt(f_dest: Name) @check(message="IF statement may be replaced by an IF expression", category="Style", subcategory="Programming Practice") @@ -52,11 +52,11 @@ fun use_if_expressions(node) = |" end if; node is IfStmt when (simple_return(node.f_then_stmts) and - simple_return(node.f_else_part.f_stmts) and + simple_return(node.f_else_part?.f_stmts) and not [s for s in node.f_alternatives.children if not simple_return(s.f_stmts)]) or (simple_assignment(node.f_then_stmts) and - simple_assignment(node.f_else_part.f_stmts) and + simple_assignment(node.f_else_part?.f_stmts) and not [s for s in node.f_alternatives.children if not simple_assignment(s.f_stmts)] and { val stmts = from node select AssignStmt; diff --git a/testsuite/tests/checks/use_if_expressions/stmt.adb b/testsuite/tests/checks/use_if_expressions/stmt.adb index 975b3218d..d2d27fa5a 100644 --- a/testsuite/tests/checks/use_if_expressions/stmt.adb +++ b/testsuite/tests/checks/use_if_expressions/stmt.adb @@ -45,5 +45,9 @@ begin X := 0; end if; + if X > 0 then -- NOFLAG + return 2; + end if: + return X; end Stmt;