mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-23 13:05:06 +00:00
Upgrade RustPython
to access ranged names (#5194)
## Summary In https://github.com/astral-sh/RustPython-Parser/pull/8, we modified RustPython to include ranges for any identifiers that aren't `Expr::Name` (which already has an identifier). For example, the `e` in `except ValueError as e` was previously un-ranged. To extract its range, we had to do some lexing of our own. This change should improve performance and let us remove a bunch of code. ## Test Plan `cargo test`
This commit is contained in:
parent
17f1ecd56e
commit
6331598511
24 changed files with 86 additions and 57 deletions
|
@ -1,13 +1,16 @@
|
|||
use crate::comments::visitor::{CommentPlacement, DecoratedComment};
|
||||
use crate::comments::CommentTextPosition;
|
||||
use crate::trivia::{SimpleTokenizer, Token, TokenKind};
|
||||
use std::cmp::Ordering;
|
||||
|
||||
use ruff_text_size::{TextRange, TextSize};
|
||||
use rustpython_parser::ast::Ranged;
|
||||
|
||||
use ruff_python_ast::node::AnyNodeRef;
|
||||
use ruff_python_ast::source_code::Locator;
|
||||
use ruff_python_ast::whitespace;
|
||||
use ruff_python_whitespace::{PythonWhitespace, UniversalNewlines};
|
||||
use ruff_text_size::{TextRange, TextSize};
|
||||
use rustpython_parser::ast::Ranged;
|
||||
use std::cmp::Ordering;
|
||||
|
||||
use crate::comments::visitor::{CommentPlacement, DecoratedComment};
|
||||
use crate::comments::CommentTextPosition;
|
||||
use crate::trivia::{SimpleTokenizer, Token, TokenKind};
|
||||
|
||||
/// Implements the custom comment placement logic.
|
||||
pub(super) fn place_comment<'a>(
|
||||
|
@ -623,8 +626,13 @@ fn handle_positional_only_arguments_separator_comment<'a>(
|
|||
return CommentPlacement::Default(comment);
|
||||
};
|
||||
|
||||
let is_last_positional_argument = are_same_optional(last_argument_or_default, arguments.posonlyargs.last())
|
||||
// If the preceding node is the default for the last positional argument
|
||||
let is_last_positional_argument =
|
||||
// If the preceding node is the identifier for the last positional argument (`a`).
|
||||
// ```python
|
||||
// def test(a, /, b): pass
|
||||
// ```
|
||||
are_same_optional(last_argument_or_default, arguments.posonlyargs.last().map(|arg| &arg.def))
|
||||
// If the preceding node is the default for the last positional argument (`10`).
|
||||
// ```python
|
||||
// def test(a=10, /, b): pass
|
||||
// ```
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue