@@ -1491,12 +1491,14 @@ pub enum AccessExpr {
14911491 Subscript ( Subscript ) ,
14921492}
14931493
1494+ const fn is_number_expr ( expr : & Expr ) -> bool {
1495+ matches ! ( expr, Expr :: Value ( v) if matches!( v. value, Value :: Number ( _, _) ) )
1496+ }
1497+
14941498impl fmt:: Display for AccessExpr {
14951499 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
14961500 match self {
1497- AccessExpr :: Dot ( Expr :: Value ( value) ) if matches ! ( value. value, Value :: Number ( _, _) ) => {
1498- write ! ( f, " . {value}" )
1499- }
1501+ AccessExpr :: Dot ( expr) if is_number_expr ( expr) => write ! ( f, " . {expr}" ) ,
15001502 AccessExpr :: Dot ( expr) => write ! ( f, ".{expr}" ) ,
15011503 AccessExpr :: Subscript ( subscript) => write ! ( f, "[{subscript}]" ) ,
15021504 }
@@ -1758,8 +1760,13 @@ impl fmt::Display for Expr {
17581760 Expr :: CompoundIdentifier ( s) => write ! ( f, "{}" , display_separated( s, "." ) ) ,
17591761 Expr :: CompoundFieldAccess { root, access_chain } => {
17601762 write ! ( f, "{root}" ) ?;
1763+ let mut prev_is_number = is_number_expr ( root) ;
17611764 for field in access_chain {
1762- write ! ( f, "{field}" ) ?;
1765+ match field {
1766+ AccessExpr :: Dot ( expr) if prev_is_number => write ! ( f, " . {expr}" ) ?,
1767+ _ => write ! ( f, "{field}" ) ?,
1768+ }
1769+ prev_is_number = matches ! ( field, AccessExpr :: Dot ( expr) if is_number_expr( expr) ) ;
17631770 }
17641771 Ok ( ( ) )
17651772 }
@@ -2029,7 +2036,11 @@ impl fmt::Display for Expr {
20292036 format,
20302037 } => match kind {
20312038 CastKind :: Cast => {
2032- write ! ( f, "CAST({expr} AS {data_type}" ) ?;
2039+ if matches ! ( data_type, DataType :: Unspecified ) {
2040+ write ! ( f, "CAST({expr} AS" ) ?;
2041+ } else {
2042+ write ! ( f, "CAST({expr} AS {data_type}" ) ?;
2043+ }
20332044 if let Some ( format) = format {
20342045 write ! ( f, " FORMAT {format}" ) ?;
20352046 }
0 commit comments