Compare commits
1 Commits
jane/docs/
...
pythonplus
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7f97547b5f |
@@ -141,15 +141,15 @@ impl<'src, 'loc> UselessSuppressionComments<'src, 'loc> {
|
|||||||
if comment.kind == SuppressionKind::Off || comment.kind == SuppressionKind::On {
|
if comment.kind == SuppressionKind::Off || comment.kind == SuppressionKind::On {
|
||||||
if let Some(
|
if let Some(
|
||||||
AnyNodeRef::StmtClassDef(StmtClassDef {
|
AnyNodeRef::StmtClassDef(StmtClassDef {
|
||||||
name,
|
name,
|
||||||
decorator_list,
|
decorator_list,
|
||||||
..
|
..
|
||||||
})
|
})
|
||||||
| AnyNodeRef::StmtFunctionDef(StmtFunctionDef {
|
| AnyNodeRef::StmtFunctionDef(StmtFunctionDef {
|
||||||
name,
|
name,
|
||||||
decorator_list,
|
decorator_list,
|
||||||
..
|
..
|
||||||
}),
|
}),
|
||||||
) = comment.enclosing
|
) = comment.enclosing
|
||||||
{
|
{
|
||||||
if comment.line_position.is_own_line() && comment.range.start() < name.start() {
|
if comment.line_position.is_own_line() && comment.range.start() < name.start() {
|
||||||
@@ -196,7 +196,7 @@ impl<'src, 'loc> UselessSuppressionComments<'src, 'loc> {
|
|||||||
self.captured.sort_by_key(|(t, _)| t.start());
|
self.captured.sort_by_key(|(t, _)| t.start());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ignored_comments(&self) -> impl Iterator<Item = (TextRange, IgnoredReason)> + '_ {
|
fn ignored_comments(&self) -> impl Iterator<Item=(TextRange, IgnoredReason)> + '_ {
|
||||||
self.captured.iter().map(|(r, i)| (*r, *i))
|
self.captured.iter().map(|(r, i)| (*r, *i))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -276,7 +276,8 @@ const fn is_valid_enclosing_node(node: AnyNodeRef) -> bool {
|
|||||||
| AnyNodeRef::StmtIpyEscapeCommand(_)
|
| AnyNodeRef::StmtIpyEscapeCommand(_)
|
||||||
| AnyNodeRef::ExceptHandlerExceptHandler(_)
|
| AnyNodeRef::ExceptHandlerExceptHandler(_)
|
||||||
| AnyNodeRef::MatchCase(_)
|
| AnyNodeRef::MatchCase(_)
|
||||||
| AnyNodeRef::ElifElseClause(_) => true,
|
| AnyNodeRef::ElifElseClause(_)
|
||||||
|
| AnyNodeRef::StmtCrement(_) => true,
|
||||||
|
|
||||||
AnyNodeRef::ExprBoolOp(_)
|
AnyNodeRef::ExprBoolOp(_)
|
||||||
| AnyNodeRef::ExprNamed(_)
|
| AnyNodeRef::ExprNamed(_)
|
||||||
|
|||||||
@@ -1543,6 +1543,9 @@ impl<'a> From<&'a ast::Stmt> for ComparableStmt<'a> {
|
|||||||
ast::Stmt::Pass(_) => Self::Pass,
|
ast::Stmt::Pass(_) => Self::Pass,
|
||||||
ast::Stmt::Break(_) => Self::Break,
|
ast::Stmt::Break(_) => Self::Break,
|
||||||
ast::Stmt::Continue(_) => Self::Continue,
|
ast::Stmt::Continue(_) => Self::Continue,
|
||||||
|
ast::Stmt::Crement(_) => {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -432,6 +432,7 @@ pub fn any_over_stmt(stmt: &Stmt, func: &dyn Fn(&Expr) -> bool) -> bool {
|
|||||||
Stmt::AugAssign(ast::StmtAugAssign { target, value, .. }) => {
|
Stmt::AugAssign(ast::StmtAugAssign { target, value, .. }) => {
|
||||||
any_over_expr(target, func) || any_over_expr(value, func)
|
any_over_expr(target, func) || any_over_expr(value, func)
|
||||||
}
|
}
|
||||||
|
Stmt::Crement(ast::StmtCrement { target, .. }) => any_over_expr(target, func),
|
||||||
Stmt::AnnAssign(ast::StmtAnnAssign {
|
Stmt::AnnAssign(ast::StmtAnnAssign {
|
||||||
target,
|
target,
|
||||||
annotation,
|
annotation,
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ pub enum AnyNode {
|
|||||||
StmtTypeAlias(ast::StmtTypeAlias),
|
StmtTypeAlias(ast::StmtTypeAlias),
|
||||||
StmtAssign(ast::StmtAssign),
|
StmtAssign(ast::StmtAssign),
|
||||||
StmtAugAssign(ast::StmtAugAssign),
|
StmtAugAssign(ast::StmtAugAssign),
|
||||||
|
StmtCrement(ast::StmtCrement),
|
||||||
StmtAnnAssign(ast::StmtAnnAssign),
|
StmtAnnAssign(ast::StmtAnnAssign),
|
||||||
StmtFor(ast::StmtFor),
|
StmtFor(ast::StmtFor),
|
||||||
StmtWhile(ast::StmtWhile),
|
StmtWhile(ast::StmtWhile),
|
||||||
@@ -130,6 +131,7 @@ impl AnyNode {
|
|||||||
AnyNode::StmtTypeAlias(node) => Some(Stmt::TypeAlias(node)),
|
AnyNode::StmtTypeAlias(node) => Some(Stmt::TypeAlias(node)),
|
||||||
AnyNode::StmtAssign(node) => Some(Stmt::Assign(node)),
|
AnyNode::StmtAssign(node) => Some(Stmt::Assign(node)),
|
||||||
AnyNode::StmtAugAssign(node) => Some(Stmt::AugAssign(node)),
|
AnyNode::StmtAugAssign(node) => Some(Stmt::AugAssign(node)),
|
||||||
|
AnyNode::StmtCrement(node) => Some(Stmt::Crement(node)),
|
||||||
AnyNode::StmtAnnAssign(node) => Some(Stmt::AnnAssign(node)),
|
AnyNode::StmtAnnAssign(node) => Some(Stmt::AnnAssign(node)),
|
||||||
AnyNode::StmtFor(node) => Some(Stmt::For(node)),
|
AnyNode::StmtFor(node) => Some(Stmt::For(node)),
|
||||||
AnyNode::StmtWhile(node) => Some(Stmt::While(node)),
|
AnyNode::StmtWhile(node) => Some(Stmt::While(node)),
|
||||||
@@ -262,6 +264,7 @@ impl AnyNode {
|
|||||||
| AnyNode::StmtTypeAlias(_)
|
| AnyNode::StmtTypeAlias(_)
|
||||||
| AnyNode::StmtAssign(_)
|
| AnyNode::StmtAssign(_)
|
||||||
| AnyNode::StmtAugAssign(_)
|
| AnyNode::StmtAugAssign(_)
|
||||||
|
| AnyNode::StmtCrement(_)
|
||||||
| AnyNode::StmtAnnAssign(_)
|
| AnyNode::StmtAnnAssign(_)
|
||||||
| AnyNode::StmtFor(_)
|
| AnyNode::StmtFor(_)
|
||||||
| AnyNode::StmtWhile(_)
|
| AnyNode::StmtWhile(_)
|
||||||
@@ -327,6 +330,7 @@ impl AnyNode {
|
|||||||
| AnyNode::StmtTypeAlias(_)
|
| AnyNode::StmtTypeAlias(_)
|
||||||
| AnyNode::StmtAssign(_)
|
| AnyNode::StmtAssign(_)
|
||||||
| AnyNode::StmtAugAssign(_)
|
| AnyNode::StmtAugAssign(_)
|
||||||
|
| AnyNode::StmtCrement(_)
|
||||||
| AnyNode::StmtAnnAssign(_)
|
| AnyNode::StmtAnnAssign(_)
|
||||||
| AnyNode::StmtFor(_)
|
| AnyNode::StmtFor(_)
|
||||||
| AnyNode::StmtWhile(_)
|
| AnyNode::StmtWhile(_)
|
||||||
@@ -432,6 +436,7 @@ impl AnyNode {
|
|||||||
| AnyNode::StmtTypeAlias(_)
|
| AnyNode::StmtTypeAlias(_)
|
||||||
| AnyNode::StmtAssign(_)
|
| AnyNode::StmtAssign(_)
|
||||||
| AnyNode::StmtAugAssign(_)
|
| AnyNode::StmtAugAssign(_)
|
||||||
|
| AnyNode::StmtCrement(_)
|
||||||
| AnyNode::StmtAnnAssign(_)
|
| AnyNode::StmtAnnAssign(_)
|
||||||
| AnyNode::StmtFor(_)
|
| AnyNode::StmtFor(_)
|
||||||
| AnyNode::StmtWhile(_)
|
| AnyNode::StmtWhile(_)
|
||||||
@@ -522,6 +527,7 @@ impl AnyNode {
|
|||||||
| AnyNode::StmtTypeAlias(_)
|
| AnyNode::StmtTypeAlias(_)
|
||||||
| AnyNode::StmtAssign(_)
|
| AnyNode::StmtAssign(_)
|
||||||
| AnyNode::StmtAugAssign(_)
|
| AnyNode::StmtAugAssign(_)
|
||||||
|
| AnyNode::StmtCrement(_)
|
||||||
| AnyNode::StmtAnnAssign(_)
|
| AnyNode::StmtAnnAssign(_)
|
||||||
| AnyNode::StmtFor(_)
|
| AnyNode::StmtFor(_)
|
||||||
| AnyNode::StmtWhile(_)
|
| AnyNode::StmtWhile(_)
|
||||||
@@ -637,6 +643,7 @@ impl AnyNode {
|
|||||||
Self::StmtTypeAlias(node) => AnyNodeRef::StmtTypeAlias(node),
|
Self::StmtTypeAlias(node) => AnyNodeRef::StmtTypeAlias(node),
|
||||||
Self::StmtAssign(node) => AnyNodeRef::StmtAssign(node),
|
Self::StmtAssign(node) => AnyNodeRef::StmtAssign(node),
|
||||||
Self::StmtAugAssign(node) => AnyNodeRef::StmtAugAssign(node),
|
Self::StmtAugAssign(node) => AnyNodeRef::StmtAugAssign(node),
|
||||||
|
Self::StmtCrement(node) => AnyNodeRef::StmtCrement(node),
|
||||||
Self::StmtAnnAssign(node) => AnyNodeRef::StmtAnnAssign(node),
|
Self::StmtAnnAssign(node) => AnyNodeRef::StmtAnnAssign(node),
|
||||||
Self::StmtFor(node) => AnyNodeRef::StmtFor(node),
|
Self::StmtFor(node) => AnyNodeRef::StmtFor(node),
|
||||||
Self::StmtWhile(node) => AnyNodeRef::StmtWhile(node),
|
Self::StmtWhile(node) => AnyNodeRef::StmtWhile(node),
|
||||||
@@ -1125,6 +1132,48 @@ impl AstNode for ast::StmtAugAssign {
|
|||||||
visitor.visit_expr(value);
|
visitor.visit_expr(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl AstNode for ast::StmtCrement {
|
||||||
|
fn cast(kind: AnyNode) -> Option<Self>
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
if let AnyNode::StmtCrement(node) = kind {
|
||||||
|
Some(node)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn cast_ref(kind: AnyNodeRef) -> Option<&Self> {
|
||||||
|
if let AnyNodeRef::StmtCrement(node) = kind {
|
||||||
|
Some(node)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn as_any_node_ref(&self) -> AnyNodeRef {
|
||||||
|
AnyNodeRef::from(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn into_any_node(self) -> AnyNode {
|
||||||
|
AnyNode::from(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_preorder<'a, V>(&'a self, visitor: &mut V)
|
||||||
|
where
|
||||||
|
V: PreorderVisitor<'a> + ?Sized,
|
||||||
|
{
|
||||||
|
let ast::StmtCrement {
|
||||||
|
target,
|
||||||
|
op: _,
|
||||||
|
range: _,
|
||||||
|
} = self;
|
||||||
|
|
||||||
|
visitor.visit_expr(target);
|
||||||
|
// TODO(konstin): visitor.visit_operator(op);
|
||||||
|
}
|
||||||
|
}
|
||||||
impl AstNode for ast::StmtAnnAssign {
|
impl AstNode for ast::StmtAnnAssign {
|
||||||
fn cast(kind: AnyNode) -> Option<Self>
|
fn cast(kind: AnyNode) -> Option<Self>
|
||||||
where
|
where
|
||||||
@@ -4538,6 +4587,7 @@ impl From<Stmt> for AnyNode {
|
|||||||
Stmt::Break(node) => AnyNode::StmtBreak(node),
|
Stmt::Break(node) => AnyNode::StmtBreak(node),
|
||||||
Stmt::Continue(node) => AnyNode::StmtContinue(node),
|
Stmt::Continue(node) => AnyNode::StmtContinue(node),
|
||||||
Stmt::IpyEscapeCommand(node) => AnyNode::StmtIpyEscapeCommand(node),
|
Stmt::IpyEscapeCommand(node) => AnyNode::StmtIpyEscapeCommand(node),
|
||||||
|
Stmt::Crement(node) => AnyNode::StmtCrement(node),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4676,6 +4726,12 @@ impl From<ast::StmtAugAssign> for AnyNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<ast::StmtCrement> for AnyNode {
|
||||||
|
fn from(node: ast::StmtCrement) -> Self {
|
||||||
|
AnyNode::StmtCrement(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<ast::StmtAnnAssign> for AnyNode {
|
impl From<ast::StmtAnnAssign> for AnyNode {
|
||||||
fn from(node: ast::StmtAnnAssign) -> Self {
|
fn from(node: ast::StmtAnnAssign) -> Self {
|
||||||
AnyNode::StmtAnnAssign(node)
|
AnyNode::StmtAnnAssign(node)
|
||||||
@@ -5251,6 +5307,7 @@ impl Ranged for AnyNode {
|
|||||||
AnyNode::StringLiteral(node) => node.range(),
|
AnyNode::StringLiteral(node) => node.range(),
|
||||||
AnyNode::BytesLiteral(node) => node.range(),
|
AnyNode::BytesLiteral(node) => node.range(),
|
||||||
AnyNode::ElifElseClause(node) => node.range(),
|
AnyNode::ElifElseClause(node) => node.range(),
|
||||||
|
AnyNode::StmtCrement(node) => node.range(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5266,6 +5323,7 @@ pub enum AnyNodeRef<'a> {
|
|||||||
StmtTypeAlias(&'a ast::StmtTypeAlias),
|
StmtTypeAlias(&'a ast::StmtTypeAlias),
|
||||||
StmtAssign(&'a ast::StmtAssign),
|
StmtAssign(&'a ast::StmtAssign),
|
||||||
StmtAugAssign(&'a ast::StmtAugAssign),
|
StmtAugAssign(&'a ast::StmtAugAssign),
|
||||||
|
StmtCrement(&'a ast::StmtCrement),
|
||||||
StmtAnnAssign(&'a ast::StmtAnnAssign),
|
StmtAnnAssign(&'a ast::StmtAnnAssign),
|
||||||
StmtFor(&'a ast::StmtFor),
|
StmtFor(&'a ast::StmtFor),
|
||||||
StmtWhile(&'a ast::StmtWhile),
|
StmtWhile(&'a ast::StmtWhile),
|
||||||
@@ -5444,6 +5502,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||||||
AnyNodeRef::StringLiteral(node) => NonNull::from(*node).cast(),
|
AnyNodeRef::StringLiteral(node) => NonNull::from(*node).cast(),
|
||||||
AnyNodeRef::BytesLiteral(node) => NonNull::from(*node).cast(),
|
AnyNodeRef::BytesLiteral(node) => NonNull::from(*node).cast(),
|
||||||
AnyNodeRef::ElifElseClause(node) => NonNull::from(*node).cast(),
|
AnyNodeRef::ElifElseClause(node) => NonNull::from(*node).cast(),
|
||||||
|
AnyNodeRef::StmtCrement(node) => NonNull::from(*node).cast(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5546,6 +5605,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||||||
AnyNodeRef::StringLiteral(_) => NodeKind::StringLiteral,
|
AnyNodeRef::StringLiteral(_) => NodeKind::StringLiteral,
|
||||||
AnyNodeRef::BytesLiteral(_) => NodeKind::BytesLiteral,
|
AnyNodeRef::BytesLiteral(_) => NodeKind::BytesLiteral,
|
||||||
AnyNodeRef::ElifElseClause(_) => NodeKind::ElifElseClause,
|
AnyNodeRef::ElifElseClause(_) => NodeKind::ElifElseClause,
|
||||||
|
AnyNodeRef::StmtCrement(_) => NodeKind::StmtCrement,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5558,6 +5618,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||||||
| AnyNodeRef::StmtTypeAlias(_)
|
| AnyNodeRef::StmtTypeAlias(_)
|
||||||
| AnyNodeRef::StmtAssign(_)
|
| AnyNodeRef::StmtAssign(_)
|
||||||
| AnyNodeRef::StmtAugAssign(_)
|
| AnyNodeRef::StmtAugAssign(_)
|
||||||
|
| AnyNodeRef::StmtCrement(_)
|
||||||
| AnyNodeRef::StmtAnnAssign(_)
|
| AnyNodeRef::StmtAnnAssign(_)
|
||||||
| AnyNodeRef::StmtFor(_)
|
| AnyNodeRef::StmtFor(_)
|
||||||
| AnyNodeRef::StmtWhile(_)
|
| AnyNodeRef::StmtWhile(_)
|
||||||
@@ -5690,6 +5751,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||||||
| AnyNodeRef::StmtTypeAlias(_)
|
| AnyNodeRef::StmtTypeAlias(_)
|
||||||
| AnyNodeRef::StmtAssign(_)
|
| AnyNodeRef::StmtAssign(_)
|
||||||
| AnyNodeRef::StmtAugAssign(_)
|
| AnyNodeRef::StmtAugAssign(_)
|
||||||
|
| AnyNodeRef::StmtCrement(_)
|
||||||
| AnyNodeRef::StmtAnnAssign(_)
|
| AnyNodeRef::StmtAnnAssign(_)
|
||||||
| AnyNodeRef::StmtFor(_)
|
| AnyNodeRef::StmtFor(_)
|
||||||
| AnyNodeRef::StmtWhile(_)
|
| AnyNodeRef::StmtWhile(_)
|
||||||
@@ -5754,6 +5816,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||||||
| AnyNodeRef::StmtTypeAlias(_)
|
| AnyNodeRef::StmtTypeAlias(_)
|
||||||
| AnyNodeRef::StmtAssign(_)
|
| AnyNodeRef::StmtAssign(_)
|
||||||
| AnyNodeRef::StmtAugAssign(_)
|
| AnyNodeRef::StmtAugAssign(_)
|
||||||
|
| AnyNodeRef::StmtCrement(_)
|
||||||
| AnyNodeRef::StmtAnnAssign(_)
|
| AnyNodeRef::StmtAnnAssign(_)
|
||||||
| AnyNodeRef::StmtFor(_)
|
| AnyNodeRef::StmtFor(_)
|
||||||
| AnyNodeRef::StmtWhile(_)
|
| AnyNodeRef::StmtWhile(_)
|
||||||
@@ -5859,6 +5922,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||||||
| AnyNodeRef::StmtTypeAlias(_)
|
| AnyNodeRef::StmtTypeAlias(_)
|
||||||
| AnyNodeRef::StmtAssign(_)
|
| AnyNodeRef::StmtAssign(_)
|
||||||
| AnyNodeRef::StmtAugAssign(_)
|
| AnyNodeRef::StmtAugAssign(_)
|
||||||
|
| AnyNodeRef::StmtCrement(_)
|
||||||
| AnyNodeRef::StmtAnnAssign(_)
|
| AnyNodeRef::StmtAnnAssign(_)
|
||||||
| AnyNodeRef::StmtFor(_)
|
| AnyNodeRef::StmtFor(_)
|
||||||
| AnyNodeRef::StmtWhile(_)
|
| AnyNodeRef::StmtWhile(_)
|
||||||
@@ -5949,6 +6013,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||||||
| AnyNodeRef::StmtTypeAlias(_)
|
| AnyNodeRef::StmtTypeAlias(_)
|
||||||
| AnyNodeRef::StmtAssign(_)
|
| AnyNodeRef::StmtAssign(_)
|
||||||
| AnyNodeRef::StmtAugAssign(_)
|
| AnyNodeRef::StmtAugAssign(_)
|
||||||
|
| AnyNodeRef::StmtCrement(_)
|
||||||
| AnyNodeRef::StmtAnnAssign(_)
|
| AnyNodeRef::StmtAnnAssign(_)
|
||||||
| AnyNodeRef::StmtFor(_)
|
| AnyNodeRef::StmtFor(_)
|
||||||
| AnyNodeRef::StmtWhile(_)
|
| AnyNodeRef::StmtWhile(_)
|
||||||
@@ -6058,6 +6123,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||||||
AnyNodeRef::StmtTypeAlias(node) => node.visit_preorder(visitor),
|
AnyNodeRef::StmtTypeAlias(node) => node.visit_preorder(visitor),
|
||||||
AnyNodeRef::StmtAssign(node) => node.visit_preorder(visitor),
|
AnyNodeRef::StmtAssign(node) => node.visit_preorder(visitor),
|
||||||
AnyNodeRef::StmtAugAssign(node) => node.visit_preorder(visitor),
|
AnyNodeRef::StmtAugAssign(node) => node.visit_preorder(visitor),
|
||||||
|
AnyNodeRef::StmtCrement(node) => node.visit_preorder(visitor),
|
||||||
AnyNodeRef::StmtAnnAssign(node) => node.visit_preorder(visitor),
|
AnyNodeRef::StmtAnnAssign(node) => node.visit_preorder(visitor),
|
||||||
AnyNodeRef::StmtFor(node) => node.visit_preorder(visitor),
|
AnyNodeRef::StmtFor(node) => node.visit_preorder(visitor),
|
||||||
AnyNodeRef::StmtWhile(node) => node.visit_preorder(visitor),
|
AnyNodeRef::StmtWhile(node) => node.visit_preorder(visitor),
|
||||||
@@ -6372,6 +6438,12 @@ impl<'a> From<&'a ast::StmtAugAssign> for AnyNodeRef<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> From<&'a ast::StmtCrement> for AnyNodeRef<'a> {
|
||||||
|
fn from(node: &'a ast::StmtCrement) -> Self {
|
||||||
|
AnyNodeRef::StmtCrement(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'a> From<&'a ast::StmtAnnAssign> for AnyNodeRef<'a> {
|
impl<'a> From<&'a ast::StmtAnnAssign> for AnyNodeRef<'a> {
|
||||||
fn from(node: &'a ast::StmtAnnAssign) -> Self {
|
fn from(node: &'a ast::StmtAnnAssign) -> Self {
|
||||||
AnyNodeRef::StmtAnnAssign(node)
|
AnyNodeRef::StmtAnnAssign(node)
|
||||||
@@ -6837,6 +6909,7 @@ impl<'a> From<&'a Stmt> for AnyNodeRef<'a> {
|
|||||||
Stmt::Break(node) => AnyNodeRef::StmtBreak(node),
|
Stmt::Break(node) => AnyNodeRef::StmtBreak(node),
|
||||||
Stmt::Continue(node) => AnyNodeRef::StmtContinue(node),
|
Stmt::Continue(node) => AnyNodeRef::StmtContinue(node),
|
||||||
Stmt::IpyEscapeCommand(node) => AnyNodeRef::StmtIpyEscapeCommand(node),
|
Stmt::IpyEscapeCommand(node) => AnyNodeRef::StmtIpyEscapeCommand(node),
|
||||||
|
Stmt::Crement(node) => AnyNodeRef::StmtCrement(node),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7073,6 +7146,7 @@ impl Ranged for AnyNodeRef<'_> {
|
|||||||
AnyNodeRef::FString(node) => node.range(),
|
AnyNodeRef::FString(node) => node.range(),
|
||||||
AnyNodeRef::StringLiteral(node) => node.range(),
|
AnyNodeRef::StringLiteral(node) => node.range(),
|
||||||
AnyNodeRef::BytesLiteral(node) => node.range(),
|
AnyNodeRef::BytesLiteral(node) => node.range(),
|
||||||
|
AnyNodeRef::StmtCrement(node) => node.range(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7173,4 +7247,5 @@ pub enum NodeKind {
|
|||||||
FString,
|
FString,
|
||||||
StringLiteral,
|
StringLiteral,
|
||||||
BytesLiteral,
|
BytesLiteral,
|
||||||
|
StmtCrement,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,6 +101,8 @@ pub enum Stmt {
|
|||||||
// Jupyter notebook specific
|
// Jupyter notebook specific
|
||||||
#[is(name = "ipy_escape_command_stmt")]
|
#[is(name = "ipy_escape_command_stmt")]
|
||||||
IpyEscapeCommand(StmtIpyEscapeCommand),
|
IpyEscapeCommand(StmtIpyEscapeCommand),
|
||||||
|
#[is(name = "crement_stmt")]
|
||||||
|
Crement(StmtCrement),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An AST node used to represent a IPython escape command at the statement level.
|
/// An AST node used to represent a IPython escape command at the statement level.
|
||||||
@@ -297,6 +299,26 @@ impl From<StmtAugAssign> for Stmt {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
|
pub enum CrementKind {
|
||||||
|
Increment,
|
||||||
|
Decrement,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `++` or `--`
|
||||||
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
|
pub struct StmtCrement {
|
||||||
|
pub range: TextRange,
|
||||||
|
pub target: Box<Expr>,
|
||||||
|
pub op: CrementKind,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<StmtCrement> for Stmt {
|
||||||
|
fn from(payload: StmtCrement) -> Self {
|
||||||
|
Stmt::Crement(payload)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// See also [AnnAssign](https://docs.python.org/3/library/ast.html#ast.AnnAssign)
|
/// See also [AnnAssign](https://docs.python.org/3/library/ast.html#ast.AnnAssign)
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
pub struct StmtAnnAssign {
|
pub struct StmtAnnAssign {
|
||||||
@@ -3693,6 +3715,11 @@ impl Ranged for crate::nodes::StmtAugAssign {
|
|||||||
self.range
|
self.range
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl Ranged for crate::nodes::StmtCrement {
|
||||||
|
fn range(&self) -> TextRange {
|
||||||
|
self.range
|
||||||
|
}
|
||||||
|
}
|
||||||
impl Ranged for crate::nodes::StmtAnnAssign {
|
impl Ranged for crate::nodes::StmtAnnAssign {
|
||||||
fn range(&self) -> TextRange {
|
fn range(&self) -> TextRange {
|
||||||
self.range
|
self.range
|
||||||
@@ -3816,6 +3843,7 @@ impl Ranged for crate::Stmt {
|
|||||||
Self::Break(node) => node.range(),
|
Self::Break(node) => node.range(),
|
||||||
Self::Continue(node) => node.range(),
|
Self::Continue(node) => node.range(),
|
||||||
Stmt::IpyEscapeCommand(node) => node.range(),
|
Stmt::IpyEscapeCommand(node) => node.range(),
|
||||||
|
Stmt::Crement(node) => node.range(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -203,6 +203,14 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
|||||||
visitor.visit_operator(op);
|
visitor.visit_operator(op);
|
||||||
visitor.visit_expr(target);
|
visitor.visit_expr(target);
|
||||||
}
|
}
|
||||||
|
Stmt::Crement(ast::StmtCrement {
|
||||||
|
target,
|
||||||
|
op: _,
|
||||||
|
range: _,
|
||||||
|
}) => {
|
||||||
|
// TODO(konstin): visitor.visit_operator(op);
|
||||||
|
visitor.visit_expr(target);
|
||||||
|
}
|
||||||
Stmt::AnnAssign(ast::StmtAnnAssign {
|
Stmt::AnnAssign(ast::StmtAnnAssign {
|
||||||
target,
|
target,
|
||||||
annotation,
|
annotation,
|
||||||
|
|||||||
@@ -209,6 +209,7 @@ where
|
|||||||
Stmt::TypeAlias(stmt) => stmt.visit_preorder(visitor),
|
Stmt::TypeAlias(stmt) => stmt.visit_preorder(visitor),
|
||||||
Stmt::Assign(stmt) => stmt.visit_preorder(visitor),
|
Stmt::Assign(stmt) => stmt.visit_preorder(visitor),
|
||||||
Stmt::AugAssign(stmt) => stmt.visit_preorder(visitor),
|
Stmt::AugAssign(stmt) => stmt.visit_preorder(visitor),
|
||||||
|
Stmt::Crement(stmt) => stmt.visit_preorder(visitor),
|
||||||
Stmt::AnnAssign(stmt) => stmt.visit_preorder(visitor),
|
Stmt::AnnAssign(stmt) => stmt.visit_preorder(visitor),
|
||||||
Stmt::For(stmt) => stmt.visit_preorder(visitor),
|
Stmt::For(stmt) => stmt.visit_preorder(visitor),
|
||||||
Stmt::While(stmt) => stmt.visit_preorder(visitor),
|
Stmt::While(stmt) => stmt.visit_preorder(visitor),
|
||||||
|
|||||||
@@ -306,6 +306,7 @@ pub fn walk_stmt<V: Transformer + ?Sized>(visitor: &V, stmt: &mut Stmt) {
|
|||||||
Stmt::Nonlocal(_) => {}
|
Stmt::Nonlocal(_) => {}
|
||||||
Stmt::Expr(ast::StmtExpr { value, range: _ }) => visitor.visit_expr(value),
|
Stmt::Expr(ast::StmtExpr { value, range: _ }) => visitor.visit_expr(value),
|
||||||
Stmt::Pass(_) | Stmt::Break(_) | Stmt::Continue(_) | Stmt::IpyEscapeCommand(_) => {}
|
Stmt::Pass(_) | Stmt::Break(_) | Stmt::Continue(_) | Stmt::IpyEscapeCommand(_) => {}
|
||||||
|
Stmt::Crement(_) => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ use std::ops::Deref;
|
|||||||
|
|
||||||
use ruff_python_ast::str::Quote;
|
use ruff_python_ast::str::Quote;
|
||||||
use ruff_python_ast::{
|
use ruff_python_ast::{
|
||||||
self as ast, Alias, ArgOrKeyword, BoolOp, CmpOp, Comprehension, ConversionFlag, DebugText,
|
self as ast, Alias, ArgOrKeyword, BoolOp, CmpOp, Comprehension, ConversionFlag, CrementKind,
|
||||||
ExceptHandler, Expr, Identifier, MatchCase, Operator, Parameter, Parameters, Pattern,
|
DebugText, ExceptHandler, Expr, Identifier, MatchCase, Operator, Parameter, Parameters,
|
||||||
Singleton, Stmt, Suite, TypeParam, TypeParamParamSpec, TypeParamTypeVar, TypeParamTypeVarTuple,
|
Pattern, Singleton, Stmt, Suite, TypeParam, TypeParamParamSpec, TypeParamTypeVar,
|
||||||
WithItem,
|
TypeParamTypeVarTuple, WithItem,
|
||||||
};
|
};
|
||||||
use ruff_python_ast::{ParameterWithDefault, TypeParams};
|
use ruff_python_ast::{ParameterWithDefault, TypeParams};
|
||||||
use ruff_python_literal::escape::{AsciiEscape, Escape, UnicodeEscape};
|
use ruff_python_literal::escape::{AsciiEscape, Escape, UnicodeEscape};
|
||||||
@@ -345,6 +345,20 @@ impl<'a> Generator<'a> {
|
|||||||
self.unparse_expr(value, precedence::AUG_ASSIGN);
|
self.unparse_expr(value, precedence::AUG_ASSIGN);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Stmt::Crement(ast::StmtCrement {
|
||||||
|
target,
|
||||||
|
op,
|
||||||
|
range: _,
|
||||||
|
}) => {
|
||||||
|
statement!({
|
||||||
|
self.unparse_expr(target, precedence::AUG_ASSIGN);
|
||||||
|
self.p(" ");
|
||||||
|
self.p(match op {
|
||||||
|
CrementKind::Increment => "+= 1",
|
||||||
|
CrementKind::Decrement => "-= 1",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
Stmt::AnnAssign(ast::StmtAnnAssign {
|
Stmt::AnnAssign(ast::StmtAnnAssign {
|
||||||
target,
|
target,
|
||||||
annotation,
|
annotation,
|
||||||
|
|||||||
@@ -706,7 +706,8 @@ impl Format<PyFormatContext<'_>> for FormatEnclosingNode<'_> {
|
|||||||
| AnyNodeRef::TypeParamTypeVar(_)
|
| AnyNodeRef::TypeParamTypeVar(_)
|
||||||
| AnyNodeRef::TypeParamTypeVarTuple(_)
|
| AnyNodeRef::TypeParamTypeVarTuple(_)
|
||||||
| AnyNodeRef::TypeParamParamSpec(_)
|
| AnyNodeRef::TypeParamParamSpec(_)
|
||||||
| AnyNodeRef::BytesLiteral(_) => {
|
| AnyNodeRef::BytesLiteral(_)
|
||||||
|
| AnyNodeRef::StmtCrement(_) => {
|
||||||
panic!("Range formatting only supports formatting logical lines")
|
panic!("Range formatting only supports formatting logical lines")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,19 @@ impl FormatRule<Stmt, PyFormatContext<'_>> for FormatStmt {
|
|||||||
Stmt::Delete(x) => x.format().fmt(f),
|
Stmt::Delete(x) => x.format().fmt(f),
|
||||||
Stmt::Assign(x) => x.format().fmt(f),
|
Stmt::Assign(x) => x.format().fmt(f),
|
||||||
Stmt::AugAssign(x) => x.format().fmt(f),
|
Stmt::AugAssign(x) => x.format().fmt(f),
|
||||||
|
Stmt::Crement(x) => {
|
||||||
|
x.target.format().fmt(f)?;
|
||||||
|
use ruff_formatter::prelude::*;
|
||||||
|
match x.op {
|
||||||
|
ruff_python_ast::CrementKind::Increment => {
|
||||||
|
ruff_formatter::write!(f, [space(), text("+="), space(), text("1")])?;
|
||||||
|
}
|
||||||
|
ruff_python_ast::CrementKind::Decrement => {
|
||||||
|
ruff_formatter::write!(f, [space(), text("-="), space(), text("1")])?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
Stmt::AnnAssign(x) => x.format().fmt(f),
|
Stmt::AnnAssign(x) => x.format().fmt(f),
|
||||||
Stmt::For(x) => x.format().fmt(f),
|
Stmt::For(x) => x.format().fmt(f),
|
||||||
Stmt::While(x) => x.format().fmt(f),
|
Stmt::While(x) => x.format().fmt(f),
|
||||||
|
|||||||
@@ -1079,7 +1079,9 @@ impl<'source> Lexer<'source> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
'+' => {
|
'+' => {
|
||||||
if self.cursor.eat_char('=') {
|
if self.cursor.eat_char('+') {
|
||||||
|
Tok::Increment
|
||||||
|
} else if self.cursor.eat_char('=') {
|
||||||
Tok::PlusEqual
|
Tok::PlusEqual
|
||||||
} else {
|
} else {
|
||||||
Tok::Plus
|
Tok::Plus
|
||||||
@@ -1166,7 +1168,9 @@ impl<'source> Lexer<'source> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
'-' => {
|
'-' => {
|
||||||
if self.cursor.eat_char('=') {
|
if self.cursor.eat_char('-') {
|
||||||
|
Tok::Increment
|
||||||
|
} else if self.cursor.eat_char('=') {
|
||||||
Tok::MinusEqual
|
Tok::MinusEqual
|
||||||
} else if self.cursor.eat_char('>') {
|
} else if self.cursor.eat_char('>') {
|
||||||
Tok::Rarrow
|
Tok::Rarrow
|
||||||
|
|||||||
@@ -110,6 +110,16 @@ DelStatement: ast::Stmt = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ExpressionStatement: ast::Stmt = {
|
ExpressionStatement: ast::Stmt = {
|
||||||
|
<location:@L> <target:TestOrStarExprList> <op:Crement> <end_location:@R> =>? {
|
||||||
|
invalid::assignment_target(&target.expr)?;
|
||||||
|
Ok(ast::Stmt::Crement(
|
||||||
|
ast::StmtCrement {
|
||||||
|
target: Box::new(set_context(target.into(), ast::ExprContext::Store)),
|
||||||
|
op,
|
||||||
|
range: (location..end_location).into()
|
||||||
|
},
|
||||||
|
))
|
||||||
|
},
|
||||||
<location:@L> <expression:TestOrStarExprList> <suffix:AssignSuffix*> <end_location:@R> =>? {
|
<location:@L> <expression:TestOrStarExprList> <suffix:AssignSuffix*> <end_location:@R> =>? {
|
||||||
// Just an expression, no assignment:
|
// Just an expression, no assignment:
|
||||||
if suffix.is_empty() {
|
if suffix.is_empty() {
|
||||||
@@ -204,6 +214,11 @@ AugAssign: ast::Operator = {
|
|||||||
"//=" => ast::Operator::FloorDiv,
|
"//=" => ast::Operator::FloorDiv,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Crement: ast::CrementKind = {
|
||||||
|
"++" => ast::CrementKind::Increment,
|
||||||
|
"--" => ast::CrementKind::Decrement,
|
||||||
|
};
|
||||||
|
|
||||||
FlowStatement: ast::Stmt = {
|
FlowStatement: ast::Stmt = {
|
||||||
<location:@L> "break" <end_location:@R> => {
|
<location:@L> "break" <end_location:@R> => {
|
||||||
|
|
||||||
@@ -2033,6 +2048,8 @@ extern {
|
|||||||
">" => token::Tok::Greater,
|
">" => token::Tok::Greater,
|
||||||
">=" => token::Tok::GreaterEqual,
|
">=" => token::Tok::GreaterEqual,
|
||||||
"->" => token::Tok::Rarrow,
|
"->" => token::Tok::Rarrow,
|
||||||
|
"++" => token::Tok::Increment,
|
||||||
|
"--" => token::Tok::Decrement,
|
||||||
"and" => token::Tok::And,
|
"and" => token::Tok::And,
|
||||||
"as" => token::Tok::As,
|
"as" => token::Tok::As,
|
||||||
"assert" => token::Tok::Assert,
|
"assert" => token::Tok::Assert,
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -157,6 +157,10 @@ pub enum Tok {
|
|||||||
VbarEqual,
|
VbarEqual,
|
||||||
/// Token value for caret equal `^=`.
|
/// Token value for caret equal `^=`.
|
||||||
CircumflexEqual,
|
CircumflexEqual,
|
||||||
|
/// Token value for `++`.
|
||||||
|
Increment,
|
||||||
|
/// Token value for `--`.
|
||||||
|
Decrement,
|
||||||
/// Token value for left shift equal `<<=`.
|
/// Token value for left shift equal `<<=`.
|
||||||
LeftShiftEqual,
|
LeftShiftEqual,
|
||||||
/// Token value for right shift equal `>>=`.
|
/// Token value for right shift equal `>>=`.
|
||||||
@@ -343,6 +347,8 @@ impl fmt::Display for Tok {
|
|||||||
With => f.write_str("'with'"),
|
With => f.write_str("'with'"),
|
||||||
Yield => f.write_str("'yield'"),
|
Yield => f.write_str("'yield'"),
|
||||||
ColonEqual => f.write_str("':='"),
|
ColonEqual => f.write_str("':='"),
|
||||||
|
Increment => f.write_str("++"),
|
||||||
|
Decrement => f.write_str("--"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -526,6 +532,8 @@ pub enum TokenKind {
|
|||||||
StartModule,
|
StartModule,
|
||||||
StartInteractive,
|
StartInteractive,
|
||||||
StartExpression,
|
StartExpression,
|
||||||
|
Increment,
|
||||||
|
Decrement,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TokenKind {
|
impl TokenKind {
|
||||||
@@ -620,6 +628,8 @@ impl TokenKind {
|
|||||||
| TokenKind::AmperEqual
|
| TokenKind::AmperEqual
|
||||||
| TokenKind::VbarEqual
|
| TokenKind::VbarEqual
|
||||||
| TokenKind::CircumflexEqual
|
| TokenKind::CircumflexEqual
|
||||||
|
| TokenKind::Increment
|
||||||
|
| TokenKind::Decrement
|
||||||
| TokenKind::LeftShiftEqual
|
| TokenKind::LeftShiftEqual
|
||||||
| TokenKind::RightShiftEqual
|
| TokenKind::RightShiftEqual
|
||||||
| TokenKind::DoubleStarEqual
|
| TokenKind::DoubleStarEqual
|
||||||
@@ -799,6 +809,8 @@ impl TokenKind {
|
|||||||
Tok::Yield => TokenKind::Yield,
|
Tok::Yield => TokenKind::Yield,
|
||||||
Tok::StartModule => TokenKind::StartModule,
|
Tok::StartModule => TokenKind::StartModule,
|
||||||
Tok::StartExpression => TokenKind::StartExpression,
|
Tok::StartExpression => TokenKind::StartExpression,
|
||||||
|
Tok::Increment => TokenKind::Increment,
|
||||||
|
Tok::Decrement => TokenKind::Decrement,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user