3 2a| @s>ddlmZddlmZddlmZmZGdddejZdS))pytree) fixer_base)Name parenthesizec@seZdZdZdZddZdS) FixHasKeyTa anchor=power< before=any+ trailer< '.' 'has_key' > trailer< '(' ( not(arglist | argument) arg=any ','> ) ')' > after=any* > | negation=not_test< 'not' anchor=power< before=any+ trailer< '.' 'has_key' > trailer< '(' ( not(arglist | argument) arg=any ','> ) ')' > > > c Cs||j}|jj|jkr&|jj|jr&dS|jd}|d}|j}dd|dD}|dj}|jd} | rxdd| D} |j|j |j|j |j |j |j |jfkrt|}t|d kr|d }ntj|j|}d |_td d d } |rtdd d } tj|j| | f} tj|j || |f} | r8t| } tj|j| ft| } |jj|j |j|j|j|j|j|j|j|jf krrt| } || _| S)NnegationanchorcSsg|] }|jqS)clone).0nr r 0/opt/alt/python36/lib64/python3.6/fix_has_key.py Rsz'FixHasKey.transform..beforeargaftercSsg|] }|jqSr )r )r r r r r rVs in)prefixnot)symsparenttypeZnot_testpatternmatchgetrr Z comparisonZand_testZor_testZtestZlambdefargumentrlenrZNodeZpowerrZcomp_optupleexprZxor_exprZand_exprZ shift_exprZ arith_exprZtermZfactor) selfZnoderesultsrrrrrrrZn_opZn_notnewr r r transformGsD       zFixHasKey.transformN)__name__ __module__ __qualname__Z BM_compatibleZPATTERNr%r r r r r&srN)rrZ fixer_utilrrZBaseFixrr r r r !s