Use the common OperatorPrecedence for the parser (#16747)
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 / test scripts (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 / 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 / check playground (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions
[Knot Playground] Release / publish (push) Waiting to run

## Summary

This change continues to resolve #16071 (and continues the work started
in #16162). Specifically, this PR changes the code in the parser so that
it uses the `OperatorPrecedence` struct from `ruff_python_ast` instead
of its own version. This is part of an effort to get rid of the
redundant definitions of `OperatorPrecedence` throughout the codebase.

Note that this PR only makes this change for `ruff_python_parser` -- we
still want to make a similar change for the formatter (namely the
`OperatorPrecedence` defined in the expression part of the formatter,
the pattern one is different). I separated the work to keep the PRs
small and easily reviewable.

## Test Plan

Because this is an internal change, I didn't add any additional tests.
Existing tests do pass.
This commit is contained in:
Junhson Jean-Baptiste 2025-03-21 00:10:37 -04:00 committed by GitHub
parent 04a8756379
commit 2a4d835132
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 19 additions and 95 deletions

View file

@ -131,6 +131,12 @@ impl OperatorPrecedence {
pub fn from_expr(expr: &Expr) -> Self {
Self::from(&ExprRef::from(expr))
}
/// Returns `true` if the precedence is right-associative i.e., the operations are evaluated
/// from right to left.
pub fn is_right_associative(self) -> bool {
matches!(self, OperatorPrecedence::Exponent)
}
}
impl From<&Expr> for OperatorPrecedence {
@ -177,3 +183,12 @@ impl From<BoolOp> for OperatorPrecedence {
}
}
}
impl From<UnaryOp> for OperatorPrecedence {
fn from(unary_op: UnaryOp) -> Self {
match unary_op {
UnaryOp::UAdd | UnaryOp::USub | UnaryOp::Invert => Self::PosNegBitNot,
UnaryOp::Not => Self::Not,
}
}
}