home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- '''Adjust some old Python 2 idioms to their modern counterparts.
-
- * Change some type comparisons to isinstance() calls:
- type(x) == T -> isinstance(x, T)
- type(x) is T -> isinstance(x, T)
- type(x) != T -> not isinstance(x, T)
- type(x) is not T -> not isinstance(x, T)
-
- * Change "while 1:" into "while True:".
-
- * Change both
-
- v = list(EXPR)
- v.sort()
- foo(v)
-
- and the more general
-
- v = EXPR
- v.sort()
- foo(v)
-
- into
-
- v = sorted(EXPR)
- foo(v)
- '''
- from import fixer_base
- from fixer_util import Call, Comma, Name, Node, syms
- CMP = "(n='!=' | '==' | 'is' | n=comp_op< 'is' 'not' >)"
- TYPE = "power< 'type' trailer< '(' x=any ')' > >"
-
- class FixIdioms(fixer_base.BaseFix):
- explicit = True
- PATTERN = "\n isinstance=comparison< %s %s T=any >\n |\n isinstance=comparison< T=any %s %s >\n |\n while_stmt< 'while' while='1' ':' any+ >\n |\n sorted=any<\n any*\n simple_stmt<\n expr_stmt< id1=any '='\n power< list='list' trailer< '(' (not arglist<any+>) any ')' > >\n >\n '\\n'\n >\n sort=\n simple_stmt<\n power< id2=any\n trailer< '.' 'sort' > trailer< '(' ')' >\n >\n '\\n'\n >\n next=any*\n >\n |\n sorted=any<\n any*\n simple_stmt< expr_stmt< id1=any '=' expr=any > '\\n' >\n sort=\n simple_stmt<\n power< id2=any\n trailer< '.' 'sort' > trailer< '(' ')' >\n >\n '\\n'\n >\n next=any*\n >\n " % (TYPE, CMP, CMP, TYPE)
-
- def match(self, node):
- r = super(FixIdioms, self).match(node)
- if r and 'sorted' in r:
- if r['id1'] == r['id2']:
- return r
- return None
- return r
-
-
- def transform(self, node, results):
- if 'isinstance' in results:
- return self.transform_isinstance(node, results)
- if 'while' in results:
- return self.transform_while(node, results)
- if 'sorted' in results:
- return self.transform_sort(node, results)
- raise RuntimeError('Invalid match')
-
-
- def transform_isinstance(self, node, results):
- x = results['x'].clone()
- T = results['T'].clone()
- x.set_prefix('')
- T.set_prefix(' ')
- test = Call(Name('isinstance'), [
- x,
- Comma(),
- T])
- if 'n' in results:
- test.set_prefix(' ')
- test = Node(syms.not_test, [
- Name('not'),
- test])
-
- test.set_prefix(node.get_prefix())
- return test
-
-
- def transform_while(self, node, results):
- one = results['while']
- one.replace(Name('True', prefix = one.get_prefix()))
-
-
- def transform_sort(self, node, results):
- sort_stmt = results['sort']
- next_stmt = results['next']
- list_call = results.get('list')
- simple_expr = results.get('expr')
- if list_call:
- list_call.replace(Name('sorted', prefix = list_call.get_prefix()))
- elif simple_expr:
- new = simple_expr.clone()
- new.set_prefix('')
- simple_expr.replace(Call(Name('sorted'), [
- new], prefix = simple_expr.get_prefix()))
- else:
- raise RuntimeError('should not have reached here')
- list_call.remove()
- if next_stmt:
- next_stmt[0].set_prefix(sort_stmt.get_prefix())
-
-
-
-