From 82b0963cd221067a52348b1b541c448f685af2f4 Mon Sep 17 00:00:00 2001 From: Raphael Roberts Date: Thu, 21 Oct 2021 17:10:56 -0500 Subject: [PATCH] Use git release for elpy --- elpa/elpy-1.35.0/elpy-pkg.el | 11 - elpa/elpy-1.35.0/elpy-refactor.el | 297 ---------- elpa/elpy-1.35.0/elpy/refactor.py | 381 ------------ elpa/elpy-1.35.0/elpy/tests/test_refactor.py | 545 ------------------ elpa/elpy-1.35.0/snippets/python-mode/__abs__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__add__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__and__ | 7 - .../elpy-1.35.0/snippets/python-mode/__bool__ | 7 - .../elpy-1.35.0/snippets/python-mode/__call__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__cmp__ | 7 - .../snippets/python-mode/__coerce__ | 7 - .../snippets/python-mode/__complex__ | 7 - .../snippets/python-mode/__contains__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__del__ | 7 - .../snippets/python-mode/__delattr__ | 7 - .../snippets/python-mode/__delete__ | 7 - .../snippets/python-mode/__delitem__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__div__ | 7 - .../snippets/python-mode/__divmod__ | 7 - .../snippets/python-mode/__enter__ | 9 - elpa/elpy-1.35.0/snippets/python-mode/__eq__ | 7 - .../elpy-1.35.0/snippets/python-mode/__exit__ | 7 - .../snippets/python-mode/__float__ | 7 - .../snippets/python-mode/__floordiv__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__ge__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__get__ | 7 - .../snippets/python-mode/__getattr__ | 7 - .../snippets/python-mode/__getattribute__ | 7 - .../snippets/python-mode/__getitem__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__gt__ | 7 - .../elpy-1.35.0/snippets/python-mode/__hash__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__hex__ | 7 - .../elpy-1.35.0/snippets/python-mode/__iadd__ | 7 - .../elpy-1.35.0/snippets/python-mode/__iand__ | 7 - .../elpy-1.35.0/snippets/python-mode/__idiv__ | 7 - .../snippets/python-mode/__ifloordiv__ | 7 - .../snippets/python-mode/__ilshift__ | 7 - .../elpy-1.35.0/snippets/python-mode/__imod__ | 7 - .../elpy-1.35.0/snippets/python-mode/__imul__ | 7 - .../snippets/python-mode/__index__ | 7 - .../elpy-1.35.0/snippets/python-mode/__init__ | 10 - .../snippets/python-mode/__instancecheck__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__int__ | 7 - .../snippets/python-mode/__invert__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__ior__ | 7 - .../elpy-1.35.0/snippets/python-mode/__ipow__ | 7 - .../snippets/python-mode/__irshift__ | 7 - .../elpy-1.35.0/snippets/python-mode/__isub__ | 7 - .../elpy-1.35.0/snippets/python-mode/__iter__ | 7 - .../snippets/python-mode/__itruediv__ | 7 - .../elpy-1.35.0/snippets/python-mode/__ixor__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__le__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__len__ | 7 - .../elpy-1.35.0/snippets/python-mode/__long__ | 7 - .../snippets/python-mode/__lshift__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__lt__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__mod__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__mul__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__ne__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__neg__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__new__ | 10 - .../snippets/python-mode/__nonzero__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__oct__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__or__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__pos__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__pow__ | 7 - .../elpy-1.35.0/snippets/python-mode/__radd__ | 7 - .../elpy-1.35.0/snippets/python-mode/__rand__ | 7 - .../snippets/python-mode/__rdivmod__ | 7 - .../elpy-1.35.0/snippets/python-mode/__repr__ | 7 - .../snippets/python-mode/__reversed__ | 7 - .../snippets/python-mode/__rfloordiv__ | 7 - .../snippets/python-mode/__rlshift__ | 7 - .../elpy-1.35.0/snippets/python-mode/__rmod__ | 7 - .../elpy-1.35.0/snippets/python-mode/__rmul__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__ror__ | 7 - .../elpy-1.35.0/snippets/python-mode/__rpow__ | 7 - .../snippets/python-mode/__rrshift__ | 7 - .../snippets/python-mode/__rshift__ | 7 - .../elpy-1.35.0/snippets/python-mode/__rsub__ | 7 - .../snippets/python-mode/__rtruediv__ | 7 - .../elpy-1.35.0/snippets/python-mode/__rxor__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__set__ | 7 - .../snippets/python-mode/__setattr__ | 7 - .../snippets/python-mode/__setitem__ | 7 - .../snippets/python-mode/__slots__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__str__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__sub__ | 7 - .../snippets/python-mode/__subclasscheck__ | 7 - .../snippets/python-mode/__truediv__ | 7 - .../snippets/python-mode/__unicode__ | 7 - elpa/elpy-1.35.0/snippets/python-mode/__xor__ | 7 - .../elpy-autoloads.el | 2 +- .../elpy-django.el | 2 +- elpa/elpy-20210328.1852/elpy-pkg.el | 17 + .../elpy-profile.el | 0 elpa/elpy-20210328.1852/elpy-refactor.el | 320 ++++++++++ .../elpy-rpc.el | 41 ++ .../elpy-shell.el | 6 +- .../elpy.el | 22 +- .../elpy/__init__.py | 0 .../elpy/__main__.py | 0 .../elpy/auto_pep8.py | 0 .../elpy/blackutil.py | 15 +- .../elpy/compat.py | 0 .../elpy/jedibackend.py | 321 ++++++++++- .../elpy/pydocutils.py | 0 .../elpy/rpc.py | 0 .../elpy/server.py | 76 +-- .../elpy/tests/__init__.py | 0 .../elpy/tests/compat.py | 0 .../elpy/tests/support.py | 280 ++++++--- .../elpy/tests/test_auto_pep8.py | 0 .../elpy/tests/test_black.py | 8 + .../elpy/tests/test_jedibackend.py | 47 +- .../elpy/tests/test_pydocutils.py | 0 .../elpy/tests/test_rpc.py | 0 .../elpy/tests/test_server.py | 128 ++-- .../elpy/tests/test_support.py | 0 .../elpy/tests/test_yapf.py | 8 + .../elpy/yapfutil.py | 0 .../snippets/python-mode/.yas-setup.el | 30 +- .../snippets/python-mode/_abs | 0 .../snippets/python-mode/_add | 0 .../snippets/python-mode/_and | 0 .../snippets/python-mode/_bool | 0 .../snippets/python-mode/_call | 0 .../snippets/python-mode/_cmp | 0 .../snippets/python-mode/_coerce | 0 .../snippets/python-mode/_complex | 0 .../snippets/python-mode/_contains | 0 .../snippets/python-mode/_del | 0 .../snippets/python-mode/_delattr | 0 .../snippets/python-mode/_delete | 0 .../snippets/python-mode/_delitem | 0 .../snippets/python-mode/_div | 0 .../snippets/python-mode/_divmod | 0 .../snippets/python-mode/_enter | 0 .../snippets/python-mode/_eq | 0 .../snippets/python-mode/_exit | 0 .../snippets/python-mode/_float | 0 .../snippets/python-mode/_floordiv | 0 .../snippets/python-mode/_ge | 0 .../snippets/python-mode/_get | 0 .../snippets/python-mode/_getattr | 0 .../snippets/python-mode/_getattribute | 0 .../snippets/python-mode/_getitem | 0 .../snippets/python-mode/_gt | 0 .../snippets/python-mode/_hash | 0 .../snippets/python-mode/_hex | 0 .../snippets/python-mode/_iadd | 0 .../snippets/python-mode/_iand | 0 .../snippets/python-mode/_idiv | 0 .../snippets/python-mode/_ifloordiv | 0 .../snippets/python-mode/_ilshift | 0 .../snippets/python-mode/_imod | 0 .../snippets/python-mode/_imul | 0 .../snippets/python-mode/_index | 0 .../snippets/python-mode/_init | 0 .../snippets/python-mode/_instancecheck | 0 .../snippets/python-mode/_int | 0 .../snippets/python-mode/_invert | 0 .../snippets/python-mode/_ior | 0 .../snippets/python-mode/_ipow | 0 .../snippets/python-mode/_irshift | 0 .../snippets/python-mode/_isub | 0 .../snippets/python-mode/_iter | 0 .../snippets/python-mode/_itruediv | 0 .../snippets/python-mode/_ixor | 0 .../snippets/python-mode/_le | 0 .../snippets/python-mode/_len | 0 .../snippets/python-mode/_long | 0 .../snippets/python-mode/_lshift | 0 .../snippets/python-mode/_lt | 0 .../snippets/python-mode/_mod | 0 .../snippets/python-mode/_mul | 0 .../snippets/python-mode/_ne | 0 .../snippets/python-mode/_neg | 0 .../snippets/python-mode/_new | 0 .../snippets/python-mode/_nonzero | 0 .../snippets/python-mode/_oct | 0 .../snippets/python-mode/_or | 0 .../snippets/python-mode/_pos | 0 .../snippets/python-mode/_pow | 0 .../snippets/python-mode/_radd | 0 .../snippets/python-mode/_rand | 0 .../snippets/python-mode/_rdivmod | 0 .../snippets/python-mode/_repr | 0 .../snippets/python-mode/_reversed | 0 .../snippets/python-mode/_rfloordiv | 0 .../snippets/python-mode/_rlshift | 0 .../snippets/python-mode/_rmod | 0 .../snippets/python-mode/_rmul | 0 .../snippets/python-mode/_ror | 0 .../snippets/python-mode/_rpow | 0 .../snippets/python-mode/_rrshift | 0 .../snippets/python-mode/_rshift | 0 .../snippets/python-mode/_rsub | 0 .../snippets/python-mode/_rtruediv | 0 .../snippets/python-mode/_rxor | 0 .../snippets/python-mode/_set | 0 .../snippets/python-mode/_setattr | 0 .../snippets/python-mode/_setitem | 0 .../snippets/python-mode/_slots | 0 .../snippets/python-mode/_str | 0 .../snippets/python-mode/_sub | 0 .../snippets/python-mode/_subclasscheck | 0 .../snippets/python-mode/_truediv | 0 .../snippets/python-mode/_unicode | 0 .../snippets/python-mode/_xor | 0 .../snippets/python-mode/ase | 0 .../snippets/python-mode/asne | 0 .../snippets/python-mode/asr | 0 .../snippets/python-mode/class | 0 .../snippets/python-mode/def | 0 .../snippets/python-mode/defs | 0 .../snippets/python-mode/enc | 0 .../snippets/python-mode/env | 0 .../snippets/python-mode/from | 0 .../snippets/python-mode/pdb | 0 .../snippets/python-mode/py3 | 0 .../snippets/python-mode/super | 0 222 files changed, 1077 insertions(+), 2104 deletions(-) delete mode 100755 elpa/elpy-1.35.0/elpy-pkg.el delete mode 100755 elpa/elpy-1.35.0/elpy-refactor.el delete mode 100755 elpa/elpy-1.35.0/elpy/refactor.py delete mode 100755 elpa/elpy-1.35.0/elpy/tests/test_refactor.py delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__abs__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__add__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__and__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__bool__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__call__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__cmp__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__coerce__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__complex__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__contains__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__del__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__delattr__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__delete__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__delitem__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__div__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__divmod__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__enter__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__eq__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__exit__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__float__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__floordiv__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__ge__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__get__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__getattr__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__getattribute__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__getitem__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__gt__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__hash__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__hex__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__iadd__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__iand__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__idiv__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__ifloordiv__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__ilshift__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__imod__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__imul__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__index__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__init__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__instancecheck__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__int__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__invert__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__ior__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__ipow__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__irshift__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__isub__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__iter__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__itruediv__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__ixor__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__le__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__len__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__long__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__lshift__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__lt__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__mod__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__mul__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__ne__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__neg__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__new__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__nonzero__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__oct__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__or__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__pos__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__pow__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__radd__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rand__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rdivmod__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__repr__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__reversed__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rfloordiv__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rlshift__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rmod__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rmul__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__ror__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rpow__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rrshift__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rshift__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rsub__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rtruediv__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__rxor__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__set__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__setattr__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__setitem__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__slots__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__str__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__sub__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__subclasscheck__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__truediv__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__unicode__ delete mode 100755 elpa/elpy-1.35.0/snippets/python-mode/__xor__ rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy-autoloads.el (98%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy-django.el (99%) mode change 100755 => 100644 create mode 100644 elpa/elpy-20210328.1852/elpy-pkg.el rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy-profile.el (100%) mode change 100755 => 100644 create mode 100644 elpa/elpy-20210328.1852/elpy-refactor.el rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy-rpc.el (96%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy-shell.el (99%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy.el (99%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/__init__.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/__main__.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/auto_pep8.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/blackutil.py (94%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/compat.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/jedibackend.py (51%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/pydocutils.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/rpc.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/server.py (80%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/__init__.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/compat.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/support.py (80%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/test_auto_pep8.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/test_black.py (86%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/test_jedibackend.py (92%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/test_pydocutils.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/test_rpc.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/test_server.py (79%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/test_support.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/tests/test_yapf.py (76%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/elpy/yapfutil.py (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/.yas-setup.el (70%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_abs (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_add (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_and (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_bool (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_call (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_cmp (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_coerce (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_complex (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_contains (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_del (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_delattr (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_delete (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_delitem (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_div (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_divmod (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_enter (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_eq (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_exit (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_float (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_floordiv (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_ge (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_get (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_getattr (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_getattribute (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_getitem (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_gt (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_hash (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_hex (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_iadd (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_iand (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_idiv (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_ifloordiv (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_ilshift (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_imod (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_imul (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_index (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_init (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_instancecheck (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_int (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_invert (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_ior (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_ipow (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_irshift (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_isub (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_iter (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_itruediv (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_ixor (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_le (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_len (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_long (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_lshift (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_lt (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_mod (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_mul (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_ne (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_neg (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_new (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_nonzero (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_oct (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_or (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_pos (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_pow (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_radd (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rand (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rdivmod (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_repr (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_reversed (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rfloordiv (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rlshift (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rmod (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rmul (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_ror (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rpow (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rrshift (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rshift (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rsub (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rtruediv (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_rxor (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_set (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_setattr (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_setitem (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_slots (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_str (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_sub (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_subclasscheck (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_truediv (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_unicode (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/_xor (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/ase (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/asne (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/asr (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/class (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/def (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/defs (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/enc (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/env (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/from (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/pdb (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/py3 (100%) mode change 100755 => 100644 rename elpa/{elpy-1.35.0 => elpy-20210328.1852}/snippets/python-mode/super (100%) mode change 100755 => 100644 diff --git a/elpa/elpy-1.35.0/elpy-pkg.el b/elpa/elpy-1.35.0/elpy-pkg.el deleted file mode 100755 index ee2b67c..0000000 --- a/elpa/elpy-1.35.0/elpy-pkg.el +++ /dev/null @@ -1,11 +0,0 @@ -(define-package "elpy" "1.35.0" "Emacs Python Development Environment" - '((company "0.9.2") - (emacs "24.4") - (highlight-indentation "0.5.0") - (pyvenv "1.3") - (yasnippet "0.8.0") - (s "1.11.0")) - :commit "4666c16ef362d4f99053bbc0856d8c65121e1825") -;; Local Variables: -;; no-byte-compile: t -;; End: diff --git a/elpa/elpy-1.35.0/elpy-refactor.el b/elpa/elpy-1.35.0/elpy-refactor.el deleted file mode 100755 index 6a949ed..0000000 --- a/elpa/elpy-1.35.0/elpy-refactor.el +++ /dev/null @@ -1,297 +0,0 @@ -;;; elpy-refactor.el --- Refactoring mode for Elpy - -;; Copyright (C) 2013-2019 Jorgen Schaefer - -;; Author: Jorgen Schaefer -;; URL: https://github.com/jorgenschaefer/elpy - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License -;; as published by the Free Software Foundation; either version 3 -;; of the License, or (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see . - -;;; Commentary: - -;; This file provides an interface, including a major mode, to use -;; refactoring options provided by the Rope library. - -;;; Code: - -;; We require elpy, but elpy loads us, so we shouldn't load it back. -;; (require 'elpy) - -(defvar elpy-refactor-changes nil - "Changes that will be commited on \\[elpy-refactor-commit].") -(make-variable-buffer-local 'elpy-refactor-current-changes) - -(defvar elpy-refactor-window-configuration nil - "The old window configuration. Will be restored after commit.") -(make-variable-buffer-local 'elpy-refactor-window-configuration) - -(make-obsolete - 'elpy-refactor - "Refactoring has been unstable and flakey, support will be dropped in the future." - "elpy 1.5.0") -(defun elpy-refactor () - "Run the Elpy refactoring interface for Python code." - (interactive) - (save-some-buffers) - (let* ((selection (elpy-refactor-select - (elpy-refactor-rpc-get-options))) - (method (car selection)) - (args (cdr selection))) - (when method - (elpy-refactor-create-change-buffer - (elpy-refactor-rpc-get-changes method args))))) - -(defun elpy-refactor-select (options) - "Show the user the refactoring options and let her choose one. - -Depending on the chosen option, ask the user for further -arguments and build the argument. - -Return a cons cell of the name of the option and the arg list -created." - (let ((buf (get-buffer-create "*Elpy Refactor*")) - (pos (vector (1- (point)) - (ignore-errors - (1- (region-beginning))) - (ignore-errors - (1- (region-end))))) - (inhibit-read-only t) - (options (sort options - (lambda (a b) - (let ((cata (cdr (assq 'category a))) - (catb (cdr (assq 'category b)))) - (if (equal cata catb) - (string< (cdr (assq 'description a)) - (cdr (assq 'description b))) - (string< cata catb)))))) - (key ?a) - last-category - option-alist) - (with-current-buffer buf - (erase-buffer) - (dolist (option options) - (let ((category (cdr (assq 'category option))) - (description (cdr (assq 'description option))) - (name (cdr (assq 'name option))) - (args (cdr (assq 'args option)))) - (unless (equal category last-category) - (when last-category - (insert "\n")) - (insert (propertize category 'face 'bold) "\n") - (setq last-category category)) - (insert " (" key ") " description "\n") - (setq option-alist (cons (list key name args) - option-alist)) - (setq key (1+ key)))) - (let ((window-conf (current-window-configuration))) - (unwind-protect - (progn - (with-selected-window (display-buffer buf) - (goto-char (point-min))) - (fit-window-to-buffer (get-buffer-window buf)) - (let* ((key (read-key "Refactoring action? ")) - (entry (cdr (assoc key option-alist)))) - (kill-buffer buf) - (cons (car entry) ; name - (elpy-refactor-build-arguments (cadr entry) - pos)))) - (set-window-configuration window-conf)))))) - -(defun elpy-refactor-build-arguments (args pos) - "Translate an argument list specification to an argument list. - -POS is a vector of three elements, the current offset, the offset -of the beginning of the region, and the offset of the end of the -region. - -ARGS is a list of triples, each triple containing the name of an -argument (ignored), the type of the argument, and a possible -prompt string. - -Available types: - - offset - The offset in the buffer, (1- (point)) - start_offset - Offset of the beginning of the region - end_offset - Offset of the end of the region - string - A free-form string - filename - A non-existing file name - directory - An existing directory name - boolean - A boolean question" - (mapcar (lambda (arg) - (let ((type (cadr arg)) - (prompt (cl-caddr arg))) - (cond - ((equal type "offset") - (aref pos 0)) - ((equal type "start_offset") - (aref pos 1)) - ((equal type "end_offset") - (aref pos 2)) - ((equal type "string") - (read-from-minibuffer prompt)) - ((equal type "filename") - (expand-file-name - (read-file-name prompt))) - ((equal type "directory") - (expand-file-name - (read-directory-name prompt))) - ((equal type "boolean") - (y-or-n-p prompt))))) - args)) - -(defun elpy-refactor-create-change-buffer (changes) - "Show the user a buffer of changes. - -The user can review the changes and confirm them with -\\[elpy-refactor-commit]." - (unless changes - (error "No changes for this refactoring action.")) - (with-current-buffer (get-buffer-create "*Elpy Refactor*") - (elpy-refactor-mode) - (setq elpy-refactor-changes changes - elpy-refactor-window-configuration (current-window-configuration)) - (let ((inhibit-read-only t)) - (erase-buffer) - (elpy-refactor-insert-changes changes)) - (select-window (display-buffer (current-buffer))) - (goto-char (point-min)))) - -(defun elpy-refactor-insert-changes (changes) - "Format and display the changes described in CHANGES." - (insert (propertize "Use C-c C-c to apply the following changes." - 'face 'bold) - "\n\n") - (dolist (change changes) - (let ((action (cdr (assq 'action change)))) - (cond - ((equal action "change") - (insert (cdr (assq 'diff change)) - "\n")) - ((equal action "create") - (let ((type (cdr (assq 'type change)))) - (if (equal type "file") - (insert "+++ " (cdr (assq 'file change)) "\n" - "Create file " (cdr (assq 'file change)) "\n" - "\n") - (insert "+++ " (cdr (assq 'path change)) "\n" - "Create directory " (cdr (assq 'path change)) "\n" - "\n")))) - ((equal action "move") - (insert "--- " (cdr (assq 'source change)) "\n" - "+++ " (cdr (assq 'destination change)) "\n" - "Rename " (cdr (assq 'type change)) "\n" - "\n")) - ((equal action "delete") - (let ((type (cdr (assq 'type change)))) - (if (equal type "file") - (insert "--- " (cdr (assq 'file change)) "\n" - "Delete file " (cdr (assq 'file change)) "\n" - "\n") - (insert "--- " (cdr (assq 'path change)) "\n" - "Delete directory " (cdr (assq 'path change)) "\n" - "\n")))))))) - -(defvar elpy-refactor-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "C-c C-c") 'elpy-refactor-commit) - (define-key map (kbd "q") 'bury-buffer) - (define-key map (kbd "h") 'describe-mode) - (define-key map (kbd "?") 'describe-mode) - map) - "The key map for `elpy-refactor-mode'.") - -(define-derived-mode elpy-refactor-mode diff-mode "Elpy Refactor" - "Mode to display refactoring actions and ask confirmation from the user. - -\\{elpy-refactor-mode-map}" - :group 'elpy - (view-mode 1)) - -(defun elpy-refactor-commit () - "Commit the changes in the current buffer." - (interactive) - (unless elpy-refactor-changes - (error "No changes to commit.")) - ;; Restore the window configuration as the first thing so that - ;; changes below are visible to the user. Especially the point - ;; change in possible buffer changes. - (set-window-configuration elpy-refactor-window-configuration) - (dolist (change elpy-refactor-changes) - (let ((action (cdr (assq 'action change)))) - (cond - ((equal action "change") - (with-current-buffer (find-file-noselect (cdr (assq 'file change))) - ;; This would break for save-excursion as the buffer is - ;; truncated, so all markets now point to position 1. - (let ((old-point (point))) - (undo-boundary) - (erase-buffer) - (insert (cdr (assq 'contents change))) - (undo-boundary) - (goto-char old-point)))) - ((equal action "create") - (if (equal (cdr (assq 'type change)) - "file") - (find-file-noselect (cdr (assq 'file change))) - (make-directory (cdr (assq 'path change))))) - ((equal action "move") - (let* ((source (cdr (assq 'source change))) - (dest (cdr (assq 'destination change))) - (buf (get-file-buffer source))) - (when buf - (with-current-buffer buf - (setq buffer-file-name dest) - (rename-buffer (file-name-nondirectory dest) t))) - (rename-file source dest))) - ((equal action "delete") - (if (equal (cdr (assq 'type change)) "file") - (let ((name (cdr (assq 'file change)))) - (when (y-or-n-p (format "Really delete %s? " name)) - (delete-file name t))) - (let ((name (cdr (assq 'directory change)))) - (when (y-or-n-p (format "Really delete %s? " name)) - (delete-directory name nil t)))))))) - (kill-buffer (current-buffer))) - -(defun elpy-refactor-rpc-get-options () - "Get a list of refactoring options from the Elpy RPC." - (if (use-region-p) - (elpy-rpc "get_refactor_options" - (list (buffer-file-name) - (1- (region-beginning)) - (1- (region-end)))) - (elpy-rpc "get_refactor_options" - (list (buffer-file-name) - (1- (point)))))) - -(defun elpy-refactor-rpc-get-changes (method args) - "Get a list of changes from the Elpy RPC after applying METHOD with ARGS." - (elpy-rpc "refactor" - (list (buffer-file-name) - method args))) - -(defun elpy-refactor-options (option) - "Show available refactor options and let user choose one." - (interactive "c[i]: importmagic-fixup [p]: autopep8-fix-code [r]: refactor") - (let ((choice (char-to-string option))) - (cond - ((string-equal choice "i") - (elpy-importmagic-fixup)) - ((string-equal choice "p") - (elpy-autopep8-fix-code)) - ((string-equal choice "r") - (elpy-refactor))))) - -(provide 'elpy-refactor) -;;; elpy-refactor.el ends here diff --git a/elpa/elpy-1.35.0/elpy/refactor.py b/elpa/elpy-1.35.0/elpy/refactor.py deleted file mode 100755 index 68ce93b..0000000 --- a/elpa/elpy-1.35.0/elpy/refactor.py +++ /dev/null @@ -1,381 +0,0 @@ -"""Refactoring methods for elpy. - -This interfaces directly with rope, regardless of the backend used, -because the other backends don't really offer refactoring choices. -Once Jedi is similarly featureful as Rope we can try and offer both. - - -# Too complex: - -- Restructure: Interesting, but too complex, and needs deep Rope - knowledge to do well. - -- ChangeSignature: Slightly less complex interface, but still to - complex, requiring a large effort for the benefit. - - -# Too useless: - -I could not get these to work in any useful fashion. I might be doing -something wrong. - -- ExtractVariable does not replace the code extracted with the - variable, making it a glorified copy&paste function. Emacs can do - better than this interface by itself. - -- EncapsulateField: Getter/setter methods are outdated, this should be - using properties. - -- IntroduceFactory: Inserts a trivial method to the current class. - Cute. - -- IntroduceParameter: Introduces a parameter correctly, but does not - replace the old code with the parameter. So it just edits the - argument list and adds a shiny default. - -- LocalToField: Seems to just add "self." in front of all occurrences - of a variable in the local scope. - -- MethodObject: This turns the current method into a callable - class/object. Not sure what that would be good for. - - -# Can't even get to work: - -- ImportOrganizer expand_star_imports, handle_long_imports, - relatives_to_absolutes: Seem not to do anything. - -- create_move: I was not able to figure out what it would like to see - as its attrib argument. - -""" - -import os - -from elpy.rpc import Fault - -try: - from rope.base.exceptions import RefactoringError - from rope.base.project import Project - from rope.base.libutils import path_to_resource - from rope.base import change as rope_change - from rope.base import worder - from rope.refactor.importutils import ImportOrganizer - from rope.refactor.topackage import ModuleToPackage - from rope.refactor.rename import Rename - from rope.refactor.move import create_move - from rope.refactor.inline import create_inline - from rope.refactor.extract import ExtractMethod - from rope.refactor.usefunction import UseFunction - ROPE_AVAILABLE = True -except ImportError: - ROPE_AVAILABLE = False - - -def options(description, **kwargs): - """Decorator to set some options on a method.""" - def set_notes(function): - function.refactor_notes = {'name': function.__name__, - 'category': "Miscellaneous", - 'description': description, - 'doc': getattr(function, '__doc__', - ''), - 'args': []} - function.refactor_notes.update(kwargs) - return function - return set_notes - - -class Refactor(object): - """The main refactoring interface. - - Once initialized, the first call should be to get_refactor_options - to get a list of refactoring options at a given position. The - returned value will also list any additional options required. - - Once you picked one, you can call get_changes to get the actual - refactoring changes. - - """ - def __init__(self, project_root, filename): - self.project_root = project_root - if not ROPE_AVAILABLE: - raise Fault('rope not installed, cannot refactor code.', - code=400) - if not os.path.exists(project_root): - raise Fault( - "cannot do refactoring without a local project root", - code=400 - ) - self.project = Project(project_root, ropefolder=None) - self.resource = path_to_resource(self.project, filename) - - def get_refactor_options(self, start, end=None): - """Return a list of options for refactoring at the given position. - - If `end` is also given, refactoring on a region is assumed. - - Each option is a dictionary of key/value pairs. The value of - the key 'name' is the one to be used for get_changes. - - The key 'args' contains a list of additional arguments - required for get_changes. - - """ - result = [] - for symbol in dir(self): - if not symbol.startswith("refactor_"): - continue - method = getattr(self, symbol) - if not method.refactor_notes.get('available', True): - continue - category = method.refactor_notes['category'] - if end is not None and category != 'Region': - continue - if end is None and category == 'Region': - continue - is_on_symbol = self._is_on_symbol(start) - if not is_on_symbol and category in ('Symbol', 'Method'): - continue - requires_import = method.refactor_notes.get('only_on_imports', - False) - if requires_import and not self._is_on_import_statement(start): - continue - result.append(method.refactor_notes) - return result - - def _is_on_import_statement(self, offset): - "Does this offset point to an import statement?" - data = self.resource.read() - bol = data.rfind("\n", 0, offset) + 1 - eol = data.find("\n", 0, bol) - if eol == -1: - eol = len(data) - line = data[bol:eol] - line = line.strip() - if line.startswith("import ") or line.startswith("from "): - return True - else: - return False - - def _is_on_symbol(self, offset): - "Is this offset on a symbol?" - if not ROPE_AVAILABLE: - return False - data = self.resource.read() - if offset >= len(data): - return False - if data[offset] != '_' and not data[offset].isalnum(): - return False - word = worder.get_name_at(self.resource, offset) - if word: - return True - else: - return False - - def get_changes(self, name, *args): - """Return a list of changes for the named refactoring action. - - Changes are dictionaries describing a single action to be - taken for the refactoring to be successful. - - A change has an action and possibly a type. In the description - below, the action is before the slash and the type after it. - - change: Change file contents - - file: The path to the file to change - - contents: The new contents for the file - - Diff: A unified diff showing the changes introduced - - create/file: Create a new file - - file: The file to create - - create/directory: Create a new directory - - path: The directory to create - - move/file: Rename a file - - source: The path to the source file - - destination: The path to the destination file name - - move/directory: Rename a directory - - source: The path to the source directory - - destination: The path to the destination directory name - - delete/file: Delete a file - - file: The file to delete - - delete/directory: Delete a directory - - path: The directory to delete - - """ - if not name.startswith("refactor_"): - raise ValueError("Bad refactoring name {0}".format(name)) - method = getattr(self, name) - if not method.refactor_notes.get('available', True): - raise RuntimeError("Method not available") - return method(*args) - - @options("Convert from x import y to import x.y as y", category="Imports", - args=[("offset", "offset", None)], - only_on_imports=True, - available=ROPE_AVAILABLE) - def refactor_froms_to_imports(self, offset): - """Converting imports of the form "from ..." to "import ...".""" - refactor = ImportOrganizer(self.project) - changes = refactor.froms_to_imports(self.resource, offset) - return translate_changes(changes) - - @options("Reorganize and clean up", category="Imports", - available=ROPE_AVAILABLE) - def refactor_organize_imports(self): - """Clean up and organize imports.""" - refactor = ImportOrganizer(self.project) - changes = refactor.organize_imports(self.resource) - return translate_changes(changes) - - @options("Convert the current module into a package", category="Module", - available=ROPE_AVAILABLE) - def refactor_module_to_package(self): - """Convert the current module into a package.""" - refactor = ModuleToPackage(self.project, self.resource) - return self._get_changes(refactor) - - @options("Rename symbol at point", category="Symbol", - args=[("offset", "offset", None), - ("new_name", "string", "Rename to: "), - ("in_hierarchy", "boolean", - "Rename in super-/subclasses as well? "), - ("docs", "boolean", - "Replace occurences in docs and strings? ") - ], - available=ROPE_AVAILABLE) - def refactor_rename_at_point(self, offset, new_name, in_hierarchy, docs): - """Rename the symbol at point.""" - try: - refactor = Rename(self.project, self.resource, offset) - except RefactoringError as e: - raise Fault(str(e), code=400) - return self._get_changes(refactor, new_name, - in_hierarchy=in_hierarchy, docs=docs) - - @options("Rename current module", category="Module", - args=[("new_name", "string", "Rename to: ")], - available=ROPE_AVAILABLE) - def refactor_rename_current_module(self, new_name): - """Rename the current module.""" - refactor = Rename(self.project, self.resource, None) - return self._get_changes(refactor, new_name) - - @options("Move the current module to a different package", - category="Module", - args=[("new_name", "directory", "Destination package: ")], - available=ROPE_AVAILABLE) - def refactor_move_module(self, new_name): - """Move the current module.""" - refactor = create_move(self.project, self.resource) - resource = path_to_resource(self.project, new_name) - return self._get_changes(refactor, resource) - - @options("Inline function call at point", category="Symbol", - args=[("offset", "offset", None), - ("only_this", "boolean", "Only this occurrence? ")], - available=ROPE_AVAILABLE) - def refactor_create_inline(self, offset, only_this): - """Inline the function call at point.""" - refactor = create_inline(self.project, self.resource, offset) - if only_this: - return self._get_changes(refactor, remove=False, only_current=True) - else: - return self._get_changes(refactor, remove=True, only_current=False) - - @options("Extract current region as a method", category="Region", - args=[("start", "start_offset", None), - ("end", "end_offset", None), - ("name", "string", "Method name: "), - ("make_global", "boolean", "Create global method? ")], - available=ROPE_AVAILABLE) - def refactor_extract_method(self, start, end, name, - make_global): - """Extract region as a method.""" - refactor = ExtractMethod(self.project, self.resource, start, end) - return self._get_changes( - refactor, name, similar=True, global_=make_global - ) - - @options("Use the function at point wherever possible", category="Method", - args=[("offset", "offset", None)], - available=ROPE_AVAILABLE) - def refactor_use_function(self, offset): - """Use the function at point wherever possible.""" - try: - refactor = UseFunction(self.project, self.resource, offset) - except RefactoringError as e: - raise Fault( - 'Refactoring error: {}'.format(e), - code=400 - ) - return self._get_changes(refactor) - - def _get_changes(self, refactor, *args, **kwargs): - try: - changes = refactor.get_changes(*args, **kwargs) - except Exception as e: - raise Fault("Error during refactoring: {}".format(e), - code=400) - return translate_changes(changes) - - -def translate_changes(initial_change): - """Translate rope.base.change.Change instances to dictionaries. - - See Refactor.get_changes for an explanation of the resulting - dictionary. - - """ - agenda = [initial_change] - result = [] - while agenda: - change = agenda.pop(0) - if isinstance(change, rope_change.ChangeSet): - agenda.extend(change.changes) - elif isinstance(change, rope_change.ChangeContents): - result.append({'action': 'change', - 'file': change.resource.real_path, - 'contents': change.new_contents, - 'diff': change.get_description()}) - elif isinstance(change, rope_change.CreateFile): - result.append({'action': 'create', - 'type': 'file', - 'file': change.resource.real_path}) - elif isinstance(change, rope_change.CreateFolder): - result.append({'action': 'create', - 'type': 'directory', - 'path': change.resource.real_path}) - elif isinstance(change, rope_change.MoveResource): - result.append({'action': 'move', - 'type': ('directory' - if change.new_resource.is_folder() - else 'file'), - 'source': change.resource.real_path, - 'destination': change.new_resource.real_path}) - elif isinstance(change, rope_change.RemoveResource): - if change.resource.is_folder(): - result.append({'action': 'delete', - 'type': 'directory', - 'path': change.resource.real_path}) - else: - result.append({'action': 'delete', - 'type': 'file', - 'file': change.resource.real_path}) - return result - - -class FakeResource(object): - """A fake resource in case Rope is absence.""" - - def __init__(self, filename): - self.real_path = filename - - def read(self): - with open(self.real_path) as f: - return f.read() diff --git a/elpa/elpy-1.35.0/elpy/tests/test_refactor.py b/elpa/elpy-1.35.0/elpy/tests/test_refactor.py deleted file mode 100755 index 94270eb..0000000 --- a/elpa/elpy-1.35.0/elpy/tests/test_refactor.py +++ /dev/null @@ -1,545 +0,0 @@ -import unittest -import tempfile -import shutil -import os -import mock -import sys - -from elpy import refactor -from textwrap import dedent - - -class RefactorTestCase(unittest.TestCase): - def setUp(self): - self.project_root = tempfile.mkdtemp(prefix="test-refactor-root") - self.addCleanup(shutil.rmtree, self.project_root, - ignore_errors=True) - - def create_file(self, name, contents=""): - filename = os.path.join(self.project_root, name) - contents = dedent(contents) - offset = contents.find("_|_") - if offset > -1: - contents = contents[:offset] + contents[offset + 3:] - with open(filename, "w") as f: - f.write(contents) - return filename, offset - - def assertSourceEqual(self, first, second, msg=None): - """Fail if the two objects are unequal, ignoring indentation.""" - self.assertEqual(dedent(first), dedent(second), msg=msg) - - -class TestGetRefactorOptions(RefactorTestCase): - def test_should_only_return_importsmodule_if_not_on_symbol(self): - filename, offset = self.create_file("foo.py", - """\ - import foo - _|_""") - ref = refactor.Refactor(self.project_root, filename) - options = ref.get_refactor_options(offset) - self.assertTrue(all(opt['category'] in ('Imports', - 'Module') - for opt in options)) - filename, offset = self.create_file("foo.py", - """\ - _|_ - import foo""") - ref = refactor.Refactor(self.project_root, filename) - options = ref.get_refactor_options(offset) - self.assertTrue(all(opt['category'] in ('Imports', - 'Module') - for opt in options)) - - def test_should_return_all_if_on_symbol(self): - filename, offset = self.create_file("foo.py", - "import _|_foo") - ref = refactor.Refactor(self.project_root, filename) - options = ref.get_refactor_options(offset) - self.assertTrue(all(opt['category'] in ('Imports', - 'Method', - 'Module', - 'Symbol') - for opt in options)) - - def test_should_return_only_region_if_endoffset(self): - filename, offset = self.create_file("foo.py", - "import foo") - ref = refactor.Refactor(self.project_root, filename) - options = ref.get_refactor_options(offset, 5) - self.assertTrue(all(opt['category'] == 'Region' - for opt in options)) - - @unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") - def test_should_treat_from_import_special(self): - filename, offset = self.create_file("foo.py", - """\ - import foo - _|_""") - ref = refactor.Refactor(self.project_root, filename) - options = ref.get_refactor_options(offset) - self.assertFalse(any(opt['name'] == "refactor_froms_to_imports" - for opt in options)) - filename, offset = self.create_file("foo.py", - "imp_|_ort foo") - ref = refactor.Refactor(self.project_root, filename) - options = ref.get_refactor_options(offset) - self.assertTrue(any(opt['name'] == "refactor_froms_to_imports" - for opt in options)) - - -class TestGetChanges(RefactorTestCase): - def test_should_fail_if_method_is_not_refactoring(self): - filename, offset = self.create_file("foo.py") - ref = refactor.Refactor(self.project_root, filename) - self.assertRaises(ValueError, ref.get_changes, "bad_name") - - def test_should_return_method_results(self): - filename, offset = self.create_file("foo.py") - ref = refactor.Refactor(self.project_root, filename) - with mock.patch.object(ref, 'refactor_extract_method') as test: - test.return_value = "Meep!" - self.assertEqual(ref.get_changes("refactor_extract_method", - 1, 2), - "Meep!") - test.assert_called_with(1, 2) - - -@unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") -class TestIsOnSymbol(RefactorTestCase): - def test_should_find_symbol(self): - filename, offset = self.create_file("test.py", "__B_|_AR = 100") - r = refactor.Refactor(self.project_root, filename) - self.assertTrue(r._is_on_symbol(offset)) - - # Issue #111 - def test_should_find_symbol_with_underscores(self): - filename, offset = self.create_file("test.py", "_|___BAR = 100") - r = refactor.Refactor(self.project_root, filename) - self.assertTrue(r._is_on_symbol(offset)) - - def test_should_not_find_weird_places(self): - filename, offset = self.create_file("test.py", "hello = _|_ 1 + 1") - r = refactor.Refactor(self.project_root, filename) - self.assertFalse(r._is_on_symbol(offset)) - - -@unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") -class TestFromsToImports(RefactorTestCase): - def test_should_refactor(self): - filename, offset = self.create_file( - "foo.py", - """\ - _|_from datetime import datetime - - d = datetime(2013, 4, 7) - """) - ref = refactor.Refactor(self.project_root, filename) - (change,) = ref.get_changes("refactor_froms_to_imports", offset) - self.assertEqual(change['action'], 'change') - self.assertEqual(change['file'], filename) - self.assertSourceEqual(change['contents'], - """\ - import datetime - - d = datetime.datetime(2013, 4, 7) - """) - - -@unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") -class TestOrganizeImports(RefactorTestCase): - def test_should_refactor(self): - filename, offset = self.create_file( - "foo.py", - """\ - import unittest, base64 - import datetime, json - - obj = json.dumps(23) - unittest.TestCase() - """) - ref = refactor.Refactor(self.project_root, filename) - (change,) = ref.get_changes("refactor_organize_imports") - self.assertEqual(change['action'], 'change') - self.assertEqual(change['file'], filename) - self.assertSourceEqual(change['contents'], - """\ - import json - import unittest - - - obj = json.dumps(23) - unittest.TestCase() - """) - - -@unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") -class TestModuleToPackage(RefactorTestCase): - def test_should_refactor(self): - filename, offset = self.create_file( - "foo.py", - "_|_import os\n") - ref = refactor.Refactor(self.project_root, filename) - changes = ref.refactor_module_to_package() - a, b, c = changes - # Not sure why the a change is there. It's a CHANGE that - # changes nothing... - self.assertEqual(a['diff'], '') - - self.assertEqual(b['action'], 'create') - self.assertEqual(b['type'], 'directory') - self.assertEqual(b['path'], os.path.join(self.project_root, "foo")) - - self.assertEqual(c['action'], 'move') - self.assertEqual(c['type'], 'file') - self.assertEqual(c['source'], os.path.join(self.project_root, - "foo.py")) - self.assertEqual(c['destination'], os.path.join(self.project_root, - "foo/__init__.py")) - - -@unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") -class TestRenameAtPoint(RefactorTestCase): - def test_should_refactor(self): - filename, offset = self.create_file( - "foo.py", - """\ - class Foo(object): - def _|_foo(self): - return 5 - - def bar(self): - return self.foo() - """) - file2, offset2 = self.create_file( - "bar.py", - """\ - import foo - - - x = foo.Foo() - x.foo()""") - ref = refactor.Refactor(self.project_root, filename) - first, second = ref.refactor_rename_at_point(offset, "frob", - in_hierarchy=False, - docs=False) - if first['file'] == filename: - a, b = first, second - else: - a, b = second, first - self.assertEqual(a['action'], 'change') - self.assertEqual(a['file'], filename) - self.assertSourceEqual(a['contents'], - """\ - class Foo(object): - def frob(self): - return 5 - - def bar(self): - return self.frob() - """) - self.assertEqual(b['action'], 'change') - self.assertEqual(b['file'], file2) - self.assertSourceEqual(b['contents'], - """\ - import foo - - - x = foo.Foo() - x.frob()""") - - def test_should_refactor_in_hierarchy(self): - filename, offset = self.create_file( - "foo.py", - """\ - class Foo(object): - def _|_foo(self): - return 5 - - def bar(self): - return self.foo() - - class Bar(Foo): - def foo(self): - return 42 - - class Baz(object): - def foo(self): - return 42 - """) - file2, offset2 = self.create_file( - "bar.py", - """\ - import foo - - - x, y, z = foo.Foo(), foo.Bar(), foo.Baz() - x.foo() - y.foo() - z.foo()""") - ref = refactor.Refactor(self.project_root, filename) - first, second = ref.refactor_rename_at_point(offset, "frob", - in_hierarchy=True, - docs=False) - if first['file'] == filename: - a, b = first, second - else: - a, b = second, first - self.assertEqual(a['action'], 'change') - self.assertEqual(a['file'], filename) - self.assertSourceEqual(a['contents'], - """\ - class Foo(object): - def frob(self): - return 5 - - def bar(self): - return self.frob() - - class Bar(Foo): - def frob(self): - return 42 - - class Baz(object): - def foo(self): - return 42 - """) - self.assertEqual(b['action'], 'change') - self.assertEqual(b['file'], file2) - self.assertSourceEqual(b['contents'], - """\ - import foo - - - x, y, z = foo.Foo(), foo.Bar(), foo.Baz() - x.frob() - y.frob() - z.foo()""") - - def test_should_refactor_in_docstrings(self): - filename, offset = self.create_file( - "foo.py", - """\ - class Foo(object): - "Frobnicate the foo" - def _|_foo(self): - return 5 - - print("I'm an unrelated foo") - """) - ref = refactor.Refactor(self.project_root, filename) - (change,) = ref.refactor_rename_at_point(offset, "frob", - in_hierarchy=False, - docs=True) - self.assertEqual(change['action'], 'change') - self.assertEqual(change['file'], filename) - self.assertSourceEqual(change['contents'], - """\ - class Foo(object): - "Frobnicate the frob" - def frob(self): - return 5 - - print("I'm an unrelated foo") - """) - - -@unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") -class TestRenameCurrentModule(RefactorTestCase): - def test_should_refactor(self): - filename, offset = self.create_file( - "foo.py", - "_|_import os\n") - file2, offset = self.create_file( - "bar.py", - """\ - _|_import foo - foo.os - """) - dest = os.path.join(self.project_root, "frob.py") - ref = refactor.Refactor(self.project_root, filename) - a, b = ref.refactor_rename_current_module("frob") - - self.assertEqual(a['action'], 'change') - self.assertEqual(a['file'], file2) - self.assertEqual(a['contents'], - "import frob\n" - "frob.os\n") - - self.assertEqual(b['action'], 'move') - self.assertEqual(b['type'], 'file') - self.assertEqual(b['source'], filename) - self.assertEqual(b['destination'], dest) - - -@unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") -class TestMoveModule(RefactorTestCase): - def test_should_refactor(self): - filename, offset = self.create_file( - "foo.py", - "_|_import os\n") - file2, offset = self.create_file( - "bar.py", - """\ - _|_import foo - foo.os - """) - dest = os.path.join(self.project_root, "frob") - os.mkdir(dest) - with open(os.path.join(dest, "__init__.py"), "w") as f: - f.write("") - ref = refactor.Refactor(self.project_root, filename) - a, b = ref.refactor_move_module(dest) - - self.assertEqual(a['action'], 'change') - self.assertEqual(a['file'], file2) - self.assertSourceEqual(a['contents'], - """\ - import frob.foo - frob.foo.os - """) - - self.assertEqual(b['action'], 'move') - self.assertEqual(b['type'], 'file') - self.assertEqual(b['source'], filename) - self.assertEqual(b['destination'], - os.path.join(dest, "foo.py")) - - -@unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") -class TestCreateInline(RefactorTestCase): - def setUp(self): - super(TestCreateInline, self).setUp() - self.filename, self.offset = self.create_file( - "foo.py", - """\ - def add(a, b): - return a + b - - x = _|_add(2, 3) - y = add(17, 4) - """) - - def test_should_refactor_single_occurrenc(self): - ref = refactor.Refactor(self.project_root, self.filename) - (change,) = ref.refactor_create_inline(self.offset, True) - - self.assertEqual(change['action'], 'change') - self.assertEqual(change['file'], self.filename) - self.assertSourceEqual(change['contents'], - """\ - def add(a, b): - return a + b - - x = 2 + 3 - y = add(17, 4) - """) - - def test_should_refactor_all_occurrencs(self): - ref = refactor.Refactor(self.project_root, self.filename) - (change,) = ref.refactor_create_inline(self.offset, False) - - self.assertEqual(change['action'], 'change') - self.assertEqual(change['file'], self.filename) - self.assertSourceEqual(change['contents'], - """\ - x = 2 + 3 - y = 17 + 4 - """) - - -@unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") -class TestExtractMethod(RefactorTestCase): - def setUp(self): - super(TestExtractMethod, self).setUp() - self.filename, self.offset = self.create_file( - "foo.py", - """\ - class Foo(object): - def spaghetti(self, a, b): - _|_x = a + 5 - y = b + 23 - return y - """) - - @unittest.skipIf(sys.version_info >= (3, 5), "Python 3.5 not supported") - def test_should_refactor_local(self): - ref = refactor.Refactor(self.project_root, self.filename) - (change,) = ref.refactor_extract_method(self.offset, 104, - "calc", False) - self.assertEqual(change['action'], 'change') - self.assertEqual(change['file'], self.filename) - expected = """\ - class Foo(object): - def spaghetti(self, a, b): - return self.calc(a, b) - - def calc(self, a, b): - x = a + 5 - y = b + 23 - return y - """ - expected2 = expected.replace("return self.calc(a, b)", - "return self.calc(b, a)") - expected2 = expected2.replace("def calc(self, a, b)", - "def calc(self, b, a)") - # This is silly, but it's what we got. - if change['contents'] == dedent(expected2): - self.assertSourceEqual(change['contents'], expected2) - else: - self.assertSourceEqual(change['contents'], expected) - - @unittest.skipIf(sys.version_info >= (3, 5), "Python 3.5 not supported") - def test_should_refactor_global(self): - ref = refactor.Refactor(self.project_root, self.filename) - (change,) = ref.refactor_extract_method(self.offset, 104, - "calc", True) - self.assertEqual(change['action'], 'change') - self.assertEqual(change['file'], self.filename) - expected = """\ - class Foo(object): - def spaghetti(self, a, b): - return calc(a, b) - - def calc(a, b): - x = a + 5 - y = b + 23 - return y - """ - expected2 = expected.replace("return calc(a, b)", - "return calc(b, a)") - expected2 = expected2.replace("def calc(a, b)", - "def calc(b, a)") - if change['contents'] == dedent(expected2): - self.assertSourceEqual(change['contents'], expected2) - else: - self.assertSourceEqual(change['contents'], expected) - - -@unittest.skipIf(not refactor.ROPE_AVAILABLE, "Requires Rope") -class TestUseFunction(RefactorTestCase): - def test_should_refactor(self): - filename, offset = self.create_file( - "foo.py", - """\ - def _|_add_and_multiply(a, b, c): - temp = a + b - return temp * c - - f = 1 + 2 - g = f * 3 - """) - - ref = refactor.Refactor(self.project_root, filename) - (change,) = ref.refactor_use_function(offset) - - self.assertEqual(change['action'], 'change') - self.assertEqual(change['file'], filename) - self.assertSourceEqual(change['contents'], - """\ - def add_and_multiply(a, b, c): - temp = a + b - return temp * c - - g = add_and_multiply(1, 2, 3) - """) diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__abs__ b/elpa/elpy-1.35.0/snippets/python-mode/__abs__ deleted file mode 100755 index 12b1585..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__abs__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __abs__ -# key: __abs__ -# group: Special methods -# -- -def __abs__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__add__ b/elpa/elpy-1.35.0/snippets/python-mode/__add__ deleted file mode 100755 index a70f20f..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__add__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __add__ -# key: __add__ -# group: Special methods -# -- -def __add__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__and__ b/elpa/elpy-1.35.0/snippets/python-mode/__and__ deleted file mode 100755 index 56961d3..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__and__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __and__ -# key: __and__ -# group: Special methods -# -- -def __and__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__bool__ b/elpa/elpy-1.35.0/snippets/python-mode/__bool__ deleted file mode 100755 index ba4ffe8..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__bool__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __bool__ -# key: __bool__ -# group: Special methods -# -- -def __bool__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__call__ b/elpa/elpy-1.35.0/snippets/python-mode/__call__ deleted file mode 100755 index dea8463..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__call__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __call__ -# key: __call__ -# group: Special methods -# -- -def __call__(self, ${1:*args}): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__cmp__ b/elpa/elpy-1.35.0/snippets/python-mode/__cmp__ deleted file mode 100755 index c266621..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__cmp__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __cmp__ -# key: __cmp__ -# group: Special methods -# -- -def __cmp__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__coerce__ b/elpa/elpy-1.35.0/snippets/python-mode/__coerce__ deleted file mode 100755 index 297138c..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__coerce__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __coerce__ -# key: __coerce__ -# group: Special methods -# -- -def __coerce__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__complex__ b/elpa/elpy-1.35.0/snippets/python-mode/__complex__ deleted file mode 100755 index 108e47e..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__complex__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __complex__ -# key: __complex__ -# group: Special methods -# -- -def __complex__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__contains__ b/elpa/elpy-1.35.0/snippets/python-mode/__contains__ deleted file mode 100755 index 5376c2d..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__contains__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __contains__ -# key: __contains__ -# group: Special methods -# -- -def __contains__(self, item): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__del__ b/elpa/elpy-1.35.0/snippets/python-mode/__del__ deleted file mode 100755 index a3a1a04..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__del__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __del__ -# key: __del__ -# group: Special methods -# -- -def __del__(self): - $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__delattr__ b/elpa/elpy-1.35.0/snippets/python-mode/__delattr__ deleted file mode 100755 index fe41a47..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__delattr__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __delattr__ -# key: __delattr__ -# group: Special methods -# -- -def __delattr__(self, name): - $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__delete__ b/elpa/elpy-1.35.0/snippets/python-mode/__delete__ deleted file mode 100755 index 7b216b4..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__delete__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __delete__ -# key: __delete__ -# group: Special methods -# -- -def __delete__(self, instance): - $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__delitem__ b/elpa/elpy-1.35.0/snippets/python-mode/__delitem__ deleted file mode 100755 index fd79a02..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__delitem__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __delitem__ -# key: __delitem__ -# group: Special methods -# -- -def __delitem__(self, key): - $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__div__ b/elpa/elpy-1.35.0/snippets/python-mode/__div__ deleted file mode 100755 index 8da4ea9..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__div__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __div__ -# key: __div__ -# group: Special methods -# -- -def __div__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__divmod__ b/elpa/elpy-1.35.0/snippets/python-mode/__divmod__ deleted file mode 100755 index 5863274..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__divmod__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __divmod__ -# key: __divmod__ -# group: Special methods -# -- -def __divmod__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__enter__ b/elpa/elpy-1.35.0/snippets/python-mode/__enter__ deleted file mode 100755 index 0ad587f..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__enter__ +++ /dev/null @@ -1,9 +0,0 @@ -# -*- mode: snippet -*- -# name: __enter__ -# key: __enter__ -# group: Special methods -# -- -def __enter__(self): - $0 - - return self \ No newline at end of file diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__eq__ b/elpa/elpy-1.35.0/snippets/python-mode/__eq__ deleted file mode 100755 index 0f772ff..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__eq__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __eq__ -# key: __eq__ -# group: Special methods -# -- -def __eq__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__exit__ b/elpa/elpy-1.35.0/snippets/python-mode/__exit__ deleted file mode 100755 index e194524..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__exit__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __exit__ -# key: __exit__ -# group: Special methods -# -- -def __exit__(self, exc_type, exc_value, traceback): - $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__float__ b/elpa/elpy-1.35.0/snippets/python-mode/__float__ deleted file mode 100755 index 6f1ab4a..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__float__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __float__ -# key: __float__ -# group: Special methods -# -- -def __float__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__floordiv__ b/elpa/elpy-1.35.0/snippets/python-mode/__floordiv__ deleted file mode 100755 index 117f174..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__floordiv__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __floordiv__ -# key: __floordiv__ -# group: Special methods -# -- -def __floordiv__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__ge__ b/elpa/elpy-1.35.0/snippets/python-mode/__ge__ deleted file mode 100755 index a7f5c49..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__ge__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __ge__ -# key: __ge__ -# group: Special methods -# -- -def __ge__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__get__ b/elpa/elpy-1.35.0/snippets/python-mode/__get__ deleted file mode 100755 index 9d4a9fa..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__get__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __get__ -# key: __get__ -# group: Special methods -# -- -def __get__(self, instance, owner): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__getattr__ b/elpa/elpy-1.35.0/snippets/python-mode/__getattr__ deleted file mode 100755 index 07e9afc..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__getattr__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __getattr__ -# key: __getattr__ -# group: Special methods -# -- -def __getattr__(self, name): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__getattribute__ b/elpa/elpy-1.35.0/snippets/python-mode/__getattribute__ deleted file mode 100755 index e6bfedd..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__getattribute__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __getattribute__ -# key: __getattribute__ -# group: Special methods -# -- -def __getattribute__(self, name): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__getitem__ b/elpa/elpy-1.35.0/snippets/python-mode/__getitem__ deleted file mode 100755 index 6d73dc7..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__getitem__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __getitem__ -# key: __getitem__ -# group: Special methods -# -- -def __getitem__(self, key): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__gt__ b/elpa/elpy-1.35.0/snippets/python-mode/__gt__ deleted file mode 100755 index 0fb0eb3..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__gt__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __gt__ -# key: __gt__ -# group: Special methods -# -- -def __gt__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__hash__ b/elpa/elpy-1.35.0/snippets/python-mode/__hash__ deleted file mode 100755 index a117104..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__hash__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __hash__ -# key: __hash__ -# group: Special methods -# -- -def __hash__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__hex__ b/elpa/elpy-1.35.0/snippets/python-mode/__hex__ deleted file mode 100755 index 62df1d7..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__hex__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __hex__ -# key: __hex__ -# group: Special methods -# -- -def __hex__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__iadd__ b/elpa/elpy-1.35.0/snippets/python-mode/__iadd__ deleted file mode 100755 index fe1f244..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__iadd__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __iadd__ -# key: __iadd__ -# group: Special methods -# -- -def __iadd__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__iand__ b/elpa/elpy-1.35.0/snippets/python-mode/__iand__ deleted file mode 100755 index 6b027e9..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__iand__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __iand__ -# key: __iand__ -# group: Special methods -# -- -def __iand__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__idiv__ b/elpa/elpy-1.35.0/snippets/python-mode/__idiv__ deleted file mode 100755 index fb32a86..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__idiv__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __idiv__ -# key: __idiv__ -# group: Special methods -# -- -def __idiv__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__ifloordiv__ b/elpa/elpy-1.35.0/snippets/python-mode/__ifloordiv__ deleted file mode 100755 index 8d20072..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__ifloordiv__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __ifloordiv__ -# key: __ifloordiv__ -# group: Special methods -# -- -def __ifloordiv__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__ilshift__ b/elpa/elpy-1.35.0/snippets/python-mode/__ilshift__ deleted file mode 100755 index e29895f..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__ilshift__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __ilshift__ -# key: __ilshift__ -# group: Special methods -# -- -def __ilshift__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__imod__ b/elpa/elpy-1.35.0/snippets/python-mode/__imod__ deleted file mode 100755 index 4d74b13..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__imod__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __imod__ -# key: __imod__ -# group: Special methods -# -- -def __imod__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__imul__ b/elpa/elpy-1.35.0/snippets/python-mode/__imul__ deleted file mode 100755 index ee84829..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__imul__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __imul__ -# key: __imul__ -# group: Special methods -# -- -def __imul__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__index__ b/elpa/elpy-1.35.0/snippets/python-mode/__index__ deleted file mode 100755 index 7337f76..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__index__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __index__ -# key: __index__ -# group: Special methods -# -- -def __index__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__init__ b/elpa/elpy-1.35.0/snippets/python-mode/__init__ deleted file mode 100755 index e1f6cde..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__init__ +++ /dev/null @@ -1,10 +0,0 @@ -# -*- mode: snippet -*- -# name: __init__ with assignment -# key: __init__ -# group: Special methods -# -- -def __init__(self${1:, args}): - """$2 - - """ - ${1:$(elpy-snippet-init-assignments yas-text)} diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__instancecheck__ b/elpa/elpy-1.35.0/snippets/python-mode/__instancecheck__ deleted file mode 100755 index 4b567aa..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__instancecheck__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __instancecheck__ -# key: __instancecheck__ -# group: Special methods -# -- -def __instancecheck__(self, instance): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__int__ b/elpa/elpy-1.35.0/snippets/python-mode/__int__ deleted file mode 100755 index fa136df..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__int__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __int__ -# key: __int__ -# group: Special methods -# -- -def __int__(self): - $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__invert__ b/elpa/elpy-1.35.0/snippets/python-mode/__invert__ deleted file mode 100755 index bbf1df4..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__invert__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __invert__ -# key: __invert__ -# group: Special methods -# -- -def __invert__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__ior__ b/elpa/elpy-1.35.0/snippets/python-mode/__ior__ deleted file mode 100755 index 045a0d5..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__ior__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __ior__ -# key: __ior__ -# group: Special methods -# -- -def __ior__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__ipow__ b/elpa/elpy-1.35.0/snippets/python-mode/__ipow__ deleted file mode 100755 index ec62f49..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__ipow__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __ipow__ -# key: __ipow__ -# group: Special methods -# -- -def __ipow__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__irshift__ b/elpa/elpy-1.35.0/snippets/python-mode/__irshift__ deleted file mode 100755 index 193f790..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__irshift__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __irshift__ -# key: __irshift__ -# group: Special methods -# -- -def __irshift__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__isub__ b/elpa/elpy-1.35.0/snippets/python-mode/__isub__ deleted file mode 100755 index 70fd574..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__isub__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __isub__ -# key: __isub__ -# group: Special methods -# -- -def __isub__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__iter__ b/elpa/elpy-1.35.0/snippets/python-mode/__iter__ deleted file mode 100755 index a7002e0..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__iter__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __iter__ -# key: __iter__ -# group: Special methods -# -- -def __iter__(self): - $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__itruediv__ b/elpa/elpy-1.35.0/snippets/python-mode/__itruediv__ deleted file mode 100755 index 14caec6..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__itruediv__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __itruediv__ -# key: __itruediv__ -# group: Special methods -# -- -def __itruediv__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__ixor__ b/elpa/elpy-1.35.0/snippets/python-mode/__ixor__ deleted file mode 100755 index ffba3ed..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__ixor__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __ixor__ -# key: __ixor__ -# group: Special methods -# -- -def __ixor__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__le__ b/elpa/elpy-1.35.0/snippets/python-mode/__le__ deleted file mode 100755 index f08aebe..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__le__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __le__ -# key: __le__ -# group: Special methods -# -- -def __le__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__len__ b/elpa/elpy-1.35.0/snippets/python-mode/__len__ deleted file mode 100755 index 7d15f93..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__len__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __len__ -# key: __len__ -# group: Special methods -# -- -def __len__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__long__ b/elpa/elpy-1.35.0/snippets/python-mode/__long__ deleted file mode 100755 index 16c3cd2..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__long__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __long__ -# key: __long__ -# group: Special methods -# -- -def __long__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__lshift__ b/elpa/elpy-1.35.0/snippets/python-mode/__lshift__ deleted file mode 100755 index 493a21f..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__lshift__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __lshift__ -# key: __lshift__ -# group: Special methods -# -- -def __lshift__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__lt__ b/elpa/elpy-1.35.0/snippets/python-mode/__lt__ deleted file mode 100755 index a47a248..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__lt__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __lt__ -# key: __lt__ -# group: Special methods -# -- -def __lt__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__mod__ b/elpa/elpy-1.35.0/snippets/python-mode/__mod__ deleted file mode 100755 index 94a5ff5..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__mod__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __mod__ -# key: __mod__ -# group: Special methods -# -- -def __mod__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__mul__ b/elpa/elpy-1.35.0/snippets/python-mode/__mul__ deleted file mode 100755 index f4a3d7a..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__mul__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __mul__ -# key: __mul__ -# group: Special methods -# -- -def __mul__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__ne__ b/elpa/elpy-1.35.0/snippets/python-mode/__ne__ deleted file mode 100755 index 684f967..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__ne__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __ne__ -# key: __ne__ -# group: Special methods -# -- -def __ne__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__neg__ b/elpa/elpy-1.35.0/snippets/python-mode/__neg__ deleted file mode 100755 index b430dcd..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__neg__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __neg__ -# key: __neg__ -# group: Special methods -# -- -def __neg__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__new__ b/elpa/elpy-1.35.0/snippets/python-mode/__new__ deleted file mode 100755 index aac14dc..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__new__ +++ /dev/null @@ -1,10 +0,0 @@ -# -*- mode: snippet -*- -# name: __new__ -# key: __new__ -# group: Special methods -# -- -def __new__(cls${1:, args}): - """$2 - - """ - ${1:$(elpy-snippet-init-assignments yas-text)} diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__nonzero__ b/elpa/elpy-1.35.0/snippets/python-mode/__nonzero__ deleted file mode 100755 index cef110e..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__nonzero__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __nonzero__ -# key: __nonzero__ -# group: Special methods -# -- -def __nonzero__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__oct__ b/elpa/elpy-1.35.0/snippets/python-mode/__oct__ deleted file mode 100755 index 7a46b56..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__oct__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __oct__ -# key: __oct__ -# group: Special methods -# -- -def __oct__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__or__ b/elpa/elpy-1.35.0/snippets/python-mode/__or__ deleted file mode 100755 index 6c14ea7..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__or__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __or__ -# key: __or__ -# group: Special methods -# -- -def __or__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__pos__ b/elpa/elpy-1.35.0/snippets/python-mode/__pos__ deleted file mode 100755 index ac429b8..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__pos__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __pos__ -# key: __pos__ -# group: Special methods -# -- -def __pos__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__pow__ b/elpa/elpy-1.35.0/snippets/python-mode/__pow__ deleted file mode 100755 index c799102..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__pow__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __pow__ -# key: __pow__ -# group: Special methods -# -- -def __pow__(self, other, modulo=None): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__radd__ b/elpa/elpy-1.35.0/snippets/python-mode/__radd__ deleted file mode 100755 index 761d63d..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__radd__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __radd__ -# key: __radd__ -# group: Special methods -# -- -def __radd__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rand__ b/elpa/elpy-1.35.0/snippets/python-mode/__rand__ deleted file mode 100755 index be85670..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rand__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rand__ -# key: __rand__ -# group: Special methods -# -- -def __rand__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rdivmod__ b/elpa/elpy-1.35.0/snippets/python-mode/__rdivmod__ deleted file mode 100755 index 2c06a87..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rdivmod__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rdivmod__ -# key: __rdivmod__ -# group: Special methods -# -- -def __rdivmod__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__repr__ b/elpa/elpy-1.35.0/snippets/python-mode/__repr__ deleted file mode 100755 index 45ae2f9..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__repr__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __repr__ -# key: __repr__ -# group: Special methods -# -- -def __repr__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__reversed__ b/elpa/elpy-1.35.0/snippets/python-mode/__reversed__ deleted file mode 100755 index 8f29b7b..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__reversed__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __reversed__ -# key: __reversed__ -# group: Special methods -# -- -def __reversed__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rfloordiv__ b/elpa/elpy-1.35.0/snippets/python-mode/__rfloordiv__ deleted file mode 100755 index 317aeef..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rfloordiv__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rfloordiv__ -# key: __rfloordiv__ -# group: Special methods -# -- -def __rfloordiv__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rlshift__ b/elpa/elpy-1.35.0/snippets/python-mode/__rlshift__ deleted file mode 100755 index 5522f85..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rlshift__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rlshift__ -# key: __rlshift__ -# group: Special methods -# -- -def __rlshift__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rmod__ b/elpa/elpy-1.35.0/snippets/python-mode/__rmod__ deleted file mode 100755 index 562c07f..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rmod__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rmod__ -# key: __rmod__ -# group: Special methods -# -- -def __rmod__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rmul__ b/elpa/elpy-1.35.0/snippets/python-mode/__rmul__ deleted file mode 100755 index aae0b45..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rmul__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rmul__ -# key: __rmul__ -# group: Special methods -# -- -def __rmul__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__ror__ b/elpa/elpy-1.35.0/snippets/python-mode/__ror__ deleted file mode 100755 index 0789549..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__ror__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __ror__ -# key: __ror__ -# group: Special methods -# -- -def __ror__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rpow__ b/elpa/elpy-1.35.0/snippets/python-mode/__rpow__ deleted file mode 100755 index 7253b2e..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rpow__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rpow__ -# key: __rpow__ -# group: Special methods -# -- -def __rpow__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rrshift__ b/elpa/elpy-1.35.0/snippets/python-mode/__rrshift__ deleted file mode 100755 index 5d62907..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rrshift__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rrshift__ -# key: __rrshift__ -# group: Special methods -# -- -def __rrshift__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rshift__ b/elpa/elpy-1.35.0/snippets/python-mode/__rshift__ deleted file mode 100755 index 1ec6af2..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rshift__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rshift__ -# key: __rshift__ -# group: Special methods -# -- -def __rshift__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rsub__ b/elpa/elpy-1.35.0/snippets/python-mode/__rsub__ deleted file mode 100755 index d58d7e8..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rsub__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rsub__ -# key: __rsub__ -# group: Special methods -# -- -def __rsub__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rtruediv__ b/elpa/elpy-1.35.0/snippets/python-mode/__rtruediv__ deleted file mode 100755 index 993d117..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rtruediv__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rtruediv__ -# key: __rtruediv__ -# group: Special methods -# -- -def __rtruediv__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__rxor__ b/elpa/elpy-1.35.0/snippets/python-mode/__rxor__ deleted file mode 100755 index 4d1cc09..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__rxor__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __rxor__ -# key: __rxor__ -# group: Special methods -# -- -def __rxor__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__set__ b/elpa/elpy-1.35.0/snippets/python-mode/__set__ deleted file mode 100755 index bf87f57..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__set__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __set__ -# key: __set__ -# group: Special methods -# -- -def __set__(self, instance, value): - $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__setattr__ b/elpa/elpy-1.35.0/snippets/python-mode/__setattr__ deleted file mode 100755 index 3482e8e..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__setattr__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __setattr__ -# key: __setattr__ -# group: Special methods -# -- -def __setattr__(self, name, value): - $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__setitem__ b/elpa/elpy-1.35.0/snippets/python-mode/__setitem__ deleted file mode 100755 index d229fa1..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__setitem__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __setitem__ -# key: __setitem__ -# group: Special methods -# -- -def __setitem__(self, key, value): - $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__slots__ b/elpa/elpy-1.35.0/snippets/python-mode/__slots__ deleted file mode 100755 index c35d488..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__slots__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __slots__ -# key: __slots__ -# group: Class attributes -# -- -__slots__ = ($1) -$0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__str__ b/elpa/elpy-1.35.0/snippets/python-mode/__str__ deleted file mode 100755 index 3b39088..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__str__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __str__ -# key: __str__ -# group: Special methods -# -- -def __str__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__sub__ b/elpa/elpy-1.35.0/snippets/python-mode/__sub__ deleted file mode 100755 index a183459..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__sub__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __sub__ -# key: __sub__ -# group: Special methods -# -- -def __sub__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__subclasscheck__ b/elpa/elpy-1.35.0/snippets/python-mode/__subclasscheck__ deleted file mode 100755 index 3918b4c..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__subclasscheck__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __subclasscheck__ -# key: __subclasscheck__ -# group: Special methods -# -- -def __subclasscheck__(self, instance): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__truediv__ b/elpa/elpy-1.35.0/snippets/python-mode/__truediv__ deleted file mode 100755 index c76e055..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__truediv__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __truediv__ -# key: __truediv__ -# group: Special methods -# -- -def __truediv__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__unicode__ b/elpa/elpy-1.35.0/snippets/python-mode/__unicode__ deleted file mode 100755 index 62b82f6..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__unicode__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __unicode__ -# key: __unicode__ -# group: Special methods -# -- -def __unicode__(self): - return $0 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/__xor__ b/elpa/elpy-1.35.0/snippets/python-mode/__xor__ deleted file mode 100755 index 3c7e694..0000000 --- a/elpa/elpy-1.35.0/snippets/python-mode/__xor__ +++ /dev/null @@ -1,7 +0,0 @@ -# -*- mode: snippet -*- -# name: __xor__ -# key: __xor__ -# group: Special methods -# -- -def __xor__(self, other): - return $0 diff --git a/elpa/elpy-1.35.0/elpy-autoloads.el b/elpa/elpy-20210328.1852/elpy-autoloads.el old mode 100755 new mode 100644 similarity index 98% rename from elpa/elpy-1.35.0/elpy-autoloads.el rename to elpa/elpy-20210328.1852/elpy-autoloads.el index d6bc292..71bf764 --- a/elpa/elpy-1.35.0/elpy-autoloads.el +++ b/elpa/elpy-20210328.1852/elpy-autoloads.el @@ -61,7 +61,7 @@ Display the version of Elpy." t nil) ;;;### (autoloads nil "elpy-refactor" "elpy-refactor.el" (0 0 0 0)) ;;; Generated autoloads from elpy-refactor.el -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "elpy-refactor" '("elpy-refactor"))) +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "elpy-refactor" '("elpy-refactor-"))) ;;;*** diff --git a/elpa/elpy-1.35.0/elpy-django.el b/elpa/elpy-20210328.1852/elpy-django.el old mode 100755 new mode 100644 similarity index 99% rename from elpa/elpy-1.35.0/elpy-django.el rename to elpa/elpy-20210328.1852/elpy-django.el index eabba9a..01a7812 --- a/elpa/elpy-1.35.0/elpy-django.el +++ b/elpa/elpy-20210328.1852/elpy-django.el @@ -205,7 +205,7 @@ The result is memoized on project root and `DJANGO_SETTINGS_MODULE'" (defun elpy-django--get-test-format () - "When running a Django test, some test runners require a different format that others. + "When running a Django test, some test runners require a different format than others. Return the correct string format here." (let ((runner (elpy-django--get-test-runner)) (found nil) diff --git a/elpa/elpy-20210328.1852/elpy-pkg.el b/elpa/elpy-20210328.1852/elpy-pkg.el new file mode 100644 index 0000000..96501c0 --- /dev/null +++ b/elpa/elpy-20210328.1852/elpy-pkg.el @@ -0,0 +1,17 @@ +(define-package "elpy" "20210328.1852" "Emacs Python Development Environment" + '((company "0.9.2") + (emacs "24.4") + (highlight-indentation "0.5.0") + (pyvenv "1.3") + (yasnippet "0.8.0") + (s "1.11.0")) + :commit "2203597e1254eba345d6873daa40c7b9d144931c" :authors + '(("Jorgen Schaefer , Gaby Launay" . "gaby.launay@protonmail.com")) + :maintainer + '("Jorgen Schaefer , Gaby Launay" . "gaby.launay@protonmail.com") + :keywords + '("python" "ide" "languages" "tools") + :url "https://github.com/jorgenschaefer/elpy") +;; Local Variables: +;; no-byte-compile: t +;; End: diff --git a/elpa/elpy-1.35.0/elpy-profile.el b/elpa/elpy-20210328.1852/elpy-profile.el old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy-profile.el rename to elpa/elpy-20210328.1852/elpy-profile.el diff --git a/elpa/elpy-20210328.1852/elpy-refactor.el b/elpa/elpy-20210328.1852/elpy-refactor.el new file mode 100644 index 0000000..19193b1 --- /dev/null +++ b/elpa/elpy-20210328.1852/elpy-refactor.el @@ -0,0 +1,320 @@ +;;; elpy-refactor.el --- Refactoring mode for Elpy + +;; Copyright (C) 2020 Gaby Launay + +;; Author: Gaby Launay +;; URL: https://github.com/jorgenschaefer/elpy + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License +;; as published by the Free Software Foundation; either version 3 +;; of the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; This file provides an interface, including a major mode, to use +;; refactoring options provided by the Jedi library. + +;;; Code: + +;; We require elpy, but elpy loads us, so we shouldn't load it back. +;; (require 'elpy) +(require 'diff-mode) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Refactor mode (for applying diffs) + +(defvar elpy-refactor--saved-window-configuration nil + "Saved windows configuration, so that we can restore it after `elpy-refactor' has done its thing.") + +(defvar elpy-refactor--saved-pos nil + "Line and column number of the position we were at before starting refactoring.") + +(defvar elpy-refactor--modified-buffers '() + "Keep track of the buffers modified by the current refactoring sessions.") + +(defun elpy-refactor--apply-diff (proj-path diff) + "Apply DIFF, looking for the files in PROJ-PATH." + (let ((current-line (line-number-at-pos (point))) + (current-col (- (point) (line-beginning-position)))) + (with-current-buffer (get-buffer-create " *Elpy Refactor*") + (elpy-refactor-mode) + (let ((inhibit-read-only t)) + (erase-buffer) + (insert diff)) + (setq default-directory proj-path) + (goto-char (point-min)) + (elpy-refactor--apply-whole-diff)) + (condition-case nil + (progn + (goto-char (point-min)) + (forward-line (- current-line 1)) + (beginning-of-line) + (forward-char current-col)) + (error)) + )) + +(defun elpy-refactor--display-diff (proj-path diff) + "Display DIFF in a `diff-mode' window. + +DIFF files should be relative to PROJ-PATH." + (setq elpy-refactor--saved-window-configuration (current-window-configuration) + elpy-refactor--saved-pos (list (line-number-at-pos (point) t) + (- (point) (line-beginning-position))) + elpy-refactor--modified-buffers '()) + (with-current-buffer (get-buffer-create "*Elpy Refactor*") + (elpy-refactor-mode) + (let ((inhibit-read-only t)) + (erase-buffer) + (insert (propertize + (substitute-command-keys + (concat + "\\[diff-file-next] and \\[diff-file-prev] -- Move between files\n" + "\\[diff-hunk-next] and \\[diff-hunk-prev] -- Move between hunks\n" + "\\[diff-split-hunk] -- Split the current hunk at point\n" + "\\[elpy-refactor--apply-hunk] -- Apply the current hunk\n" + "\\[diff-kill-hunk] -- Kill the current hunk\n" + "\\[elpy-refactor--apply-whole-diff] -- Apply the whole diff\n" + "\\[elpy-refactor--quit] -- Quit\n")) + 'face 'bold) + "\n\n") + (align-regexp (point-min) (point-max) "\\(\\s-*\\) -- ") + (goto-char (point-min)) + (while (search-forward " -- " nil t) + (replace-match " " nil t)) + (goto-char (point-max)) + (insert diff)) + (setq default-directory proj-path) + (goto-char (point-min)) + (if (diff--some-hunks-p) + (progn + (select-window (display-buffer (current-buffer))) + (diff-hunk-next)) + ;; quit if not diff at all... + (message "No differences to validate") + (kill-buffer (current-buffer))))) + +(defvar elpy-refactor-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "C-c C-c") 'elpy-refactor--apply-hunk) + (define-key map (kbd "C-c C-a") 'elpy-refactor--apply-whole-diff) + (define-key map (kbd "C-c C-x") 'diff-kill-hunk) + (define-key map (kbd "q") 'elpy-refactor--quit) + (define-key map (kbd "C-c C-k") 'elpy-refactor--quit) + (define-key map (kbd "h") 'describe-mode) + (define-key map (kbd "?") 'describe-mode) + map) + "The key map for `elpy-refactor-mode'.") + +(define-derived-mode elpy-refactor-mode diff-mode "Elpy Refactor" + "Mode to display refactoring actions and ask confirmation from the user. + +\\{elpy-refactor-mode-map}" + :group 'elpy + (view-mode 1)) + +(defun elpy-refactor--apply-hunk () + "Apply the current hunk." + (interactive) + (save-excursion + (diff-apply-hunk)) + ;; keep track of modified buffers + (let ((buf (find-buffer-visiting (diff-find-file-name)))) + (when buf + (add-to-list 'elpy-refactor--modified-buffers buf))) + ;; + (diff-hunk-kill) + (unless (diff--some-hunks-p) + (elpy-refactor--quit))) + +(defun elpy-refactor--apply-whole-diff () + "Apply the whole diff and quit." + (interactive) + (goto-char (point-min)) + (diff-hunk-next) + (while (diff--some-hunks-p) + (let ((buf (find-buffer-visiting (diff-find-file-name)))) + (when buf + (add-to-list 'elpy-refactor--modified-buffers buf))) + (condition-case nil + (progn + (save-excursion + (diff-apply-hunk)) + (diff-hunk-kill)) + (error (diff-hunk-next)))) ;; if a hunk fail, switch to the next one + ;; quit + (elpy-refactor--quit)) + +(defun elpy-refactor--quit () + "Quit the refactoring session." + (interactive) + ;; save modified buffers + (dolist (buf elpy-refactor--modified-buffers) + (with-current-buffer buf + (basic-save-buffer))) + (setq elpy-refactor--modified-buffers '()) + ;; kill refactoring buffer + (kill-buffer (current-buffer)) + ;; Restore window configuration + (when elpy-refactor--saved-window-configuration + (set-window-configuration elpy-refactor--saved-window-configuration) + (setq elpy-refactor--saved-window-configuration nil)) + ;; Restore cursor position + (when elpy-refactor--saved-pos + (goto-char (point-min)) + (forward-line (- (car elpy-refactor--saved-pos) 1)) + (forward-char (car (cdr elpy-refactor--saved-pos))) + (setq elpy-refactor--saved-pos nil))) + + + +;;;;;;;;;;;;;;;;; +;; User functions + +(defun elpy-refactor-rename (new-name &optional dontask) + "Rename the symbol at point to NEW-NAME. + +With a prefix argument (or if DONTASK is non-nil), +do not display the diff before applying." + (interactive (list + (let ((old-name (thing-at-point 'symbol))) + (if (or (not old-name) + (not (elpy-refactor--is-valid-symbol-p old-name))) + (error "No symbol at point") + (read-string + (format "New name for '%s': " + (thing-at-point 'symbol))))))) + (unless (and new-name + (elpy-refactor--is-valid-symbol-p new-name)) + (error "'%s' is not a valid python symbol")) + (message "Gathering occurences of '%s'..." + (thing-at-point 'symbol)) + (let* ((elpy-rpc-timeout 10) ;; refactoring can be long... + (diff (elpy-rpc-get-rename-diff new-name)) + (proj-path (alist-get 'project_path diff)) + (success (alist-get 'success diff)) + (diff (alist-get 'diff diff))) + (cond ((not success) + (error "Refactoring failed for some reason")) + ((string= success "Not available") + (error "This functionnality needs jedi > 0.17.0, please update")) + ((or dontask current-prefix-arg) + (message "Replacing '%s' with '%s'..." + (thing-at-point 'symbol) + new-name) + (elpy-refactor--apply-diff proj-path diff) + (message "Done")) + (t + (elpy-refactor--display-diff proj-path diff))))) + +(defun elpy-refactor-extract-variable (new-name) + "Extract the current region to a new variable NEW-NAME." + (interactive "sNew name: ") + (let ((beg (if (region-active-p) + (region-beginning) + (car (or (bounds-of-thing-at-point 'symbol) + (error "No symbol at point"))))) + (end (if (region-active-p) + (region-end) + (cdr (bounds-of-thing-at-point 'symbol))))) + (when (or (elpy-refactor--is-valid-symbol-p new-name) + (y-or-n-p "'%s' does not appear to be a valid python symbol. Are you sure you want to use it? ")) + (let* ((line-beg (save-excursion + (goto-char beg) + (line-number-at-pos))) + (line-end (save-excursion + (goto-char end) + (line-number-at-pos))) + (col-beg (save-excursion + (goto-char beg) + (- (point) (line-beginning-position)))) + (col-end (save-excursion + (goto-char end) + (- (point) (line-beginning-position)))) + (diff (elpy-rpc-get-extract-variable-diff + new-name line-beg line-end col-beg col-end)) + (proj-path (alist-get 'project_path diff)) + (success (alist-get 'success diff)) + (diff (alist-get 'diff diff))) + (cond ((not success) + (error "We could not extract the selection as a variable")) + ((string= success "Not available") + (error "This functionnality needs jedi > 0.17.0, please update")) + (t + (deactivate-mark) + (elpy-refactor--apply-diff proj-path diff))))))) + +(defun elpy-refactor-extract-function (new-name) + "Extract the current region to a new function NEW-NAME." + (interactive "sNew function name: ") + (unless (region-active-p) + (error "No selection")) + (when (or (elpy-refactor--is-valid-symbol-p new-name) + (y-or-n-p "'%s' does not appear to be a valid python symbol. Are you sure you want to use it? ")) + (let* ((line-beg (save-excursion + (goto-char (region-beginning)) + (line-number-at-pos))) + (line-end (save-excursion + (goto-char (region-end)) + (line-number-at-pos))) + (col-beg (save-excursion + (goto-char (region-beginning)) + (- (point) (line-beginning-position)))) + (col-end (save-excursion + (goto-char (region-end)) + (- (point) (line-beginning-position)))) + (diff (elpy-rpc-get-extract-function-diff + new-name line-beg line-end col-beg col-end)) + (proj-path (alist-get 'project_path diff)) + (success (alist-get 'success diff)) + (diff (alist-get 'diff diff))) + (cond ((not success) + (error "We could not extract the selection as a function")) + ((string= success "Not available") + (error "This functionnality needs jedi > 0.17.0, please update")) + (t + (deactivate-mark) + (elpy-refactor--apply-diff proj-path diff)))))) + +(defun elpy-refactor-inline () + "Inline the variable at point." + (interactive) + (let* ((diff (elpy-rpc-get-inline-diff)) + (proj-path (alist-get 'project_path diff)) + (success (alist-get 'success diff)) + (diff (alist-get 'diff diff))) + (cond ((not success) + (error "We could not inline the variable '%s'" + (thing-at-point 'symbol))) + ((string= success "Not available") + (error "This functionnality needs jedi > 0.17.0, please update")) + (t + (elpy-refactor--apply-diff proj-path diff))))) + + +;;;;;;;;;;;; +;; Utilities + +(defun elpy-refactor--is-valid-symbol-p (symbol) + "Return t if SYMBOL is a valid python symbol." + (eq 0 (string-match "^[a-zA-Z_][a-zA-Z0-9_]*$" symbol))) + +;;;;;;;;;;;; +;; Compatibility +(unless (fboundp 'diff--some-hunks-p) + (defun diff--some-hunks-p () + (save-excursion + (goto-char (point-min)) + (re-search-forward diff-hunk-header-re nil t)))) + +(provide 'elpy-refactor) +;;; elpy-refactor.el ends here diff --git a/elpa/elpy-1.35.0/elpy-rpc.el b/elpa/elpy-20210328.1852/elpy-rpc.el old mode 100755 new mode 100644 similarity index 96% rename from elpa/elpy-1.35.0/elpy-rpc.el rename to elpa/elpy-20210328.1852/elpy-rpc.el index e18d3ef..0d46aab --- a/elpa/elpy-1.35.0/elpy-rpc.el +++ b/elpa/elpy-20210328.1852/elpy-rpc.el @@ -1172,6 +1172,47 @@ Returns a possible multi-line docstring." (point-min))) success error)) +(defun elpy-rpc-get-rename-diff (new-name &optional success error) + "Return the diffs resulting from renaming the thing at point to NEW-NAME." + (elpy-rpc "get_rename_diff" + (list buffer-file-name + (elpy-rpc--buffer-contents) + (- (point) + (point-min)) + new-name) + success error)) + +(defun elpy-rpc-get-extract-variable-diff (new-name beg-line end-line beg-col end-col &optional success error) + "Return the diffs resulting from renaming the thing at point to NEW-NAME." + (elpy-rpc "get_extract_variable_diff" + (list buffer-file-name + (elpy-rpc--buffer-contents) + (- (point) + (point-min)) + new-name + beg-line end-line beg-col end-col) + success error)) + +(defun elpy-rpc-get-extract-function-diff (new-name beg-line end-line beg-col end-col &optional success error) + "Return the diffs resulting from renaming the thing at point to NEW-NAME." + (elpy-rpc "get_extract_function_diff" + (list buffer-file-name + (elpy-rpc--buffer-contents) + (- (point) + (point-min)) + new-name + beg-line end-line beg-col end-col) + success error)) + +(defun elpy-rpc-get-inline-diff (&optional success error) + "Return the diffs resulting from inlineing the variable at point." + (elpy-rpc "get_inline_diff" + (list buffer-file-name + (elpy-rpc--buffer-contents) + (- (point) + (point-min))) + success error)) + (provide 'elpy-rpc) ;;; elpy-rpc.el ends here diff --git a/elpa/elpy-1.35.0/elpy-shell.el b/elpa/elpy-20210328.1852/elpy-shell.el old mode 100755 new mode 100644 similarity index 99% rename from elpa/elpy-1.35.0/elpy-shell.el rename to elpa/elpy-20210328.1852/elpy-shell.el index b913563..fdd1c99 --- a/elpa/elpy-1.35.0/elpy-shell.el +++ b/elpa/elpy-20210328.1852/elpy-shell.el @@ -263,7 +263,9 @@ If ASK-FOR-EACH-ONE is non-nil, ask before killing each python process." If SIT is non-nil, sit for that many seconds after creating a Python process. This allows the process to start up." - (let* ((bufname (format "*%s*" (python-shell-get-process-name nil))) + (let* ((process-connection-type + (if (string-equal system-type "darwin") nil t)) ;; see https://github.com/jorgenschaefer/elpy/pull/1671 + (bufname (format "*%s*" (python-shell-get-process-name nil))) (proc (get-buffer-process bufname))) (if proc proc @@ -415,7 +417,7 @@ active, additionally flashes that region briefly." (message "Sent: %s" code-on-first-line) (message "Sent: %s..." code-on-first-line)) (when (bound-and-true-p eval-sexp-fu-flash-mode) - (multiple-value-bind (_bounds hi unhi _eflash) + (cl-multiple-value-bind (_bounds hi unhi _eflash) (eval-sexp-fu-flash (cons begin end)) (eval-sexp-fu-flash-doit (lambda () t) hi unhi))))))) diff --git a/elpa/elpy-1.35.0/elpy.el b/elpa/elpy-20210328.1852/elpy.el old mode 100755 new mode 100644 similarity index 99% rename from elpa/elpy-1.35.0/elpy.el rename to elpa/elpy-20210328.1852/elpy.el index ccf82aa..8310d7d --- a/elpa/elpy-1.35.0/elpy.el +++ b/elpa/elpy-20210328.1852/elpy.el @@ -301,15 +301,18 @@ if nil, use the first formatter found amongst ;;; Elpy Mode (defvar elpy-refactor-map (let ((map (make-sparse-keymap "Refactor"))) - (define-key map (kbd "i") (cons (format "%smport fixup" + (define-key map (kbd "i") (cons (format "%snline" (propertize "i" 'face 'bold)) - 'elpy-importmagic-fixup)) - (define-key map (kbd "f") (cons (format "%sormat code" + 'elpy-refactor-inline)) + (define-key map (kbd "f") (cons (format "%sunction extraction" (propertize "f" 'face 'bold)) - 'elpy-format-code)) - (define-key map (kbd "r") (cons (format "%sefactor" + 'elpy-refactor-extract-function)) + (define-key map (kbd "v") (cons (format "%sariable extraction" + (propertize "v" 'face 'bold)) + 'elpy-refactor-extract-variable)) + (define-key map (kbd "r") (cons (format "%sename" (propertize "r" 'face 'bold)) - 'elpy-refactor)) + 'elpy-refactor-rename)) map) "Key map for the refactor command.") @@ -1624,7 +1627,8 @@ A test file is named test_.py if the current file is (let ((projectile-project-root project-root)) (projectile-current-project-files))) ((fboundp 'find-file-in-project) - (cl-map 'list 'cdr (ffip-project-search nil nil project-root))) + (let ((ffip-project-root project-root)) + (cl-map 'list 'cdr (ffip-project-search nil nil)))) (t '()))) (file (if impl-file (cl-remove-if (lambda (file) @@ -4080,5 +4084,9 @@ which we're looking." (beginning-of-line) (python-info-looking-at-beginning-of-defun)))))) +(unless (fboundp 'alist-get) + (defun alist-get (key alist &rest rest) + (cdr (assoc key alist)))) + (provide 'elpy) ;;; elpy.el ends here diff --git a/elpa/elpy-1.35.0/elpy/__init__.py b/elpa/elpy-20210328.1852/elpy/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/__init__.py rename to elpa/elpy-20210328.1852/elpy/__init__.py diff --git a/elpa/elpy-1.35.0/elpy/__main__.py b/elpa/elpy-20210328.1852/elpy/__main__.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/__main__.py rename to elpa/elpy-20210328.1852/elpy/__main__.py diff --git a/elpa/elpy-1.35.0/elpy/auto_pep8.py b/elpa/elpy-20210328.1852/elpy/auto_pep8.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/auto_pep8.py rename to elpa/elpy-20210328.1852/elpy/auto_pep8.py diff --git a/elpa/elpy-1.35.0/elpy/blackutil.py b/elpa/elpy-20210328.1852/elpy/blackutil.py old mode 100755 new mode 100644 similarity index 94% rename from elpa/elpy-1.35.0/elpy/blackutil.py rename to elpa/elpy-20210328.1852/elpy/blackutil.py index 56df761..1710c41 --- a/elpa/elpy-1.35.0/elpy/blackutil.py +++ b/elpa/elpy-20210328.1852/elpy/blackutil.py @@ -4,12 +4,16 @@ import sys +from elpy.rpc import Fault # in case pkg_resources is not properly installed # (see https://github.com/jorgenschaefer/elpy/issues/1674). try: from pkg_resources import parse_version -except ImportError: - parse_version = None +except ImportError: # pragma: no cover + def parse_version(*arg, **kwargs): + raise Fault("`pkg_resources` could not be imported, " + "please reinstall Elpy RPC virtualenv with" + " `M-x elpy-rpc-reinstall-virtualenv`", code=400) import os @@ -18,12 +22,11 @@ try: except ImportError: toml = None -from elpy.rpc import Fault BLACK_NOT_SUPPORTED = sys.version_info < (3, 6) try: - if BLACK_NOT_SUPPORTED: + if BLACK_NOT_SUPPORTED: # pragma: no cover black = None else: import black @@ -37,10 +40,6 @@ def fix_code(code, directory): """ if not black: raise Fault("black not installed", code=400) - if not parse_version: - raise Fault("`pkg_resources` could not be imported, " - "please reinstall Elpy RPC virtualenv with" - " `M-x elpy-rpc-reinstall-virtualenv`", code=400) # Get black config from pyproject.toml line_length = black.DEFAULT_LINE_LENGTH string_normalization = True diff --git a/elpa/elpy-1.35.0/elpy/compat.py b/elpa/elpy-20210328.1852/elpy/compat.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/compat.py rename to elpa/elpy-20210328.1852/elpy/compat.py diff --git a/elpa/elpy-1.35.0/elpy/jedibackend.py b/elpa/elpy-20210328.1852/elpy/jedibackend.py old mode 100755 new mode 100644 similarity index 51% rename from elpa/elpy-1.35.0/elpy/jedibackend.py rename to elpa/elpy-20210328.1852/elpy/jedibackend.py index e33d3e8..b7d7a05 --- a/elpa/elpy-1.35.0/elpy/jedibackend.py +++ b/elpa/elpy-20210328.1852/elpy/jedibackend.py @@ -13,6 +13,18 @@ import re import jedi from elpy import rpc +from elpy.rpc import Fault + +# in case pkg_resources is not properly installed +# (see https://github.com/jorgenschaefer/elpy/issues/1674). +try: + from pkg_resources import parse_version +except ImportError: # pragma: no cover + def parse_version(*arg, **kwargs): + raise Fault("`pkg_resources` could not be imported, " + "please reinstall Elpy RPC virtualenv with" + " `M-x elpy-rpc-reinstall-virtualenv`", code=400) +JEDISUP17 = parse_version(jedi.__version__) >= parse_version("0.17.0") class JediBackend(object): @@ -33,8 +45,33 @@ class JediBackend(object): safe=False) self.completions = {} sys.path.append(project_root) + # Backward compatibility to jedi<17 + if not JEDISUP17: # pragma: no cover + self.rpc_get_completions = self.rpc_get_completions_jedi16 + self.rpc_get_docstring = self.rpc_get_docstring_jedi16 + self.rpc_get_definition = self.rpc_get_definition_jedi16 + self.rpc_get_assignment = self.rpc_get_assignment_jedi16 + self.rpc_get_calltip = self.rpc_get_calltip_jedi16 + self.rpc_get_oneline_docstring = self.rpc_get_oneline_docstring_jedi16 + self.rpc_get_usages = self.rpc_get_usages_jedi16 + self.rpc_get_names = self.rpc_get_names_jedi16 def rpc_get_completions(self, filename, source, offset): + line, column = pos_to_linecol(source, offset) + proposals = run_with_debug(jedi, 'complete', code=source, + path=filename, + environment=self.environment, + fun_kwargs={'line': line, 'column': column}) + self.completions = dict((proposal.name, proposal) + for proposal in proposals) + return [{'name': proposal.name.rstrip("="), + 'suffix': proposal.complete.rstrip("="), + 'annotation': proposal.type, + 'meta': proposal.description} + for proposal in proposals] + + def rpc_get_completions_jedi16(self, filename, source, offset): + # Backward compatibility to jedi<17 line, column = pos_to_linecol(source, offset) proposals = run_with_debug(jedi, 'completions', source=source, line=line, column=column, @@ -65,6 +102,29 @@ class JediBackend(object): return (proposal.module_path, proposal.line) def rpc_get_docstring(self, filename, source, offset): + line, column = pos_to_linecol(source, offset) + locations = run_with_debug(jedi, 'goto', + code=source, + path=filename, + environment=self.environment, + fun_kwargs={'line': line, + 'column': column, + 'follow_imports': True, + 'follow_builtin_imports': True}) + if not locations: + return None + # Filter uninteresting things + if locations[-1].name in ["str", "int", "float", "bool", "tuple", + "list", "dict"]: + return None + if locations[-1].docstring(): + return ('Documentation for {0}:\n\n'.format( + locations[-1].full_name) + locations[-1].docstring()) + else: + return None + + def rpc_get_docstring_jedi16(self, filename, source, offset): + # Backward compatibility to jedi<17 line, column = pos_to_linecol(source, offset) locations = run_with_debug(jedi, 'goto_definitions', source=source, line=line, column=column, @@ -83,6 +143,43 @@ class JediBackend(object): return None def rpc_get_definition(self, filename, source, offset): + line, column = pos_to_linecol(source, offset) + locations = run_with_debug(jedi, 'goto', + code=source, + path=filename, + environment=self.environment, + fun_kwargs={'line': line, + 'column': column, + 'follow_imports': True, + 'follow_builtin_imports': True}) + if not locations: + return None + # goto_definitions() can return silly stuff like __builtin__ + # for int variables, so we remove them. See issue #76. + locations = [ + loc for loc in locations + if (loc.module_path is not None + and loc.module_name != 'builtins' + and loc.module_name != '__builtin__')] + if len(locations) == 0: + return None + loc = locations[-1] + try: + if loc.module_path == filename: + offset = linecol_to_pos(source, + loc.line, + loc.column) + else: + with open(loc.module_path) as f: + offset = linecol_to_pos(f.read(), + loc.line, + loc.column) + except IOError: # pragma: no cover + return None + return (loc.module_path, offset) + + def rpc_get_definition_jedi16(self, filename, source, offset): # pragma: no cover + # Backward compatibility to jedi<17 line, column = pos_to_linecol(source, offset) locations = run_with_debug(jedi, 'goto_definitions', source=source, line=line, column=column, @@ -100,7 +197,8 @@ class JediBackend(object): locations = run_with_debug(jedi, 'goto_assignments', source=source, line=line, column=column, - path=filename, encoding='utf-8', + path=filename, + encoding='utf-8', environment=self.environment) if not locations: return None @@ -124,6 +222,10 @@ class JediBackend(object): return (loc.module_path, offset) def rpc_get_assignment(self, filename, source, offset): + raise Fault("Obsolete since jedi 17.0. Please use 'get_definition'.") + + def rpc_get_assignment_jedi16(self, filename, source, offset): # pragma: no cover + # Backward compatibility to jedi<17 line, column = pos_to_linecol(source, offset) locations = run_with_debug(jedi, 'goto_assignments', source=source, line=line, column=column, @@ -152,6 +254,23 @@ class JediBackend(object): return (loc.module_path, offset) def rpc_get_calltip(self, filename, source, offset): + line, column = pos_to_linecol(source, offset) + calls = run_with_debug(jedi, 'get_signatures', + code=source, + path=filename, + environment=self.environment, + fun_kwargs={'line': line, + 'column': column}) + if not calls: + return None + params = [re.sub("^param ", '', param.description) + for param in calls[0].params] + return {"name": calls[0].name, + "index": calls[0].index, + "params": params} + + def rpc_get_calltip_jedi16(self, filename, source, offset): # pragma: no cover + # Backward compatibility to jedi<17 line, column = pos_to_linecol(source, offset) calls = run_with_debug(jedi, 'call_signatures', source=source, line=line, column=column, @@ -201,6 +320,67 @@ class JediBackend(object): def rpc_get_oneline_docstring(self, filename, source, offset): """Return a oneline docstring for the symbol at offset""" line, column = pos_to_linecol(source, offset) + definitions = run_with_debug(jedi, 'goto', + code=source, + path=filename, + environment=self.environment, + fun_kwargs={'line': line, + 'column': column}) + if not definitions: + return None + # avoid unintersting stuff + definitions = [defi for defi in definitions + if defi.name not in + ["str", "int", "float", "bool", "tuple", + "list", "dict"]] + if len(definitions) == 0: + return None + definition = definitions[0] + # Get name + if definition.type in ['function', 'class']: + raw_name = definition.name + name = '{}()'.format(raw_name) + doc = definition.docstring().split('\n') + elif definition.type in ['module']: + raw_name = definition.name + name = '{} {}'.format(raw_name, definition.type) + doc = definition.docstring().split('\n') + elif (definition.type in ['instance'] + and hasattr(definition, "name")): + raw_name = definition.name + name = raw_name + doc = definition.docstring().split('\n') + else: + return None + # Keep only the first paragraph that is not a function declaration + lines = [] + call = "{}(".format(raw_name) + # last line + doc.append('') + for i in range(len(doc)): + if doc[i] == '' and len(lines) != 0: + paragraph = " ".join(lines) + lines = [] + if call != paragraph[0:len(call)]: + break + paragraph = "" + continue + lines.append(doc[i]) + # Keep only the first sentence + onelinedoc = paragraph.split('. ', 1) + if len(onelinedoc) == 2: + onelinedoc = onelinedoc[0] + '.' + else: + onelinedoc = onelinedoc[0] + if onelinedoc == '': + onelinedoc = "No documentation" + return {"name": name, + "doc": onelinedoc} + + def rpc_get_oneline_docstring_jedi16(self, filename, source, offset): # pragma: no cover + """Return a oneline docstring for the symbol at offset""" + # Backward compatibility to jedi<17 + line, column = pos_to_linecol(source, offset) definitions = run_with_debug(jedi, 'goto_definitions', source=source, line=line, column=column, path=filename, encoding='utf-8', @@ -276,6 +456,36 @@ class JediBackend(object): """ line, column = pos_to_linecol(source, offset) + uses = run_with_debug(jedi, 'get_references', + code=source, + path=filename, + environment=self.environment, + fun_kwargs={'line': line, + 'column': column}) + if uses is None: + return None + result = [] + for use in uses: + if use.module_path == filename: + offset = linecol_to_pos(source, use.line, use.column) + elif use.module_path is not None: + with open(use.module_path) as f: + text = f.read() + offset = linecol_to_pos(text, use.line, use.column) + result.append({"name": use.name, + "filename": use.module_path, + "offset": offset}) + return result + + def rpc_get_usages_jedi16(self, filename, source, offset): # pragma: no cover + """Return the uses of the symbol at offset. + + Returns a list of occurrences of the symbol, as dicts with the + fields name, filename, and offset. + + """ + # Backward compatibility to jedi<17 + line, column = pos_to_linecol(source, offset) uses = run_with_debug(jedi, 'usages', source=source, line=line, column=column, path=filename, encoding='utf-8', @@ -299,6 +509,29 @@ class JediBackend(object): def rpc_get_names(self, filename, source, offset): """Return the list of possible names""" + names = run_with_debug(jedi, 'get_names', + code=source, + path=filename, + environment=self.environment, + fun_kwargs={'all_scopes': True, + 'definitions': True, + 'references': True}) + result = [] + for name in names: + if name.module_path == filename: + offset = linecol_to_pos(source, name.line, name.column) + elif name.module_path is not None: + with open(name.module_path) as f: + text = f.read() + offset = linecol_to_pos(text, name.line, name.column) + result.append({"name": name.name, + "filename": name.module_path, + "offset": offset}) + return result + + def rpc_get_names_jedi16(self, filename, source, offset): # pragma: no cover + """Return the list of possible names""" + # Backward compatibility to jedi<17 names = jedi.api.names(source=source, path=filename, encoding='utf-8', all_scopes=True, @@ -318,6 +551,85 @@ class JediBackend(object): "offset": offset}) return result + def rpc_get_rename_diff(self, filename, source, offset, new_name): + """Get the diff resulting from renaming the thing at point""" + if not hasattr(jedi.Script, "rename"): # pragma: no cover + return {'success': "Not available"} + line, column = pos_to_linecol(source, offset) + ren = run_with_debug(jedi, 'rename', code=source, + path=filename, + environment=self.environment, + fun_kwargs={'line': line, + 'column': column, + 'new_name': new_name}) + if ren is None: + return {'success': False} + else: + return {'success': True, + 'project_path': ren._inference_state.project._path, + 'diff': ren.get_diff(), + 'changed_files': list(ren.get_changed_files().keys())} + + def rpc_get_extract_variable_diff(self, filename, source, offset, new_name, + line_beg, line_end, col_beg, col_end): + """Get the diff resulting from extracting the selected code""" + if not hasattr(jedi.Script, "extract_variable"): # pragma: no cover + return {'success': "Not available"} + ren = run_with_debug(jedi, 'extract_variable', code=source, + path=filename, + environment=self.environment, + fun_kwargs={'line': line_beg, + 'until_line': line_end, + 'column': col_beg, + 'until_column': col_end, + 'new_name': new_name}) + if ren is None: + return {'success': False} + else: + return {'success': True, + 'project_path': ren._inference_state.project._path, + 'diff': ren.get_diff(), + 'changed_files': list(ren.get_changed_files().keys())} + + def rpc_get_extract_function_diff(self, filename, source, offset, new_name, + line_beg, line_end, col_beg, col_end): + """Get the diff resulting from extracting the selected code""" + if not hasattr(jedi.Script, "extract_function"): # pragma: no cover + return {'success': "Not available"} + ren = run_with_debug(jedi, 'extract_function', code=source, + path=filename, + environment=self.environment, + fun_kwargs={'line': line_beg, + 'until_line': line_end, + 'column': col_beg, + 'until_column': col_end, + 'new_name': new_name}) + if ren is None: + return {'success': False} + else: + return {'success': True, + 'project_path': ren._inference_state.project._path, + 'diff': ren.get_diff(), + 'changed_files': list(ren.get_changed_files().keys())} + + def rpc_get_inline_diff(self, filename, source, offset): + """Get the diff resulting from inlining the selected variable""" + if not hasattr(jedi.Script, "inline"): # pragma: no cover + return {'success': "Not available"} + line, column = pos_to_linecol(source, offset) + ren = run_with_debug(jedi, 'inline', code=source, + path=filename, + environment=self.environment, + fun_kwargs={'line': line, + 'column': column}) + if ren is None: + return {'success': False} + else: + return {'success': True, + 'project_path': ren._inference_state.project._path, + 'diff': ren.get_diff(), + 'changed_files': list(ren.get_changed_files().keys())} + # From the Jedi documentation: # @@ -362,14 +674,17 @@ def linecol_to_pos(text, line, col): return offset -def run_with_debug(jedi, name, *args, **kwargs): +def run_with_debug(jedi, name, fun_kwargs={}, *args, **kwargs): re_raise = kwargs.pop('re_raise', ()) try: script = jedi.Script(*args, **kwargs) - return getattr(script, name)() + return getattr(script, name)(**fun_kwargs) except Exception as e: if isinstance(e, re_raise): raise + if JEDISUP17: + if isinstance(e, jedi.RefactoringError): + return None # Bug jedi#485 if ( isinstance(e, ValueError) and diff --git a/elpa/elpy-1.35.0/elpy/pydocutils.py b/elpa/elpy-20210328.1852/elpy/pydocutils.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/pydocutils.py rename to elpa/elpy-20210328.1852/elpy/pydocutils.py diff --git a/elpa/elpy-1.35.0/elpy/rpc.py b/elpa/elpy-20210328.1852/elpy/rpc.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/rpc.py rename to elpa/elpy-20210328.1852/elpy/rpc.py diff --git a/elpa/elpy-1.35.0/elpy/server.py b/elpa/elpy-20210328.1852/elpy/server.py old mode 100755 new mode 100644 similarity index 80% rename from elpa/elpy-1.35.0/elpy/server.py rename to elpa/elpy-20210328.1852/elpy/server.py index 1027afc..984a392 --- a/elpa/elpy-1.35.0/elpy/server.py +++ b/elpa/elpy-20210328.1852/elpy/server.py @@ -163,58 +163,60 @@ class ElpyRPCServer(JSONRPCServer): docstring = docstring.decode("utf-8", "replace") return docstring - def rpc_get_refactor_options(self, filename, start, end=None): - """Return a list of possible refactoring options. + def rpc_get_usages(self, filename, source, offset): + """Get usages for the symbol at point. + + """ + source = get_source(source) - This list will be filtered depending on whether it's - applicable at the point START and possibly the region between - START and END. + return self._call_backend("rpc_get_usages", + None, filename, source, offset) + + def rpc_get_names(self, filename, source, offset): + """Get all possible names """ - try: - from elpy import refactor - except: - raise ImportError("Rope not installed, refactorings unavailable") - ref = refactor.Refactor(self.project_root, filename) - return ref.get_refactor_options(start, end) + source = get_source(source) + return self._call_backend("rpc_get_names", + None, filename, source, offset) + + def rpc_get_rename_diff(self, filename, source, offset, new_name): + """Get the diff resulting from renaming the thing at point - def rpc_refactor(self, filename, method, args): - """Return a list of changes from the refactoring action. + """ + source = get_source(source) + + return self._call_backend("rpc_get_rename_diff", + None, filename, source, offset, new_name) - A change is a dictionary describing the change. See - elpy.refactor.translate_changes for a description. + def rpc_get_extract_variable_diff(self, filename, source, offset, new_name, + line_beg, line_end, col_beg, col_end): + """Get the diff resulting from extracting the selected code """ - try: - from elpy import refactor - except: - raise ImportError("Rope not installed, refactorings unavailable") - if args is None: - args = () - ref = refactor.Refactor(self.project_root, filename) - return ref.get_changes(method, *args) + source = get_source(source) + return self._call_backend("rpc_get_extract_variable_diff", + None, filename, source, offset, + new_name, line_beg, line_end, col_beg, + col_end) - def rpc_get_usages(self, filename, source, offset): - """Get usages for the symbol at point. + def rpc_get_extract_function_diff(self, filename, source, offset, new_name, + line_beg, line_end, col_beg, col_end): + """Get the diff resulting from extracting the selected code """ source = get_source(source) - if hasattr(self.backend, "rpc_get_usages"): - return self.backend.rpc_get_usages(filename, source, offset) - else: - raise Fault("get_usages not implemented by current backend", - code=400) + return self._call_backend("rpc_get_extract_function_diff", + None, filename, source, offset, new_name, + line_beg, line_end, col_beg, col_end) - def rpc_get_names(self, filename, source, offset): - """Get all possible names + def rpc_get_inline_diff(self, filename, source, offset): + """Get the diff resulting from inlining the thing at point. """ source = get_source(source) - if hasattr(self.backend, "rpc_get_names"): - return self.backend.rpc_get_names(filename, source, offset) - else: - raise Fault("get_names not implemented by current backend", - code=400) + return self._call_backend("rpc_get_inline_diff", + None, filename, source, offset) def rpc_fix_code(self, source, directory): """Formats Python code to conform to the PEP 8 style guide. diff --git a/elpa/elpy-1.35.0/elpy/tests/__init__.py b/elpa/elpy-20210328.1852/elpy/tests/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/tests/__init__.py rename to elpa/elpy-20210328.1852/elpy/tests/__init__.py diff --git a/elpa/elpy-1.35.0/elpy/tests/compat.py b/elpa/elpy-20210328.1852/elpy/tests/compat.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/tests/compat.py rename to elpa/elpy-20210328.1852/elpy/tests/compat.py diff --git a/elpa/elpy-1.35.0/elpy/tests/support.py b/elpa/elpy-20210328.1852/elpy/tests/support.py old mode 100755 new mode 100644 similarity index 80% rename from elpa/elpy-1.35.0/elpy/tests/support.py rename to elpa/elpy-20210328.1852/elpy/tests/support.py index 752e11b..1e79654 --- a/elpa/elpy-1.35.0/elpy/tests/support.py +++ b/elpa/elpy-20210328.1852/elpy/tests/support.py @@ -20,6 +20,8 @@ import unittest import re from elpy.tests import compat +from elpy.rpc import Fault +from elpy import jedibackend class BackendTestCase(unittest.TestCase): @@ -444,6 +446,17 @@ class RPCGetCompletionsTests(GenericRPCTests): self.assertEqual(["add"], [proposal["name"] for proposal in proposals]) + def test_should_return_nothing_when_no_completion(self): + source, offset = source_and_offset("nothingcancompletethis_|_") + self.assertEqual([], self.backend.rpc_get_completions("test.py", + source, offset)) + + def test_should_handle_jedi16(self): + backup = self.backend.rpc_get_completions + self.backend.rpc_get_completions = self.backend.rpc_get_completions_jedi16 + self.test_should_complete_builtin() + self.backend.rpc_get_completions = backup + class RPCGetCompletionDocstringTests(object): def test_should_return_docstring(self): @@ -466,6 +479,21 @@ class RPCGetCompletionDocstringTests(object): self.assertIsNone(docs) + def test_should_return_none_if_on_a_builtin(self): + source, offset = source_and_offset("a = 12\n" + "print(12_|_)") + filename = self.project_file("test.py", source) + completions = self.backend.rpc_get_docstring(filename, + source, + offset) + self.assertIsNone(completions) + + def test_should_handle_jedi16(self): + backup = self.backend.rpc_get_docstring + self.backend.rpc_get_docstring = self.backend.rpc_get_docstring_jedi16 + self.test_should_return_docstring() + self.backend.rpc_get_docstring = backup + class RPCGetCompletionLocationTests(object): def test_should_return_location(self): @@ -596,20 +624,29 @@ class RPCGetDefinitionTests(GenericRPCTests): offset), (filename, 0)) + def test_should_handle_jedi16(self): + backup = self.backend.rpc_get_definition + self.backend.rpc_get_definition = self.backend.rpc_get_definition_jedi16 + self.test_should_return_definition_location_same_file() + self.backend.rpc_get_definition = backup -class RPCGetAssignmentTests(GenericRPCTests): + +class RPCGetAssignmentTests(): METHOD = "rpc_get_assignment" - def test_should_return_assignment_location_same_file(self): + def test_should_raise_fault(self): + if jedibackend.JEDISUP17: + with self.assertRaises(Fault): + self.backend.rpc_get_assignment("test.py", "dummy code", 1) + + def test_should_handle_jedi16(self): + backup = self.backend.rpc_get_assignment + self.backend.rpc_get_assignment = self.backend.rpc_get_assignment_jedi16 source, offset = source_and_offset("import threading\n" - "class TestClass(object):\n" - " def __init__(self, a, b):\n" - " self.a = a\n" - " self.b = b\n" - "\n" - "testclass = TestClass(2, 4)" + "def test_function(a, b):\n" + " return a + b\n" "\n" - "testcl_|_ass(\n") + "test_func_|_tion(\n") filename = self.project_file("test.py", source) location = self.backend.rpc_get_assignment(filename, @@ -618,80 +655,8 @@ class RPCGetAssignmentTests(GenericRPCTests): self.assertEqual(location[0], filename) # On def or on the function name - self.assertEqual(location[1], 111) - - def test_should_return_location_in_same_file_if_not_saved(self): - source, offset = source_and_offset("import threading\n" - "class TestClass(object):\n" - " def __init__(self, a, b):\n" - " self.a = a\n" - " self.b = b\n" - "\n" - "testclass = TestClass(2, 4)" - "\n" - "testcl_|_ass(\n") - filename = self.project_file("test.py", "") - - location = self.backend.rpc_get_assignment(filename, - source, - offset) - - self.assertEqual(location[0], filename) - # def or function name - self.assertEqual(location[1], 111) - - def test_should_return_location_in_different_file(self): - source1 = ("class TestClass(object):\n" - " def __init__(self, a, b):\n" - " self.a = a\n" - " self.b = b\n" - "testclass = TestClass(3, 5)\n") - file1 = self.project_file("test1.py", source1) - source2, offset = source_and_offset("from test1 import testclass\n" - "testcl_|_ass.a\n") - file2 = self.project_file("test2.py", source2) - # First jump goes to import statement - assignment = self.backend.rpc_get_assignment(file2, - source2, - offset) - # Second jump goes to test1 file - self.assertEqual(assignment[0], file2) - assignment = self.backend.rpc_get_assignment(file2, - source2, - assignment[1]) - - self.assertEqual(assignment[0], file1) - self.assertEqual(assignment[1], 93) - - def test_should_return_none_if_location_not_found(self): - source, offset = source_and_offset("test_f_|_unction()\n") - filename = self.project_file("test.py", source) - - assignment = self.backend.rpc_get_assignment(filename, - source, - offset) - - self.assertIsNone(assignment) - - def test_should_return_none_if_outside_of_symbol(self): - source, offset = source_and_offset("testcl(_|_)ass\n") - filename = self.project_file("test.py", source) - - assignment = self.backend.rpc_get_assignment(filename, - source, - offset) - - self.assertIsNone(assignment) - - def test_should_find_variable_assignment(self): - source, offset = source_and_offset("SOME_VALUE = 1\n" - "\n" - "variable = _|_SOME_VALUE\n") - filename = self.project_file("test.py", source) - self.assertEqual(self.backend.rpc_get_assignment(filename, - source, - offset), - (filename, 0)) + self.assertIn(location[1], (17, 21)) + self.backend.rpc_get_assignment = backup class RPCGetCalltipTests(GenericRPCTests): @@ -829,6 +794,22 @@ class RPCGetCalltipTests(GenericRPCTests): actual.pop('kind') self.assertEqual(self.ADD_CALLTIP, actual) + def test_should_return_oneline_docstring_if_no_calltip(self): + source, offset = source_and_offset( + "def foo(a, b):\n fo_|_o(1 + 2)") + filename = self.project_file("test.py", source) + calltip = self.backend.rpc_get_calltip_or_oneline_docstring(filename, + source, + offset) + self.assertEqual(calltip['kind'], 'oneline_doc') + self.assertEqual(calltip['doc'], 'No documentation') + + def test_should_handle_jedi16(self): + backup = self.backend.rpc_get_calltip + self.backend.rpc_get_calltip = self.backend.rpc_get_calltip_jedi16 + self.test_should_get_calltip() + self.backend.rpc_get_calltip = backup + class RPCGetDocstringTests(GenericRPCTests): METHOD = "rpc_get_docstring" @@ -859,6 +840,12 @@ class RPCGetDocstringTests(GenericRPCTests): offset) self.assertIsNone(docstring) + def test_should_handle_jedi16(self): + backup = self.backend.rpc_get_docstring + self.backend.rpc_get_docstring = self.backend.rpc_get_docstring_jedi16 + self.test_should_get_docstring() + self.backend.rpc_get_docstring = backup + class RPCGetOnelineDocstringTests(GenericRPCTests): METHOD = "rpc_get_oneline_docstring" @@ -914,6 +901,118 @@ class RPCGetOnelineDocstringTests(GenericRPCTests): offset) self.assertIsNone(docstring) + def test_should_handle_jedi16(self): + backup = self.backend.rpc_get_oneline_docstring + self.backend.rpc_get_oneline_docstring = self.backend.rpc_get_oneline_docstring_jedi16 + self.test_should_get_oneline_docstring() + self.test_should_get_oneline_docstring_for_modules() + self.test_should_return_none_for_bad_identifier() + self.backend.rpc_get_oneline_docstring = backup + + +@unittest.skipIf(not jedibackend.JEDISUP17, + "Refactoring not available with jedi<17") +@unittest.skipIf(sys.version_info < (3, 6), + "Jedi refactoring not available for python < 3.6") +class RPCGetRenameDiffTests(object): + METHOD = "rpc_get_rename_diff" + + def test_should_return_rename_diff(self): + source, offset = source_and_offset("def foo(a, b):\n" + " print(a_|_)\n" + " return b") + new_name = "c" + diff = self.backend.rpc_get_rename_diff("test.py", source, offset, + new_name) + assert diff['success'] + self.assertIn("-def foo(a, b):\n" + "- print(a)\n" + "+def foo(c, b):\n" + "+ print(c)", + diff['diff']) + + def test_should_fail_for_invalid_symbol_at_point(self): + source, offset = source_and_offset("def foo(a, b):\n" + " print(12_|_)\n" + " return b") + new_name = "c" + diff = self.backend.rpc_get_rename_diff("test.py", source, offset, + new_name) + self.assertFalse(diff['success']) + + +@unittest.skipIf(not jedibackend.JEDISUP17, + "Refactoring not available with jedi<17") +@unittest.skipIf(sys.version_info < (3, 6), + "Jedi refactoring not available for python < 3.6") +class RPCGetExtractFunctionDiffTests(object): + METHOD = "rpc_get_extract_function_diff" + + def test_should_return_function_extraction_diff(self): + source, offset = source_and_offset("print(a)\n" + "return b_|_\n") + new_name = "foo" + diff = self.backend.rpc_get_extract_function_diff( + "test.py", source, offset, + new_name, + line_beg=1, line_end=2, + col_beg=0, col_end=8) + assert diff['success'] + self.assertIn('-print(a)\n' + '-return b\n' + '+def foo(a, b):\n' + '+ print(a)\n' + '+ return b\n', + diff['diff']) + + +@unittest.skipIf(not jedibackend.JEDISUP17, + "Refactoring not available with jedi<17") +@unittest.skipIf(sys.version_info < (3, 6), + "Jedi refactoring not available for python < 3.6") +class RPCGetExtractVariableDiffTests(object): + METHOD = "rpc_get_extract_variable_diff" + + def test_should_return_variable_extraction_diff(self): + source, offset = source_and_offset("b = 12\n" + "a = 2\n" + "print_|_(a + 1 + b/2)\n") + new_name = "c" + diff = self.backend.rpc_get_extract_variable_diff( + "test.py", source, offset, + new_name, + line_beg=3, line_end=3, + col_beg=7, col_end=16) + assert diff['success'] + self.assertIn("-print(a + 1 + b/2)\n+c = a + 1 + b/2\n+print(c)\n", + diff['diff']) + + +@unittest.skipIf(not jedibackend.JEDISUP17, + "Refactoring not available with jedi<17") +@unittest.skipIf(sys.version_info < (3, 6), + "Jedi refactoring not available for python < 3.6") +class RPCGetInlineDiffTests(object): + METHOD = "rpc_get_inline_diff" + + def test_should_return_inline_diff(self): + source, offset = source_and_offset("foo = 3.1\n" + "bar = foo + 1\n" + "x = int(ba_|_r)\n") + diff = self.backend.rpc_get_inline_diff("test.py", source, + offset) + assert diff['success'] + self.assertIn("-bar = foo + 1\n-x = int(bar)\n+x = int(foo + 1)", + diff['diff']) + + def test_should_error_on_refactoring_failure(self): + source, offset = source_and_offset("foo = 3.1\n" + "bar = foo + 1\n" + "x = in_|_t(bar)\n") + diff = self.backend.rpc_get_inline_diff("test.py", source, + offset) + self.assertFalse(diff['success']) + class RPCGetNamesTests(GenericRPCTests): METHOD = "rpc_get_names" @@ -961,6 +1060,13 @@ class RPCGetNamesTests(GenericRPCTests): self.assertEqual(names, []) + def test_should_handle_jedi16(self): + backup = self.backend.rpc_get_names + self.backend.rpc_get_names = self.backend.rpc_get_names_jedi16 + self.test_shouldreturn_names_in_same_file() + self.test_should_not_fail_without_symbol() + self.backend.rpc_get_names = backup + class RPCGetUsagesTests(GenericRPCTests): METHOD = "rpc_get_usages" @@ -1014,6 +1120,14 @@ class RPCGetUsagesTests(GenericRPCTests): self.assertEqual(usages, []) + def test_should_handle_jedi16(self): + backup = self.backend.rpc_get_usages + self.backend.rpc_get_usages = self.backend.rpc_get_usages_jedi16 + self.test_should_return_uses_in_same_file() + self.test_should_return_uses_in_other_file() + self.test_should_not_fail_without_symbol() + self.backend.rpc_get_usages = backup + def source_and_offset(source): """Return a source and offset from a source description. diff --git a/elpa/elpy-1.35.0/elpy/tests/test_auto_pep8.py b/elpa/elpy-20210328.1852/elpy/tests/test_auto_pep8.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/tests/test_auto_pep8.py rename to elpa/elpy-20210328.1852/elpy/tests/test_auto_pep8.py diff --git a/elpa/elpy-1.35.0/elpy/tests/test_black.py b/elpa/elpy-20210328.1852/elpy/tests/test_black.py old mode 100755 new mode 100644 similarity index 86% rename from elpa/elpy-1.35.0/elpy/tests/test_black.py rename to elpa/elpy-20210328.1852/elpy/tests/test_black.py index 02564fa..3809c7b --- a/elpa/elpy-1.35.0/elpy/tests/test_black.py +++ b/elpa/elpy-20210328.1852/elpy/tests/test_black.py @@ -20,6 +20,14 @@ class BLACKTestCase(BackendTestCase): src = 'x = ' self.assertRaises(Fault, blackutil.fix_code, src, os.getcwd()) + def test_fix_code_should_throw_error_without_black_installed(self): + black = blackutil.black + blackutil.black = None + src = 'x= 123\n', 'x = 123\n' + with self.assertRaises(Fault): + blackutil.fix_code(src, os.getcwd()) + blackutil.black = black + def test_fix_code(self): testdata = [ ('x= 123\n', 'x = 123\n'), diff --git a/elpa/elpy-1.35.0/elpy/tests/test_jedibackend.py b/elpa/elpy-20210328.1852/elpy/tests/test_jedibackend.py old mode 100755 new mode 100644 similarity index 92% rename from elpa/elpy-1.35.0/elpy/tests/test_jedibackend.py rename to elpa/elpy-20210328.1852/elpy/tests/test_jedibackend.py index 500ddfe..1e8d2c6 --- a/elpa/elpy-1.35.0/elpy/tests/test_jedibackend.py +++ b/elpa/elpy-20210328.1852/elpy/tests/test_jedibackend.py @@ -17,10 +17,14 @@ from elpy.tests.support import RPCGetCompletionLocationTests from elpy.tests.support import RPCGetDocstringTests from elpy.tests.support import RPCGetOnelineDocstringTests from elpy.tests.support import RPCGetDefinitionTests -from elpy.tests.support import RPCGetAssignmentTests from elpy.tests.support import RPCGetCalltipTests from elpy.tests.support import RPCGetUsagesTests from elpy.tests.support import RPCGetNamesTests +from elpy.tests.support import RPCGetRenameDiffTests +from elpy.tests.support import RPCGetExtractFunctionDiffTests +from elpy.tests.support import RPCGetExtractVariableDiffTests +from elpy.tests.support import RPCGetInlineDiffTests +from elpy.tests.support import RPCGetAssignmentTests class JediBackendTestCase(BackendTestCase): @@ -40,6 +44,11 @@ class TestRPCGetCompletions(RPCGetCompletionsTests, BUILTINS = ['object', 'oct', 'open', 'ord', 'OSError', 'OverflowError'] +class TestRPCGetAssignment(RPCGetAssignmentTests, + JediBackendTestCase): + pass + + class TestRPCGetCompletionDocstring(RPCGetCompletionDocstringTests, JediBackendTestCase): pass @@ -144,23 +153,24 @@ class TestRPCGetDefinition(RPCGetDefinitionTests, self.assertIsNone(location) -class TestRPCGetAssignment(RPCGetAssignmentTests, +class TestRPCGetRenameDiff(RPCGetRenameDiffTests, JediBackendTestCase): - @mock.patch("jedi.Script") - def test_should_not_fail_if_module_path_is_none(self, Script): - """Do not fail if loc.module_path is None. + pass - """ - locations = [ - mock.Mock(module_path=None) - ] - script = Script.return_value - script.goto_assignments.return_value = locations - script.goto_assignments.return_value = locations - location = self.rpc("", "", 0) +class TestRPCGetExtractFunctionDiff(RPCGetExtractFunctionDiffTests, + JediBackendTestCase): + pass - self.assertIsNone(location) + +class TestRPCGetExtractVariableDiff(RPCGetExtractVariableDiffTests, + JediBackendTestCase): + pass + + +class TestRPCGetInlineDiff(RPCGetInlineDiffTests, + JediBackendTestCase): + pass class TestRPCGetCalltip(RPCGetCalltipTests, @@ -265,7 +275,8 @@ class TestRunWithDebug(unittest.TestCase): def test_should_call_method(self, Script): Script.return_value.test_method.return_value = "test-result" - result = jedibackend.run_with_debug(jedi, 'test_method', 1, 2, arg=3) + result = jedibackend.run_with_debug(jedi, 'test_method', {}, 1, 2, + arg=3) Script.assert_called_with(1, 2, arg=3) self.assertEqual(result, 'test-result') @@ -284,7 +295,7 @@ class TestRunWithDebug(unittest.TestCase): Script.side_effect = RuntimeError try: - jedibackend.run_with_debug(jedi, 'test_method', 1, 2, arg=3) + jedibackend.run_with_debug(jedi, 'test_method', {}, 1, 2, arg=3) except rpc.Fault as e: self.assertGreaterEqual(e.code, 400) self.assertIsNotNone(e.data) @@ -305,7 +316,7 @@ class TestRunWithDebug(unittest.TestCase): Script.side_effect = RuntimeError try: - jedibackend.run_with_debug(jedi, 'test_method', 1, 2, arg=3) + jedibackend.run_with_debug(jedi, 'test_method', {}, 1, 2, arg=3) except rpc.Fault as e: self.assertEqual(str(e), str(RuntimeError())) self.assertEqual(e.message, str(RuntimeError())) @@ -366,4 +377,4 @@ class TestRunWithDebug(unittest.TestCase): Script.return_value.test_method.side_effect = Exception with self.assertRaises(rpc.Fault): - jedibackend.run_with_debug(jedi, 'test_method', 1, 2, arg=3) + jedibackend.run_with_debug(jedi, 'test_method', {}, 1, 2, arg=3) diff --git a/elpa/elpy-1.35.0/elpy/tests/test_pydocutils.py b/elpa/elpy-20210328.1852/elpy/tests/test_pydocutils.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/tests/test_pydocutils.py rename to elpa/elpy-20210328.1852/elpy/tests/test_pydocutils.py diff --git a/elpa/elpy-1.35.0/elpy/tests/test_rpc.py b/elpa/elpy-20210328.1852/elpy/tests/test_rpc.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/tests/test_rpc.py rename to elpa/elpy-20210328.1852/elpy/tests/test_rpc.py diff --git a/elpa/elpy-1.35.0/elpy/tests/test_server.py b/elpa/elpy-20210328.1852/elpy/tests/test_server.py old mode 100755 new mode 100644 similarity index 79% rename from elpa/elpy-1.35.0/elpy/tests/test_server.py rename to elpa/elpy-20210328.1852/elpy/tests/test_server.py index 1f059da..d2692d4 --- a/elpa/elpy-1.35.0/elpy/tests/test_server.py +++ b/elpa/elpy-20210328.1852/elpy/tests/test_server.py @@ -12,7 +12,6 @@ from elpy import rpc from elpy import server from elpy.tests import compat from elpy.tests.support import BackendTestCase -import elpy.refactor class ServerTestCase(unittest.TestCase): @@ -21,16 +20,20 @@ class ServerTestCase(unittest.TestCase): class BackendCallTestCase(ServerTestCase): - def assert_calls_backend(self, method): + def assert_calls_backend(self, method, add_args=[], add_kwargs={}): with mock.patch("elpy.server.get_source") as get_source: with mock.patch.object(self.srv, "backend") as backend: get_source.return_value = "transformed source" - getattr(self.srv, method)("filename", "source", "offset") + getattr(self.srv, method)("filename", "source", "offset", + *add_args, + **add_kwargs) get_source.assert_called_with("source") getattr(backend, method).assert_called_with( - "filename", "transformed source", "offset" + "filename", "transformed source", "offset", + *add_args, + **add_kwargs ) @@ -180,16 +183,6 @@ class TestRPCGetDefinition(BackendCallTestCase): "offset")) -class TestRPCGetAssignment(BackendCallTestCase): - def test_should_call_backend(self): - self.assert_calls_backend("rpc_get_assignment") - - def test_should_handle_no_backend(self): - self.srv.backend = None - self.assertIsNone(self.srv.rpc_get_assignment("filname", "source", - "offset")) - - class TestRPCGetDocstring(BackendCallTestCase): def test_should_call_backend(self): self.assert_calls_backend("rpc_get_docstring") @@ -223,6 +216,50 @@ class TestRPCGetCalltipOrOnelineDocstring(BackendCallTestCase): "offset")) +class TestRPCGetRenameDiff(BackendCallTestCase): + def test_should_call_backend(self): + self.assert_calls_backend("rpc_get_rename_diff", + add_args=['new_name']) + + def test_should_handle_no_backend(self): + self.srv.backend = None + self.assertIsNone(self.srv.rpc_get_rename_diff("filname", "source", + "offset", "new_name")) + + +class TestRPCGetExtract_VariableDiff(BackendCallTestCase): + def test_should_call_backend(self): + self.assert_calls_backend("rpc_get_extract_variable_diff", + add_args=['name', 12, 13, 3, 5]) + + def test_should_handle_no_backend(self): + self.srv.backend = None + self.assertIsNone(self.srv.rpc_get_extract_variable_diff( + "filname", "source", "offset", "new_name", 1, 1, 0, 3)) + + +class TestRPCGetExtract_FunctionDiff(BackendCallTestCase): + def test_should_call_backend(self): + self.assert_calls_backend("rpc_get_extract_function_diff", + add_args=['name', 12, 13, 3, 5]) + + + def test_should_handle_no_backend(self): + self.srv.backend = None + self.assertIsNone(self.srv.rpc_get_extract_function_diff( + "filname", "source", "offset", "new_name", 1, 1, 0, 4)) + + +class TestRPCGetInlineDiff(BackendCallTestCase): + def test_should_call_backend(self): + self.assert_calls_backend("rpc_get_inline_diff") + + def test_should_handle_no_backend(self): + self.srv.backend = None + self.assertIsNone(self.srv.rpc_get_inline_diff("filname", "source", + "offset")) + + class TestRPCGetPydocCompletions(ServerTestCase): @mock.patch.object(server, 'get_pydoc_completions') def test_should_call_pydoc_completions(self, get_pydoc_completions): @@ -258,70 +295,14 @@ class TestGetPydocDocumentation(ServerTestCase): json.dumps(docstring) -class TestRPCGetRefactorOptions(BackendTestCase): - @mock.patch.object(compat.builtins, '__import__') - def test_should_fail_if_rope_is_not_available(self, import_): - import_.side_effect = ImportError - filename = self.project_file("foo.py", "") - srv = server.ElpyRPCServer() - self.assertRaises(ImportError, srv.rpc_get_refactor_options, - filename, 0) - - @mock.patch.object(elpy.refactor, 'Refactor') - def test_should_initialize_and_call_refactor_object(self, Refactor): - filename = self.project_file("foo.py", "import foo") - srv = server.ElpyRPCServer() - srv.project_root = self.project_root - - srv.rpc_get_refactor_options(filename, 5) - - Refactor.assert_called_with(self.project_root, filename) - Refactor.return_value.get_refactor_options.assert_called_with(5, None) - - -class TestRPCRefactor(BackendTestCase): - @mock.patch.object(compat.builtins, '__import__') - def test_should_fail_if_rope_is_not_available(self, import_): - import_.side_effect = ImportError - filename = self.project_file("foo.py", "") - srv = server.ElpyRPCServer() - self.assertRaises(ImportError, srv.rpc_refactor, - filename, 'foo', ()) - - @mock.patch.object(elpy.refactor, 'Refactor') - def test_should_initialize_and_call_refactor_object_with_args( - self, Refactor): - filename = self.project_file("foo.py", "import foo") - srv = server.ElpyRPCServer() - srv.project_root = self.project_root - - srv.rpc_refactor(filename, 'foo', (1, 2, 3)) - - Refactor.assert_called_with(self.project_root, filename) - Refactor.return_value.get_changes.assert_called_with('foo', 1, 2, 3) - - @mock.patch.object(elpy.refactor, 'Refactor') - def test_should_initialize_and_call_refactor_object_without_args( - self, Refactor): - filename = self.project_file("foo.py", "import foo") - srv = server.ElpyRPCServer() - srv.project_root = self.project_root - - srv.rpc_refactor(filename, 'foo', None) - - Refactor.assert_called_with(self.project_root, filename) - Refactor.return_value.get_changes.assert_called_with('foo') - - class TestRPCGetUsages(BackendCallTestCase): def test_should_call_backend(self): self.assert_calls_backend("rpc_get_usages") def test_should_handle_no_backend(self): self.srv.backend = None - with self.assertRaises(rpc.Fault): - self.assertIsNone(self.srv.rpc_get_usages("filname", "source", - "offset")) + self.assertIsNone(self.srv.rpc_get_usages("filname", "source", + "offset")) class TestRPCGetNames(BackendCallTestCase): @@ -330,8 +311,7 @@ class TestRPCGetNames(BackendCallTestCase): def test_should_handle_no_backend(self): self.srv.backend = None - with self.assertRaises(rpc.Fault): - self.assertIsNone(self.srv.rpc_get_names("filname", "source", 0)) + self.assertIsNone(self.srv.rpc_get_names("filname", "source", 0)) class TestGetSource(unittest.TestCase): diff --git a/elpa/elpy-1.35.0/elpy/tests/test_support.py b/elpa/elpy-20210328.1852/elpy/tests/test_support.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/tests/test_support.py rename to elpa/elpy-20210328.1852/elpy/tests/test_support.py diff --git a/elpa/elpy-1.35.0/elpy/tests/test_yapf.py b/elpa/elpy-20210328.1852/elpy/tests/test_yapf.py old mode 100755 new mode 100644 similarity index 76% rename from elpa/elpy-1.35.0/elpy/tests/test_yapf.py rename to elpa/elpy-20210328.1852/elpy/tests/test_yapf.py index 712f119..e3a6585 --- a/elpa/elpy-1.35.0/elpy/tests/test_yapf.py +++ b/elpa/elpy-20210328.1852/elpy/tests/test_yapf.py @@ -20,6 +20,14 @@ class YAPFTestCase(BackendTestCase): src = 'x = ' self.assertRaises(Fault, yapfutil.fix_code, src, os.getcwd()) + def test_fix_code_should_throw_error_without_yapf_installed(self): + yapf = yapfutil.yapf_api + yapfutil.yapf_api = None + src = 'x= 123\n', 'x = 123\n' + with self.assertRaises(Fault): + yapfutil.fix_code(src, os.getcwd()) + yapfutil.yapf_api = yapf + def test_fix_code(self): testdata = [ ('x= 123\n', 'x = 123\n'), diff --git a/elpa/elpy-1.35.0/elpy/yapfutil.py b/elpa/elpy-20210328.1852/elpy/yapfutil.py old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/elpy/yapfutil.py rename to elpa/elpy-20210328.1852/elpy/yapfutil.py diff --git a/elpa/elpy-1.35.0/snippets/python-mode/.yas-setup.el b/elpa/elpy-20210328.1852/snippets/python-mode/.yas-setup.el old mode 100755 new mode 100644 similarity index 70% rename from elpa/elpy-1.35.0/snippets/python-mode/.yas-setup.el rename to elpa/elpy-20210328.1852/snippets/python-mode/.yas-setup.el index 809ae5a..80770c1 --- a/elpa/elpy-1.35.0/snippets/python-mode/.yas-setup.el +++ b/elpa/elpy-20210328.1852/snippets/python-mode/.yas-setup.el @@ -1,8 +1,18 @@ +(defvar elpy-snippet-split-arg-arg-regex +"\\([[:alnum:]*]+\\)\\(:[[:blank:]]*[[:alpha:]]*\\)?\\([[:blank:]]*=[[:blank:]]*[[:alnum:]]*\\)?" +"Regular expression matching an argument of a python function. +First group should give the argument name.") + +(defvar elpy-snippet-split-arg-separator +"[[:blank:]]*,[[:blank:]]*" +"Regular expression matching the separator in a list of argument.") + (defun elpy-snippet-split-args (arg-string) - "Split a python argument string into ((name, default)..) tuples" + "Split the python argument string ARG-STRING into a tuple of argument names." (mapcar (lambda (x) - (split-string x "[[:blank:]]*=[[:blank:]]*" t)) - (split-string arg-string "[[:blank:]]*,[[:blank:]]*" t))) + (when (string-match elpy-snippet-split-arg-arg-regex x) + (match-string-no-properties 1 x))) + (split-string arg-string elpy-snippet-split-arg-separator t))) (defun elpy-snippet-current-method-and-args () "Return information on the current definition." @@ -20,29 +30,25 @@ (buffer-substring-no-properties start end)))))) class method args) (unless current-arglist - (setq current-arglist '(("self")))) + (setq current-arglist '("self"))) (if (and current-defun (string-match "^\\(.*\\)\\.\\(.*\\)$" current-defun)) (setq class (match-string 1 current-defun) method (match-string 2 current-defun)) (setq class "Class" method "method")) - (setq args (mapcar #'car current-arglist)) - (list class method args))) + (list class method current-arglist))) (defun elpy-snippet-init-assignments (arg-string) - "Return the typical __init__ assignments for arguments." + "Return the typical __init__ assignments for arguments in ARG-STRING." (let ((indentation (make-string (save-excursion (goto-char start-point) (current-indentation)) ?\s))) (mapconcat (lambda (arg) - (if (string-match "^\\*" (car arg)) + (if (string-match "^\\*" arg) "" - (format "self.%s = %s\n%s" - (car arg) - (car arg) - indentation))) + (format "self.%s = %s\n%s" arg arg indentation))) (elpy-snippet-split-args arg-string) ""))) diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_abs b/elpa/elpy-20210328.1852/snippets/python-mode/_abs old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_abs rename to elpa/elpy-20210328.1852/snippets/python-mode/_abs diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_add b/elpa/elpy-20210328.1852/snippets/python-mode/_add old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_add rename to elpa/elpy-20210328.1852/snippets/python-mode/_add diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_and b/elpa/elpy-20210328.1852/snippets/python-mode/_and old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_and rename to elpa/elpy-20210328.1852/snippets/python-mode/_and diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_bool b/elpa/elpy-20210328.1852/snippets/python-mode/_bool old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_bool rename to elpa/elpy-20210328.1852/snippets/python-mode/_bool diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_call b/elpa/elpy-20210328.1852/snippets/python-mode/_call old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_call rename to elpa/elpy-20210328.1852/snippets/python-mode/_call diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_cmp b/elpa/elpy-20210328.1852/snippets/python-mode/_cmp old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_cmp rename to elpa/elpy-20210328.1852/snippets/python-mode/_cmp diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_coerce b/elpa/elpy-20210328.1852/snippets/python-mode/_coerce old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_coerce rename to elpa/elpy-20210328.1852/snippets/python-mode/_coerce diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_complex b/elpa/elpy-20210328.1852/snippets/python-mode/_complex old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_complex rename to elpa/elpy-20210328.1852/snippets/python-mode/_complex diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_contains b/elpa/elpy-20210328.1852/snippets/python-mode/_contains old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_contains rename to elpa/elpy-20210328.1852/snippets/python-mode/_contains diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_del b/elpa/elpy-20210328.1852/snippets/python-mode/_del old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_del rename to elpa/elpy-20210328.1852/snippets/python-mode/_del diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_delattr b/elpa/elpy-20210328.1852/snippets/python-mode/_delattr old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_delattr rename to elpa/elpy-20210328.1852/snippets/python-mode/_delattr diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_delete b/elpa/elpy-20210328.1852/snippets/python-mode/_delete old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_delete rename to elpa/elpy-20210328.1852/snippets/python-mode/_delete diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_delitem b/elpa/elpy-20210328.1852/snippets/python-mode/_delitem old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_delitem rename to elpa/elpy-20210328.1852/snippets/python-mode/_delitem diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_div b/elpa/elpy-20210328.1852/snippets/python-mode/_div old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_div rename to elpa/elpy-20210328.1852/snippets/python-mode/_div diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_divmod b/elpa/elpy-20210328.1852/snippets/python-mode/_divmod old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_divmod rename to elpa/elpy-20210328.1852/snippets/python-mode/_divmod diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_enter b/elpa/elpy-20210328.1852/snippets/python-mode/_enter old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_enter rename to elpa/elpy-20210328.1852/snippets/python-mode/_enter diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_eq b/elpa/elpy-20210328.1852/snippets/python-mode/_eq old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_eq rename to elpa/elpy-20210328.1852/snippets/python-mode/_eq diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_exit b/elpa/elpy-20210328.1852/snippets/python-mode/_exit old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_exit rename to elpa/elpy-20210328.1852/snippets/python-mode/_exit diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_float b/elpa/elpy-20210328.1852/snippets/python-mode/_float old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_float rename to elpa/elpy-20210328.1852/snippets/python-mode/_float diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_floordiv b/elpa/elpy-20210328.1852/snippets/python-mode/_floordiv old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_floordiv rename to elpa/elpy-20210328.1852/snippets/python-mode/_floordiv diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_ge b/elpa/elpy-20210328.1852/snippets/python-mode/_ge old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_ge rename to elpa/elpy-20210328.1852/snippets/python-mode/_ge diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_get b/elpa/elpy-20210328.1852/snippets/python-mode/_get old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_get rename to elpa/elpy-20210328.1852/snippets/python-mode/_get diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_getattr b/elpa/elpy-20210328.1852/snippets/python-mode/_getattr old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_getattr rename to elpa/elpy-20210328.1852/snippets/python-mode/_getattr diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_getattribute b/elpa/elpy-20210328.1852/snippets/python-mode/_getattribute old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_getattribute rename to elpa/elpy-20210328.1852/snippets/python-mode/_getattribute diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_getitem b/elpa/elpy-20210328.1852/snippets/python-mode/_getitem old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_getitem rename to elpa/elpy-20210328.1852/snippets/python-mode/_getitem diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_gt b/elpa/elpy-20210328.1852/snippets/python-mode/_gt old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_gt rename to elpa/elpy-20210328.1852/snippets/python-mode/_gt diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_hash b/elpa/elpy-20210328.1852/snippets/python-mode/_hash old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_hash rename to elpa/elpy-20210328.1852/snippets/python-mode/_hash diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_hex b/elpa/elpy-20210328.1852/snippets/python-mode/_hex old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_hex rename to elpa/elpy-20210328.1852/snippets/python-mode/_hex diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_iadd b/elpa/elpy-20210328.1852/snippets/python-mode/_iadd old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_iadd rename to elpa/elpy-20210328.1852/snippets/python-mode/_iadd diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_iand b/elpa/elpy-20210328.1852/snippets/python-mode/_iand old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_iand rename to elpa/elpy-20210328.1852/snippets/python-mode/_iand diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_idiv b/elpa/elpy-20210328.1852/snippets/python-mode/_idiv old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_idiv rename to elpa/elpy-20210328.1852/snippets/python-mode/_idiv diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_ifloordiv b/elpa/elpy-20210328.1852/snippets/python-mode/_ifloordiv old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_ifloordiv rename to elpa/elpy-20210328.1852/snippets/python-mode/_ifloordiv diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_ilshift b/elpa/elpy-20210328.1852/snippets/python-mode/_ilshift old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_ilshift rename to elpa/elpy-20210328.1852/snippets/python-mode/_ilshift diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_imod b/elpa/elpy-20210328.1852/snippets/python-mode/_imod old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_imod rename to elpa/elpy-20210328.1852/snippets/python-mode/_imod diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_imul b/elpa/elpy-20210328.1852/snippets/python-mode/_imul old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_imul rename to elpa/elpy-20210328.1852/snippets/python-mode/_imul diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_index b/elpa/elpy-20210328.1852/snippets/python-mode/_index old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_index rename to elpa/elpy-20210328.1852/snippets/python-mode/_index diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_init b/elpa/elpy-20210328.1852/snippets/python-mode/_init old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_init rename to elpa/elpy-20210328.1852/snippets/python-mode/_init diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_instancecheck b/elpa/elpy-20210328.1852/snippets/python-mode/_instancecheck old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_instancecheck rename to elpa/elpy-20210328.1852/snippets/python-mode/_instancecheck diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_int b/elpa/elpy-20210328.1852/snippets/python-mode/_int old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_int rename to elpa/elpy-20210328.1852/snippets/python-mode/_int diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_invert b/elpa/elpy-20210328.1852/snippets/python-mode/_invert old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_invert rename to elpa/elpy-20210328.1852/snippets/python-mode/_invert diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_ior b/elpa/elpy-20210328.1852/snippets/python-mode/_ior old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_ior rename to elpa/elpy-20210328.1852/snippets/python-mode/_ior diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_ipow b/elpa/elpy-20210328.1852/snippets/python-mode/_ipow old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_ipow rename to elpa/elpy-20210328.1852/snippets/python-mode/_ipow diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_irshift b/elpa/elpy-20210328.1852/snippets/python-mode/_irshift old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_irshift rename to elpa/elpy-20210328.1852/snippets/python-mode/_irshift diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_isub b/elpa/elpy-20210328.1852/snippets/python-mode/_isub old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_isub rename to elpa/elpy-20210328.1852/snippets/python-mode/_isub diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_iter b/elpa/elpy-20210328.1852/snippets/python-mode/_iter old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_iter rename to elpa/elpy-20210328.1852/snippets/python-mode/_iter diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_itruediv b/elpa/elpy-20210328.1852/snippets/python-mode/_itruediv old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_itruediv rename to elpa/elpy-20210328.1852/snippets/python-mode/_itruediv diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_ixor b/elpa/elpy-20210328.1852/snippets/python-mode/_ixor old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_ixor rename to elpa/elpy-20210328.1852/snippets/python-mode/_ixor diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_le b/elpa/elpy-20210328.1852/snippets/python-mode/_le old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_le rename to elpa/elpy-20210328.1852/snippets/python-mode/_le diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_len b/elpa/elpy-20210328.1852/snippets/python-mode/_len old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_len rename to elpa/elpy-20210328.1852/snippets/python-mode/_len diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_long b/elpa/elpy-20210328.1852/snippets/python-mode/_long old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_long rename to elpa/elpy-20210328.1852/snippets/python-mode/_long diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_lshift b/elpa/elpy-20210328.1852/snippets/python-mode/_lshift old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_lshift rename to elpa/elpy-20210328.1852/snippets/python-mode/_lshift diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_lt b/elpa/elpy-20210328.1852/snippets/python-mode/_lt old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_lt rename to elpa/elpy-20210328.1852/snippets/python-mode/_lt diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_mod b/elpa/elpy-20210328.1852/snippets/python-mode/_mod old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_mod rename to elpa/elpy-20210328.1852/snippets/python-mode/_mod diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_mul b/elpa/elpy-20210328.1852/snippets/python-mode/_mul old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_mul rename to elpa/elpy-20210328.1852/snippets/python-mode/_mul diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_ne b/elpa/elpy-20210328.1852/snippets/python-mode/_ne old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_ne rename to elpa/elpy-20210328.1852/snippets/python-mode/_ne diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_neg b/elpa/elpy-20210328.1852/snippets/python-mode/_neg old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_neg rename to elpa/elpy-20210328.1852/snippets/python-mode/_neg diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_new b/elpa/elpy-20210328.1852/snippets/python-mode/_new old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_new rename to elpa/elpy-20210328.1852/snippets/python-mode/_new diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_nonzero b/elpa/elpy-20210328.1852/snippets/python-mode/_nonzero old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_nonzero rename to elpa/elpy-20210328.1852/snippets/python-mode/_nonzero diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_oct b/elpa/elpy-20210328.1852/snippets/python-mode/_oct old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_oct rename to elpa/elpy-20210328.1852/snippets/python-mode/_oct diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_or b/elpa/elpy-20210328.1852/snippets/python-mode/_or old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_or rename to elpa/elpy-20210328.1852/snippets/python-mode/_or diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_pos b/elpa/elpy-20210328.1852/snippets/python-mode/_pos old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_pos rename to elpa/elpy-20210328.1852/snippets/python-mode/_pos diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_pow b/elpa/elpy-20210328.1852/snippets/python-mode/_pow old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_pow rename to elpa/elpy-20210328.1852/snippets/python-mode/_pow diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_radd b/elpa/elpy-20210328.1852/snippets/python-mode/_radd old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_radd rename to elpa/elpy-20210328.1852/snippets/python-mode/_radd diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rand b/elpa/elpy-20210328.1852/snippets/python-mode/_rand old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rand rename to elpa/elpy-20210328.1852/snippets/python-mode/_rand diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rdivmod b/elpa/elpy-20210328.1852/snippets/python-mode/_rdivmod old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rdivmod rename to elpa/elpy-20210328.1852/snippets/python-mode/_rdivmod diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_repr b/elpa/elpy-20210328.1852/snippets/python-mode/_repr old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_repr rename to elpa/elpy-20210328.1852/snippets/python-mode/_repr diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_reversed b/elpa/elpy-20210328.1852/snippets/python-mode/_reversed old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_reversed rename to elpa/elpy-20210328.1852/snippets/python-mode/_reversed diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rfloordiv b/elpa/elpy-20210328.1852/snippets/python-mode/_rfloordiv old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rfloordiv rename to elpa/elpy-20210328.1852/snippets/python-mode/_rfloordiv diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rlshift b/elpa/elpy-20210328.1852/snippets/python-mode/_rlshift old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rlshift rename to elpa/elpy-20210328.1852/snippets/python-mode/_rlshift diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rmod b/elpa/elpy-20210328.1852/snippets/python-mode/_rmod old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rmod rename to elpa/elpy-20210328.1852/snippets/python-mode/_rmod diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rmul b/elpa/elpy-20210328.1852/snippets/python-mode/_rmul old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rmul rename to elpa/elpy-20210328.1852/snippets/python-mode/_rmul diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_ror b/elpa/elpy-20210328.1852/snippets/python-mode/_ror old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_ror rename to elpa/elpy-20210328.1852/snippets/python-mode/_ror diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rpow b/elpa/elpy-20210328.1852/snippets/python-mode/_rpow old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rpow rename to elpa/elpy-20210328.1852/snippets/python-mode/_rpow diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rrshift b/elpa/elpy-20210328.1852/snippets/python-mode/_rrshift old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rrshift rename to elpa/elpy-20210328.1852/snippets/python-mode/_rrshift diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rshift b/elpa/elpy-20210328.1852/snippets/python-mode/_rshift old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rshift rename to elpa/elpy-20210328.1852/snippets/python-mode/_rshift diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rsub b/elpa/elpy-20210328.1852/snippets/python-mode/_rsub old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rsub rename to elpa/elpy-20210328.1852/snippets/python-mode/_rsub diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rtruediv b/elpa/elpy-20210328.1852/snippets/python-mode/_rtruediv old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rtruediv rename to elpa/elpy-20210328.1852/snippets/python-mode/_rtruediv diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_rxor b/elpa/elpy-20210328.1852/snippets/python-mode/_rxor old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_rxor rename to elpa/elpy-20210328.1852/snippets/python-mode/_rxor diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_set b/elpa/elpy-20210328.1852/snippets/python-mode/_set old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_set rename to elpa/elpy-20210328.1852/snippets/python-mode/_set diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_setattr b/elpa/elpy-20210328.1852/snippets/python-mode/_setattr old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_setattr rename to elpa/elpy-20210328.1852/snippets/python-mode/_setattr diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_setitem b/elpa/elpy-20210328.1852/snippets/python-mode/_setitem old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_setitem rename to elpa/elpy-20210328.1852/snippets/python-mode/_setitem diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_slots b/elpa/elpy-20210328.1852/snippets/python-mode/_slots old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_slots rename to elpa/elpy-20210328.1852/snippets/python-mode/_slots diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_str b/elpa/elpy-20210328.1852/snippets/python-mode/_str old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_str rename to elpa/elpy-20210328.1852/snippets/python-mode/_str diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_sub b/elpa/elpy-20210328.1852/snippets/python-mode/_sub old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_sub rename to elpa/elpy-20210328.1852/snippets/python-mode/_sub diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_subclasscheck b/elpa/elpy-20210328.1852/snippets/python-mode/_subclasscheck old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_subclasscheck rename to elpa/elpy-20210328.1852/snippets/python-mode/_subclasscheck diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_truediv b/elpa/elpy-20210328.1852/snippets/python-mode/_truediv old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_truediv rename to elpa/elpy-20210328.1852/snippets/python-mode/_truediv diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_unicode b/elpa/elpy-20210328.1852/snippets/python-mode/_unicode old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_unicode rename to elpa/elpy-20210328.1852/snippets/python-mode/_unicode diff --git a/elpa/elpy-1.35.0/snippets/python-mode/_xor b/elpa/elpy-20210328.1852/snippets/python-mode/_xor old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/_xor rename to elpa/elpy-20210328.1852/snippets/python-mode/_xor diff --git a/elpa/elpy-1.35.0/snippets/python-mode/ase b/elpa/elpy-20210328.1852/snippets/python-mode/ase old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/ase rename to elpa/elpy-20210328.1852/snippets/python-mode/ase diff --git a/elpa/elpy-1.35.0/snippets/python-mode/asne b/elpa/elpy-20210328.1852/snippets/python-mode/asne old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/asne rename to elpa/elpy-20210328.1852/snippets/python-mode/asne diff --git a/elpa/elpy-1.35.0/snippets/python-mode/asr b/elpa/elpy-20210328.1852/snippets/python-mode/asr old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/asr rename to elpa/elpy-20210328.1852/snippets/python-mode/asr diff --git a/elpa/elpy-1.35.0/snippets/python-mode/class b/elpa/elpy-20210328.1852/snippets/python-mode/class old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/class rename to elpa/elpy-20210328.1852/snippets/python-mode/class diff --git a/elpa/elpy-1.35.0/snippets/python-mode/def b/elpa/elpy-20210328.1852/snippets/python-mode/def old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/def rename to elpa/elpy-20210328.1852/snippets/python-mode/def diff --git a/elpa/elpy-1.35.0/snippets/python-mode/defs b/elpa/elpy-20210328.1852/snippets/python-mode/defs old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/defs rename to elpa/elpy-20210328.1852/snippets/python-mode/defs diff --git a/elpa/elpy-1.35.0/snippets/python-mode/enc b/elpa/elpy-20210328.1852/snippets/python-mode/enc old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/enc rename to elpa/elpy-20210328.1852/snippets/python-mode/enc diff --git a/elpa/elpy-1.35.0/snippets/python-mode/env b/elpa/elpy-20210328.1852/snippets/python-mode/env old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/env rename to elpa/elpy-20210328.1852/snippets/python-mode/env diff --git a/elpa/elpy-1.35.0/snippets/python-mode/from b/elpa/elpy-20210328.1852/snippets/python-mode/from old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/from rename to elpa/elpy-20210328.1852/snippets/python-mode/from diff --git a/elpa/elpy-1.35.0/snippets/python-mode/pdb b/elpa/elpy-20210328.1852/snippets/python-mode/pdb old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/pdb rename to elpa/elpy-20210328.1852/snippets/python-mode/pdb diff --git a/elpa/elpy-1.35.0/snippets/python-mode/py3 b/elpa/elpy-20210328.1852/snippets/python-mode/py3 old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/py3 rename to elpa/elpy-20210328.1852/snippets/python-mode/py3 diff --git a/elpa/elpy-1.35.0/snippets/python-mode/super b/elpa/elpy-20210328.1852/snippets/python-mode/super old mode 100755 new mode 100644 similarity index 100% rename from elpa/elpy-1.35.0/snippets/python-mode/super rename to elpa/elpy-20210328.1852/snippets/python-mode/super