Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
my2to3
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Bryton Lacquement
my2to3
Commits
dc99b9f8
Commit
dc99b9f8
authored
Jun 08, 2020
by
Bryton Lacquement
🚪
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New fixer: fix_division
parent
6ec5b62b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
59 additions
and
0 deletions
+59
-0
my2to3/fixes/fix_division.py
my2to3/fixes/fix_division.py
+59
-0
No files found.
my2to3/fixes/fix_division.py
0 → 100644
View file @
dc99b9f8
import
builtins
from
collections
import
defaultdict
import
lib2to3.fixer_base
import
os
import
re
trace_file_match
=
re
.
compile
(
r"^(.*):(.*):(.*) <type '(.*)'> / <type '(.*)'>$"
).
match
def
parse_trace_data
(
filepath
):
def
tree
():
return
defaultdict
(
tree
)
traces
=
tree
()
with
open
(
filepath
)
as
f
:
for
line
in
f
:
file
,
lineno
,
id_
,
dividend_type
,
divisor_type
=
trace_file_match
(
line
).
groups
()
lineno
=
int
(
lineno
)
id_
=
int
(
id_
)
dividend_type
=
getattr
(
builtins
,
dividend_type
)
divisor_type
=
getattr
(
builtins
,
divisor_type
)
t
=
traces
[
file
][
lineno
]
data
=
(
dividend_type
,
divisor_type
)
if
id_
in
t
:
t
[
id_
].
add
(
data
)
else
:
t
[
id_
]
=
{
data
}
return
traces
class
FixDivision
(
lib2to3
.
fixer_base
.
BaseFix
):
"""Rewrites division_traced(n, a, b) into Py2/Py3-compatible division
The `TRACE_FILE` environment variable must point to the trace data file. See
`fix_trace_division.py` for more details.
"""
traces
=
parse_trace_data
(
os
.
environ
[
"TRACE_FILE"
])
# Inspired by https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_xrange.py#L14
PATTERN
=
"""
power<'division_traced' trailer< '(' args=any ')' >
rest=any* >
"""
def
start_tree
(
self
,
tree
,
filename
):
super
(
FixDivision
,
self
).
start_tree
(
tree
,
filename
)
self
.
absolute_filename
=
os
.
path
.
abspath
(
filename
)
def
transform
(
self
,
node
,
results
):
lineno
=
node
.
get_lineno
()
id_
=
int
(
node
.
children
[
1
].
children
[
1
].
children
[
0
].
value
)
data
=
self
.
traces
[
self
.
absolute_filename
][
lineno
][
id_
]
# TODO: analyse `data`, and replace the node to rewrite code
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment