22from . import ast
33
44
5- def indent (content ):
5+ def indent_except_first_line (content ):
66 return " " .join (
77 content .splitlines (True )
88 )
@@ -18,6 +18,20 @@ def is_select_expr(elem):
1818 isinstance (elem .expression , ast .SelectExpression ))
1919
2020
21+ def should_start_on_new_line (pattern ):
22+ is_multiline = any (is_select_expr (elem ) for elem in pattern .elements ) \
23+ or any (includes_new_line (elem ) for elem in pattern .elements )
24+
25+ if is_multiline :
26+ first_element = pattern .elements [0 ]
27+ if isinstance (first_element , ast .TextElement ):
28+ first_char = first_element .value [0 ]
29+ if first_char in ("[" , "." , "*" ):
30+ return False
31+ return True
32+ return False
33+
34+
2135class FluentSerializer (object ):
2236 """FluentSerializer converts :class:`.ast.SyntaxNode` objects to unicode strings.
2337
@@ -119,19 +133,16 @@ def serialize_term(term):
119133def serialize_attribute (attribute ):
120134 return "\n .{} ={}" .format (
121135 attribute .id .name ,
122- indent (serialize_pattern (attribute .value ))
136+ indent_except_first_line (serialize_pattern (attribute .value ))
123137 )
124138
125139
126140def serialize_pattern (pattern ):
127- content = "" .join ([
128- serialize_element (elem )
129- for elem in pattern .elements ])
130- start_on_new_line = any (
131- includes_new_line (elem ) or is_select_expr (elem )
132- for elem in pattern .elements )
133- if start_on_new_line :
134- return '\n {}' .format (indent (content ))
141+ content = "" .join (serialize_element (elem ) for elem in pattern .elements )
142+ content = indent_except_first_line (content )
143+
144+ if should_start_on_new_line (pattern ):
145+ return '\n {}' .format (content )
135146
136147 return ' {}' .format (content )
137148
@@ -193,7 +204,7 @@ def serialize_variant(variant):
193204 return "\n {}[{}]{}" .format (
194205 " *" if variant .default else " " ,
195206 serialize_variant_key (variant .key ),
196- indent (serialize_pattern (variant .value ))
207+ indent_except_first_line (serialize_pattern (variant .value ))
197208 )
198209
199210
0 commit comments