@@ -13,7 +13,7 @@ use crate::{
1313 trivia:: { FormatLeadingComments , format_trailing_comments} ,
1414 } ,
1515 options:: FormatTrailingCommas ,
16- utils:: assignment_like:: AssignmentLikeLayout ,
16+ utils:: { assignment_like:: AssignmentLikeLayout , expression :: ExpressionLeftSide } ,
1717 write,
1818 write:: function:: FormatContentWithCacheMode ,
1919} ;
@@ -677,137 +677,6 @@ impl<'a> Format<'a> for ArrowChain<'a, '_> {
677677 }
678678}
679679
680- #[ derive( Debug , Clone , Copy ) ]
681- pub enum ExpressionLeftSide < ' a , ' b > {
682- Expression ( & ' b AstNode < ' a , Expression < ' a > > ) ,
683- AssignmentTarget ( & ' b AstNode < ' a , AssignmentTarget < ' a > > ) ,
684- SimpleAssignmentTarget ( & ' b AstNode < ' a , SimpleAssignmentTarget < ' a > > ) ,
685- }
686-
687- impl < ' a , ' b > From < & ' b AstNode < ' a , Expression < ' a > > > for ExpressionLeftSide < ' a , ' b > {
688- fn from ( value : & ' b AstNode < ' a , Expression < ' a > > ) -> Self {
689- Self :: Expression ( value)
690- }
691- }
692-
693- impl < ' a , ' b > From < & ' b AstNode < ' a , AssignmentTarget < ' a > > > for ExpressionLeftSide < ' a , ' b > {
694- fn from ( value : & ' b AstNode < ' a , AssignmentTarget < ' a > > ) -> Self {
695- Self :: AssignmentTarget ( value)
696- }
697- }
698-
699- impl < ' a , ' b > From < & ' b AstNode < ' a , SimpleAssignmentTarget < ' a > > > for ExpressionLeftSide < ' a , ' b > {
700- fn from ( value : & ' b AstNode < ' a , SimpleAssignmentTarget < ' a > > ) -> Self {
701- Self :: SimpleAssignmentTarget ( value)
702- }
703- }
704-
705- impl < ' a , ' b > ExpressionLeftSide < ' a , ' b > {
706- pub fn leftmost (
707- expression : & ' b AstNode < ' a , Expression < ' a > > ,
708- ) -> & ' b AstNode < ' a , Expression < ' a > > {
709- let mut current: Self = expression. into ( ) ;
710- loop {
711- match current. left_expression ( ) {
712- None => {
713- break if let ExpressionLeftSide :: Expression ( expression) = current {
714- expression
715- } else {
716- unreachable ! ( )
717- } ;
718- }
719- Some ( left) => {
720- current = left;
721- }
722- }
723- }
724- }
725-
726- /// Returns the left side of an expression (an expression where the first child is a `Node` or [None]
727- /// if the expression has no left side.
728- pub fn left_expression ( & self ) -> Option < Self > {
729- match self {
730- Self :: Expression ( expression) => match expression. as_ast_nodes ( ) {
731- AstNodes :: SequenceExpression ( expr) => expr. expressions ( ) . first ( ) . map ( Into :: into) ,
732- AstNodes :: StaticMemberExpression ( expr) => Some ( expr. object ( ) . into ( ) ) ,
733- AstNodes :: ComputedMemberExpression ( expr) => Some ( expr. object ( ) . into ( ) ) ,
734- AstNodes :: PrivateFieldExpression ( expr) => Some ( expr. object ( ) . into ( ) ) ,
735- AstNodes :: TaggedTemplateExpression ( expr) => Some ( expr. tag ( ) . into ( ) ) ,
736- AstNodes :: NewExpression ( expr) => Some ( expr. callee ( ) . into ( ) ) ,
737- AstNodes :: CallExpression ( expr) => Some ( expr. callee ( ) . into ( ) ) ,
738- AstNodes :: ConditionalExpression ( expr) => Some ( expr. test ( ) . into ( ) ) ,
739- AstNodes :: TSAsExpression ( expr) => Some ( expr. expression ( ) . into ( ) ) ,
740- AstNodes :: TSSatisfiesExpression ( expr) => Some ( expr. expression ( ) . into ( ) ) ,
741- AstNodes :: TSNonNullExpression ( expr) => Some ( expr. expression ( ) . into ( ) ) ,
742- AstNodes :: AssignmentExpression ( expr) => Some ( Self :: AssignmentTarget ( expr. left ( ) ) ) ,
743- AstNodes :: UpdateExpression ( expr) => {
744- if expr. prefix {
745- None
746- } else {
747- Some ( Self :: SimpleAssignmentTarget ( expr. argument ( ) ) )
748- }
749- }
750- AstNodes :: BinaryExpression ( binary) => Some ( binary. left ( ) . into ( ) ) ,
751- AstNodes :: LogicalExpression ( logical) => Some ( logical. left ( ) . into ( ) ) ,
752- AstNodes :: ChainExpression ( chain) => match & chain. expression ( ) . as_ast_nodes ( ) {
753- AstNodes :: CallExpression ( expr) => Some ( expr. callee ( ) . into ( ) ) ,
754- AstNodes :: TSNonNullExpression ( expr) => Some ( expr. expression ( ) . into ( ) ) ,
755- AstNodes :: ComputedMemberExpression ( expr) => Some ( expr. object ( ) . into ( ) ) ,
756- AstNodes :: StaticMemberExpression ( expr) => Some ( expr. object ( ) . into ( ) ) ,
757- AstNodes :: PrivateFieldExpression ( expr) => Some ( expr. object ( ) . into ( ) ) ,
758- _ => {
759- unreachable ! ( )
760- }
761- } ,
762- _ => None ,
763- } ,
764- Self :: AssignmentTarget ( target) => {
765- Self :: get_left_side_of_assignment ( target. as_ast_nodes ( ) )
766- }
767- Self :: SimpleAssignmentTarget ( target) => {
768- Self :: get_left_side_of_assignment ( target. as_ast_nodes ( ) )
769- }
770- }
771- }
772-
773- pub fn iter ( & self ) -> impl Iterator < Item = ExpressionLeftSide < ' a , ' b > > {
774- iter:: successors ( Some ( * self ) , |f| match f {
775- ExpressionLeftSide :: Expression ( expression) => {
776- Self :: Expression ( expression) . left_expression ( )
777- }
778- _ => None ,
779- } )
780- }
781-
782- pub fn iter_expression ( & self ) -> impl Iterator < Item = & AstNode < ' _ , Expression < ' _ > > > {
783- self . iter ( ) . filter_map ( |left| match left {
784- ExpressionLeftSide :: Expression ( expression) => Some ( expression) ,
785- _ => None ,
786- } )
787- }
788-
789- pub fn span ( & self ) -> Span {
790- match self {
791- ExpressionLeftSide :: Expression ( expression) => expression. span ( ) ,
792- ExpressionLeftSide :: AssignmentTarget ( target) => target. span ( ) ,
793- ExpressionLeftSide :: SimpleAssignmentTarget ( target) => target. span ( ) ,
794- }
795- }
796-
797- fn get_left_side_of_assignment ( node : & ' b AstNodes < ' a > ) -> Option < ExpressionLeftSide < ' a , ' b > > {
798- match node {
799- AstNodes :: TSAsExpression ( expr) => Some ( expr. expression ( ) . into ( ) ) ,
800- AstNodes :: TSSatisfiesExpression ( expr) => Some ( expr. expression ( ) . into ( ) ) ,
801- AstNodes :: TSNonNullExpression ( expr) => Some ( expr. expression ( ) . into ( ) ) ,
802- AstNodes :: TSTypeAssertion ( expr) => Some ( expr. expression ( ) . into ( ) ) ,
803- AstNodes :: ComputedMemberExpression ( expr) => Some ( expr. object ( ) . into ( ) ) ,
804- AstNodes :: StaticMemberExpression ( expr) => Some ( expr. object ( ) . into ( ) ) ,
805- AstNodes :: PrivateFieldExpression ( expr) => Some ( expr. object ( ) . into ( ) ) ,
806- _ => None ,
807- }
808- }
809- }
810-
811680fn should_add_parens ( body : & AstNode < ' _ , FunctionBody < ' _ > > ) -> bool {
812681 let AstNodes :: ExpressionStatement ( stmt) = body. statements ( ) . first ( ) . unwrap ( ) . as_ast_nodes ( )
813682 else {
0 commit comments