
    -Phk                       d dl mZ d dlZd dlZd dlmZmZmZ d dl	m
Z
 d dlmZmZmZmZ d dlmZ d dlZddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ej        r
d dl Z d dl!m"Z"  G d de          Z#d3dZ$e G d d                      Z%e G d d                      Z& G d de          Z' G d de          Z( G d d e          Z) G d! d"e          Z* G d# d$e          Z+ G d% d&          Z,d4d*Z-d5d.Z.d6d2Z/dS )7    )annotationsN)ConfigParserMissingSectionHeaderErrorParsingError)deepcopy)	dataclassfieldfieldsasdict)Path   )mparser)MesonException)AstConditionLevel)
RawPrinter)FullAstVisitor)build_filename)Literalc                  8     e Zd Zdd fdZd fd	ZdddZ xZS )DefaultConfigParser=:
delimitersT.Tuple[str, ...]c                N    t                                          |d            d S )N)r   interpolation)super__init__)selfr   	__class__s     R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/mformat.pyr   zDefaultConfigParser.__init__   s&    JdCCCCC    filenamer   returnNonec                *   |                                 st          d| d          	 t                                          |d           d S # t          $ r9 |                     d| j         d|                    d          z              Y d S w xY w)NzConfiguration file z
 not foundutf-8encoding[z]
)existsr   r   readr   read_stringdefault_section	read_text)r    r$   r!   s     r"   read_defaultz DefaultConfigParser.read_default   s       	M !Kx!K!K!KLLL	cGGLLGL44444( 	c 	c 	c:!5:::X=O=OY`=O=a=aabbbbbb	cs   #A ?BBNsectionstrkeyfallbackT.Optional[str]c                    |                      |||          }|r(|                    d                              d          }|S )Nr5   "')getstrip)r    r2   r4   r5   values        r"   getstrzDefaultConfigParser.getstr'   sE    !%'3!J!J 	0KK$$**3//Er#   )r   )r   r   )r$   r   r%   r&   N)r2   r3   r4   r3   r5   r6   r%   r6   )__name__
__module____qualname__r   r1   r>   __classcell__r!   s   @r"   r   r      s        D D D D D D Dc c c c c c        r#   r   r$   r3   patternr%   boolc                l   dg dfd}|                     dd          }t          j        d	d|          }t          j        d
d|          }t          j        dd|          }t          j        dd|          }t          j        d||          }|                    d          rd|z   }|dz  }t          j        ||           }|dS t                    D ]Z}	 t          |d|dz                       }|         d         |cxk    r|         d         k    sn  dS I# t          $ r Y  dS w xY wdS )z.recursive glob match for editorconfig sectionsr   mre.Matchr%   r3   c                4   d| d         v rZdz  | d                              d          \  }}                    t          |          t          |          f           d dS t          j        t
          | d                             dd                    S )Nz\.\.r   z(?P<numz
>-?[0-9]+),|)splitappendintTcastr3   replace)rH   lowhighindex
num_rangess      r"   curl_replacez match_path.<locals>.curl_replace3   s     qtQJE!

8,,ICs3xxT3444.U....6#qt||C55666r#   .z\.z	(?<!\\)\?z(?<![\\\*])\*(?!\*)z([^/]*)z(?<!\\)\*\*z(.*)z(?<!\\)\[!(.*?[^\\])\]z([^\1])z(?<!\\)\{(.*?[^\\])}/^$NFnumr   T)rH   rI   r%   r3   )rR   resub
startswithsearchrangerO   
ValueError)	r$   rE   rW   
pattern_rerH   ivalrU   rV   s	          @@r"   
match_pathrf   .   s   E,.J	7 	7 	7 	7 	7 	7 	7 e,,Jc:66J.	:FFJ
;;J1:zJJJ/zJJJ# &:%
#J
	*h''Ayu5\\  	aacn%%Ca=#s>>>>jmA.>>>>>uu ? 	 	 	555	 4s   AD""
D10D1c                     e Zd ZU  eddej        i          Zded<    eddej        i          Z	ded<    eddej        i          Z
ded<    eddej        i          Zd	ed
<    eddej        i          Zded<    eddej        i          Zded<    eddej        i          Zded<    eddej        i          Zded<   dS )EditorConfigNgetterdefaultmetadataz#T.Optional[Literal['space', 'tab']]indent_styleT.Optional[int]indent_size	tab_widthz'T.Optional[Literal['lf', 'cr', 'crlf']]end_of_linezKT.Optional[Literal['latin1', 'utf-8', 'utf-8-bom', 'utf-16be', 'utf-16le']]charsetT.Optional[bool]trim_trailing_whitespaceinsert_final_newlinez(T.Optional[T.Union[Literal['off'], int]]max_line_length)r@   rA   rB   r	   r   r;   rm   __annotations__getintro   rp   rq   rr   
getbooleanrt   ru   rv    r#   r"   rh   rh   W   s         9>dV^`s`wUx8y8y8yLyyyy#(5K^Ke@f#g#g#gKgggg!&txI\Ic>d!e!e!eIeeee;@5YacvczX{;|;|;|K||||[`[`im  zB  DW  D[  y\  \]  \]  \]G  ]  ]  ]  ]16txYlYwNx1y1y1yyyyy-2U48UhUsJt-u-u-uuuuu@Ed^fh{h  ^A  AB  AB  ABO  B  B  B  B  B  Br#   rh   c                  (   e Zd ZU  edej        dd          Zded<    edej        dd          Z	ded	<    edej
        d
d          Zded<    edej
        d
d          Zded<    edej
        d
d          Zded<    edej
        d
d          Zded<    edej        dd          Zded<    edej        dd          Zded<    edej
        dd          Zded<    edej
        dd          Zded<    edej        dd          Zded<    edej
        dd          Zded<    edej
        d
d          Zded<    edej
        d
d          Zded<   ed%d            Zd&d Zd'd#Zed(d$            ZdS ))FormatterConfigNP   )ri   rk   rj   rn   rv   z    r6   	indent_byFrs   space_arraykwargs_force_multiline
wide_colonno_single_comma_functionnativez1T.Optional[Literal['cr', 'lf', 'crlf', 'native']]rq   z  indent_before_commentsTsimplify_string_literalsru      rp   
sort_filesgroup_arg_valueuse_editor_configr%   c                D    d t          |           D             } | di |S )Nc                4    i | ]}|j         |j        d          S )rk   )namerl   .0fs     r"   
<dictcomp>z+FormatterConfig.default.<locals>.<dictcomp>   s#    GGGaAFAJy1GGGr#   rz   )r
   )clsdefaultss     r"   rk   zFormatterConfig.default   s-    GG6#;;GGGsXr#   configc                    t          |           }t          |                                          D ]\  }}|t          |||           |S )z.Returns copy of self updated with other config)r   r   itemssetattr)r    r   
new_configr4   r=   s        r"   updatezFormatterConfig.update   sQ    d^^
 ....00 	0 	0JC 
C///r#   editorconfigrh   c                   t          |           }|j        dk    r|j        pd}|dz  |_        n)|j        dk    rd|_        n|j        r|j        dz  |_        |j        dk    rd|_        n |j        rt          |j                  |_        |j        r|j        |_        |j        r|j        |_        |j        r|j        |_        |S )z.Returns copy of self updated with editorconfigspacer    tab	offr   )	r   rm   ro   r~   rv   rO   rq   ru   rp   )r    r   r   ro   s       r"   with_editorconfigz!FormatterConfig.with_editorconfig   s    $$//&27aK*S0F&%//#F% 	>+7#=F'500%&F"") 	G%()E%F%FF"# 	:!-!9F, 	L*6*KF'! 	6+5Fr#   c                T    | j         dk    rdS | j         dk    rdS | j         dk    rdS d S )Ncrlfz
lf
cr)rq   )r    s    r"   newlinezFormatterConfig.newline   s@    v%%6t##4t##4tr#   )r%   r|   )r   r|   r%   r|   )r   rh   r%   r|   )r%   r6   )r@   rA   rB   r	   r   rx   rv   rw   r>   r~   ry   r   r   r   r   rq   r   r   ru   rp   r   r   r   classmethodrk   r   r   propertyr   rz   r#   r"   r|   r|   d   s%         (-u/6 ( ( (O    
 "'/6# " " "I    
 %*E/:" % % %K    
 05u/:" 0 0 0    
 $)5/:" $ $ $J    
 27/:" 2 2 2     FKU/6% F F FK    
 /4e/6! / / /    
 27/:! 2 2 2    
 .3U/:! . . .    
 "'/6 " " "I     $)5/:! $ $ $J    
 )./:" ) ) )O    
 +0%/:" + + +        [      4    X  r#   r|   c                  0     e Zd ZddZddZd fd
Z xZS )MultilineArgumentDetectorr   r|   c                "    || _         d| _        d S )NF)r   is_multiliner    r   s     r"   r   z"MultilineArgumentDetector.__init__   s    !r#   nodemparser.BaseNoder%   r&   c                    |j         rd|j         j        v r	d| _        d S t          |t          j                  r|j        rd| _        d S d S d S )N#T)whitespacesr=   r   
isinstancer   
StringNoder    r   s     r"   
enter_nodez$MultilineArgumentDetector.enter_node   sl     	%t'7'= = = $Dg011 	%d6G 	% $D	% 	% 	% 	%r#   mparser.ArgumentNodec                    |j         rd| _         | j         rd S | j        j        r|j        rd| _         t	                                          |           d S NT)r   r   r   kwargsr   visit_ArgumentNoder    r   r!   s     r"   r   z,MultilineArgumentDetector.visit_ArgumentNode   sb     	% $D 	F;- 	%$+ 	% $D""4(((((r#   r   r|   r   r   r%   r&   r   r   r%   r&   )r@   rA   rB   r   r   r   rC   rD   s   @r"   r   r      se        " " " "% % % %
) 
) 
) 
) 
) 
) 
) 
) 
) 
)r#   r   c                  F    e Zd ZdAdZdBdZdBd	ZdBd
ZdCdZdBdZdDdEdZ	dFdZ
dGdZdHdZdIdZdJ fdZdKdZdL fd!ZdM fd#ZdN fd%ZdO fd'ZdP fd)ZdQd+ZdR fd-ZdS fd/ZdT fd1ZdU fd3ZdV fd5ZdW fd7ZdX fd9ZdY fd;ZdZ fd=ZdG fd>Zd[d@Z  xZ!S )\TrimWhitespacesr   r|   c                >    || _         d| _        d| _        d| _        d S )NFr    )r   in_block_commentsin_argumentsindent_commentsr   s     r"   r   zTrimWhitespaces.__init__   s'    !&!r#   r   r   r%   r&   c                d    |                      |           |j                            |            d S r?   )r   r   acceptr   s     r"   visit_default_funcz"TrimWhitespaces.visit_default_func  s1    %%%%%r#   c                    t          |t          j                  rd S |j        sIt          j        t          j        d|j        ddddd                    |_        |j        |j        _        d S d S )N
whitespacer   r   r   r   )r   r   WhitespaceNoder   Tokenr$   condition_levelr   s     r"   r   zTrimWhitespaces.enter_node  sz    dG233 	F 	D&5gmLRVR_abdeghjprt6u6uvvD/3/CD,,,	D 	Dr#   c                    d S r?   rz   r   s     r"   	exit_nodezTrimWhitespaces.exit_node  s    r#   	from_nodeto_nodec                    |j         j        |j         j        z   |j         _        |j         j        |j         _        d |_         |j                             |            d S r?   )r   r=   is_continuationr   )r    r   r   s      r"   move_whitespacesz TrimWhitespaces.move_whitespaces  sT    $-$9$?'BUB[$[!.7.C.S+ $	""4(((((r#   c                :    |j         j        sd|j         _        d S d S Nr   r   r=   r   s     r"   add_space_afterzTrimWhitespaces.add_space_after  +    % 	)%(D"""	) 	)r#   FforcerF   c                    |j         j        sd|j         _        d S |r6|j         j                            d          s|j         xj        dz  c_        d S d S d S )Nr   )r   r=   endswith)r    r   r   s      r"   add_nl_afterzTrimWhitespaces.add_nl_after   su    % 	+%)D""" 	+4+1::4@@ 	+""d*""""	+ 	+ 	+ 	+r#   r=   r3   c                    |                     | j        j                  r"|d t          | j        j                            }|S r?   )r   r   r~   len)r    r=   s     r"   dedentzTrimWhitespaces.dedent&  s@    >>$+/00 	86C 566667Er#   r   c                J    dfd}j                             |           d S )Nargr   r%   r3   c                h    t          | t          j                  r| j        S t	          dd          S )Nr=   r   )r   r   r   	raw_valuegetattr)r   r   s    r"   sort_keyz0TrimWhitespaces.sort_arguments.<locals>.sort_key-  s2    #w122 %}$4"---r#   )r4   )r   r   r%   r3   )	argumentssort)r    r   r   s    ` r"   sort_argumentszTrimWhitespaces.sort_arguments+  sB    	. 	. 	. 	. 	. 	.
 	)))))r#   mparser.EmptyNodec                    |                      |           d| _        |j                            |            d| _        d S )NTF)r   r   r   r   r   s     r"   visit_EmptyNodezTrimWhitespaces.visit_EmptyNode4  sA    !%%%%!&r#   mparser.WhitespaceNodec                   |j                             d          }d|_         | j        }d |D             dgz   }t          |          D ]\  }}|                    d          }|                                }|                    d          r|xj         dz  c_         d|_        nG|                    d	          r2|s|xj         | j        j	        z  c_         n|xj         | j
        z  c_         |xj         |z  c_         |r$|s||d
z            s| j        s|xj         dz  c_         d}|j                             d          r8|xj         | j
        z  c_         |j        r|xj         | j        j        z  c_         d S d S d S )NTkeependsr   c                    g | ]}d |v S )r   rz   )r   lines     r"   
<listcomp>z8TrimWhitespaces.visit_WhitespaceNode.<locals>.<listcomp>>  s    777777r#   Fr   \r   r   r   )r=   
splitlinesr   	enumerater   r<   r_   r   r   r   r   r   r~   )r    r   linesr   with_commentsrd   r   has_nls           r"   visit_WhitespaceNodez$TrimWhitespaces.visit_WhitespaceNode:  s   
%%t%44
 2777775'A '' 	% 	%GAt]]4((F::<<Dt$$ 7

c!

'+$$%% 7( 7JJ$+"DDJJJJJ$"66JJJJ$JJ #4 #=1#5 #T=N #

d"

 $:t$$ 	4JJ$..JJ# 4

dk33



	4 	44 4r#   mparser.SymbolNodec                    t                                          |           |j        dv r|j        j        dk    rd|j        _        d S d S d S )Nz([{r   r   )r   visit_SymbolNoder=   r   r   s     r"   r   z TrimWhitespaces.visit_SymbolNodeS  sW      &&&:4#3#9T#A#A%'D""" #A#Ar#   mparser.StringNodec                &   |                                 | j        j        rYj        r;t	          fddD                       s d_                                        _        j        rdj        vrd_        |                                d S )Nc              3  *   K   | ]}|j         v V  d S r?   )r=   )r   xr   s     r"   	<genexpr>z3TrimWhitespaces.visit_StringNode.<locals>.<genexpr>\  s)      ,R,RQ$*_,R,R,R,R,R,Rr#   )r   r:   F@)	r   r   r   r   anyescaper=   
is_fstringr   r   s    `r"   visit_StringNodez TrimWhitespaces.visit_StringNodeX  s    ;/ 	(  +,R,R,R,Rk,R,R,R)R)R +$)!![[]]
 (3dj#8#8"'tr#   mparser.UnaryOperatorNodec                    t                                          |           |                     |j        |           d S r?   )r   visit_UnaryOperatorNoder   r=   r   s     r"   r  z'TrimWhitespaces.visit_UnaryOperatorNodee  s9    ''---dj$/////r#   mparser.NotNodec                    t                                          |           |j        j        j        sd|j        j        _        |                     |j        |           d S r   )r   r  operatorr   r=   r   r   s     r"   visit_NotNodezTrimWhitespaces.visit_NotNodei  sV    ''---}(. 	2.1DM%+dj$/////r#   mparser.BinaryOperatorNodec                    t                                          |           |                     |j                   |                     |j                   |                     |j        |           d S r?   )r   visit_BinaryOperatorNoder   leftr  r   rightr   s     r"   r  z(TrimWhitespaces.visit_BinaryOperatorNodeo  se    ((...TY'''T]+++dj$/////r#   mparser.ArrayNodec                   t                                          |           |                     |j        |           |j        j        j        rd|j        _        |j        j	        rL|j        j        s@| j
        j        r4|                     |j                   |                     |j                   |j        j	        s"|                     |j        |j                   d S d S r   )r   visit_ArrayNoder   rbracketlbracketr   r=   argsr   r   r   r   r   r   s     r"   r  zTrimWhitespaces.visit_ArrayNodeu  s    %%%dmT222=$* 	*%)DI"9 	,ty'= 	,$+BY 	,  ///  +++y" 	<!!$-;;;;;	< 	<r#   mparser.DictNodec                    t                                          |           |                     |j        |           |j        j        j        rd|j        _        d S d S r   )	r   visit_DictNoder   rcurllcurlr   r=   r  r   r   s     r"   r  zTrimWhitespaces.visit_DictNode  s]    t$$$dj$///:!' 	*%)DI"""	* 	*r#   mparser.CodeBlockNodec                   |                      |           |j        r)d| _        |j                            |            d| _        n6t	          j        t	          j        d|j        ddddd                    |_        d|j        _        |j	        D ]}|                    |            | 
                    |           |j	        r"|                     |j	        d         |           nW|j        j        |j        j        z   |j        _        d|j        _        d| _        |j                            |            d| _        |j        dk    r#| j        j        r|                     |d           |j        | j        j        z  }|r|j	        r|j        xj        |z  c_        |j	        d d         D ]}|j        xj        |z  c_        d S )	NTFr   r   r   r   )r   )r   pre_whitespacesr   r   r   r   r   r$   block_indentr   r   r   r=   r   r   r   ru   r   r~   )r    r   rd   indentr   s        r"   visit_CodeBlockNodez#TrimWhitespaces.visit_CodeBlockNode  s    	{%)D" ''---%*D""#*#9'-VZVcefhiklntvx:y:y#z#zD ,0) 	 	AHHTNNNNt: 	+!!$*R.$7777%)%9%?$BRBX%XD")+D &%)D"##D)))%*D"1$$)I$d$///%(== 	1dj 	1 &&&0&&JssO 	- 	-D""f,"""	- 	-r#   mparser.IndexNodec                    t                                          |           |                     |j        |           d S r?   )r   visit_IndexNoder   r  r   s     r"   r+  zTrimWhitespaces.visit_IndexNode  s9    %%%dmT22222r#   mparser.MethodNodec                    t                                          |           |                     |j        |           |j        j        j        rd|j        _        d S d S r   )	r   visit_MethodNoder   rparlparr   r=   r  r   r   s     r"   r.  z TrimWhitespaces.visit_MethodNode  s]      &&&di...9 & 	*%)DI"""	* 	*r#   mparser.FunctionNodec                J   |j         j        dk    r| j        j        r|                     |j                   t          |j        j                  dk    rs|j        j        sg|j        j        d         }t          |t          j                  r;|j        j        r#|j        j        j                                        s|j        |_        t                                          |           |                     |j        |           |j        j        j        rd|j        _        d S d S )Nfilesr   r   T)	func_namer=   r   r   r   r  r   r   r   r   r   	ArrayNoder  r   r<   r   visit_FunctionNoder   r/  r0  r   )r    r   r   r!   s      r"   r6  z"TrimWhitespaces.visit_FunctionNode  s   >7**{% /##DI...49&''1,,TY5E,i)!,c7#455 -<3 -3<;S;Y;_;_;a;a -$'H	""4(((di...9 & 	*%)DI"""	* 	*r#   mparser.AssignmentNodec                    t                                          |           |                     |j                   |                     |j                   |                     |j        |           d S r?   )r   visit_AssignmentNoder   var_namer  r   r=   r   s     r"   r9  z$TrimWhitespaces.visit_AssignmentNode  se    $$T***T]+++T]+++dj$/////r#   mparser.ForeachClauseNodec                   t                                          |           |                     |j                   |                     |j        d                    |j        D ]}|                     |           |                     |j                   |j        j        xj	        |j
        | j        j        z  z  c_	        d|j        j        _        |                     |j        |           d S )Nr$  T)r   visit_ForeachClauseNoder   foreach_varnamescommascolonblockr   r=   r   r   r~   r&  r   
endforeach)r    r   commar!   s      r"   r=  z'TrimWhitespaces.visit_ForeachClauseNode  s    ''---T]+++T]2.///[ 	( 	(E  ''''TZ(((
$$(<t{?T(TT$$.2
+dot44444r#   mparser.IfClauseNodec                |   t                                          |           |                     |j        |           |j        D ])}|j        xj        |j        | j        j	        z  z  c_        *t          |j        t          j                  r.|j        j        xj        |j        | j        j	        z  z  c_        d S d S r?   )r   visit_IfClauseNoder   endififsr   r=   r   r   r~   r   	elseblockr   ElseNode)r    r   if_noder!   s      r"   rG  z"TrimWhitespaces.visit_IfClauseNode  s    ""4(((dj$///x 	V 	VG%%)=@U)UU%%%dng&677 	]N&,,0Dt{G\0\\,,,,	] 	]r#   mparser.IfNodec                   t                                          |           |                     |j                   d| _        |                     |j        |           d| _        |j        dz   |j        _        d|j        _	        d S NTFr   )
r   visit_IfNoder   if_r   r   rB  r   r   r&  r   s     r"   rP  zTrimWhitespaces.visit_IfNode  s}    T"""TX&&&!%dj$///!&+/+?!+C((,%%%r#   mparser.ElseNodec                    t                                          |           d| _        |                     |j        |           d| _        |j        dz   |j        _        d|j        _        d S rO  )r   visit_ElseNoder   r   rB  r   r   r&  r   s     r"   rT  zTrimWhitespaces.visit_ElseNode  sg    t$$$!%dj$///!&+/+?!+C((,%%%r#   mparser.TernaryNodec                P   t                                          |           |                     |j                   |                     |j                   |                     |j                   |                     |j                   |                     |j        |           d S r?   )	r   visit_TernaryNoder   	conditionquestionmark	trueblockrA  r   
falseblockr   s     r"   rW  z!TrimWhitespaces.visit_TernaryNode  s    !!$'''T^,,,T.///T^,,,TZ(((dot44444r#   c                   |j         s7t          | j                  }|                    |           |j         rd|_         | xj        dz  c_        t                                          |           | xj        dz  c_        |j        s#|j        s|j	                            |            d S t          |j                  t          |j                  t          |j                  z   k    }|r|j        d         }n1|j        r|j                                        D ]}n|j        d         }|                     ||           |j         sd|j	        j        vrd|j	        _        d S d S d S )NTr   r$  r   r   )r   r   r   r   r   r   r   r   r   r   r   r@  valuesr   r=   )r    r   ml_detectorhas_trailing_comma	last_noder!   s        r"   r   z"TrimWhitespaces.visit_ArgumentNode  s     	)3DK@@KKK$$$' )$(!Q""4(((Q~ 	dk 	##D)))F !--T^1D1Ds4;GWGW1WW 	+BII[ 	+![//11  	 r*Ii...  	(S0@0F%F%F%'D"""	( 	(%F%Fr#   mparser.ParenthesizedNodec                T   |                      |           |j        j        od|j        j        j        v }|r| xj        | j        j        z  c_        |j                            |            |j                            |            |rl| 	                    |j        j        j                  |j        j        _        | 	                    | j                  | _        | 
                    |j                   |j                            |            |                     |j        |           d S )Nr   )r   r0  r   r=   r   r   r~   r   innerr   r   r/  r   )r    r   r   s      r"   visit_ParenthesizedNodez'TrimWhitespaces.visit_ParenthesizedNode  s   y,S	8M8S1S 	:  DK$99  	
$ 	*+/;;tz7M7S+T+TDJ"(#';;t/C#D#DD dj)))	di.....r#   r   r   )r   r   r   r   r%   r&   )F)r   r   r   rF   r%   r&   )r=   r3   r%   r3   r   r   r   r%   r&   r   r   r%   r&   )r   r   r%   r&   r   r  r%   r&   )r   r  r%   r&   )r   r  r%   r&   )r   r  r%   r&   r   r  r%   r&   r   r  r%   r&   )r   r"  r%   r&   )r   r)  r%   r&   r   r,  r%   r&   r   r1  r%   r&   )r   r7  r%   r&   )r   r;  r%   r&   )r   rE  r%   r&   )r   rM  r%   r&   )r   rR  r%   r&   )r   rU  r%   r&   r   ra  r%   r&   )"r@   rA   rB   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r  r  r  r(  r+  r.  r6  r9  r=  rG  rP  rT  rW  r   rd  rC   rD   s   @r"   r   r      s'       " " " "& & & &D D D D   ) ) ) )) ) ) )+ + + + +   
* * * *' ' ' '4 4 4 42( ( ( ( ( (
   0 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0
< 
< 
< 
< 
< 
<* * * * * *- - - -@3 3 3 3 3 3* * * * * ** * * * * *$0 0 0 0 0 05 5 5 5 5 5] ] ] ] ] ]- - - - - -- - - - - -5 5 5 5 5 5( ( ( ( ( (</ / / / / / / /r#   r   c                  h     e Zd ZddZddZddZddZddZddZd dZ	d!dZ
d" fdZd#dZ xZS )$ArgumentFormatterr   r|   c                >    || _         d| _        d| _        d| _        d S Nr   F)r   levelindent_afteris_function_argumentsr   s     r"   r   zArgumentFormatter.__init__-  s&    
!%*"""r#   r   r   r%   r&   c                :    |j         j        sd|j         _        d S d S r   r   r   s     r"   r   z!ArgumentFormatter.add_space_after3  r   r#   r'  rO   c                    |j         j        r|j         j        dk    rd|j         _        |j        |z   | j        j        z  }|r|j         xj        |z  c_        d S d S )Nr   r   )r   r=   r   r   r~   )r    r   r'  r~   s       r"   r   zArgumentFormatter.add_nl_after7  sq    % 	*)9)?3)F)F%)D")F2dk6KK	 	0""i/""""	0 	0r#   r  c                   |                      |           |j        j        r=| xj        dz  c_        |j        j        r!|                     |j        | j                   |j                            |            d| _        |j                            |            |j        j        r| xj        dz  c_        |j	                            |            | 
                    |           d S Nr   r'  F)r   r  r   rq  r   r   r  r   rs  r  r   r   s     r"   r  z!ArgumentFormatter.visit_ArrayNode>  s    9! 	DJJ!OJJy" D!!$-
!CCCT"""%*"	9! 	JJ!OJJT"""tr#   r  c                   |                      |           |j        j        r=| xj        dz  c_        |j        j        r!|                     |j        | j                   |j                            |            d| _        |j                            |            |j        j        r| xj        dz  c_        |j	                            |            | 
                    |           d S rw  )r   r  r   rq  r   r   r!  r   rs  r   r   r   s     r"   r  z ArgumentFormatter.visit_DictNodeL  s    9! 	AJJ!OJJy A!!$*TZ!@@@
$%*"	9! 	JJ!OJJ
$tr#   r,  c                   |                      |           |j                            |            |j        j        o|j        j        j        }|r| xj        dz  c_        |j        j        r1| xj        dz  c_        |                     |j	        | j                   d| _
        |j                            |            |j        j        r| xj        dz  c_        |r| xj        dz  c_        |                     |           d S Nr   rx  T)r   source_objectr   r   r   rq  r  r   r   r0  rs  r   )r    r   is_conts      r"   r.  z"ArgumentFormatter.visit_MethodNodeZ  s    !!$'''$0cT5G5S5c 	JJ!OJJ9! 	<JJ!OJJdi
;;;%)"	9! 	JJ!OJJ 	JJ!OJJtr#   r1  c                N   |                      |           |j        j        r1| xj        dz  c_        |                     |j        | j                   d| _        |j                            |            |j        j        r| xj        dz  c_        |                     |           d S r{  )	r   r  r   rq  r   r0  rs  r   r   r   s     r"   r6  z$ArgumentFormatter.visit_FunctionNodek  s    9! 	<JJ!OJJdi
;;;%)"	9! 	JJ!OJJtr#   r   c                   |j                             d          }|r|j        | j        z   | j        j        z  }|j        rdn|                    d          |_         |D ];}d|v r%|                    |          s|xj         |z  c_         |xj         |z  c_         <| j	        r:|j         
                    d| j        j        f          r|xj         |z  c_         d S d S d S d S )NTr   r   r   r   r   )r=   r   r   rq  r   r~   r&  popr_   rr  r   )r    r   r   r'  r   s        r"   r   z&ArgumentFormatter.visit_WhitespaceNodev  s    
%%t%44 	%*TZ74;;PPF#0BeiillDJ # #$;;tv'>'>;JJ&(JJ

d"


  %TZ%8%8$@U9V%W%W %

f$



	% 	%% % % %r#   r   c                   | j         }t                                          |           |j        D ]}|                     |           | j        j        r|j        D ]}|                     |           t          |j	                  t          |j                  z   }|j
        ot          |j
                  |k    }|j        r#d}|dk    r|r| j        j         }|r|st          j        t          j        d|j        ddddd                    }|j        |_        t          j        t          j        d|j        ddddd                    |_        |j
                            |           n|r|s|j
                            d	           d}	| j        j        r|j	        d d	         D ]}
d
}t/          |
t          j                  r`|
j                            d          rF|j	        |	dz            }t/          |t          j                  r|j                            d          sd}|r!|                     |j
        |	                    n>|	t          |j
                  k     r&|                     |j
        |	         | j                   |	dz  }	|j
        |	d	         D ]}|                     || j                   |j	        s|j        r|                     || j        dz
             nd|rC|j
        d	         j        r|j
        d	         j        j        s|j
                            d	           |j
        D ]}|                     |           |                     |           d S )NTr   rD  r   r   rK   r   r   r$  Fz--)rs  r   r   colonsr   r   r   r   r   r   r@  r   r   r   
SymbolNoder   r$   r   r   r   rN   r  r   r   r   r=   r_   r   rq  r   )r    r   rs  rA  r4   arguments_countr_  
need_commarD  	arg_indexr   
group_argsnext_argr!   s                r"   r   z$ArgumentFormatter.visit_ArgumentNode  s    $ :""4((([ 	( 	(E  '''';! 	*{ * *$$S))))dn--DK0@0@@![PS-=-=-P &	,J!##(=#!%!EE
 $"4 $*7=$-QRTUWXZ`be+f+fgg(,(<%$+$:7=W[Wdfgijlmouwy;z;z${${!""5))))# $J $###I{* #>#2#. # #C!&J!#w'9:: .sy?S?STX?Y?Y .#'>)a-#@%h0BCC .HNLeLefjLkLk .)-J! N,,T[-CDDDD"S%5%555))$+i*@$*MMMNIIYr\2 5 5!!%4444~ 8 8!!$
Q777 " $4;r?+F $4;WY?KfKl $### , ,$$U++++tr#   ra  c                N   |                      |           d|j        j        j        v }|r| j        }d| _        |j                            |            |j                            |            |r|| _        |j                            |            |                     |           d S )Nr   T)	r   r0  r   r=   rr  r   rc  r/  r   )r    r   r   current_indent_afters       r"   rd  z)ArgumentFormatter.visit_ParenthesizedNode  s    ty4:: 	%#'#4  $D	
$ 	5 4D	tr#   r   r   )r   r   r'  rO   r%   r&   rh  ri  rj  rk  rf  r   rl  )r@   rA   rB   r   r   r   r  r  r.  r6  r   r   rd  rC   rD   s   @r"   rn  rn  +  s        + + + +) ) ) )0 0 0 0         "	 	 	 	
% 
% 
% 
%5 5 5 5 5 5n       r#   rn  c                       e Zd Zd#dZd$d
Zd%dZd&dZd'dZd(dZd)dZ	d*dZ
d+dZd,dZd-dZd- fdZd.d Zd/d"Z xZS )0ComputeLineLengthsr   r|   rq  rO   c                Z    || _         g | _        d| _        g | _        || _        d| _        d S rp  )r   lengthslengthargument_stackrq  need_regenerate)r    r   rq  s      r"   r   zComputeLineLengths.__init__  s4    $&<>
$r#   r   r   r%   r&   c                    |                      |           t          |d          sJ | xj        t          t	          |j                            z  c_        |                     |           d S )Nr=   )r   hasattrr  r   r3   r=   r   r   s     r"   r   z%ComputeLineLengths.visit_default_func  sb    tW%%%%%s3tz??+++tr#   r   r3   c                    |                     d          }t          |d                   }|dd         D ]:}| j        |z   | j        j        z  p| j        j        }||t          |          z   z  };|S )z(Compute line length, including tab stopsr   r   r   N)rM   r   r  r   rp   )r    r   partsline_lengthp
tab_lengths         r"   r   zComputeLineLengths.len  sx    

4  %(mmqrr 	/ 	/A;48MMgRVR]RgJ:A..KKr#   r=   c                ,   |                     d          }|D ]z}|                    d          r@| j                            | j        |                     |          z   dz
             d| _        W| xj        |                     |          z  c_        {d S )NTr   r   r   r   )r   r   r  rN   r  r   )r    r=   r   r   s       r"   count_multilinez"ComputeLineLengths.count_multiline  s      $ // 	. 	.D}}T"" .##DK$((4..$@1$DEEEtxx~~-	. 	.r#   r   c                :    |                      |j                   d S r?   )r  r=   r   s     r"   r   z'ComputeLineLengths.visit_WhitespaceNode  s    TZ(((((r#   r   c                Z    |                      |           |                     |           d S r?   )r   r   r   s     r"   r   z"ComputeLineLengths.visit_EmptyNode  s,    tr#   mparser.NumberNodec                    |                      |           | xj        t          |j                  z  c_        |                     |           d S r?   )r   r  r   r   r   r   s     r"   visit_NumberNodez#ComputeLineLengths.visit_NumberNode  sF    s4>***tr#   r  c                b   |                      |           |j        r| xj        dz  c_        |j        r;| xj        dz  c_        |                     |j                   | xj        dz  c_        n+| xj        |                     |j                  dz   z  c_        |                     |           d S )Nr         )	r   r	  r  r   r  r=   r   r   r   r   s     r"   r
  z#ComputeLineLengths.visit_StringNode  s    ? 	KK1KK 	8KK1KK  ,,,KK1KKKKK488DN33a77KKtr#   mparser.ContinueNodec                    |                      |           | xj        t          d          z  c_        |                     |           d S )Ncontinuer   r  r   r   r   s     r"   visit_ContinueNodez%ComputeLineLengths.visit_ContinueNode  sB    s:&tr#   mparser.BreakNodec                    |                      |           | xj        t          d          z  c_        |                     |           d S )Nbreakr  r   s     r"   visit_BreakNodez"ComputeLineLengths.visit_BreakNode  sB    s7||#tr#   r   c                    t          |          r]|j        sX| j        | j        j        k    rEt          | j                  | j        k    r| j        | j                 n|}d|_        d| _        d S d S d S d S r   )r   r   r  r   rv   r  rq  r  )r    r   r   s      r"   split_if_neededz"ComputeLineLengths.split_if_needed  s    t99 	(T. 	(4;A\3\3\589L5M5MPTPZ5Z5Z$%dj11`dC#C#'D   	( 	( 	( 	(3\3\r#   c                    | j                             |           t                                          |           |                     |           | j                             d           d S )Nr$  )r  rN   r   r   r  r  r   s     r"   r   z%ComputeLineLengths.visit_ArgumentNode  sc    ""4(((""4(((T"""#####r#   r  c                *   |                      |           |j                            |            |j                            |            |j                            |            |                     |j                   |                     |           d S r?   )r   r  r   r  r  r  r   r   s     r"   r  z"ComputeLineLengths.visit_ArrayNode  s    T"""	T"""TY'''tr#   r  c                *   |                      |           |j                            |            |j                            |            |j                            |            |                     |j                   |                     |           d S r?   )r   r!  r   r  r   r  r   r   s     r"   r  z!ComputeLineLengths.visit_DictNode!  s    
$	
$TY'''tr#   )r   r|   rq  rO   r   )r   r3   r%   rO   )r=   r3   r%   r&   rf  re  )r   r  r%   r&   rg  )r   r  r%   r&   )r   r  r%   r&   r   rh  ri  )r@   rA   rB   r   r   r   r  r   r   r  r
  r  r  r  r   r  r  rC   rD   s   @r"   r  r    sA       % % % %      . . . .) ) ) )      
      
   
( ( ( ($ $ $ $ $ $          r#   r  c                  (     e Zd Zd	dZd
 fdZ xZS )SubdirFetchercurrent_dirr   c                "    || _         g | _        d S r?   )r  subdirs)r    r  s     r"   r   zSubdirFetcher.__init__,  s    &%'r#   r   r1  r%   r&   c                H   |j         j        dk    ro|j        j        rct	          |j        j        d         t
          j                  r9|j        j        d         j        }| j                            | j	        |z             t                                          |           d S )Nsubdirr   )r4  r=   r  r   r   r   r   r  rN   r  r   r6  )r    r   r  r!   s      r"   r6  z SubdirFetcher.visit_FunctionNode0  s    >8++y" ?z$)2Ea2H'J\']'] ?,Q/5##D$4v$=>>>""4(((((r#   )r  r   rk  )r@   rA   rB   r   r6  rC   rD   s   @r"   r  r  *  sQ        ( ( ( () ) ) ) ) ) ) ) ) )r#   r  c                  .    e Zd ZddZddZddZddZdS )	Formatterconfiguration_fileT.Optional[Path]r   rF   fetch_subdirsc                    || _         || _        |                     |          | _        | j        | _        t                      | _        g | _        d S r?   )r  r   load_configurationr   current_configr   r  r  )r    r  r   r  s       r"   r   zFormatter.__init__:  sI    *!2--.@AA"k66%'r#   source_filer   r%   rh   c                j   t                      }j        D ]}|dz  }|                                st          d          }|                    |           fd|                                D             }t          |          D ]}t          ||j        d           |j	        d         }|D ]`}		  |||	|j        d           }
n0# t          $ r#}t          d|j         d| d	|           |d }~ww xY w|
t          ||j        |
           a|                    |j        d
d          r n|S )Nz.editorconfig)r   )r   c                X    g | ]&}t                                          |          $|'S rz   )rf   as_posix)r   r2   r  s     r"   r   z0Formatter.load_editor_config.<locals>.<listcomp>O  s5    lllG
;K_K_KaKacj@k@kllllr#   ri   r8   zInvalid type for key "z" in "z" file:
rootF)rh   parentsr,   r   r1   sectionsr
   r   r   rl   rb   r   r   ry   r/   )r    r  r   r  editorconfig_filecpr  r   ri   r2   r=   es    `          r"   load_editor_configzFormatter.load_editor_configC  s   $ 	 	A !O 3$++-- $777BOO-...llllr{{}}lllHF^^ 7 72qvt,,8H-' 7 7G| &r7AFT J J J% | | |,-saf-s-sTe-s-spq-s-sttz{{|(6667 }}R/%}HH  s   3C
C5	C0	0C5	r|   c                   t                      }|rmt                      }	 |                    |           n(# t          $ r}t	          d| d|           |d }~ww xY wt          t          |                                                              d t          |          D                                 }|r)t	          dd
                    |           d| d          t          |          D ]}|j        d         }	  |||j        |j        d 	          }n=# t          $ r0}t	          d
t          |           d|j         d|d          d }~ww xY w|t!          ||j        |           |j        rd| _        |S )Nz$Unable to parse configuration file "z":
c              3  $   K   | ]}|j         V  d S r?   )r   r   s     r"   r  z/Formatter.load_configuration.<locals>.<genexpr>l  s$      =]=]af=]=]=]=]=]=]r#   zUnknown config keys: "z, z" in configuration file "r9   ri   r8   zError parsing "z", option "z", error: "T)r|   r   r1   r   r   sortedsetr   
differencer
   joinrl   r/   r   rb   r3   r   r   )	r    r  r   r  r  
extra_keysr   ri   r=   s	            r"   r  zFormatter.load_configurationc  s    "" 	.$&&Bp 23333 p p p$%gL^%g%gde%g%ghhnoop  BKKMM 2 2 = ==]=]fU[nn=]=]=] ] ]^^J E$  &Ddii
>S>S  &D  &D  oA  &D  &D  &D  E  E  EF^^ 3 3H-i"F2r'916DQQQEE! i i i(g#.@*A*Aggafggabgggi i ii $FAFE222' .)-&s-   7 
AAAD
E%+EEcoder3   c                   |j         | _        t                                          | _        | j        r2| j                            |                     |                    | _        | j                            | j	                  | _        t          j        ||                                                                          }| j        r5t          | j                  }|                    |           |j        | _        |                    t%                                 t'          d          D ]}|                    t)          | j                             |                    t+          | j                             t-          | j        |          }|                    |           |j        s nt1                      }|                    |           |j        S )N   )parentr  r|   rk   r  r   r   r  r   r   r   Parserr  parser  r  r   r  r   ra   r   rn  r  r  r   result)r    r  r  astsubdir_fetcherrq  cllprinters           r"   formatzFormatter.format  s   &--5577! 	n"&"5"G"GH_H_`kHlHl"m"mD"188EEnT;#7#7#9#9::@@BB 	2*4+;<<NJJ~&&&)1DL

$&&'''1XX 	 	EJJt':;;<<<JJ()<==>>>$T%8%@@CJJsOOO&  ,,

7~r#   N)r  r  r   rF   r  rF   )r  r   r%   rh   )r  r  r%   r|   )r  r3   r  r   r%   r3   )r@   rA   rB   r   r  r  r  rz   r#   r"   r  r  8  se        ( ( ( (   @   8     r#   r  parserargparse.ArgumentParserr&   c                   |                                  }|                    dddd           |                    dddd           |                     d	d
dd           |                     dddt          d           |                     ddddd           |                     ddt          d           |                     ddt          d           d S )Nz-qz--check-only
store_truez6exit with 1 if files would be modified by meson format)actionhelpz-iz	--inplacezformat files in-placez-rz--recursivez;recurse subdirs (requires --check-only or --inplace option)z-cz--configurationmeson.formatz$read configuration from meson.format)metavartyper  z-ez--editor-configFz,try to read configuration from .editorconfig)r  rk   r  z-oz--outputz.output file (implies having exactly one input))r  r  sources*zmeson source files)nargsr  r  )add_mutually_exclusive_groupadd_argumentr   )r  inplace_groups     r"   add_argumentsr    sJ   7799MnE    
 k$    
 mJ    
 3	     ;	     j=    
 !	      r#   r  T.List[Path]r  c                    | D ]=}|                                 j        D ]!}|dz  }|                                r|c c S ">d S )Nr  )resolver  is_file)r  src_filer  targets       r"   get_meson_formatr    si      &&((0 	 	Fn,F~~ 	 4r#   optionsargparse.NamespacerO   c                   | j         r't          | j                  dk    rt          d          | j        r| j        s| j        st          d          t          | j                  dk    o7| j        d         j        dk    o!| j        d         j        t                      k    }| j        r|rt          d          | j        r|rt          d          | j        
                                pt          t                    g}| j        st          |          | _        t          | j        | j        | j                  }|r|                    d          }|                                r
|t          z  }	 |r.t          d          }t$          j                                        }n|                    d	
          }n%# t,          $ r}t          d|           |d }~ww xY w|                    ||          }| j        r|                    |j                   | j        rv	 |                    dd	|j        j                  5 }|                    |           d d d            n# 1 swxY w Y   n# t,          $ r}t          d|           |d }~ww xY w| j        r	||k    rdS n| j         r	 | j                             dd	|j        j                  5 }	|	                    |           d d d            n# 1 swxY w Y   n;# t,          $ r}t          d| j                    |d }~ww xY wt=          |d           |dS )Nr   z8--output argument implies having exactly one source filezE--recursive argument requires either --inplace or --check-only optionr   -z7--recursive argument is not compatible with stdin inputz5--inplace argument is not compatible with stdin inputSTDINr(   r)   zUnable to read from w)r*   r   zUnable to write to r   )end)outputr   r  r   	recursiveinplace
check_onlyr   r  r   copyr   configurationr  r  editor_configr  is_dirsysstdinr-   r0   IOErrorr  extendr  openr  r   writeprint)
r  
from_stdinr  	formatterr  r  r  	formattedsfofs
             r"   runr    s   ~ Y#go..!33WXXX f'/ fW5G fdeeeW_%%*uwq/A/F#/MuRYRabcRdRkosououRuJ XZ XVWWW V: VTUUU#O0022LtN7K7K6LG  : 0 9 9'/1FHYZZI
 #%;;q>>?? 	1.0H	K <==y~~''))7);; 	K 	K 	K !B!B!BCCJ	K $$T844	 	.NN9,---? 	%N]]3)BZBb]cc (giHHY'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( N N N$%E8%E%EFFAMN 	%y  q !^ 	%T^((w	H`Hh(ii (moHHY'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( T T T$%K7>%K%KLLRSST )$$$$G  #%J 1s   3AF: :
GGG"I.  I"I. "I&&I. )I&*I. .
J8JJ+'L  K4(L  4K88L  ;K8<L   
L'
L""L')r$   r3   rE   r3   r%   rF   )r  r  r%   r&   )r  r  r%   r  )r  r  r%   rO   )0
__future__r   r]   typingrP   configparserr   r   r   r   r   dataclassesr   r	   r
   r   pathlibr   r  r   r   mesonlibr   ast.postprocessr   ast.printerr   ast.visitorr   environmentr   TYPE_CHECKINGargparsetyping_extensionsr   r   rf   rh   r|   r   r   rn  r  r  r  r  r  r  rz   r#   r"   <module>r     sK   # " " " " " 				     N N N N N N N N N N       8 8 8 8 8 8 8 8 8 8 8 8       



       $ $ $ $ $ $ . . . . . . # # # # # # ' ' ' ' ' ' ' ' ' ' ' '? *OOO))))))    ,   (& & & &R 	B 	B 	B 	B 	B 	B 	B 	B | | | | | | | |~) ) ) ) ) ) ) )4j/ j/ j/ j/ j/n j/ j/ j/Z	Y Y Y Y Y Y Y Yx` ` ` ` ` ` ` `F) ) ) ) )N ) ) )` ` ` ` ` ` ` `F' ' ' 'R   8 8 8 8 8 8r#   