2008-03-19 01:43:46 -03:00
|
|
|
#!/usr/bin/env python2.5
|
|
|
|
# Copyright 2006 Google, Inc. All Rights Reserved.
|
|
|
|
# Licensed to PSF under a Contributor Agreement.
|
|
|
|
|
|
|
|
"""Refactoring framework.
|
|
|
|
|
|
|
|
Used as a main program, this can refactor any number of files and/or
|
|
|
|
recursively descend down directories. Imported as a module, this
|
|
|
|
provides infrastructure to write your own refactoring tool.
|
|
|
|
"""
|
|
|
|
|
|
|
|
__author__ = "Guido van Rossum <guido@python.org>"
|
|
|
|
|
|
|
|
|
|
|
|
# Python imports
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
import difflib
|
|
|
|
import logging
|
2008-09-02 21:21:32 -03:00
|
|
|
import operator
|
2008-05-02 18:30:20 -03:00
|
|
|
from collections import defaultdict
|
|
|
|
from itertools import chain
|
2008-03-19 01:43:46 -03:00
|
|
|
|
|
|
|
# Local imports
|
|
|
|
from .pgen2 import driver
|
|
|
|
from .pgen2 import tokenize
|
|
|
|
|
|
|
|
from . import pytree
|
|
|
|
from . import patcomp
|
|
|
|
from . import fixes
|
|
|
|
from . import pygram
|
|
|
|
|
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
def get_all_fix_names(fixer_pkg, remove_prefix=True):
|
|
|
|
"""Return a sorted list of all available fix names in the given package."""
|
|
|
|
pkg = __import__(fixer_pkg, [], [], ["*"])
|
|
|
|
fixer_dir = os.path.dirname(pkg.__file__)
|
2008-03-19 01:43:46 -03:00
|
|
|
fix_names = []
|
Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
................
r66801 | andrew.kuchling | 2008-10-04 23:51:59 +0200 (Sat, 04 Oct 2008) | 1 line
Punctuation fix; expand dict.update docstring to be clearer
................
r66803 | benjamin.peterson | 2008-10-05 00:15:31 +0200 (Sun, 05 Oct 2008) | 1 line
fix typo
................
r66804 | andrew.kuchling | 2008-10-05 02:11:56 +0200 (Sun, 05 Oct 2008) | 1 line
#1415508 from Rocky Bernstein: add docstrings for enable_interspersed_args(), disable_interspersed_args()
................
r66813 | andrew.kuchling | 2008-10-06 14:07:04 +0200 (Mon, 06 Oct 2008) | 3 lines
Per Greg Ward, optparse is no longer being externally maintained.
I'll look at the bugs in the Optik bug tracker and copy them to the Python bug
tracker if they're still relevant.
................
r66854 | georg.brandl | 2008-10-08 19:20:20 +0200 (Wed, 08 Oct 2008) | 2 lines
#4059: patch up some sqlite docs.
................
r66855 | georg.brandl | 2008-10-08 19:30:55 +0200 (Wed, 08 Oct 2008) | 2 lines
#4058: fix some whatsnew markup.
................
r66856 | georg.brandl | 2008-10-08 20:47:17 +0200 (Wed, 08 Oct 2008) | 3 lines
#3935: properly support list subclasses in the C impl. of bisect.
Patch reviewed by Raymond.
................
r66866 | benjamin.peterson | 2008-10-09 22:54:43 +0200 (Thu, 09 Oct 2008) | 1 line
update paragraph about __future__ for 2.6
................
r66870 | armin.rigo | 2008-10-10 10:40:44 +0200 (Fri, 10 Oct 2008) | 2 lines
Typo: "ThreadError" is the name in the C source.
................
r66871 | benjamin.peterson | 2008-10-10 22:38:49 +0200 (Fri, 10 Oct 2008) | 1 line
fix a small typo
................
r66872 | benjamin.peterson | 2008-10-10 22:51:37 +0200 (Fri, 10 Oct 2008) | 1 line
talk about how you can unzip with zip
................
r66874 | benjamin.peterson | 2008-10-11 00:23:41 +0200 (Sat, 11 Oct 2008) | 1 line
PyGILState_Acquire -> PyGILState_Ensure
................
r66887 | benjamin.peterson | 2008-10-13 23:51:40 +0200 (Mon, 13 Oct 2008) | 1 line
document how to disable fixers
................
r66903 | benjamin.peterson | 2008-10-15 22:34:09 +0200 (Wed, 15 Oct 2008) | 1 line
don't recurse into directories that start with '.'
................
r66905 | benjamin.peterson | 2008-10-15 23:05:55 +0200 (Wed, 15 Oct 2008) | 1 line
support the optional line argument for idle
................
r66911 | benjamin.peterson | 2008-10-16 01:10:28 +0200 (Thu, 16 Oct 2008) | 41 lines
Merged revisions 66805,66841,66860,66884-66886,66893,66907,66910 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66805 | benjamin.peterson | 2008-10-04 20:11:02 -0500 (Sat, 04 Oct 2008) | 1 line
mention what the fixes directory is for
........
r66841 | benjamin.peterson | 2008-10-07 17:48:12 -0500 (Tue, 07 Oct 2008) | 1 line
use assertFalse and assertTrue
........
r66860 | benjamin.peterson | 2008-10-08 16:05:07 -0500 (Wed, 08 Oct 2008) | 1 line
instead of abusing the pattern matcher, use start_tree to find a next binding
........
r66884 | benjamin.peterson | 2008-10-13 15:50:30 -0500 (Mon, 13 Oct 2008) | 1 line
don't print tokens to stdout when -v is given
........
r66885 | benjamin.peterson | 2008-10-13 16:28:57 -0500 (Mon, 13 Oct 2008) | 1 line
add the -x option to disable fixers
........
r66886 | benjamin.peterson | 2008-10-13 16:33:53 -0500 (Mon, 13 Oct 2008) | 1 line
cut down on some crud
........
r66893 | benjamin.peterson | 2008-10-14 17:16:54 -0500 (Tue, 14 Oct 2008) | 1 line
add an optional set literal fixer
........
r66907 | benjamin.peterson | 2008-10-15 16:59:41 -0500 (Wed, 15 Oct 2008) | 1 line
don't write backup files by default
........
r66910 | benjamin.peterson | 2008-10-15 17:43:10 -0500 (Wed, 15 Oct 2008) | 1 line
add the -n option; it stops backupfiles from being written
........
................
r66913 | benjamin.peterson | 2008-10-16 20:52:14 +0200 (Thu, 16 Oct 2008) | 1 line
document that deque indexing is O(n) #4123
................
r66927 | andrew.kuchling | 2008-10-16 22:15:47 +0200 (Thu, 16 Oct 2008) | 1 line
Fix wording (2.6.1 backport candidate)
................
r66932 | benjamin.peterson | 2008-10-16 23:09:28 +0200 (Thu, 16 Oct 2008) | 1 line
check for error conditions in _json #3623
................
r66938 | benjamin.peterson | 2008-10-16 23:27:54 +0200 (Thu, 16 Oct 2008) | 1 line
fix possible ref leak
................
r66942 | benjamin.peterson | 2008-10-16 23:48:06 +0200 (Thu, 16 Oct 2008) | 1 line
fix more possible ref leaks in _json and use Py_CLEAR
................
r66962 | benjamin.peterson | 2008-10-17 22:01:01 +0200 (Fri, 17 Oct 2008) | 1 line
clarify CALL_FUNCTION #4141
................
r66964 | georg.brandl | 2008-10-17 23:41:49 +0200 (Fri, 17 Oct 2008) | 2 lines
Fix duplicate word.
................
r66973 | armin.ronacher | 2008-10-19 10:27:43 +0200 (Sun, 19 Oct 2008) | 3 lines
Fixed #4067 by implementing _attributes and _fields for the AST root node.
................
r66974 | benjamin.peterson | 2008-10-19 15:59:01 +0200 (Sun, 19 Oct 2008) | 1 line
fix compiler warning
................
r66977 | benjamin.peterson | 2008-10-19 21:39:16 +0200 (Sun, 19 Oct 2008) | 1 line
mention -n
................
r66992 | benjamin.peterson | 2008-10-21 22:51:13 +0200 (Tue, 21 Oct 2008) | 1 line
make sure to call iteritems()
................
r66998 | benjamin.peterson | 2008-10-22 22:57:43 +0200 (Wed, 22 Oct 2008) | 1 line
fix a few typos
................
r66999 | benjamin.peterson | 2008-10-22 23:05:30 +0200 (Wed, 22 Oct 2008) | 1 line
and another typo...
................
r67002 | hirokazu.yamamoto | 2008-10-23 02:37:33 +0200 (Thu, 23 Oct 2008) | 1 line
Issue #4183: Some tests didn't run with pickle.HIGHEST_PROTOCOL.
................
r67005 | walter.doerwald | 2008-10-23 15:11:39 +0200 (Thu, 23 Oct 2008) | 2 lines
Use the correct names of the stateless codec functions (Fixes issue 4178).
................
r67007 | benjamin.peterson | 2008-10-23 23:43:48 +0200 (Thu, 23 Oct 2008) | 1 line
only nonempty __slots__ don't work
................
r67028 | benjamin.peterson | 2008-10-26 01:27:07 +0200 (Sun, 26 Oct 2008) | 1 line
don't use a catch-all
................
r67040 | armin.rigo | 2008-10-28 18:01:21 +0100 (Tue, 28 Oct 2008) | 5 lines
Fix one of the tests: it relied on being present in an "output test" in
order to actually test what it was supposed to test, i.e. that the code
in the __del__ method did not crash. Use instead the new helper
test_support.captured_output().
................
r67041 | benjamin.peterson | 2008-10-29 21:33:00 +0100 (Wed, 29 Oct 2008) | 1 line
mention the version gettempdir() was added
................
r67044 | amaury.forgeotdarc | 2008-10-30 00:15:57 +0100 (Thu, 30 Oct 2008) | 3 lines
Correct error message in io.open():
closefd=True is the only accepted value with a file name.
................
r67070 | benjamin.peterson | 2008-10-31 21:41:44 +0100 (Fri, 31 Oct 2008) | 1 line
rephrase has_key doc
................
r67089 | benjamin.peterson | 2008-11-03 21:43:20 +0100 (Mon, 03 Nov 2008) | 1 line
clarify by splitting into multiple paragraphs
................
r67091 | benjamin.peterson | 2008-11-03 23:34:57 +0100 (Mon, 03 Nov 2008) | 1 line
move a FileIO test to test_fileio
................
r67101 | georg.brandl | 2008-11-04 21:49:35 +0100 (Tue, 04 Nov 2008) | 2 lines
#4167: fix markup glitches.
................
r67117 | georg.brandl | 2008-11-06 11:17:58 +0100 (Thu, 06 Nov 2008) | 2 lines
#4268: Use correct module for two toplevel functions.
................
r67118 | georg.brandl | 2008-11-06 11:19:11 +0100 (Thu, 06 Nov 2008) | 2 lines
#4267: small fixes in sqlite3 docs.
................
r67119 | georg.brandl | 2008-11-06 11:20:49 +0100 (Thu, 06 Nov 2008) | 2 lines
#4245: move Thread section to the top.
................
r67123 | georg.brandl | 2008-11-06 19:49:15 +0100 (Thu, 06 Nov 2008) | 2 lines
#4247: add "pass" examples to tutorial.
................
r67124 | andrew.kuchling | 2008-11-06 20:23:02 +0100 (Thu, 06 Nov 2008) | 1 line
Fix grammar error; reword two paragraphs
................
2008-11-07 04:56:27 -04:00
|
|
|
for name in sorted(os.listdir(fixer_dir)):
|
2008-03-19 01:43:46 -03:00
|
|
|
if name.startswith("fix_") and name.endswith(".py"):
|
2008-09-02 21:21:32 -03:00
|
|
|
if remove_prefix:
|
|
|
|
name = name[4:]
|
|
|
|
fix_names.append(name[:-3])
|
2008-03-19 01:43:46 -03:00
|
|
|
return fix_names
|
|
|
|
|
2008-05-02 18:30:20 -03:00
|
|
|
def get_head_types(pat):
|
|
|
|
""" Accepts a pytree Pattern Node and returns a set
|
|
|
|
of the pattern types which will match first. """
|
|
|
|
|
|
|
|
if isinstance(pat, (pytree.NodePattern, pytree.LeafPattern)):
|
|
|
|
# NodePatters must either have no type and no content
|
|
|
|
# or a type and content -- so they don't get any farther
|
|
|
|
# Always return leafs
|
|
|
|
return set([pat.type])
|
|
|
|
|
|
|
|
if isinstance(pat, pytree.NegatedPattern):
|
|
|
|
if pat.content:
|
|
|
|
return get_head_types(pat.content)
|
|
|
|
return set([None]) # Negated Patterns don't have a type
|
|
|
|
|
|
|
|
if isinstance(pat, pytree.WildcardPattern):
|
|
|
|
# Recurse on each node in content
|
|
|
|
r = set()
|
|
|
|
for p in pat.content:
|
|
|
|
for x in p:
|
|
|
|
r.update(get_head_types(x))
|
|
|
|
return r
|
|
|
|
|
|
|
|
raise Exception("Oh no! I don't understand pattern %s" %(pat))
|
|
|
|
|
|
|
|
def get_headnode_dict(fixer_list):
|
|
|
|
""" Accepts a list of fixers and returns a dictionary
|
|
|
|
of head node type --> fixer list. """
|
|
|
|
head_nodes = defaultdict(list)
|
|
|
|
for fixer in fixer_list:
|
|
|
|
if not fixer.pattern:
|
|
|
|
head_nodes[None].append(fixer)
|
|
|
|
continue
|
|
|
|
for t in get_head_types(fixer.pattern):
|
|
|
|
head_nodes[t].append(fixer)
|
|
|
|
return head_nodes
|
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
def get_fixers_from_package(pkg_name):
|
|
|
|
"""
|
|
|
|
Return the fully qualified names for fixers in the package pkg_name.
|
|
|
|
"""
|
|
|
|
return [pkg_name + "." + fix_name
|
|
|
|
for fix_name in get_all_fix_names(pkg_name, False)]
|
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
class FixerError(Exception):
|
|
|
|
"""A fixer could not be loaded."""
|
|
|
|
|
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
class RefactoringTool(object):
|
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
_default_options = {"print_function": False}
|
|
|
|
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
CLASS_PREFIX = "Fix" # The prefix for fixer classes
|
|
|
|
FILE_PREFIX = "fix_" # The prefix for modules with a fixer within
|
|
|
|
|
|
|
|
def __init__(self, fixer_names, options=None, explicit=None):
|
2008-03-19 01:43:46 -03:00
|
|
|
"""Initializer.
|
|
|
|
|
Merged revisions 63661,63666,63695,63711,63729,63769,63790,63880,63886 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r63661 | georg.brandl | 2008-05-26 05:26:20 -0500 (Mon, 26 May 2008) | 2 lines
Add import fixes for dbm package.
........
r63666 | georg.brandl | 2008-05-26 05:49:09 -0500 (Mon, 26 May 2008) | 2 lines
Add xmlrpc package fixes.
........
r63695 | georg.brandl | 2008-05-26 10:14:33 -0500 (Mon, 26 May 2008) | 2 lines
Add fixer entries for http package.
........
r63711 | benjamin.peterson | 2008-05-26 13:43:51 -0500 (Mon, 26 May 2008) | 2 lines
add import mapping for test.test_support -> test.support
........
r63729 | benjamin.peterson | 2008-05-26 16:31:03 -0500 (Mon, 26 May 2008) | 2 lines
mapping for commands module -> subprocess
........
r63769 | brett.cannon | 2008-05-29 00:13:13 -0500 (Thu, 29 May 2008) | 1 line
Fixer for UserString.UserString over to the collections module.
........
r63790 | brett.cannon | 2008-05-29 14:13:51 -0500 (Thu, 29 May 2008) | 4 lines
Add a fixer for UserList.
Closes issue #2878. Thanks to Quentin Gallet-Gilles for the patch.
........
r63880 | collin.winter | 2008-06-01 18:09:38 -0500 (Sun, 01 Jun 2008) | 6 lines
Move lib2to3/fixes/{basefix,util}.py down to lib2to3/.
This is step 1 of turning lib2to3/ into a general-purpose refactoring
library, reusable by other projects.
........
r63886 | collin.winter | 2008-06-01 22:15:01 -0500 (Sun, 01 Jun 2008) | 5 lines
Allow refactoring tools to specify a directory for fixer modules.
This is step 2 of turning lib2to3/ into a general-purpose refactoring
library, reusable by other projects. Step 1: r63880.
........
2008-06-14 23:31:05 -03:00
|
|
|
Args:
|
2008-09-02 21:21:32 -03:00
|
|
|
fixer_names: a list of fixers to import
|
|
|
|
options: an dict with configuration.
|
|
|
|
explicit: a list of fixers to run even if they are explicit.
|
2008-03-19 01:43:46 -03:00
|
|
|
"""
|
2008-09-02 21:21:32 -03:00
|
|
|
self.fixers = fixer_names
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
self.explicit = explicit or []
|
2008-09-02 21:21:32 -03:00
|
|
|
self.options = self._default_options.copy()
|
|
|
|
if options is not None:
|
|
|
|
self.options.update(options)
|
2008-03-19 01:43:46 -03:00
|
|
|
self.errors = []
|
|
|
|
self.logger = logging.getLogger("RefactoringTool")
|
|
|
|
self.fixer_log = []
|
2008-09-02 21:21:32 -03:00
|
|
|
self.wrote = False
|
|
|
|
if self.options["print_function"]:
|
2008-03-19 01:43:46 -03:00
|
|
|
del pygram.python_grammar.keywords["print"]
|
|
|
|
self.driver = driver.Driver(pygram.python_grammar,
|
|
|
|
convert=pytree.convert,
|
|
|
|
logger=self.logger)
|
|
|
|
self.pre_order, self.post_order = self.get_fixers()
|
2008-05-02 18:30:20 -03:00
|
|
|
|
|
|
|
self.pre_order = get_headnode_dict(self.pre_order)
|
|
|
|
self.post_order = get_headnode_dict(self.post_order)
|
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
self.files = [] # List of files that were or should be modified
|
|
|
|
|
|
|
|
def get_fixers(self):
|
|
|
|
"""Inspects the options to load the requested patterns and handlers.
|
2008-03-19 02:22:42 -03:00
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
Returns:
|
|
|
|
(pre_order, post_order), where pre_order is the list of fixers that
|
|
|
|
want a pre-order AST traversal, and post_order is the list that want
|
|
|
|
post-order traversal.
|
|
|
|
"""
|
|
|
|
pre_order_fixers = []
|
|
|
|
post_order_fixers = []
|
2008-09-02 21:21:32 -03:00
|
|
|
for fix_mod_path in self.fixers:
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
mod = __import__(fix_mod_path, {}, {}, ["*"])
|
2008-09-02 21:21:32 -03:00
|
|
|
fix_name = fix_mod_path.rsplit(".", 1)[-1]
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
if fix_name.startswith(self.FILE_PREFIX):
|
|
|
|
fix_name = fix_name[len(self.FILE_PREFIX):]
|
2008-03-19 01:43:46 -03:00
|
|
|
parts = fix_name.split("_")
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
class_name = self.CLASS_PREFIX + "".join([p.title() for p in parts])
|
2008-03-19 01:43:46 -03:00
|
|
|
try:
|
|
|
|
fix_class = getattr(mod, class_name)
|
|
|
|
except AttributeError:
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
raise FixerError("Can't find %s.%s" % (fix_name, class_name))
|
|
|
|
fixer = fix_class(self.options, self.fixer_log)
|
2008-09-02 21:21:32 -03:00
|
|
|
if fixer.explicit and self.explicit is not True and \
|
|
|
|
fix_mod_path not in self.explicit:
|
2008-03-19 01:43:46 -03:00
|
|
|
self.log_message("Skipping implicit fixer: %s", fix_name)
|
|
|
|
continue
|
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
self.log_debug("Adding transformation: %s", fix_name)
|
2008-03-19 01:43:46 -03:00
|
|
|
if fixer.order == "pre":
|
|
|
|
pre_order_fixers.append(fixer)
|
|
|
|
elif fixer.order == "post":
|
|
|
|
post_order_fixers.append(fixer)
|
|
|
|
else:
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
raise FixerError("Illegal fixer order: %r" % fixer.order)
|
Merged revisions 61602-61723 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r61626 | david.wolever | 2008-03-19 17:19:16 +0100 (Mi, 19 Mär 2008) | 1 line
Added fixer for implicit local imports. See #2414.
........
r61628 | david.wolever | 2008-03-19 17:57:43 +0100 (Mi, 19 Mär 2008) | 1 line
Added a class for tests which should not run if a particular import is found.
........
r61629 | collin.winter | 2008-03-19 17:58:19 +0100 (Mi, 19 Mär 2008) | 1 line
Two more relative import fixes in pgen2.
........
r61635 | david.wolever | 2008-03-19 20:16:03 +0100 (Mi, 19 Mär 2008) | 1 line
Fixed print fixer so it will do the Right Thing when it encounters __future__.print_function. 2to3 gets upset, though, so the tests have been commented out.
........
r61637 | david.wolever | 2008-03-19 21:37:17 +0100 (Mi, 19 Mär 2008) | 3 lines
Added a fixer for itertools imports (from itertools import imap, ifilterfalse --> from itertools import filterfalse)
........
r61645 | david.wolever | 2008-03-19 23:22:35 +0100 (Mi, 19 Mär 2008) | 1 line
SVN is happier when you add the files you create... -_-'
........
r61654 | david.wolever | 2008-03-20 01:09:56 +0100 (Do, 20 Mär 2008) | 1 line
Added an explicit sort order to fixers -- fixes problems like #2427
........
r61664 | david.wolever | 2008-03-20 04:32:40 +0100 (Do, 20 Mär 2008) | 3 lines
Fixes #2428 -- comments are no longer eatten by __future__ fixer.
........
r61673 | david.wolever | 2008-03-20 17:22:40 +0100 (Do, 20 Mär 2008) | 1 line
Added 2to3 node pretty-printer
........
r61679 | david.wolever | 2008-03-20 20:50:42 +0100 (Do, 20 Mär 2008) | 1 line
Made node printing a little bit prettier
........
r61723 | martin.v.loewis | 2008-03-22 00:59:27 +0100 (Sa, 22 Mär 2008) | 2 lines
Fix whitespace.
........
2008-03-21 21:01:12 -03:00
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
key_func = operator.attrgetter("run_order")
|
|
|
|
pre_order_fixers.sort(key=key_func)
|
|
|
|
post_order_fixers.sort(key=key_func)
|
2008-03-19 01:43:46 -03:00
|
|
|
return (pre_order_fixers, post_order_fixers)
|
|
|
|
|
|
|
|
def log_error(self, msg, *args, **kwds):
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
"""Called when an error occurs."""
|
|
|
|
raise
|
2008-03-19 01:43:46 -03:00
|
|
|
|
|
|
|
def log_message(self, msg, *args):
|
|
|
|
"""Hook to log a message."""
|
|
|
|
if args:
|
|
|
|
msg = msg % args
|
|
|
|
self.logger.info(msg)
|
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
def log_debug(self, msg, *args):
|
|
|
|
if args:
|
|
|
|
msg = msg % args
|
|
|
|
self.logger.debug(msg)
|
|
|
|
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
def print_output(self, lines):
|
|
|
|
"""Called with lines of output to give to the user."""
|
|
|
|
pass
|
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
def refactor(self, items, write=False, doctests_only=False):
|
|
|
|
"""Refactor a list of files and directories."""
|
|
|
|
for dir_or_file in items:
|
|
|
|
if os.path.isdir(dir_or_file):
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
self.refactor_dir(dir_or_file, write, doctests_only)
|
2008-03-19 01:43:46 -03:00
|
|
|
else:
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
self.refactor_file(dir_or_file, write, doctests_only)
|
2008-03-19 01:43:46 -03:00
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
def refactor_dir(self, dir_name, write=False, doctests_only=False):
|
2008-03-19 01:43:46 -03:00
|
|
|
"""Descends down a directory and refactor every Python file found.
|
|
|
|
|
|
|
|
Python files are assumed to have a .py extension.
|
|
|
|
|
|
|
|
Files and subdirectories starting with '.' are skipped.
|
|
|
|
"""
|
2008-09-02 21:21:32 -03:00
|
|
|
for dirpath, dirnames, filenames in os.walk(dir_name):
|
|
|
|
self.log_debug("Descending into %s", dirpath)
|
2008-03-19 01:43:46 -03:00
|
|
|
dirnames.sort()
|
|
|
|
filenames.sort()
|
|
|
|
for name in filenames:
|
|
|
|
if not name.startswith(".") and name.endswith("py"):
|
|
|
|
fullname = os.path.join(dirpath, name)
|
2008-09-02 21:21:32 -03:00
|
|
|
self.refactor_file(fullname, write, doctests_only)
|
2008-03-19 01:43:46 -03:00
|
|
|
# Modify dirnames in-place to remove subdirs with leading dots
|
|
|
|
dirnames[:] = [dn for dn in dirnames if not dn.startswith(".")]
|
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
def refactor_file(self, filename, write=False, doctests_only=False):
|
2008-03-19 01:43:46 -03:00
|
|
|
"""Refactors a file."""
|
|
|
|
try:
|
|
|
|
f = open(filename)
|
|
|
|
except IOError, err:
|
|
|
|
self.log_error("Can't open %s: %s", filename, err)
|
|
|
|
return
|
|
|
|
try:
|
|
|
|
input = f.read() + "\n" # Silence certain parse errors
|
|
|
|
finally:
|
|
|
|
f.close()
|
2008-09-02 21:21:32 -03:00
|
|
|
if doctests_only:
|
|
|
|
self.log_debug("Refactoring doctests in %s", filename)
|
2008-03-19 01:43:46 -03:00
|
|
|
output = self.refactor_docstring(input, filename)
|
|
|
|
if output != input:
|
2008-09-02 21:21:32 -03:00
|
|
|
self.processed_file(output, filename, input, write=write)
|
|
|
|
else:
|
|
|
|
self.log_debug("No doctest changes in %s", filename)
|
2008-03-19 01:43:46 -03:00
|
|
|
else:
|
|
|
|
tree = self.refactor_string(input, filename)
|
|
|
|
if tree and tree.was_changed:
|
|
|
|
# The [:-1] is to take off the \n we added earlier
|
2008-09-02 21:21:32 -03:00
|
|
|
self.processed_file(str(tree)[:-1], filename, write=write)
|
|
|
|
else:
|
|
|
|
self.log_debug("No changes in %s", filename)
|
2008-03-19 01:43:46 -03:00
|
|
|
|
|
|
|
def refactor_string(self, data, name):
|
|
|
|
"""Refactor a given input string.
|
2008-03-19 02:22:42 -03:00
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
Args:
|
|
|
|
data: a string holding the code to be refactored.
|
|
|
|
name: a human-readable name for use in error/log messages.
|
2008-03-19 02:22:42 -03:00
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
Returns:
|
|
|
|
An AST corresponding to the refactored input stream; None if
|
|
|
|
there were errors during the parse.
|
|
|
|
"""
|
|
|
|
try:
|
Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
................
r66801 | andrew.kuchling | 2008-10-04 23:51:59 +0200 (Sat, 04 Oct 2008) | 1 line
Punctuation fix; expand dict.update docstring to be clearer
................
r66803 | benjamin.peterson | 2008-10-05 00:15:31 +0200 (Sun, 05 Oct 2008) | 1 line
fix typo
................
r66804 | andrew.kuchling | 2008-10-05 02:11:56 +0200 (Sun, 05 Oct 2008) | 1 line
#1415508 from Rocky Bernstein: add docstrings for enable_interspersed_args(), disable_interspersed_args()
................
r66813 | andrew.kuchling | 2008-10-06 14:07:04 +0200 (Mon, 06 Oct 2008) | 3 lines
Per Greg Ward, optparse is no longer being externally maintained.
I'll look at the bugs in the Optik bug tracker and copy them to the Python bug
tracker if they're still relevant.
................
r66854 | georg.brandl | 2008-10-08 19:20:20 +0200 (Wed, 08 Oct 2008) | 2 lines
#4059: patch up some sqlite docs.
................
r66855 | georg.brandl | 2008-10-08 19:30:55 +0200 (Wed, 08 Oct 2008) | 2 lines
#4058: fix some whatsnew markup.
................
r66856 | georg.brandl | 2008-10-08 20:47:17 +0200 (Wed, 08 Oct 2008) | 3 lines
#3935: properly support list subclasses in the C impl. of bisect.
Patch reviewed by Raymond.
................
r66866 | benjamin.peterson | 2008-10-09 22:54:43 +0200 (Thu, 09 Oct 2008) | 1 line
update paragraph about __future__ for 2.6
................
r66870 | armin.rigo | 2008-10-10 10:40:44 +0200 (Fri, 10 Oct 2008) | 2 lines
Typo: "ThreadError" is the name in the C source.
................
r66871 | benjamin.peterson | 2008-10-10 22:38:49 +0200 (Fri, 10 Oct 2008) | 1 line
fix a small typo
................
r66872 | benjamin.peterson | 2008-10-10 22:51:37 +0200 (Fri, 10 Oct 2008) | 1 line
talk about how you can unzip with zip
................
r66874 | benjamin.peterson | 2008-10-11 00:23:41 +0200 (Sat, 11 Oct 2008) | 1 line
PyGILState_Acquire -> PyGILState_Ensure
................
r66887 | benjamin.peterson | 2008-10-13 23:51:40 +0200 (Mon, 13 Oct 2008) | 1 line
document how to disable fixers
................
r66903 | benjamin.peterson | 2008-10-15 22:34:09 +0200 (Wed, 15 Oct 2008) | 1 line
don't recurse into directories that start with '.'
................
r66905 | benjamin.peterson | 2008-10-15 23:05:55 +0200 (Wed, 15 Oct 2008) | 1 line
support the optional line argument for idle
................
r66911 | benjamin.peterson | 2008-10-16 01:10:28 +0200 (Thu, 16 Oct 2008) | 41 lines
Merged revisions 66805,66841,66860,66884-66886,66893,66907,66910 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66805 | benjamin.peterson | 2008-10-04 20:11:02 -0500 (Sat, 04 Oct 2008) | 1 line
mention what the fixes directory is for
........
r66841 | benjamin.peterson | 2008-10-07 17:48:12 -0500 (Tue, 07 Oct 2008) | 1 line
use assertFalse and assertTrue
........
r66860 | benjamin.peterson | 2008-10-08 16:05:07 -0500 (Wed, 08 Oct 2008) | 1 line
instead of abusing the pattern matcher, use start_tree to find a next binding
........
r66884 | benjamin.peterson | 2008-10-13 15:50:30 -0500 (Mon, 13 Oct 2008) | 1 line
don't print tokens to stdout when -v is given
........
r66885 | benjamin.peterson | 2008-10-13 16:28:57 -0500 (Mon, 13 Oct 2008) | 1 line
add the -x option to disable fixers
........
r66886 | benjamin.peterson | 2008-10-13 16:33:53 -0500 (Mon, 13 Oct 2008) | 1 line
cut down on some crud
........
r66893 | benjamin.peterson | 2008-10-14 17:16:54 -0500 (Tue, 14 Oct 2008) | 1 line
add an optional set literal fixer
........
r66907 | benjamin.peterson | 2008-10-15 16:59:41 -0500 (Wed, 15 Oct 2008) | 1 line
don't write backup files by default
........
r66910 | benjamin.peterson | 2008-10-15 17:43:10 -0500 (Wed, 15 Oct 2008) | 1 line
add the -n option; it stops backupfiles from being written
........
................
r66913 | benjamin.peterson | 2008-10-16 20:52:14 +0200 (Thu, 16 Oct 2008) | 1 line
document that deque indexing is O(n) #4123
................
r66927 | andrew.kuchling | 2008-10-16 22:15:47 +0200 (Thu, 16 Oct 2008) | 1 line
Fix wording (2.6.1 backport candidate)
................
r66932 | benjamin.peterson | 2008-10-16 23:09:28 +0200 (Thu, 16 Oct 2008) | 1 line
check for error conditions in _json #3623
................
r66938 | benjamin.peterson | 2008-10-16 23:27:54 +0200 (Thu, 16 Oct 2008) | 1 line
fix possible ref leak
................
r66942 | benjamin.peterson | 2008-10-16 23:48:06 +0200 (Thu, 16 Oct 2008) | 1 line
fix more possible ref leaks in _json and use Py_CLEAR
................
r66962 | benjamin.peterson | 2008-10-17 22:01:01 +0200 (Fri, 17 Oct 2008) | 1 line
clarify CALL_FUNCTION #4141
................
r66964 | georg.brandl | 2008-10-17 23:41:49 +0200 (Fri, 17 Oct 2008) | 2 lines
Fix duplicate word.
................
r66973 | armin.ronacher | 2008-10-19 10:27:43 +0200 (Sun, 19 Oct 2008) | 3 lines
Fixed #4067 by implementing _attributes and _fields for the AST root node.
................
r66974 | benjamin.peterson | 2008-10-19 15:59:01 +0200 (Sun, 19 Oct 2008) | 1 line
fix compiler warning
................
r66977 | benjamin.peterson | 2008-10-19 21:39:16 +0200 (Sun, 19 Oct 2008) | 1 line
mention -n
................
r66992 | benjamin.peterson | 2008-10-21 22:51:13 +0200 (Tue, 21 Oct 2008) | 1 line
make sure to call iteritems()
................
r66998 | benjamin.peterson | 2008-10-22 22:57:43 +0200 (Wed, 22 Oct 2008) | 1 line
fix a few typos
................
r66999 | benjamin.peterson | 2008-10-22 23:05:30 +0200 (Wed, 22 Oct 2008) | 1 line
and another typo...
................
r67002 | hirokazu.yamamoto | 2008-10-23 02:37:33 +0200 (Thu, 23 Oct 2008) | 1 line
Issue #4183: Some tests didn't run with pickle.HIGHEST_PROTOCOL.
................
r67005 | walter.doerwald | 2008-10-23 15:11:39 +0200 (Thu, 23 Oct 2008) | 2 lines
Use the correct names of the stateless codec functions (Fixes issue 4178).
................
r67007 | benjamin.peterson | 2008-10-23 23:43:48 +0200 (Thu, 23 Oct 2008) | 1 line
only nonempty __slots__ don't work
................
r67028 | benjamin.peterson | 2008-10-26 01:27:07 +0200 (Sun, 26 Oct 2008) | 1 line
don't use a catch-all
................
r67040 | armin.rigo | 2008-10-28 18:01:21 +0100 (Tue, 28 Oct 2008) | 5 lines
Fix one of the tests: it relied on being present in an "output test" in
order to actually test what it was supposed to test, i.e. that the code
in the __del__ method did not crash. Use instead the new helper
test_support.captured_output().
................
r67041 | benjamin.peterson | 2008-10-29 21:33:00 +0100 (Wed, 29 Oct 2008) | 1 line
mention the version gettempdir() was added
................
r67044 | amaury.forgeotdarc | 2008-10-30 00:15:57 +0100 (Thu, 30 Oct 2008) | 3 lines
Correct error message in io.open():
closefd=True is the only accepted value with a file name.
................
r67070 | benjamin.peterson | 2008-10-31 21:41:44 +0100 (Fri, 31 Oct 2008) | 1 line
rephrase has_key doc
................
r67089 | benjamin.peterson | 2008-11-03 21:43:20 +0100 (Mon, 03 Nov 2008) | 1 line
clarify by splitting into multiple paragraphs
................
r67091 | benjamin.peterson | 2008-11-03 23:34:57 +0100 (Mon, 03 Nov 2008) | 1 line
move a FileIO test to test_fileio
................
r67101 | georg.brandl | 2008-11-04 21:49:35 +0100 (Tue, 04 Nov 2008) | 2 lines
#4167: fix markup glitches.
................
r67117 | georg.brandl | 2008-11-06 11:17:58 +0100 (Thu, 06 Nov 2008) | 2 lines
#4268: Use correct module for two toplevel functions.
................
r67118 | georg.brandl | 2008-11-06 11:19:11 +0100 (Thu, 06 Nov 2008) | 2 lines
#4267: small fixes in sqlite3 docs.
................
r67119 | georg.brandl | 2008-11-06 11:20:49 +0100 (Thu, 06 Nov 2008) | 2 lines
#4245: move Thread section to the top.
................
r67123 | georg.brandl | 2008-11-06 19:49:15 +0100 (Thu, 06 Nov 2008) | 2 lines
#4247: add "pass" examples to tutorial.
................
r67124 | andrew.kuchling | 2008-11-06 20:23:02 +0100 (Thu, 06 Nov 2008) | 1 line
Fix grammar error; reword two paragraphs
................
2008-11-07 04:56:27 -04:00
|
|
|
tree = self.driver.parse_string(data)
|
2008-03-19 01:43:46 -03:00
|
|
|
except Exception, err:
|
|
|
|
self.log_error("Can't parse %s: %s: %s",
|
|
|
|
name, err.__class__.__name__, err)
|
|
|
|
return
|
2008-09-02 21:21:32 -03:00
|
|
|
self.log_debug("Refactoring %s", name)
|
2008-03-19 01:43:46 -03:00
|
|
|
self.refactor_tree(tree, name)
|
|
|
|
return tree
|
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
def refactor_stdin(self, doctests_only=False):
|
2008-03-19 01:43:46 -03:00
|
|
|
input = sys.stdin.read()
|
2008-09-02 21:21:32 -03:00
|
|
|
if doctests_only:
|
|
|
|
self.log_debug("Refactoring doctests in stdin")
|
2008-03-19 01:43:46 -03:00
|
|
|
output = self.refactor_docstring(input, "<stdin>")
|
|
|
|
if output != input:
|
2008-09-02 21:21:32 -03:00
|
|
|
self.processed_file(output, "<stdin>", input)
|
|
|
|
else:
|
|
|
|
self.log_debug("No doctest changes in stdin")
|
2008-03-19 01:43:46 -03:00
|
|
|
else:
|
|
|
|
tree = self.refactor_string(input, "<stdin>")
|
|
|
|
if tree and tree.was_changed:
|
2008-09-02 21:21:32 -03:00
|
|
|
self.processed_file(str(tree), "<stdin>", input)
|
|
|
|
else:
|
|
|
|
self.log_debug("No changes in stdin")
|
2008-03-19 01:43:46 -03:00
|
|
|
|
|
|
|
def refactor_tree(self, tree, name):
|
|
|
|
"""Refactors a parse tree (modifying the tree in place).
|
2008-03-19 02:22:42 -03:00
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
Args:
|
|
|
|
tree: a pytree.Node instance representing the root of the tree
|
|
|
|
to be refactored.
|
|
|
|
name: a human-readable name for this tree.
|
2008-03-19 02:22:42 -03:00
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
Returns:
|
|
|
|
True if the tree was modified, False otherwise.
|
|
|
|
"""
|
2008-05-02 18:30:20 -03:00
|
|
|
# Two calls to chain are required because pre_order.values()
|
|
|
|
# will be a list of lists of fixers:
|
|
|
|
# [[<fixer ...>, <fixer ...>], [<fixer ...>]]
|
|
|
|
all_fixers = chain(chain(*self.pre_order.values()),\
|
|
|
|
chain(*self.post_order.values()))
|
2008-03-19 01:43:46 -03:00
|
|
|
for fixer in all_fixers:
|
|
|
|
fixer.start_tree(tree, name)
|
|
|
|
|
|
|
|
self.traverse_by(self.pre_order, tree.pre_order())
|
|
|
|
self.traverse_by(self.post_order, tree.post_order())
|
|
|
|
|
|
|
|
for fixer in all_fixers:
|
|
|
|
fixer.finish_tree(tree, name)
|
|
|
|
return tree.was_changed
|
|
|
|
|
|
|
|
def traverse_by(self, fixers, traversal):
|
|
|
|
"""Traverse an AST, applying a set of fixers to each node.
|
2008-03-19 02:22:42 -03:00
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
This is a helper method for refactor_tree().
|
2008-03-19 02:22:42 -03:00
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
Args:
|
|
|
|
fixers: a list of fixer instances.
|
|
|
|
traversal: a generator that yields AST nodes.
|
2008-03-19 02:22:42 -03:00
|
|
|
|
2008-03-19 01:43:46 -03:00
|
|
|
Returns:
|
|
|
|
None
|
|
|
|
"""
|
|
|
|
if not fixers:
|
|
|
|
return
|
|
|
|
for node in traversal:
|
2008-05-02 18:30:20 -03:00
|
|
|
for fixer in fixers[node.type] + fixers[None]:
|
2008-03-19 01:43:46 -03:00
|
|
|
results = fixer.match(node)
|
|
|
|
if results:
|
|
|
|
new = fixer.transform(node, results)
|
|
|
|
if new is not None and (new != node or
|
|
|
|
str(new) != str(node)):
|
|
|
|
node.replace(new)
|
|
|
|
node = new
|
|
|
|
|
2008-09-02 21:21:32 -03:00
|
|
|
def processed_file(self, new_text, filename, old_text=None, write=False):
|
|
|
|
"""
|
|
|
|
Called when a file has been refactored, and there are changes.
|
2008-03-19 01:43:46 -03:00
|
|
|
"""
|
|
|
|
self.files.append(filename)
|
|
|
|
if old_text is None:
|
|
|
|
try:
|
|
|
|
f = open(filename, "r")
|
|
|
|
except IOError, err:
|
|
|
|
self.log_error("Can't read %s: %s", filename, err)
|
|
|
|
return
|
|
|
|
try:
|
|
|
|
old_text = f.read()
|
|
|
|
finally:
|
|
|
|
f.close()
|
|
|
|
if old_text == new_text:
|
2008-09-02 21:21:32 -03:00
|
|
|
self.log_debug("No changes to %s", filename)
|
2008-03-19 01:43:46 -03:00
|
|
|
return
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
self.print_output(diff_texts(old_text, new_text, filename))
|
2008-09-02 21:21:32 -03:00
|
|
|
if write:
|
2008-09-02 23:14:03 -03:00
|
|
|
self.write_file(new_text, filename, old_text)
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
else:
|
|
|
|
self.log_debug("Not writing changes to %s", filename)
|
2008-09-02 21:21:32 -03:00
|
|
|
|
Merged revisions 66801,66803-66804,66813,66854-66856,66866,66870-66872,66874,66887,66903,66905,66911,66913,66927,66932,66938,66942,66962,66964,66973-66974,66977,66992,66998-66999,67002,67005,67007,67028,67040-67041,67044,67070,67089,67091,67101,67117-67119,67123-67124 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
................
r66801 | andrew.kuchling | 2008-10-04 23:51:59 +0200 (Sat, 04 Oct 2008) | 1 line
Punctuation fix; expand dict.update docstring to be clearer
................
r66803 | benjamin.peterson | 2008-10-05 00:15:31 +0200 (Sun, 05 Oct 2008) | 1 line
fix typo
................
r66804 | andrew.kuchling | 2008-10-05 02:11:56 +0200 (Sun, 05 Oct 2008) | 1 line
#1415508 from Rocky Bernstein: add docstrings for enable_interspersed_args(), disable_interspersed_args()
................
r66813 | andrew.kuchling | 2008-10-06 14:07:04 +0200 (Mon, 06 Oct 2008) | 3 lines
Per Greg Ward, optparse is no longer being externally maintained.
I'll look at the bugs in the Optik bug tracker and copy them to the Python bug
tracker if they're still relevant.
................
r66854 | georg.brandl | 2008-10-08 19:20:20 +0200 (Wed, 08 Oct 2008) | 2 lines
#4059: patch up some sqlite docs.
................
r66855 | georg.brandl | 2008-10-08 19:30:55 +0200 (Wed, 08 Oct 2008) | 2 lines
#4058: fix some whatsnew markup.
................
r66856 | georg.brandl | 2008-10-08 20:47:17 +0200 (Wed, 08 Oct 2008) | 3 lines
#3935: properly support list subclasses in the C impl. of bisect.
Patch reviewed by Raymond.
................
r66866 | benjamin.peterson | 2008-10-09 22:54:43 +0200 (Thu, 09 Oct 2008) | 1 line
update paragraph about __future__ for 2.6
................
r66870 | armin.rigo | 2008-10-10 10:40:44 +0200 (Fri, 10 Oct 2008) | 2 lines
Typo: "ThreadError" is the name in the C source.
................
r66871 | benjamin.peterson | 2008-10-10 22:38:49 +0200 (Fri, 10 Oct 2008) | 1 line
fix a small typo
................
r66872 | benjamin.peterson | 2008-10-10 22:51:37 +0200 (Fri, 10 Oct 2008) | 1 line
talk about how you can unzip with zip
................
r66874 | benjamin.peterson | 2008-10-11 00:23:41 +0200 (Sat, 11 Oct 2008) | 1 line
PyGILState_Acquire -> PyGILState_Ensure
................
r66887 | benjamin.peterson | 2008-10-13 23:51:40 +0200 (Mon, 13 Oct 2008) | 1 line
document how to disable fixers
................
r66903 | benjamin.peterson | 2008-10-15 22:34:09 +0200 (Wed, 15 Oct 2008) | 1 line
don't recurse into directories that start with '.'
................
r66905 | benjamin.peterson | 2008-10-15 23:05:55 +0200 (Wed, 15 Oct 2008) | 1 line
support the optional line argument for idle
................
r66911 | benjamin.peterson | 2008-10-16 01:10:28 +0200 (Thu, 16 Oct 2008) | 41 lines
Merged revisions 66805,66841,66860,66884-66886,66893,66907,66910 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66805 | benjamin.peterson | 2008-10-04 20:11:02 -0500 (Sat, 04 Oct 2008) | 1 line
mention what the fixes directory is for
........
r66841 | benjamin.peterson | 2008-10-07 17:48:12 -0500 (Tue, 07 Oct 2008) | 1 line
use assertFalse and assertTrue
........
r66860 | benjamin.peterson | 2008-10-08 16:05:07 -0500 (Wed, 08 Oct 2008) | 1 line
instead of abusing the pattern matcher, use start_tree to find a next binding
........
r66884 | benjamin.peterson | 2008-10-13 15:50:30 -0500 (Mon, 13 Oct 2008) | 1 line
don't print tokens to stdout when -v is given
........
r66885 | benjamin.peterson | 2008-10-13 16:28:57 -0500 (Mon, 13 Oct 2008) | 1 line
add the -x option to disable fixers
........
r66886 | benjamin.peterson | 2008-10-13 16:33:53 -0500 (Mon, 13 Oct 2008) | 1 line
cut down on some crud
........
r66893 | benjamin.peterson | 2008-10-14 17:16:54 -0500 (Tue, 14 Oct 2008) | 1 line
add an optional set literal fixer
........
r66907 | benjamin.peterson | 2008-10-15 16:59:41 -0500 (Wed, 15 Oct 2008) | 1 line
don't write backup files by default
........
r66910 | benjamin.peterson | 2008-10-15 17:43:10 -0500 (Wed, 15 Oct 2008) | 1 line
add the -n option; it stops backupfiles from being written
........
................
r66913 | benjamin.peterson | 2008-10-16 20:52:14 +0200 (Thu, 16 Oct 2008) | 1 line
document that deque indexing is O(n) #4123
................
r66927 | andrew.kuchling | 2008-10-16 22:15:47 +0200 (Thu, 16 Oct 2008) | 1 line
Fix wording (2.6.1 backport candidate)
................
r66932 | benjamin.peterson | 2008-10-16 23:09:28 +0200 (Thu, 16 Oct 2008) | 1 line
check for error conditions in _json #3623
................
r66938 | benjamin.peterson | 2008-10-16 23:27:54 +0200 (Thu, 16 Oct 2008) | 1 line
fix possible ref leak
................
r66942 | benjamin.peterson | 2008-10-16 23:48:06 +0200 (Thu, 16 Oct 2008) | 1 line
fix more possible ref leaks in _json and use Py_CLEAR
................
r66962 | benjamin.peterson | 2008-10-17 22:01:01 +0200 (Fri, 17 Oct 2008) | 1 line
clarify CALL_FUNCTION #4141
................
r66964 | georg.brandl | 2008-10-17 23:41:49 +0200 (Fri, 17 Oct 2008) | 2 lines
Fix duplicate word.
................
r66973 | armin.ronacher | 2008-10-19 10:27:43 +0200 (Sun, 19 Oct 2008) | 3 lines
Fixed #4067 by implementing _attributes and _fields for the AST root node.
................
r66974 | benjamin.peterson | 2008-10-19 15:59:01 +0200 (Sun, 19 Oct 2008) | 1 line
fix compiler warning
................
r66977 | benjamin.peterson | 2008-10-19 21:39:16 +0200 (Sun, 19 Oct 2008) | 1 line
mention -n
................
r66992 | benjamin.peterson | 2008-10-21 22:51:13 +0200 (Tue, 21 Oct 2008) | 1 line
make sure to call iteritems()
................
r66998 | benjamin.peterson | 2008-10-22 22:57:43 +0200 (Wed, 22 Oct 2008) | 1 line
fix a few typos
................
r66999 | benjamin.peterson | 2008-10-22 23:05:30 +0200 (Wed, 22 Oct 2008) | 1 line
and another typo...
................
r67002 | hirokazu.yamamoto | 2008-10-23 02:37:33 +0200 (Thu, 23 Oct 2008) | 1 line
Issue #4183: Some tests didn't run with pickle.HIGHEST_PROTOCOL.
................
r67005 | walter.doerwald | 2008-10-23 15:11:39 +0200 (Thu, 23 Oct 2008) | 2 lines
Use the correct names of the stateless codec functions (Fixes issue 4178).
................
r67007 | benjamin.peterson | 2008-10-23 23:43:48 +0200 (Thu, 23 Oct 2008) | 1 line
only nonempty __slots__ don't work
................
r67028 | benjamin.peterson | 2008-10-26 01:27:07 +0200 (Sun, 26 Oct 2008) | 1 line
don't use a catch-all
................
r67040 | armin.rigo | 2008-10-28 18:01:21 +0100 (Tue, 28 Oct 2008) | 5 lines
Fix one of the tests: it relied on being present in an "output test" in
order to actually test what it was supposed to test, i.e. that the code
in the __del__ method did not crash. Use instead the new helper
test_support.captured_output().
................
r67041 | benjamin.peterson | 2008-10-29 21:33:00 +0100 (Wed, 29 Oct 2008) | 1 line
mention the version gettempdir() was added
................
r67044 | amaury.forgeotdarc | 2008-10-30 00:15:57 +0100 (Thu, 30 Oct 2008) | 3 lines
Correct error message in io.open():
closefd=True is the only accepted value with a file name.
................
r67070 | benjamin.peterson | 2008-10-31 21:41:44 +0100 (Fri, 31 Oct 2008) | 1 line
rephrase has_key doc
................
r67089 | benjamin.peterson | 2008-11-03 21:43:20 +0100 (Mon, 03 Nov 2008) | 1 line
clarify by splitting into multiple paragraphs
................
r67091 | benjamin.peterson | 2008-11-03 23:34:57 +0100 (Mon, 03 Nov 2008) | 1 line
move a FileIO test to test_fileio
................
r67101 | georg.brandl | 2008-11-04 21:49:35 +0100 (Tue, 04 Nov 2008) | 2 lines
#4167: fix markup glitches.
................
r67117 | georg.brandl | 2008-11-06 11:17:58 +0100 (Thu, 06 Nov 2008) | 2 lines
#4268: Use correct module for two toplevel functions.
................
r67118 | georg.brandl | 2008-11-06 11:19:11 +0100 (Thu, 06 Nov 2008) | 2 lines
#4267: small fixes in sqlite3 docs.
................
r67119 | georg.brandl | 2008-11-06 11:20:49 +0100 (Thu, 06 Nov 2008) | 2 lines
#4245: move Thread section to the top.
................
r67123 | georg.brandl | 2008-11-06 19:49:15 +0100 (Thu, 06 Nov 2008) | 2 lines
#4247: add "pass" examples to tutorial.
................
r67124 | andrew.kuchling | 2008-11-06 20:23:02 +0100 (Thu, 06 Nov 2008) | 1 line
Fix grammar error; reword two paragraphs
................
2008-11-07 04:56:27 -04:00
|
|
|
def write_file(self, new_text, filename, old_text):
|
2008-09-02 21:21:32 -03:00
|
|
|
"""Writes a string to a file.
|
|
|
|
|
|
|
|
It first shows a unified diff between the old text and the new text, and
|
|
|
|
then rewrites the file; the latter is only done if the write option is
|
|
|
|
set.
|
|
|
|
"""
|
2008-03-19 01:43:46 -03:00
|
|
|
try:
|
|
|
|
f = open(filename, "w")
|
|
|
|
except os.error, err:
|
|
|
|
self.log_error("Can't create %s: %s", filename, err)
|
|
|
|
return
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
f.write(new_text)
|
|
|
|
except os.error, err:
|
|
|
|
self.log_error("Can't write %s: %s", filename, err)
|
|
|
|
finally:
|
|
|
|
f.close()
|
2008-09-02 21:21:32 -03:00
|
|
|
self.log_debug("Wrote changes to %s", filename)
|
|
|
|
self.wrote = True
|
2008-03-19 01:43:46 -03:00
|
|
|
|
|
|
|
PS1 = ">>> "
|
|
|
|
PS2 = "... "
|
|
|
|
|
|
|
|
def refactor_docstring(self, input, filename):
|
|
|
|
"""Refactors a docstring, looking for doctests.
|
|
|
|
|
|
|
|
This returns a modified version of the input string. It looks
|
|
|
|
for doctests, which start with a ">>>" prompt, and may be
|
|
|
|
continued with "..." prompts, as long as the "..." is indented
|
|
|
|
the same as the ">>>".
|
|
|
|
|
|
|
|
(Unfortunately we can't use the doctest module's parser,
|
|
|
|
since, like most parsers, it is not geared towards preserving
|
|
|
|
the original source.)
|
|
|
|
"""
|
|
|
|
result = []
|
|
|
|
block = None
|
|
|
|
block_lineno = None
|
|
|
|
indent = None
|
|
|
|
lineno = 0
|
|
|
|
for line in input.splitlines(True):
|
|
|
|
lineno += 1
|
|
|
|
if line.lstrip().startswith(self.PS1):
|
|
|
|
if block is not None:
|
|
|
|
result.extend(self.refactor_doctest(block, block_lineno,
|
|
|
|
indent, filename))
|
|
|
|
block_lineno = lineno
|
|
|
|
block = [line]
|
|
|
|
i = line.find(self.PS1)
|
|
|
|
indent = line[:i]
|
|
|
|
elif (indent is not None and
|
|
|
|
(line.startswith(indent + self.PS2) or
|
|
|
|
line == indent + self.PS2.rstrip() + "\n")):
|
|
|
|
block.append(line)
|
|
|
|
else:
|
|
|
|
if block is not None:
|
|
|
|
result.extend(self.refactor_doctest(block, block_lineno,
|
|
|
|
indent, filename))
|
|
|
|
block = None
|
|
|
|
indent = None
|
|
|
|
result.append(line)
|
|
|
|
if block is not None:
|
|
|
|
result.extend(self.refactor_doctest(block, block_lineno,
|
|
|
|
indent, filename))
|
|
|
|
return "".join(result)
|
|
|
|
|
|
|
|
def refactor_doctest(self, block, lineno, indent, filename):
|
|
|
|
"""Refactors one doctest.
|
|
|
|
|
|
|
|
A doctest is given as a block of lines, the first of which starts
|
|
|
|
with ">>>" (possibly indented), while the remaining lines start
|
|
|
|
with "..." (identically indented).
|
|
|
|
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
tree = self.parse_block(block, lineno, indent)
|
|
|
|
except Exception, err:
|
2008-09-02 21:21:32 -03:00
|
|
|
if self.log.isEnabledFor(logging.DEBUG):
|
2008-03-19 01:43:46 -03:00
|
|
|
for line in block:
|
2008-09-02 21:21:32 -03:00
|
|
|
self.log_debug("Source: %s", line.rstrip("\n"))
|
2008-03-19 01:43:46 -03:00
|
|
|
self.log_error("Can't parse docstring in %s line %s: %s: %s",
|
|
|
|
filename, lineno, err.__class__.__name__, err)
|
|
|
|
return block
|
|
|
|
if self.refactor_tree(tree, filename):
|
|
|
|
new = str(tree).splitlines(True)
|
|
|
|
# Undo the adjustment of the line numbers in wrap_toks() below.
|
|
|
|
clipped, new = new[:lineno-1], new[lineno-1:]
|
|
|
|
assert clipped == ["\n"] * (lineno-1), clipped
|
|
|
|
if not new[-1].endswith("\n"):
|
|
|
|
new[-1] += "\n"
|
|
|
|
block = [indent + self.PS1 + new.pop(0)]
|
|
|
|
if new:
|
|
|
|
block += [indent + self.PS2 + line for line in new]
|
|
|
|
return block
|
|
|
|
|
|
|
|
def summarize(self):
|
2008-09-02 21:21:32 -03:00
|
|
|
if self.wrote:
|
2008-03-19 01:43:46 -03:00
|
|
|
were = "were"
|
|
|
|
else:
|
|
|
|
were = "need to be"
|
|
|
|
if not self.files:
|
|
|
|
self.log_message("No files %s modified.", were)
|
|
|
|
else:
|
|
|
|
self.log_message("Files that %s modified:", were)
|
|
|
|
for file in self.files:
|
|
|
|
self.log_message(file)
|
|
|
|
if self.fixer_log:
|
|
|
|
self.log_message("Warnings/messages while refactoring:")
|
|
|
|
for message in self.fixer_log:
|
|
|
|
self.log_message(message)
|
|
|
|
if self.errors:
|
|
|
|
if len(self.errors) == 1:
|
|
|
|
self.log_message("There was 1 error:")
|
|
|
|
else:
|
|
|
|
self.log_message("There were %d errors:", len(self.errors))
|
|
|
|
for msg, args, kwds in self.errors:
|
|
|
|
self.log_message(msg, *args, **kwds)
|
|
|
|
|
|
|
|
def parse_block(self, block, lineno, indent):
|
|
|
|
"""Parses a block into a tree.
|
|
|
|
|
|
|
|
This is necessary to get correct line number / offset information
|
|
|
|
in the parser diagnostics and embedded into the parse tree.
|
|
|
|
"""
|
|
|
|
return self.driver.parse_tokens(self.wrap_toks(block, lineno, indent))
|
|
|
|
|
|
|
|
def wrap_toks(self, block, lineno, indent):
|
|
|
|
"""Wraps a tokenize stream to systematically modify start/end."""
|
|
|
|
tokens = tokenize.generate_tokens(self.gen_lines(block, indent).next)
|
|
|
|
for type, value, (line0, col0), (line1, col1), line_text in tokens:
|
|
|
|
line0 += lineno - 1
|
|
|
|
line1 += lineno - 1
|
|
|
|
# Don't bother updating the columns; this is too complicated
|
|
|
|
# since line_text would also have to be updated and it would
|
|
|
|
# still break for tokens spanning lines. Let the user guess
|
|
|
|
# that the column numbers for doctests are relative to the
|
|
|
|
# end of the prompt string (PS1 or PS2).
|
|
|
|
yield type, value, (line0, col0), (line1, col1), line_text
|
|
|
|
|
|
|
|
|
|
|
|
def gen_lines(self, block, indent):
|
|
|
|
"""Generates lines as expected by tokenize from a list of lines.
|
|
|
|
|
|
|
|
This strips the first len(indent + self.PS1) characters off each line.
|
|
|
|
"""
|
|
|
|
prefix1 = indent + self.PS1
|
|
|
|
prefix2 = indent + self.PS2
|
|
|
|
prefix = prefix1
|
|
|
|
for line in block:
|
|
|
|
if line.startswith(prefix):
|
|
|
|
yield line[len(prefix):]
|
|
|
|
elif line == prefix.rstrip() + "\n":
|
|
|
|
yield "\n"
|
|
|
|
else:
|
|
|
|
raise AssertionError("line=%r, prefix=%r" % (line, prefix))
|
|
|
|
prefix = prefix2
|
|
|
|
while True:
|
|
|
|
yield ""
|
|
|
|
|
|
|
|
|
|
|
|
def diff_texts(a, b, filename):
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
"""Return a unified diff of two strings."""
|
2008-03-19 01:43:46 -03:00
|
|
|
a = a.splitlines()
|
|
|
|
b = b.splitlines()
|
Merged revisions 66511,66548-66549,66644,66646-66652 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66511 | benjamin.peterson | 2008-09-18 21:49:27 -0500 (Thu, 18 Sep 2008) | 1 line
remove a useless if __name__ == '__main__'
........
r66548 | benjamin.peterson | 2008-09-21 21:14:14 -0500 (Sun, 21 Sep 2008) | 1 line
avoid the perils of mutable default arguments
........
r66549 | benjamin.peterson | 2008-09-21 21:26:11 -0500 (Sun, 21 Sep 2008) | 1 line
some places in RefactoringTool should raise an error instead of logging it
........
r66644 | benjamin.peterson | 2008-09-27 10:45:10 -0500 (Sat, 27 Sep 2008) | 1 line
fix doctest refactoring
........
r66646 | benjamin.peterson | 2008-09-27 11:40:13 -0500 (Sat, 27 Sep 2008) | 1 line
don't print to stdout when 2to3 is used as a library
........
r66647 | benjamin.peterson | 2008-09-27 12:28:28 -0500 (Sat, 27 Sep 2008) | 1 line
let fixer modules and classes have different prefixes
........
r66648 | benjamin.peterson | 2008-09-27 14:02:13 -0500 (Sat, 27 Sep 2008) | 1 line
raise errors when 2to3 is used as a library
........
r66649 | benjamin.peterson | 2008-09-27 14:03:38 -0500 (Sat, 27 Sep 2008) | 1 line
fix docstring
........
r66650 | benjamin.peterson | 2008-09-27 14:22:21 -0500 (Sat, 27 Sep 2008) | 1 line
make use of enumerate
........
r66651 | benjamin.peterson | 2008-09-27 14:24:13 -0500 (Sat, 27 Sep 2008) | 1 line
revert last revision; it breaks things
........
r66652 | benjamin.peterson | 2008-09-27 16:03:06 -0500 (Sat, 27 Sep 2008) | 1 line
add tests for lib2to3.refactor
........
2008-09-27 18:09:10 -03:00
|
|
|
return difflib.unified_diff(a, b, filename, filename,
|
|
|
|
"(original)", "(refactored)",
|
|
|
|
lineterm="")
|