def _is_node_return_ended(self, node):
<EOL>if isinstance(node, astroid.Return):<EOL><INDENT>return True<EOL><DEDENT>if isinstance(node, astroid.Call):<EOL><INDENT>try:<EOL><INDENT>funcdef_node = node.func.inferred()[<NUM_LIT:0>]<EOL>if self._is_function_def_never_returning(funcdef_node):<EOL><INDENT>return True<EOL><DEDENT><DEDENT>except astroid.InferenceError:<EOL><INDENT>pass<EOL><DEDENT><DEDENT>if isinstance(node, astroid.While):<EOL><INDENT>return True<EOL><DEDENT>if isinstance(node, astroid.Raise):<EOL><INDENT>if not node.exc:<EOL><INDENT>return True<EOL><DEDENT>if not utils.is_node_inside_try_except(node):<EOL><INDENT>return True<EOL><DEDENT>exc = utils.safe_infer(node.exc)<EOL>if exc is None or exc is astroid.Uninferable:<EOL><INDENT>return False<EOL><DEDENT>exc_name = exc.pytype().split("<STR_LIT:.>")[-<NUM_LIT:1>]<EOL>handlers = utils.get_exception_handlers(node, exc_name)<EOL>handlers = list(handlers) if handlers is not None else []<EOL>if handlers:<EOL><INDENT>return any(<EOL>self._is_node_return_ended(_handler) for _handler in handlers<EOL>)<EOL><DEDENT>return True<EOL><DEDENT>if isinstance(node, astroid.If):<EOL><INDENT>is_orelse_returning = any(<EOL>self._is_node_return_ended(_ore)<EOL>for _ore in node.orelse<EOL>if not isinstance(_ore, astroid.FunctionDef)<EOL>)<EOL>is_if_returning = any(<EOL>self._is_node_return_ended(_ifn)<EOL>for _ifn in node.body<EOL>if not isinstance(_ifn, astroid.FunctionDef)<EOL>)<EOL>return is_if_returning and is_orelse_returning<EOL><DEDENT>return any(<EOL>self._is_node_return_ended(_child)<EOL>for _child in node.get_children()<EOL>if not isinstance(_child, astroid.ExceptHandler)<EOL>)<EOL>
Check if the node ends with an explicit return statement.

        Args:
            node (astroid.NodeNG): node to be checked.

        Returns:
            bool: True if the node ends with an explicit statement, False otherwise.