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:
Dhruv Manilawala 2024-02-06 00:53:43 +05:30 committed by GitHub
parent b3dc565473
commit 36b752876e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 69 additions and 0 deletions

View file

@ -89,6 +89,7 @@ pub enum AnyNode {
ExceptHandlerExceptHandler(ast::ExceptHandlerExceptHandler), ExceptHandlerExceptHandler(ast::ExceptHandlerExceptHandler),
FStringExpressionElement(ast::FStringExpressionElement), FStringExpressionElement(ast::FStringExpressionElement),
FStringLiteralElement(ast::FStringLiteralElement), FStringLiteralElement(ast::FStringLiteralElement),
FStringFormatSpec(ast::FStringFormatSpec),
PatternMatchValue(ast::PatternMatchValue), PatternMatchValue(ast::PatternMatchValue),
PatternMatchSingleton(ast::PatternMatchSingleton), PatternMatchSingleton(ast::PatternMatchSingleton),
PatternMatchSequence(ast::PatternMatchSequence), PatternMatchSequence(ast::PatternMatchSequence),
@ -169,6 +170,7 @@ impl AnyNode {
| AnyNode::ExprCall(_) | AnyNode::ExprCall(_)
| AnyNode::FStringExpressionElement(_) | AnyNode::FStringExpressionElement(_)
| AnyNode::FStringLiteralElement(_) | AnyNode::FStringLiteralElement(_)
| AnyNode::FStringFormatSpec(_)
| AnyNode::ExprFString(_) | AnyNode::ExprFString(_)
| AnyNode::ExprStringLiteral(_) | AnyNode::ExprStringLiteral(_)
| AnyNode::ExprBytesLiteral(_) | AnyNode::ExprBytesLiteral(_)
@ -281,6 +283,7 @@ impl AnyNode {
| AnyNode::ExceptHandlerExceptHandler(_) | AnyNode::ExceptHandlerExceptHandler(_)
| AnyNode::FStringExpressionElement(_) | AnyNode::FStringExpressionElement(_)
| AnyNode::FStringLiteralElement(_) | AnyNode::FStringLiteralElement(_)
| AnyNode::FStringFormatSpec(_)
| AnyNode::PatternMatchValue(_) | AnyNode::PatternMatchValue(_)
| AnyNode::PatternMatchSingleton(_) | AnyNode::PatternMatchSingleton(_)
| AnyNode::PatternMatchSequence(_) | AnyNode::PatternMatchSequence(_)
@ -361,6 +364,7 @@ impl AnyNode {
| AnyNode::ExprCall(_) | AnyNode::ExprCall(_)
| AnyNode::FStringExpressionElement(_) | AnyNode::FStringExpressionElement(_)
| AnyNode::FStringLiteralElement(_) | AnyNode::FStringLiteralElement(_)
| AnyNode::FStringFormatSpec(_)
| AnyNode::ExprFString(_) | AnyNode::ExprFString(_)
| AnyNode::ExprStringLiteral(_) | AnyNode::ExprStringLiteral(_)
| AnyNode::ExprBytesLiteral(_) | AnyNode::ExprBytesLiteral(_)
@ -465,6 +469,7 @@ impl AnyNode {
| AnyNode::ExprCall(_) | AnyNode::ExprCall(_)
| AnyNode::FStringExpressionElement(_) | AnyNode::FStringExpressionElement(_)
| AnyNode::FStringLiteralElement(_) | AnyNode::FStringLiteralElement(_)
| AnyNode::FStringFormatSpec(_)
| AnyNode::ExprFString(_) | AnyNode::ExprFString(_)
| AnyNode::ExprStringLiteral(_) | AnyNode::ExprStringLiteral(_)
| AnyNode::ExprBytesLiteral(_) | AnyNode::ExprBytesLiteral(_)
@ -554,6 +559,7 @@ impl AnyNode {
| AnyNode::ExprCall(_) | AnyNode::ExprCall(_)
| AnyNode::FStringExpressionElement(_) | AnyNode::FStringExpressionElement(_)
| AnyNode::FStringLiteralElement(_) | AnyNode::FStringLiteralElement(_)
| AnyNode::FStringFormatSpec(_)
| AnyNode::ExprFString(_) | AnyNode::ExprFString(_)
| AnyNode::ExprStringLiteral(_) | AnyNode::ExprStringLiteral(_)
| AnyNode::ExprBytesLiteral(_) | AnyNode::ExprBytesLiteral(_)
@ -668,6 +674,7 @@ impl AnyNode {
Self::ExprCall(node) => AnyNodeRef::ExprCall(node), Self::ExprCall(node) => AnyNodeRef::ExprCall(node),
Self::FStringExpressionElement(node) => AnyNodeRef::FStringExpressionElement(node), Self::FStringExpressionElement(node) => AnyNodeRef::FStringExpressionElement(node),
Self::FStringLiteralElement(node) => AnyNodeRef::FStringLiteralElement(node), Self::FStringLiteralElement(node) => AnyNodeRef::FStringLiteralElement(node),
Self::FStringFormatSpec(node) => AnyNodeRef::FStringFormatSpec(node),
Self::ExprFString(node) => AnyNodeRef::ExprFString(node), Self::ExprFString(node) => AnyNodeRef::ExprFString(node),
Self::ExprStringLiteral(node) => AnyNodeRef::ExprStringLiteral(node), Self::ExprStringLiteral(node) => AnyNodeRef::ExprStringLiteral(node),
Self::ExprBytesLiteral(node) => AnyNodeRef::ExprBytesLiteral(node), Self::ExprBytesLiteral(node) => AnyNodeRef::ExprBytesLiteral(node),
@ -2628,6 +2635,43 @@ impl AstNode for ast::ExprCall {
visitor.visit_arguments(arguments); 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 { impl AstNode for ast::FStringExpressionElement {
fn cast(kind: AnyNode) -> Option<Self> fn cast(kind: AnyNode) -> Option<Self>
where 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 { impl From<ast::ExprFString> for AnyNode {
fn from(node: ast::ExprFString) -> Self { fn from(node: ast::ExprFString) -> Self {
AnyNode::ExprFString(node) AnyNode::ExprFString(node)
@ -5150,6 +5200,7 @@ impl Ranged for AnyNode {
AnyNode::ExprCall(node) => node.range(), AnyNode::ExprCall(node) => node.range(),
AnyNode::FStringExpressionElement(node) => node.range(), AnyNode::FStringExpressionElement(node) => node.range(),
AnyNode::FStringLiteralElement(node) => node.range(), AnyNode::FStringLiteralElement(node) => node.range(),
AnyNode::FStringFormatSpec(node) => node.range(),
AnyNode::ExprFString(node) => node.range(), AnyNode::ExprFString(node) => node.range(),
AnyNode::ExprStringLiteral(node) => node.range(), AnyNode::ExprStringLiteral(node) => node.range(),
AnyNode::ExprBytesLiteral(node) => node.range(), AnyNode::ExprBytesLiteral(node) => node.range(),
@ -5246,6 +5297,7 @@ pub enum AnyNodeRef<'a> {
ExprCall(&'a ast::ExprCall), ExprCall(&'a ast::ExprCall),
FStringExpressionElement(&'a ast::FStringExpressionElement), FStringExpressionElement(&'a ast::FStringExpressionElement),
FStringLiteralElement(&'a ast::FStringLiteralElement), FStringLiteralElement(&'a ast::FStringLiteralElement),
FStringFormatSpec(&'a ast::FStringFormatSpec),
ExprFString(&'a ast::ExprFString), ExprFString(&'a ast::ExprFString),
ExprStringLiteral(&'a ast::ExprStringLiteral), ExprStringLiteral(&'a ast::ExprStringLiteral),
ExprBytesLiteral(&'a ast::ExprBytesLiteral), ExprBytesLiteral(&'a ast::ExprBytesLiteral),
@ -5341,6 +5393,7 @@ impl<'a> AnyNodeRef<'a> {
AnyNodeRef::ExprCall(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprCall(node) => NonNull::from(*node).cast(),
AnyNodeRef::FStringExpressionElement(node) => NonNull::from(*node).cast(), AnyNodeRef::FStringExpressionElement(node) => NonNull::from(*node).cast(),
AnyNodeRef::FStringLiteralElement(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::ExprFString(node) => NonNull::from(*node).cast(),
AnyNodeRef::ExprStringLiteral(node) => NonNull::from(*node).cast(), AnyNodeRef::ExprStringLiteral(node) => NonNull::from(*node).cast(),
AnyNodeRef::ExprBytesLiteral(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::ExprCall(_) => NodeKind::ExprCall,
AnyNodeRef::FStringExpressionElement(_) => NodeKind::FStringExpressionElement, AnyNodeRef::FStringExpressionElement(_) => NodeKind::FStringExpressionElement,
AnyNodeRef::FStringLiteralElement(_) => NodeKind::FStringLiteralElement, AnyNodeRef::FStringLiteralElement(_) => NodeKind::FStringLiteralElement,
AnyNodeRef::FStringFormatSpec(_) => NodeKind::FStringFormatSpec,
AnyNodeRef::ExprFString(_) => NodeKind::ExprFString, AnyNodeRef::ExprFString(_) => NodeKind::ExprFString,
AnyNodeRef::ExprStringLiteral(_) => NodeKind::ExprStringLiteral, AnyNodeRef::ExprStringLiteral(_) => NodeKind::ExprStringLiteral,
AnyNodeRef::ExprBytesLiteral(_) => NodeKind::ExprBytesLiteral, AnyNodeRef::ExprBytesLiteral(_) => NodeKind::ExprBytesLiteral,
@ -5538,6 +5592,7 @@ impl<'a> AnyNodeRef<'a> {
| AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprCall(_)
| AnyNodeRef::FStringExpressionElement(_) | AnyNodeRef::FStringExpressionElement(_)
| AnyNodeRef::FStringLiteralElement(_) | AnyNodeRef::FStringLiteralElement(_)
| AnyNodeRef::FStringFormatSpec(_)
| AnyNodeRef::ExprFString(_) | AnyNodeRef::ExprFString(_)
| AnyNodeRef::ExprStringLiteral(_) | AnyNodeRef::ExprStringLiteral(_)
| AnyNodeRef::ExprBytesLiteral(_) | AnyNodeRef::ExprBytesLiteral(_)
@ -5650,6 +5705,7 @@ impl<'a> AnyNodeRef<'a> {
| AnyNodeRef::ExceptHandlerExceptHandler(_) | AnyNodeRef::ExceptHandlerExceptHandler(_)
| AnyNodeRef::FStringExpressionElement(_) | AnyNodeRef::FStringExpressionElement(_)
| AnyNodeRef::FStringLiteralElement(_) | AnyNodeRef::FStringLiteralElement(_)
| AnyNodeRef::FStringFormatSpec(_)
| AnyNodeRef::PatternMatchValue(_) | AnyNodeRef::PatternMatchValue(_)
| AnyNodeRef::PatternMatchSingleton(_) | AnyNodeRef::PatternMatchSingleton(_)
| AnyNodeRef::PatternMatchSequence(_) | AnyNodeRef::PatternMatchSequence(_)
@ -5729,6 +5785,7 @@ impl<'a> AnyNodeRef<'a> {
| AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprCall(_)
| AnyNodeRef::FStringExpressionElement(_) | AnyNodeRef::FStringExpressionElement(_)
| AnyNodeRef::FStringLiteralElement(_) | AnyNodeRef::FStringLiteralElement(_)
| AnyNodeRef::FStringFormatSpec(_)
| AnyNodeRef::ExprFString(_) | AnyNodeRef::ExprFString(_)
| AnyNodeRef::ExprStringLiteral(_) | AnyNodeRef::ExprStringLiteral(_)
| AnyNodeRef::ExprBytesLiteral(_) | AnyNodeRef::ExprBytesLiteral(_)
@ -5833,6 +5890,7 @@ impl<'a> AnyNodeRef<'a> {
| AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprCall(_)
| AnyNodeRef::FStringExpressionElement(_) | AnyNodeRef::FStringExpressionElement(_)
| AnyNodeRef::FStringLiteralElement(_) | AnyNodeRef::FStringLiteralElement(_)
| AnyNodeRef::FStringFormatSpec(_)
| AnyNodeRef::ExprFString(_) | AnyNodeRef::ExprFString(_)
| AnyNodeRef::ExprStringLiteral(_) | AnyNodeRef::ExprStringLiteral(_)
| AnyNodeRef::ExprBytesLiteral(_) | AnyNodeRef::ExprBytesLiteral(_)
@ -5922,6 +5980,7 @@ impl<'a> AnyNodeRef<'a> {
| AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprCall(_)
| AnyNodeRef::FStringExpressionElement(_) | AnyNodeRef::FStringExpressionElement(_)
| AnyNodeRef::FStringLiteralElement(_) | AnyNodeRef::FStringLiteralElement(_)
| AnyNodeRef::FStringFormatSpec(_)
| AnyNodeRef::ExprFString(_) | AnyNodeRef::ExprFString(_)
| AnyNodeRef::ExprStringLiteral(_) | AnyNodeRef::ExprStringLiteral(_)
| AnyNodeRef::ExprBytesLiteral(_) | AnyNodeRef::ExprBytesLiteral(_)
@ -6030,6 +6089,7 @@ impl<'a> AnyNodeRef<'a> {
AnyNodeRef::ExprCall(node) => node.visit_preorder(visitor), AnyNodeRef::ExprCall(node) => node.visit_preorder(visitor),
AnyNodeRef::FStringExpressionElement(node) => node.visit_preorder(visitor), AnyNodeRef::FStringExpressionElement(node) => node.visit_preorder(visitor),
AnyNodeRef::FStringLiteralElement(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::ExprFString(node) => node.visit_preorder(visitor),
AnyNodeRef::ExprStringLiteral(node) => node.visit_preorder(visitor), AnyNodeRef::ExprStringLiteral(node) => node.visit_preorder(visitor),
AnyNodeRef::ExprBytesLiteral(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> { impl<'a> From<&'a ast::ExprFString> for AnyNodeRef<'a> {
fn from(node: &'a ast::ExprFString) -> Self { fn from(node: &'a ast::ExprFString) -> Self {
AnyNodeRef::ExprFString(node) AnyNodeRef::ExprFString(node)
@ -6842,6 +6908,7 @@ impl Ranged for AnyNodeRef<'_> {
AnyNodeRef::ExprCall(node) => node.range(), AnyNodeRef::ExprCall(node) => node.range(),
AnyNodeRef::FStringExpressionElement(node) => node.range(), AnyNodeRef::FStringExpressionElement(node) => node.range(),
AnyNodeRef::FStringLiteralElement(node) => node.range(), AnyNodeRef::FStringLiteralElement(node) => node.range(),
AnyNodeRef::FStringFormatSpec(node) => node.range(),
AnyNodeRef::ExprFString(node) => node.range(), AnyNodeRef::ExprFString(node) => node.range(),
AnyNodeRef::ExprStringLiteral(node) => node.range(), AnyNodeRef::ExprStringLiteral(node) => node.range(),
AnyNodeRef::ExprBytesLiteral(node) => node.range(), AnyNodeRef::ExprBytesLiteral(node) => node.range(),
@ -6940,6 +7007,7 @@ pub enum NodeKind {
ExprCall, ExprCall,
FStringExpressionElement, FStringExpressionElement,
FStringLiteralElement, FStringLiteralElement,
FStringFormatSpec,
ExprFString, ExprFString,
ExprStringLiteral, ExprStringLiteral,
ExprBytesLiteral, ExprBytesLiteral,

View file

@ -666,6 +666,7 @@ impl Format<PyFormatContext<'_>> for FormatEnclosingNode<'_> {
| AnyNodeRef::ExprCall(_) | AnyNodeRef::ExprCall(_)
| AnyNodeRef::FStringExpressionElement(_) | AnyNodeRef::FStringExpressionElement(_)
| AnyNodeRef::FStringLiteralElement(_) | AnyNodeRef::FStringLiteralElement(_)
| AnyNodeRef::FStringFormatSpec(_)
| AnyNodeRef::ExprFString(_) | AnyNodeRef::ExprFString(_)
| AnyNodeRef::ExprStringLiteral(_) | AnyNodeRef::ExprStringLiteral(_)
| AnyNodeRef::ExprBytesLiteral(_) | AnyNodeRef::ExprBytesLiteral(_)