You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 00:45:53 +08:00
Move fstring rules inside a 3.6+ check
This commit is contained in:
@@ -142,9 +142,9 @@ def test_uncompyle_fstring(fstring):
|
|||||||
|
|
||||||
@pytest.mark.skipif(PYTHON_VERSION < 3.6, reason='need at least python 3.6')
|
@pytest.mark.skipif(PYTHON_VERSION < 3.6, reason='need at least python 3.6')
|
||||||
@pytest.mark.parametrize('fstring', [
|
@pytest.mark.parametrize('fstring', [
|
||||||
#"f'{abc}{abc!s}'",
|
"f'{abc}{abc!s}'",
|
||||||
"f'{abc}0'",
|
"f'{abc}0'",
|
||||||
])
|
])
|
||||||
def test_uncompyle_direct(fstring):
|
def test_uncompyle_direct(fstring):
|
||||||
"""useful for debugging"""
|
"""useful for debugging"""
|
||||||
run_test(fstring)
|
run_test(fstring)
|
||||||
|
Binary file not shown.
@@ -1,3 +1,5 @@
|
|||||||
var1 = 'x'
|
var1 = 'x'
|
||||||
var2 = 'y'
|
var2 = 'y'
|
||||||
print(f'interpolate {var1} strings {var2!r} {var2!s} py36')
|
print(f'interpolate {var1} strings {var2!r} {var2!s} py36')
|
||||||
|
print(f'{abc}0')
|
||||||
|
print(f'{abc}{abc!s}')
|
||||||
|
@@ -514,12 +514,11 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
self.name = None
|
self.name = None
|
||||||
self.version = version
|
self.version = version
|
||||||
self.is_pypy = is_pypy
|
self.is_pypy = is_pypy
|
||||||
|
|
||||||
self.customize_for_version(is_pypy, version)
|
self.customize_for_version(is_pypy, version)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@staticmethod
|
def customize_for_version(self, is_pypy, version):
|
||||||
def customize_for_version(is_pypy, version):
|
|
||||||
if is_pypy:
|
if is_pypy:
|
||||||
########################
|
########################
|
||||||
# PyPy changes
|
# PyPy changes
|
||||||
@@ -632,10 +631,26 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
# Python 3.6+ Additions
|
# Python 3.6+ Additions
|
||||||
#######################
|
#######################
|
||||||
TABLE_DIRECT.update({
|
TABLE_DIRECT.update({
|
||||||
'fstring_expr': ( "{%c%{conversion}}", 0),
|
'fstring_expr': ( "{%c%{conversion}}", 0),
|
||||||
'fstring_single': ( "f'{%c%{conversion}}'", 0),
|
'fstring_single': ( "f'{%c%{conversion}}'", 0),
|
||||||
'fstring_multi': ( "f'%c'", 0),
|
'fstring_multi': ( "f'%c'", 0),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
FSTRING_CONVERSION_MAP = {1: '!s', 2: '!r', 3: '!a'}
|
||||||
|
def f_conversion(node):
|
||||||
|
node.conversion = FSTRING_CONVERSION_MAP.get(node.data[1].attr, '')
|
||||||
|
|
||||||
|
def n_fstring_expr(node):
|
||||||
|
f_conversion(node)
|
||||||
|
self.default(node)
|
||||||
|
self.n_fstring_expr = n_fstring_expr
|
||||||
|
|
||||||
|
def n_fstring_single(node):
|
||||||
|
f_conversion(node)
|
||||||
|
self.default(node)
|
||||||
|
|
||||||
|
self.n_fstring_single = n_fstring_single
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
f = property(lambda s: s.params['f'],
|
f = property(lambda s: s.params['f'],
|
||||||
@@ -1888,15 +1903,6 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
node[-2][0].type = 'unpack_w_parens'
|
node[-2][0].type = 'unpack_w_parens'
|
||||||
self.default(node)
|
self.default(node)
|
||||||
|
|
||||||
FSTRING_CONVERSION_MAP = {1: '!s', 2: '!r', 3: '!a'}
|
|
||||||
|
|
||||||
def n_fstring_expr(self, node):
|
|
||||||
node.conversion = self.FSTRING_CONVERSION_MAP.get(node.data[1].attr, '')
|
|
||||||
self.default(node)
|
|
||||||
|
|
||||||
def n_fstring_single(self, node):
|
|
||||||
return self.n_fstring_expr(node)
|
|
||||||
|
|
||||||
def engine(self, entry, startnode):
|
def engine(self, entry, startnode):
|
||||||
"""The format template interpetation engine. See the comment at the
|
"""The format template interpetation engine. See the comment at the
|
||||||
beginning of this module for the how we interpret format specifications such as
|
beginning of this module for the how we interpret format specifications such as
|
||||||
|
Reference in New Issue
Block a user