mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-26 11:59:10 +00:00
Avoid off-by-one error in with-item named expressions (#8915)
## Summary Given `with (a := b): pass`, we truncate the `WithItem` range by one on both sides such that the parentheses are part of the statement, rather than the item. However, for `with (a := b) as x: pass`, we want to avoid this trick. Closes https://github.com/astral-sh/ruff/issues/8913.
This commit is contained in:
parent
fd70cd789f
commit
774c77adae
4 changed files with 5 additions and 5 deletions
|
@ -1026,7 +1026,7 @@ WithItems: Vec<ast::WithItem> = {
|
||||||
// ```
|
// ```
|
||||||
// In this case, the `(` and `)` are part of the `with` statement.
|
// In this case, the `(` and `)` are part of the `with` statement.
|
||||||
// The same applies to `yield` and `yield from`.
|
// The same applies to `yield` and `yield from`.
|
||||||
let item = if matches!(item.context_expr, ast::Expr::NamedExpr(_) | ast::Expr::Yield(_) | ast::Expr::YieldFrom(_)) {
|
let item = if item.optional_vars.is_none() && matches!(item.context_expr, ast::Expr::NamedExpr(_) | ast::Expr::Yield(_) | ast::Expr::YieldFrom(_)) {
|
||||||
ast::WithItem {
|
ast::WithItem {
|
||||||
range: item.range().add_start(TextSize::new(1)).sub_end(TextSize::new(1)),
|
range: item.range().add_start(TextSize::new(1)).sub_end(TextSize::new(1)),
|
||||||
context_expr: item.context_expr,
|
context_expr: item.context_expr,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// auto-generated: "lalrpop 0.20.0"
|
// auto-generated: "lalrpop 0.20.0"
|
||||||
// sha3: e999c9c9ca8fe5a29655244aa995b8cf4e639f0bda95099d8f2a395bc06b6408
|
// sha3: c7c0b9368fa05f7d2fc1d06a665ff4232555f276a1d9569afdbc86d0905b3a2a
|
||||||
use ruff_text_size::{Ranged, TextLen, TextRange, TextSize};
|
use ruff_text_size::{Ranged, TextLen, TextRange, TextSize};
|
||||||
use ruff_python_ast::{self as ast, Int, IpyEscapeKind};
|
use ruff_python_ast::{self as ast, Int, IpyEscapeKind};
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -35374,7 +35374,7 @@ fn __action159<
|
||||||
// ```
|
// ```
|
||||||
// In this case, the `(` and `)` are part of the `with` statement.
|
// In this case, the `(` and `)` are part of the `with` statement.
|
||||||
// The same applies to `yield` and `yield from`.
|
// The same applies to `yield` and `yield from`.
|
||||||
let item = if matches!(item.context_expr, ast::Expr::NamedExpr(_) | ast::Expr::Yield(_) | ast::Expr::YieldFrom(_)) {
|
let item = if item.optional_vars.is_none() && matches!(item.context_expr, ast::Expr::NamedExpr(_) | ast::Expr::Yield(_) | ast::Expr::YieldFrom(_)) {
|
||||||
ast::WithItem {
|
ast::WithItem {
|
||||||
range: item.range().add_start(TextSize::new(1)).sub_end(TextSize::new(1)),
|
range: item.range().add_start(TextSize::new(1)).sub_end(TextSize::new(1)),
|
||||||
context_expr: item.context_expr,
|
context_expr: item.context_expr,
|
||||||
|
|
|
@ -347,7 +347,7 @@ expression: "parse_suite(source, \"<test>\").unwrap()"
|
||||||
is_async: false,
|
is_async: false,
|
||||||
items: [
|
items: [
|
||||||
WithItem {
|
WithItem {
|
||||||
range: 184..195,
|
range: 183..196,
|
||||||
context_expr: NamedExpr(
|
context_expr: NamedExpr(
|
||||||
ExprNamedExpr {
|
ExprNamedExpr {
|
||||||
range: 184..190,
|
range: 184..190,
|
||||||
|
|
|
@ -782,7 +782,7 @@ expression: "parse_suite(source, \"<test>\").unwrap()"
|
||||||
is_async: false,
|
is_async: false,
|
||||||
items: [
|
items: [
|
||||||
WithItem {
|
WithItem {
|
||||||
range: 382..393,
|
range: 381..394,
|
||||||
context_expr: NamedExpr(
|
context_expr: NamedExpr(
|
||||||
ExprNamedExpr {
|
ExprNamedExpr {
|
||||||
range: 382..388,
|
range: 382..388,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue