Package: py3kwarn
py3kwarn detects code that is not Python 3 compatible. It provides
flake8-style warning messages.See also:Thelib2to3documentation for information on warning messages.What’s new in Python 3.0Pull requests are welcome!InstallationSupports Python 2.6, 2.7, and 3.3+$ pip install py3kwarn…or to install from the git repository:$ pip install -e git+git://github.com/liamcurry/py3kwarn.git#egg=py3kwarnUsage with vimYou can use py3kwarnwith syntastic. If you want to use py3kwarn with
another syntax checker (like flake8), then you will have to add this to your
vim config:let g:syntastic_python_checkers=['flake8', 'py3kwarn']Usage from the command line$ py3kwarn example.py
example.py:2:1: PY3K (FixApply) apply(hello, args, kwargs) -> hello(*args, **kwargs)
example.py:5:1: PY3K (FixBasestring) basestring -> str
example.py:15:1: PY3K (FixDict) d.iteritems(); -> iter(d.items());
example.py:16:1: PY3K (FixDict) d.viewvalues(); -> d.values();
example.py:19:1: PY3K (FixExcept) try:import asdf;except E, T:pass; -> try:import asdf;except E as T:pass;
example.py:25:1: PY3K (FixExec) exec code in ns1, ns2; -> exec(code, ns1, ns2);
example.py:28:1: PY3K (FixExecfile) execfile('test.py') -> exec(compile(open('test.py').read(), 'test.py', 'exec'))
example.py:31:1: PY3K (FixFilter) filter(lambda x: x, [1, 2, 3]) -> [x for x in [1, 2, 3] if x]
example.py:36:1: PY3K (FixFuncattrs) test.func_name; -> test.__name__;
example.py:37:1: PY3K (FixFuncattrs) test.func_closure; -> test.__closure__;
example.py:38:1: PY3K (FixFuncattrs) test.func_dict; -> test.__dict__;
example.py:44:1: PY3K (FixHasKey) d.has_key('foobar') -> 'foobar' in d
example.py:56:1: PY3K (FixInput) input('FixInput') -> eval(input('FixInput'))
example.py:66:1: PY3K (FixItertoolsImports) from itertools import imap ->
example.py:67:1: PY3K (FixItertoolsImports) from itertools import ifilter; ->
example.py:68:1: PY3K (FixItertoolsImports) from itertools import izip; ->
example.py:69:1: PY3K (FixItertoolsImports) from itertools import ifilterfalse; -> from itertools import filterfalse;
example.py:62:1: PY3K (FixLong) long; -> int;
example.py:75:1: PY3K (FixLong) long -> int
example.py:50:1: PY3K (FixImports) import StringIO -> import io
example.py:51:1: PY3K (FixImports) import cStringIO; -> import io;
example.py:52:1: PY3K (FixImports) import cPickle; -> import pickle;
example.py:53:1: PY3K (FixImports) import __builtin__; -> import builtins;
example.py:62:1: PY3K (FixIsinstance) isinstance(x, (int, int)) -> isinstance(x, int)
example.py:63:1: PY3K (FixIsinstance) isinstance(x, (int, int)); -> isinstance(x, int);
example.py:11:1: PY3K (FixCallable) callable('hello') -> isinstance('hello', collections.Callable)
example.py:59:1: PY3K (FixIntern) intern(s) -> sys.intern(s)Modifying code automaticallyProblems can be fixed viapy3kwarn2to3:$ py3kwarn2to3 --write example.pyTestingTesting can be done withmake test. py3kwarn also supportstox. This
enables quickly testing changes in many versions of python. Take a look at thetox.inifile for more details.ContributingTo contribute, fork the repo and clone to your local machine.Create a virtual environment andpip install -r requirements_dev.txtThen just make a pull request with the issues you’ve fixed!TODOFriendlier messages.A flake8 extension.Flags to ignore certain errorsMake it faster. Right now it is quite slow compared to other syntax checkers.
Major refactoring may be necessary.