@@ -250,6 +250,22 @@ def is_generator(self) -> bool:
250250 """Whether this expression is a generator."""
251251 return isinstance (self , ExprSubscript ) and self .canonical_name == "Generator"
252252
253+ @staticmethod
254+ def _to_binop (elements : Sequence [Expr ], op : str ) -> ExprBinOp :
255+ if len (elements ) == 2 : # noqa: PLR2004
256+ left , right = elements
257+ if isinstance (left , Expr ):
258+ left = left .modernize ()
259+ if isinstance (right , Expr ):
260+ right = right .modernize ()
261+ return ExprBinOp (left = left , operator = op , right = right )
262+
263+ left = ExprSubscript ._to_binop (elements [:- 1 ], op = op )
264+ right = elements [- 1 ]
265+ if isinstance (right , Expr ):
266+ right = right .modernize ()
267+ return ExprBinOp (left = left , operator = op , right = right )
268+
253269
254270@dataclass (eq = True , slots = True )
255271class ExprAttribute (Expr ):
@@ -873,22 +889,6 @@ def iterate(self, *, flat: bool = True) -> Iterator[str | Expr]:
873889 yield from _yield (self .slice , flat = flat , outer_precedence = _OperatorPrecedence .NONE )
874890 yield "]"
875891
876- @staticmethod
877- def _to_binop (elements : Sequence [Expr ], op : str ) -> ExprBinOp :
878- if len (elements ) == 2 : # noqa: PLR2004
879- left , right = elements
880- if isinstance (left , Expr ):
881- left = left .modernize ()
882- if isinstance (right , Expr ):
883- right = right .modernize ()
884- return ExprBinOp (left = left , operator = op , right = right )
885-
886- left = ExprSubscript ._to_binop (elements [:- 1 ], op = op )
887- right = elements [- 1 ]
888- if isinstance (right , Expr ):
889- right = right .modernize ()
890- return ExprBinOp (left = left , operator = op , right = right )
891-
892892 def modernize (self ) -> ExprBinOp | ExprSubscript :
893893 if self .canonical_path == "typing.Union" :
894894 return self ._to_binop (self .slice .elements , op = "|" ) # type: ignore[union-attr]
0 commit comments