î
i f– ã @ si d Z d d l m Z d d l m Z d d l m Z d d l m Z m Z Gd d „ d e j ƒ Z
d S) a& Fixer for has_key().
Calls to .has_key() methods are expressed in terms of the 'in'
operator:
d.has_key(k) -> k in d
CAVEATS:
1) While the primary target of this fixer is dict.has_key(), the
fixer will change any has_key() method call, regardless of its
class.
2) Cases like this will not be converted:
m = d.has_key
if m(k):
...
Only *calls* to has_key() are converted. While it is possible to
convert the above to something like
m = d.__contains__
if m(k):
...
this is currently not done.
é )Úpytree)Útoken)Ú
fixer_base)ÚNameÚparenthesizec @ s( e Z d Z d Z d Z d d „ Z d S)Ú FixHasKeyTa•
anchor=power<
before=any+
trailer< '.' 'has_key' >
trailer<
'('
( not(arglist | argument) arg=any
| arglist<(not argument) arg=any ','>
)
')'
>
after=any*
>
|
negation=not_test<
'not'
anchor=power<
before=any+
trailer< '.' 'has_key' >
trailer<
'('
( not(arglist | argument) arg=any
| arglist<(not argument) arg=any ','>
)
')'
>
>
>
c
C s= | s t ‚ | j } | j j | j k rC | j j | j ƒ rC d S| j d ƒ } | d } | j } d d „ | d Dƒ } | d j ƒ } | j d ƒ } | r· d d „ | Dƒ } n | j | j
| j | j | j | j
| j | j f k rÿ t | ƒ } n t | ƒ d k r| d
} n t j | j | ƒ } d | _ t d d
d ƒ}
| r„t d d
d ƒ} t j | j | |
f ƒ }
n t j | j
| |
| f ƒ } | rÙt | ƒ } t j | j | f t | ƒ ƒ } n | j j | j
| j | j | j | j | j | j | j | j f k r0t | ƒ } n | | _ | S)NÚnegationÚanchorc S s g | ] } | j ƒ ‘ q S© )Úclone)Ú.0Únr
r
ú>/opt/alt/python34/lib64/python3.4/lib2to3/fixes/fix_has_key.pyú
S s z'FixHasKey.transform..ÚbeforeÚargÚafterc S s g | ] } | j ƒ ‘ q Sr
)r )r r
r
r
r r W s é é ú ÚinÚprefixÚnot)ÚAssertionErrorÚsymsÚparentÚtypeZnot_testÚpatternÚmatchÚgetr r Z
comparisonZand_testZor_testZtestZlambdefZargumentr Úlenr ZNodeZpowerr Zcomp_opÚtupleÚexprZxor_exprZand_exprZ
shift_exprZ
arith_exprZtermZfactor)
ÚselfZnodeZresultsr r r r r r r Zn_opZn_notÚnewr
r
r Ú transformH sF
!
% zFixHasKey.transformN)Ú__name__Ú
__module__Ú__qualname__Z
BM_compatibleZPATTERNr% r
r
r
r r ' s r N)Ú__doc__Ú r Zpgen2r r Z
fixer_utilr r ZBaseFixr r
r
r
r Ú s