@@ -250,7 +250,7 @@ fn emit_aexpr_nullif(e: &mut EventEmitter, n: &AExpr) {
250250fn emit_aexpr_in ( e : & mut EventEmitter , n : & AExpr ) {
251251 if let Some ( ref lexpr) = n. lexpr {
252252 super :: emit_node ( lexpr, e) ;
253- e. space ( ) ;
253+ e. line ( LineType :: SoftOrSpace ) ;
254254 }
255255
256256 let is_not = extract_simple_operator ( & n. name )
@@ -272,7 +272,11 @@ fn emit_aexpr_in(e: &mut EventEmitter, n: &AExpr) {
272272 Some ( NodeEnum :: SubLink ( _) ) => super :: emit_node ( rexpr, e) ,
273273 _ => {
274274 e. token ( TokenKind :: L_PAREN ) ;
275+ e. indent_start ( ) ;
276+ e. line ( LineType :: Soft ) ;
275277 super :: emit_node ( rexpr, e) ;
278+ e. indent_end ( ) ;
279+ e. line ( LineType :: Soft ) ;
276280 e. token ( TokenKind :: R_PAREN ) ;
277281 }
278282 }
@@ -378,7 +382,7 @@ fn emit_aexpr_similar(e: &mut EventEmitter, n: &AExpr) {
378382fn emit_aexpr_between ( e : & mut EventEmitter , n : & AExpr ) {
379383 if let Some ( ref lexpr) = n. lexpr {
380384 super :: emit_node ( lexpr, e) ;
381- e. space ( ) ;
385+ e. line ( LineType :: SoftOrSpace ) ;
382386 }
383387
384388 e. token ( TokenKind :: BETWEEN_KW ) ;
@@ -391,7 +395,7 @@ fn emit_aexpr_between(e: &mut EventEmitter, n: &AExpr) {
391395 super :: emit_node ( & list. items [ 0 ] , e) ;
392396 }
393397 if list. items . len ( ) >= 2 {
394- e. space ( ) ;
398+ e. line ( LineType :: SoftOrSpace ) ;
395399 e. token ( TokenKind :: AND_KW ) ;
396400 e. space ( ) ;
397401 super :: emit_node ( & list. items [ 1 ] , e) ;
@@ -406,7 +410,7 @@ fn emit_aexpr_between(e: &mut EventEmitter, n: &AExpr) {
406410fn emit_aexpr_not_between ( e : & mut EventEmitter , n : & AExpr ) {
407411 if let Some ( ref lexpr) = n. lexpr {
408412 super :: emit_node ( lexpr, e) ;
409- e. space ( ) ;
413+ e. line ( LineType :: SoftOrSpace ) ;
410414 }
411415
412416 e. token ( TokenKind :: NOT_KW ) ;
@@ -421,7 +425,7 @@ fn emit_aexpr_not_between(e: &mut EventEmitter, n: &AExpr) {
421425 super :: emit_node ( & list. items [ 0 ] , e) ;
422426 }
423427 if list. items . len ( ) >= 2 {
424- e. space ( ) ;
428+ e. line ( LineType :: SoftOrSpace ) ;
425429 e. token ( TokenKind :: AND_KW ) ;
426430 e. space ( ) ;
427431 super :: emit_node ( & list. items [ 1 ] , e) ;
@@ -436,7 +440,7 @@ fn emit_aexpr_not_between(e: &mut EventEmitter, n: &AExpr) {
436440fn emit_aexpr_between_sym ( e : & mut EventEmitter , n : & AExpr ) {
437441 if let Some ( ref lexpr) = n. lexpr {
438442 super :: emit_node ( lexpr, e) ;
439- e. space ( ) ;
443+ e. line ( LineType :: SoftOrSpace ) ;
440444 }
441445
442446 e. token ( TokenKind :: BETWEEN_KW ) ;
@@ -451,7 +455,7 @@ fn emit_aexpr_between_sym(e: &mut EventEmitter, n: &AExpr) {
451455 super :: emit_node ( & list. items [ 0 ] , e) ;
452456 }
453457 if list. items . len ( ) >= 2 {
454- e. space ( ) ;
458+ e. line ( LineType :: SoftOrSpace ) ;
455459 e. token ( TokenKind :: AND_KW ) ;
456460 e. space ( ) ;
457461 super :: emit_node ( & list. items [ 1 ] , e) ;
@@ -466,7 +470,7 @@ fn emit_aexpr_between_sym(e: &mut EventEmitter, n: &AExpr) {
466470fn emit_aexpr_not_between_sym ( e : & mut EventEmitter , n : & AExpr ) {
467471 if let Some ( ref lexpr) = n. lexpr {
468472 super :: emit_node ( lexpr, e) ;
469- e. space ( ) ;
473+ e. line ( LineType :: SoftOrSpace ) ;
470474 }
471475
472476 e. token ( TokenKind :: NOT_KW ) ;
@@ -483,7 +487,7 @@ fn emit_aexpr_not_between_sym(e: &mut EventEmitter, n: &AExpr) {
483487 super :: emit_node ( & list. items [ 0 ] , e) ;
484488 }
485489 if list. items . len ( ) >= 2 {
486- e. space ( ) ;
490+ e. line ( LineType :: SoftOrSpace ) ;
487491 e. token ( TokenKind :: AND_KW ) ;
488492 e. space ( ) ;
489493 super :: emit_node ( & list. items [ 1 ] , e) ;
@@ -544,9 +548,20 @@ fn operator_needs_space(op: &str) -> bool {
544548
545549fn operator_prefers_line_break ( name : & [ Node ] ) -> bool {
546550 match extract_simple_operator ( name) {
551+ // Comparison operators
547552 Some ( "=" ) | Some ( "<>" ) | Some ( "!=" ) | Some ( "<" ) | Some ( ">" ) | Some ( "<=" ) | Some ( ">=" )
548- | Some ( "||" ) | Some ( "AND" ) | Some ( "and" ) | Some ( "OR" ) | Some ( "or" ) => true ,
549- _ => false ,
553+ // Logical operators
554+ | Some ( "||" ) | Some ( "AND" ) | Some ( "and" ) | Some ( "OR" ) | Some ( "or" )
555+ // Arithmetic operators - allow breaking around these for narrow widths
556+ | Some ( "+" ) | Some ( "-" ) | Some ( "*" ) | Some ( "/" ) | Some ( "%" ) | Some ( "^" )
557+ // Bitwise operators
558+ | Some ( "&" ) | Some ( "|" ) | Some ( "#" ) | Some ( "~" ) | Some ( "<<" ) | Some ( ">>" )
559+ // Other common operators
560+ | Some ( "@" ) | Some ( "@@" ) | Some ( "->" ) | Some ( "->>" ) | Some ( "#>" ) | Some ( "#>>" )
561+ | Some ( "?" ) | Some ( "?|" ) | Some ( "?&" ) | Some ( "@>" ) | Some ( "<@" ) | Some ( "&&" ) => true ,
562+ // For any other operator, still allow line breaks - they're likely user-defined
563+ // and we want consistent formatting behavior
564+ _ => true ,
550565 }
551566}
552567
0 commit comments