1
1
from typing import Dict , Callable , List , Optional
2
+ from importlib import import_module
2
3
3
4
from lark import Tree , Token
4
5
from lark .tree import Meta
@@ -149,6 +150,8 @@ def _format_foldable_to_multiple_lines(
149
150
"dict" : _format_dict_to_multiple_lines ,
150
151
"c_dict_element" : _format_kv_pair_to_multiple_lines ,
151
152
"eq_dict_element" : _format_kv_pair_to_multiple_lines ,
153
+ "lambda" : _format_lambda_to_multiple_lines ,
154
+ "lambda_header" : _format_lambda_header_to_multiple_lines ,
152
155
# fake expressions:
153
156
"func_args" : _format_args_to_multiple_lines ,
154
157
"func_arg_regular" : _format_func_arg_to_multiple_lines ,
@@ -165,33 +168,6 @@ def _format_foldable_to_multiple_lines(
165
168
),
166
169
"annotation" : _format_annotation_to_multiple_lines ,
167
170
"annotation_args" : _format_args_to_multiple_lines ,
168
- "inline_lambda" : _format_inline_lambda_to_multiple_lines ,
169
- "lambda_header" : _format_lambda_header_to_multiple_lines ,
170
- "inline_lambda_statements" : _format_inline_lambda_statements_to_multiple_lines ,
171
- "pass_stmt" : _format_concrete_expression_to_single_line ,
172
- "return_stmt" : lambda e , ec , c : _append_to_expression_context_and_pass_standalone (
173
- "return " , e .children [0 ], ec , c
174
- ),
175
- "expr_stmt" : lambda e , ec , c : _format_standalone_expression (
176
- e .children [0 ].children [0 ], ec , c
177
- ),
178
- "func_var_stmt" : lambda e , ec , c : _format_standalone_expression (
179
- e .children [0 ], ec , c
180
- ),
181
- "func_var_empty" : _format_concrete_expression_to_single_line ,
182
- "func_var_assigned" : lambda e , ec , c : _append_to_expression_context_and_pass_standalone (
183
- f"var { expression_to_str (e .children [0 ])} = " , e .children [1 ], ec , c
184
- ),
185
- "func_var_typed" : _format_concrete_expression_to_single_line ,
186
- "func_var_typed_assgnd" : lambda e , ec , c : _append_to_expression_context_and_pass_standalone (
187
- f"var { expression_to_str (e .children [0 ])} : { expression_to_str (e .children [1 ])} = " ,
188
- e .children [2 ],
189
- ec ,
190
- c ,
191
- ),
192
- "func_var_inf" : lambda e , ec , c : _append_to_expression_context_and_pass_standalone (
193
- f"var { expression_to_str (e .children [0 ])} := " , e .children [1 ], ec , c
194
- ),
195
171
"dot_chain" : _format_dot_chain_to_multiple_lines ,
196
172
"actual_getattr_call" : _format_call_expression_to_multiple_lines ,
197
173
"actual_subscr_expr" : _format_subscription_to_multiple_lines ,
@@ -645,100 +621,6 @@ def _format_annotation_to_multiple_lines(
645
621
)
646
622
647
623
648
- def _format_inline_lambda_to_multiple_lines (
649
- inline_lambda : Tree ,
650
- expression_context : ExpressionContext ,
651
- context : Context ,
652
- ) -> FormattedLines :
653
- expression_context_for_header = ExpressionContext (
654
- expression_context .prefix_string , expression_context .prefix_line , "" , - 1
655
- )
656
- header_lines = _format_concrete_expression (
657
- inline_lambda .children [0 ], expression_context_for_header , context
658
- )
659
- last_header_line_number , last_header_line = header_lines [- 1 ]
660
- assert last_header_line_number is not None
661
- expression_context_for_statements = ExpressionContext (
662
- f"{ last_header_line .strip ()} " ,
663
- last_header_line_number , # type:ignore
664
- expression_context .suffix_string ,
665
- expression_context .suffix_line ,
666
- )
667
- fake_meta = Meta ()
668
- fake_meta .line = get_line (inline_lambda .children [1 ])
669
- fake_meta .end_line = get_end_line (inline_lambda .children [- 1 ])
670
- fake_expression = Tree (
671
- "inline_lambda_statements" , inline_lambda .children [1 :], fake_meta
672
- )
673
- statement_lines = _format_concrete_expression (
674
- fake_expression , expression_context_for_statements , context
675
- )
676
- return header_lines [:- 1 ] + statement_lines
677
-
678
-
679
- def _format_lambda_header_to_multiple_lines (
680
- lambda_header : Tree ,
681
- expression_context : ExpressionContext ,
682
- context : Context ,
683
- ) -> FormattedLines :
684
- append_to_prefix = (
685
- f"func { lambda_header .children [0 ].value } "
686
- if isinstance (lambda_header .children [0 ], Token )
687
- else "func"
688
- )
689
- args_offset = 1 if isinstance (lambda_header .children [0 ], Token ) else 0
690
- theres_something_after_args = len (lambda_header .children ) > args_offset + 1
691
- optional_type_hint = (
692
- f" -> { lambda_header .children [args_offset + 1 ]} "
693
- if theres_something_after_args
694
- else ""
695
- )
696
- prepend_to_suffix = f"{ optional_type_hint } :"
697
- new_expression_context = ExpressionContext (
698
- f"{ expression_context .prefix_string } { append_to_prefix } " ,
699
- expression_context .prefix_line ,
700
- f"{ prepend_to_suffix } { expression_context .suffix_string } " ,
701
- expression_context .suffix_line ,
702
- )
703
- return _format_concrete_expression (
704
- lambda_header .children [args_offset ], new_expression_context , context
705
- )
706
-
707
-
708
- def _format_inline_lambda_statements_to_multiple_lines (
709
- inline_lambda_statements : Tree ,
710
- expression_context : ExpressionContext ,
711
- context : Context ,
712
- ) -> FormattedLines :
713
- lambda_statements = inline_lambda_statements .children
714
- if len (lambda_statements ) == 1 :
715
- return _format_concrete_expression (
716
- lambda_statements [0 ], expression_context , context
717
- )
718
- expression_context_for_first_statement = ExpressionContext (
719
- expression_context .prefix_string , expression_context .prefix_line , "" , - 1
720
- )
721
- first_statement_formatted_lines = _format_concrete_expression (
722
- lambda_statements [0 ], expression_context_for_first_statement , context
723
- )
724
- last_line_number , last_line = first_statement_formatted_lines [- 1 ]
725
- assert last_line_number is not None
726
- remaining_statements_prefix = last_line .strip ()
727
- remaining_statements_expression_context = ExpressionContext (
728
- f"{ remaining_statements_prefix } ; " ,
729
- last_line_number , # type: ignore
730
- expression_context .suffix_string ,
731
- expression_context .suffix_line ,
732
- )
733
- fake_meta = Meta ()
734
- fake_meta .line = get_line (lambda_statements [1 ])
735
- fake_meta .end_line = get_end_line (lambda_statements [- 1 ])
736
- fake_expression = Tree ("inline_lambda_statements" , lambda_statements [1 :], fake_meta )
737
- return first_statement_formatted_lines [:- 1 ] + _format_concrete_expression (
738
- fake_expression , remaining_statements_expression_context , context
739
- )
740
-
741
-
742
624
def _collapse_getattr_tree_to_dot_chain (expression : Tree ) -> Tree :
743
625
reversed_dot_chain_children = [] # type: List[Node]
744
626
pending_getattr_call_to_match = None
@@ -883,3 +765,66 @@ def _format_dot_chain_to_multiple_lines_bottom_up(
883
765
fake_meta ,
884
766
)
885
767
return _format_concrete_expression (new_actual_expr , expression_context , context )
768
+
769
+
770
+ def _format_lambda_to_multiple_lines (
771
+ a_lambda : Tree ,
772
+ expression_context : ExpressionContext ,
773
+ context : Context ,
774
+ ) -> FormattedLines :
775
+ expression_context_for_header = ExpressionContext (
776
+ expression_context .prefix_string , expression_context .prefix_line , "" , - 1
777
+ )
778
+ header_lines = _format_concrete_expression (
779
+ a_lambda .children [0 ], expression_context_for_header , context
780
+ )
781
+
782
+ block_module = import_module ("gdtoolkit.formatter.block" )
783
+ function_statement_module = import_module ("gdtoolkit.formatter.function_statement" )
784
+ child_context = context .create_child_context (expression_context .prefix_line )
785
+ (block_lines , _ ) = block_module .format_block (
786
+ a_lambda .children [1 :],
787
+ function_statement_module .format_func_statement ,
788
+ child_context ,
789
+ )
790
+ last_block_line_number , last_block_line_content = block_lines [- 1 ]
791
+
792
+ return (
793
+ header_lines
794
+ + block_lines [:- 1 ]
795
+ + [
796
+ (
797
+ last_block_line_number ,
798
+ f"{ last_block_line_content } { expression_context .suffix_string } " ,
799
+ )
800
+ ]
801
+ )
802
+
803
+
804
+ def _format_lambda_header_to_multiple_lines (
805
+ lambda_header : Tree ,
806
+ expression_context : ExpressionContext ,
807
+ context : Context ,
808
+ ) -> FormattedLines :
809
+ append_to_prefix = (
810
+ f"func { lambda_header .children [0 ].value } "
811
+ if isinstance (lambda_header .children [0 ], Token )
812
+ else "func"
813
+ )
814
+ args_offset = 1 if isinstance (lambda_header .children [0 ], Token ) else 0
815
+ theres_something_after_args = len (lambda_header .children ) > args_offset + 1
816
+ optional_type_hint = (
817
+ f" -> { lambda_header .children [args_offset + 1 ]} "
818
+ if theres_something_after_args
819
+ else ""
820
+ )
821
+ prepend_to_suffix = f"{ optional_type_hint } :"
822
+ new_expression_context = ExpressionContext (
823
+ f"{ expression_context .prefix_string } { append_to_prefix } " ,
824
+ expression_context .prefix_line ,
825
+ f"{ prepend_to_suffix } { expression_context .suffix_string } " ,
826
+ expression_context .suffix_line ,
827
+ )
828
+ return _format_concrete_expression (
829
+ lambda_header .children [args_offset ], new_expression_context , context
830
+ )
0 commit comments