Control flow: return and raise (#17121)
We add support for `return` and `raise` statements in the control flow graph: we simply add an edge to the terminal block, push the statements to the current block, and proceed. This implementation will have to be modified somewhat once we add support for `try` statements - then we will need to check whether to _defer_ the jump. But for now this will do! Also in this PR: We fix the `unreachable` diagnostic range so that it lumps together consecutive unreachable blocks.
This commit is contained in:
18
crates/ruff_python_semantic/resources/test/fixtures/cfg/jumps.py
vendored
Normal file
18
crates/ruff_python_semantic/resources/test/fixtures/cfg/jumps.py
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
def only_return():
|
||||
return
|
||||
|
||||
def after_return():
|
||||
return 1
|
||||
print("unreachable")
|
||||
print("and this")
|
||||
|
||||
def after_raise():
|
||||
raise ValueError
|
||||
print("unreachable")
|
||||
print("and this")
|
||||
|
||||
def multiple_returns():
|
||||
return 1
|
||||
print("unreachable")
|
||||
return 2
|
||||
print("and this")
|
||||
Reference in New Issue
Block a user