mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-27 05:44:18 +00:00
Raise syntax error for mixing except
and except*
(#14895)
Some checks are pending
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Waiting to run
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
Some checks are pending
CI / Determine changes (push) Waiting to run
CI / cargo fmt (push) Waiting to run
CI / cargo clippy (push) Blocked by required conditions
CI / cargo test (linux) (push) Blocked by required conditions
CI / cargo test (linux, release) (push) Blocked by required conditions
CI / cargo test (windows) (push) Blocked by required conditions
CI / cargo test (wasm) (push) Blocked by required conditions
CI / cargo build (release) (push) Waiting to run
CI / cargo build (msrv) (push) Blocked by required conditions
CI / cargo fuzz build (push) Blocked by required conditions
CI / fuzz parser (push) Blocked by required conditions
CI / test scripts (push) Blocked by required conditions
CI / ecosystem (push) Blocked by required conditions
CI / cargo shear (push) Blocked by required conditions
CI / python package (push) Waiting to run
CI / pre-commit (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / formatter instabilities and black similarity (push) Blocked by required conditions
CI / test ruff-lsp (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
This PR adds a syntax error if the parser encounters a `TryStmt` that has except clauses both with and without a star. The displayed error points to each except clause that contradicts the original except clause kind. So, for example, ```python try: .... except: #<-- we assume this is the desired except kind .... except*: #<--- error will point here .... except*: #<--- and here .... ``` Closes #14860
This commit is contained in:
parent
d4126f6049
commit
a3bb0cd5ec
3 changed files with 301 additions and 4 deletions
|
@ -0,0 +1,252 @@
|
|||
---
|
||||
source: crates/ruff_python_parser/tests/fixtures.rs
|
||||
input_file: crates/ruff_python_parser/resources/inline/err/try_stmt_mixed_except_kind.py
|
||||
---
|
||||
## AST
|
||||
|
||||
```
|
||||
Module(
|
||||
ModModule {
|
||||
range: 0..242,
|
||||
body: [
|
||||
Try(
|
||||
StmtTry {
|
||||
range: 0..63,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 9..13,
|
||||
},
|
||||
),
|
||||
],
|
||||
handlers: [
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 14..30,
|
||||
type_: None,
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 26..30,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 31..63,
|
||||
type_: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 39..53,
|
||||
id: Name("ExceptionGroup"),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 59..63,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
finalbody: [],
|
||||
is_star: false,
|
||||
},
|
||||
),
|
||||
Try(
|
||||
StmtTry {
|
||||
range: 64..127,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 73..77,
|
||||
},
|
||||
),
|
||||
],
|
||||
handlers: [
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 78..110,
|
||||
type_: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 86..100,
|
||||
id: Name("ExceptionGroup"),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 106..110,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 111..127,
|
||||
type_: None,
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 123..127,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
finalbody: [],
|
||||
is_star: true,
|
||||
},
|
||||
),
|
||||
Try(
|
||||
StmtTry {
|
||||
range: 128..241,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 137..141,
|
||||
},
|
||||
),
|
||||
],
|
||||
handlers: [
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 142..158,
|
||||
type_: None,
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 154..158,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 159..175,
|
||||
type_: None,
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 171..175,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 176..208,
|
||||
type_: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 184..198,
|
||||
id: Name("ExceptionGroup"),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 204..208,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
ExceptHandler(
|
||||
ExceptHandlerExceptHandler {
|
||||
range: 209..241,
|
||||
type_: Some(
|
||||
Name(
|
||||
ExprName {
|
||||
range: 217..231,
|
||||
id: Name("ExceptionGroup"),
|
||||
ctx: Load,
|
||||
},
|
||||
),
|
||||
),
|
||||
name: None,
|
||||
body: [
|
||||
Pass(
|
||||
StmtPass {
|
||||
range: 237..241,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
orelse: [],
|
||||
finalbody: [],
|
||||
is_star: false,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
)
|
||||
```
|
||||
## Errors
|
||||
|
||||
|
|
||||
3 | except:
|
||||
4 | pass
|
||||
5 | / except* ExceptionGroup:
|
||||
6 | | pass
|
||||
| |________^ Syntax Error: Cannot have both 'except' and 'except*' on the same 'try'
|
||||
7 | try:
|
||||
8 | pass
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
9 | except* ExceptionGroup:
|
||||
10 | pass
|
||||
11 | / except:
|
||||
12 | | pass
|
||||
| |________^ Syntax Error: Cannot have both 'except' and 'except*' on the same 'try'
|
||||
13 | try:
|
||||
14 | pass
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
17 | except:
|
||||
18 | pass
|
||||
19 | / except* ExceptionGroup:
|
||||
20 | | pass
|
||||
| |________^ Syntax Error: Cannot have both 'except' and 'except*' on the same 'try'
|
||||
21 | except* ExceptionGroup:
|
||||
22 | pass
|
||||
|
|
||||
|
||||
|
||||
|
|
||||
19 | except* ExceptionGroup:
|
||||
20 | pass
|
||||
21 | / except* ExceptionGroup:
|
||||
22 | | pass
|
||||
| |________^ Syntax Error: Cannot have both 'except' and 'except*' on the same 'try'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue