mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-03 18:28:24 +00:00
Implement AnyNode
/AnyNodeRef
for FStringFormatSpec
(#9836)
## Summary This PR adds the `AnyNode` and `AnyNodeRef` implementation for `FStringFormatSpec` node which will be required in the f-string formatting. The main usage for this is so that we can pass in the node directly to `suppressed_node` in case debug expression is used to format is as verbatim text.
This commit is contained in:
parent
b3dc565473
commit
36b752876e
2 changed files with 69 additions and 0 deletions
|
@ -89,6 +89,7 @@ pub enum AnyNode {
|
|||
ExceptHandlerExceptHandler(ast::ExceptHandlerExceptHandler),
|
||||
FStringExpressionElement(ast::FStringExpressionElement),
|
||||
FStringLiteralElement(ast::FStringLiteralElement),
|
||||
FStringFormatSpec(ast::FStringFormatSpec),
|
||||
PatternMatchValue(ast::PatternMatchValue),
|
||||
PatternMatchSingleton(ast::PatternMatchSingleton),
|
||||
PatternMatchSequence(ast::PatternMatchSequence),
|
||||
|
@ -169,6 +170,7 @@ impl AnyNode {
|
|||
| AnyNode::ExprCall(_)
|
||||
| AnyNode::FStringExpressionElement(_)
|
||||
| AnyNode::FStringLiteralElement(_)
|
||||
| AnyNode::FStringFormatSpec(_)
|
||||
| AnyNode::ExprFString(_)
|
||||
| AnyNode::ExprStringLiteral(_)
|
||||
| AnyNode::ExprBytesLiteral(_)
|
||||
|
@ -281,6 +283,7 @@ impl AnyNode {
|
|||
| AnyNode::ExceptHandlerExceptHandler(_)
|
||||
| AnyNode::FStringExpressionElement(_)
|
||||
| AnyNode::FStringLiteralElement(_)
|
||||
| AnyNode::FStringFormatSpec(_)
|
||||
| AnyNode::PatternMatchValue(_)
|
||||
| AnyNode::PatternMatchSingleton(_)
|
||||
| AnyNode::PatternMatchSequence(_)
|
||||
|
@ -361,6 +364,7 @@ impl AnyNode {
|
|||
| AnyNode::ExprCall(_)
|
||||
| AnyNode::FStringExpressionElement(_)
|
||||
| AnyNode::FStringLiteralElement(_)
|
||||
| AnyNode::FStringFormatSpec(_)
|
||||
| AnyNode::ExprFString(_)
|
||||
| AnyNode::ExprStringLiteral(_)
|
||||
| AnyNode::ExprBytesLiteral(_)
|
||||
|
@ -465,6 +469,7 @@ impl AnyNode {
|
|||
| AnyNode::ExprCall(_)
|
||||
| AnyNode::FStringExpressionElement(_)
|
||||
| AnyNode::FStringLiteralElement(_)
|
||||
| AnyNode::FStringFormatSpec(_)
|
||||
| AnyNode::ExprFString(_)
|
||||
| AnyNode::ExprStringLiteral(_)
|
||||
| AnyNode::ExprBytesLiteral(_)
|
||||
|
@ -554,6 +559,7 @@ impl AnyNode {
|
|||
| AnyNode::ExprCall(_)
|
||||
| AnyNode::FStringExpressionElement(_)
|
||||
| AnyNode::FStringLiteralElement(_)
|
||||
| AnyNode::FStringFormatSpec(_)
|
||||
| AnyNode::ExprFString(_)
|
||||
| AnyNode::ExprStringLiteral(_)
|
||||
| AnyNode::ExprBytesLiteral(_)
|
||||
|
@ -668,6 +674,7 @@ impl AnyNode {
|
|||
Self::ExprCall(node) => AnyNodeRef::ExprCall(node),
|
||||
Self::FStringExpressionElement(node) => AnyNodeRef::FStringExpressionElement(node),
|
||||
Self::FStringLiteralElement(node) => AnyNodeRef::FStringLiteralElement(node),
|
||||
Self::FStringFormatSpec(node) => AnyNodeRef::FStringFormatSpec(node),
|
||||
Self::ExprFString(node) => AnyNodeRef::ExprFString(node),
|
||||
Self::ExprStringLiteral(node) => AnyNodeRef::ExprStringLiteral(node),
|
||||
Self::ExprBytesLiteral(node) => AnyNodeRef::ExprBytesLiteral(node),
|
||||
|
@ -2628,6 +2635,43 @@ impl AstNode for ast::ExprCall {
|
|||
visitor.visit_arguments(arguments);
|
||||
}
|
||||
}
|
||||
impl AstNode for ast::FStringFormatSpec {
|
||||
fn cast(kind: AnyNode) -> Option<Self>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
if let AnyNode::FStringFormatSpec(node) = kind {
|
||||
Some(node)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
fn cast_ref(kind: AnyNodeRef) -> Option<&Self> {
|
||||
if let AnyNodeRef::FStringFormatSpec(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,
|
||||
{
|
||||
for element in &self.elements {
|
||||
visitor.visit_f_string_element(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
impl AstNode for ast::FStringExpressionElement {
|
||||
fn cast(kind: AnyNode) -> Option<Self>
|
||||
where
|
||||
|
@ -4854,6 +4898,12 @@ impl From<ast::FStringLiteralElement> for AnyNode {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<ast::FStringFormatSpec> for AnyNode {
|
||||
fn from(node: ast::FStringFormatSpec) -> Self {
|
||||
AnyNode::FStringFormatSpec(node)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ast::ExprFString> for AnyNode {
|
||||
fn from(node: ast::ExprFString) -> Self {
|
||||
AnyNode::ExprFString(node)
|
||||
|
@ -5150,6 +5200,7 @@ impl Ranged for AnyNode {
|
|||
AnyNode::ExprCall(node) => node.range(),
|
||||
AnyNode::FStringExpressionElement(node) => node.range(),
|
||||
AnyNode::FStringLiteralElement(node) => node.range(),
|
||||
AnyNode::FStringFormatSpec(node) => node.range(),
|
||||
AnyNode::ExprFString(node) => node.range(),
|
||||
AnyNode::ExprStringLiteral(node) => node.range(),
|
||||
AnyNode::ExprBytesLiteral(node) => node.range(),
|
||||
|
@ -5246,6 +5297,7 @@ pub enum AnyNodeRef<'a> {
|
|||
ExprCall(&'a ast::ExprCall),
|
||||
FStringExpressionElement(&'a ast::FStringExpressionElement),
|
||||
FStringLiteralElement(&'a ast::FStringLiteralElement),
|
||||
FStringFormatSpec(&'a ast::FStringFormatSpec),
|
||||
ExprFString(&'a ast::ExprFString),
|
||||
ExprStringLiteral(&'a ast::ExprStringLiteral),
|
||||
ExprBytesLiteral(&'a ast::ExprBytesLiteral),
|
||||
|
@ -5341,6 +5393,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||
AnyNodeRef::ExprCall(node) => NonNull::from(*node).cast(),
|
||||
AnyNodeRef::FStringExpressionElement(node) => NonNull::from(*node).cast(),
|
||||
AnyNodeRef::FStringLiteralElement(node) => NonNull::from(*node).cast(),
|
||||
AnyNodeRef::FStringFormatSpec(node) => NonNull::from(*node).cast(),
|
||||
AnyNodeRef::ExprFString(node) => NonNull::from(*node).cast(),
|
||||
AnyNodeRef::ExprStringLiteral(node) => NonNull::from(*node).cast(),
|
||||
AnyNodeRef::ExprBytesLiteral(node) => NonNull::from(*node).cast(),
|
||||
|
@ -5442,6 +5495,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||
AnyNodeRef::ExprCall(_) => NodeKind::ExprCall,
|
||||
AnyNodeRef::FStringExpressionElement(_) => NodeKind::FStringExpressionElement,
|
||||
AnyNodeRef::FStringLiteralElement(_) => NodeKind::FStringLiteralElement,
|
||||
AnyNodeRef::FStringFormatSpec(_) => NodeKind::FStringFormatSpec,
|
||||
AnyNodeRef::ExprFString(_) => NodeKind::ExprFString,
|
||||
AnyNodeRef::ExprStringLiteral(_) => NodeKind::ExprStringLiteral,
|
||||
AnyNodeRef::ExprBytesLiteral(_) => NodeKind::ExprBytesLiteral,
|
||||
|
@ -5538,6 +5592,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||
| AnyNodeRef::ExprCall(_)
|
||||
| AnyNodeRef::FStringExpressionElement(_)
|
||||
| AnyNodeRef::FStringLiteralElement(_)
|
||||
| AnyNodeRef::FStringFormatSpec(_)
|
||||
| AnyNodeRef::ExprFString(_)
|
||||
| AnyNodeRef::ExprStringLiteral(_)
|
||||
| AnyNodeRef::ExprBytesLiteral(_)
|
||||
|
@ -5650,6 +5705,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||
| AnyNodeRef::ExceptHandlerExceptHandler(_)
|
||||
| AnyNodeRef::FStringExpressionElement(_)
|
||||
| AnyNodeRef::FStringLiteralElement(_)
|
||||
| AnyNodeRef::FStringFormatSpec(_)
|
||||
| AnyNodeRef::PatternMatchValue(_)
|
||||
| AnyNodeRef::PatternMatchSingleton(_)
|
||||
| AnyNodeRef::PatternMatchSequence(_)
|
||||
|
@ -5729,6 +5785,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||
| AnyNodeRef::ExprCall(_)
|
||||
| AnyNodeRef::FStringExpressionElement(_)
|
||||
| AnyNodeRef::FStringLiteralElement(_)
|
||||
| AnyNodeRef::FStringFormatSpec(_)
|
||||
| AnyNodeRef::ExprFString(_)
|
||||
| AnyNodeRef::ExprStringLiteral(_)
|
||||
| AnyNodeRef::ExprBytesLiteral(_)
|
||||
|
@ -5833,6 +5890,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||
| AnyNodeRef::ExprCall(_)
|
||||
| AnyNodeRef::FStringExpressionElement(_)
|
||||
| AnyNodeRef::FStringLiteralElement(_)
|
||||
| AnyNodeRef::FStringFormatSpec(_)
|
||||
| AnyNodeRef::ExprFString(_)
|
||||
| AnyNodeRef::ExprStringLiteral(_)
|
||||
| AnyNodeRef::ExprBytesLiteral(_)
|
||||
|
@ -5922,6 +5980,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||
| AnyNodeRef::ExprCall(_)
|
||||
| AnyNodeRef::FStringExpressionElement(_)
|
||||
| AnyNodeRef::FStringLiteralElement(_)
|
||||
| AnyNodeRef::FStringFormatSpec(_)
|
||||
| AnyNodeRef::ExprFString(_)
|
||||
| AnyNodeRef::ExprStringLiteral(_)
|
||||
| AnyNodeRef::ExprBytesLiteral(_)
|
||||
|
@ -6030,6 +6089,7 @@ impl<'a> AnyNodeRef<'a> {
|
|||
AnyNodeRef::ExprCall(node) => node.visit_preorder(visitor),
|
||||
AnyNodeRef::FStringExpressionElement(node) => node.visit_preorder(visitor),
|
||||
AnyNodeRef::FStringLiteralElement(node) => node.visit_preorder(visitor),
|
||||
AnyNodeRef::FStringFormatSpec(node) => node.visit_preorder(visitor),
|
||||
AnyNodeRef::ExprFString(node) => node.visit_preorder(visitor),
|
||||
AnyNodeRef::ExprStringLiteral(node) => node.visit_preorder(visitor),
|
||||
AnyNodeRef::ExprBytesLiteral(node) => node.visit_preorder(visitor),
|
||||
|
@ -6420,6 +6480,12 @@ impl<'a> From<&'a ast::FStringLiteralElement> for AnyNodeRef<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a ast::FStringFormatSpec> for AnyNodeRef<'a> {
|
||||
fn from(node: &'a ast::FStringFormatSpec) -> Self {
|
||||
AnyNodeRef::FStringFormatSpec(node)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<&'a ast::ExprFString> for AnyNodeRef<'a> {
|
||||
fn from(node: &'a ast::ExprFString) -> Self {
|
||||
AnyNodeRef::ExprFString(node)
|
||||
|
@ -6842,6 +6908,7 @@ impl Ranged for AnyNodeRef<'_> {
|
|||
AnyNodeRef::ExprCall(node) => node.range(),
|
||||
AnyNodeRef::FStringExpressionElement(node) => node.range(),
|
||||
AnyNodeRef::FStringLiteralElement(node) => node.range(),
|
||||
AnyNodeRef::FStringFormatSpec(node) => node.range(),
|
||||
AnyNodeRef::ExprFString(node) => node.range(),
|
||||
AnyNodeRef::ExprStringLiteral(node) => node.range(),
|
||||
AnyNodeRef::ExprBytesLiteral(node) => node.range(),
|
||||
|
@ -6940,6 +7007,7 @@ pub enum NodeKind {
|
|||
ExprCall,
|
||||
FStringExpressionElement,
|
||||
FStringLiteralElement,
|
||||
FStringFormatSpec,
|
||||
ExprFString,
|
||||
ExprStringLiteral,
|
||||
ExprBytesLiteral,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue