
    oiQ                        S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
Jr  SS jrSS jrSS jrSS	 jr\S
:X  a&  \R"                  " \" \R$                  SS 5      5        gg)zPEnsure keyword arguments use spaces around '=', prune redundant pass statements.    )annotationsN)defaultdict)Pathc                   U R                  SS9nU(       d  U S4$ [        [        5      nSn[        R                  " U 5      R
                  n[        R                  " U5       GH  nUR                  [        R                  :w  d  UR                  S:w  a  M4  UR                  S   S-
  nUR                  S   X&   -   nUS:  d  U[        U5      :  a  Mq  X   nU[        U5      :  d  X   S:w  a  M  Sn	US:  a,  XS-
     S;  a!  USU  S	XS  3nX&==   S-  ss'   US-  nSn	SnUS-   n
U
[        U5      :  a$  X   S
;  a  USU
  S	XS  3nX&==   S-  ss'   Sn	SnU	(       d  GM  XU'   GM     U(       d  U S4$ SR                  U5      S4$ )zHReturn updated text with keyword '=' padded by spaces, plus change flag.TkeependsF=r      >   	 Nr   >   r   
r    )
splitlinesr   intioStringIOreadlinetokenizegenerate_tokenstypeOPstringstartlenjoin)textlinesoffsetschangedreadertoken
line_indexcollineline_changed
next_indexs              X/home/james-whalen/.local/lib/python3.13/site-packages/scripts/enforce_kwargs_spacing.pyenforce_spacingr)      s   OOTO*EU{)#.GG[[''F))&1::$(;[[^a'
kk!nw22>Z3u:5 #d)tyC/ 7t!G}K74Cj\4:,/D1$1HCLG 1W
D	!d&6>U&U;J'(${*;)<=D1$LG< $*C 2F U{775>4    c                  ^^  [         R                  " U 5      n/ mSUU4S jjmT" U5        T(       d  U S4$ U R                  SS9nSn[	        TS SS9 GH   nUR
                  S-
  nUR                  =(       d    UR
                  S-
  nU[        U5      :  a  MF  SnXV:X  aO  X%   nUR                  nUR                  =(       d    US-   n	US	U XyS	 -   n
U
R                  5       (       a  U
OS
X%'   M  X%   S	UR                   nUR                  5       (       a  UOS
X%'   [        US-   U5       H  nS
X,'   M	     X&   UR                  =(       d    SS	 nXU'   GM     / n[        U5       H]  u  pU(       d  M  U[        U5      S-
  :  a,  UR                  S5      (       d  UR                  U S35        ML  UR                  U5        M_     S
R                  U5      U4$ ! [         a    U S4s $ f = f)zCDrop pass statements that share a block with other executable code.Fc                  > S H  n[        XS 5      n[        U[        5      (       a  [        U5      S::  a  M5  U H5  n[        U[        R
                  5      (       d  M$  TR                  U5        M7     U H,  n[        U[        R                  5      (       d  M$  T" U5        M.     M     [        U SS 5      nU(       a  U H  nT" U5        M     g g )N)bodyorelse	finalbodyr
   handlers)getattr
isinstancelistr   astPassappendAST)nodeattrvaluestmtr0   handler	redundantvisits         r(   r>   &remove_redundant_passes.<locals>.visitL   s    3DD-EeT**c%jAodCHH--$$T*  dCGG,,$K  4 4T2#g $ r*   Tr   c                2    U R                   U R                  4$ )N)lineno
col_offset)items    r(   <lambda>)remove_redundant_passes.<locals>.<lambda>e   s    T[[$//$Br*   )keyreverser
      Nr   r   r   )r8   zast.ASTreturnNone)r4   parseSyntaxErrorr   sortedrA   
end_linenor   rB   end_col_offsetstriprange	enumerateendswithr6   r   )r   treer   r    r8   r   endr%   	col_startcol_endsegmentprefixidxsuffixresult_linesindexr=   r>   s                   @@r(   remove_redundant_passesr^   B   s   yy !#I   
$KU{OOTO*EGBD a-$++2CJ<<DI))<i!mG:I&h7G&-mmoo72EL /0!'vRC(CEJ )T005A89c
-2 !L '3u:>!$--*=*=4&,% ( 77< '))  U{s   G G,+G,c                    [         R                  " U 5       nUR                  5       nUR                  nS S S 5        [        W5      u  pV[        U5      u  pWU(       d  U(       a  U R                  UWS9  gg! , (       d  f       NH= f! [        [
        4 a(  n[        SU  SU 3[        R                  S9   S nAgS nAff = f)NzFailed to read z: )fileF)encodingT)r   openreadra   OSErrorrL   printsysstderrr)   r^   
write_text)pathhandleoriginalra   excupdatedr    removeds           r(   process_filero      s    ]]4 F{{}HH ! 'x0G.w7G'(3 !  [! vRu-CJJ?s3   B A7B 7
BB B C B;;C c                   [         R                  " [        S9nUR                  SSSS9  UR	                  U 5      n/ n[        [        5      R                  5       nUR                   Hs  n[        U5      nUR                  5       U:X  a  M$  UR                  5       (       a  UR                  5       (       a  MP  [        U5      (       d  Mb  UR                  U5        Mu     U(       a  U H  n[        SU 35        M     g)N)descriptionfiles+zPython files to fix)nargshelpzAdjusted kwarg spacing in r   )argparseArgumentParser__doc__add_argument
parse_argsr   __file__resolverr   existsis_dirro   r6   re   )argvparserargstouched	self_pathentryri   s          r(   mainr      s    $$9F
s1FGT"DGX&&(IE{<<>Y&{{}}NN4   D.tf56 r*   __main__r
   )r   strrI   ztuple[str, bool])ri   r   rI   bool)r   z	list[str]rI   r   )rx   
__future__r   r4   rv   r   rf   r   collectionsr   pathlibr   r)   r^   ro   r   __name__exitr    r*   r(   <module>r      sa    V " 
  	 
  # 0 fD*N"0 zHHT#((12,  r*   