From 69661de82f5b67963e7d20b87cdfcf7fb8846277 Mon Sep 17 00:00:00 2001 From: ViktorBarzin Date: Tue, 13 Feb 2018 13:16:00 +0000 Subject: [PATCH] Add new stuff --- .vimrc | 47 +- vim-plugins/bundle/jedi-vim/.jedi_vim.py.un~ | Bin 976 -> 0 bytes vim-plugins/bundle/jedi-vim/.travis.yml | 18 - vim-plugins/bundle/jedi-vim/AUTHORS.txt | 55 - vim-plugins/bundle/jedi-vim/CONTRIBUTING.md | 12 - vim-plugins/bundle/jedi-vim/LICENSE.txt | 21 - vim-plugins/bundle/jedi-vim/Makefile | 16 - vim-plugins/bundle/jedi-vim/README.rst | 246 --- .../__pycache__/jedi_vim.cpython-35.pyc | Bin 21300 -> 0 bytes .../__pycache__/jedi_vim.cpython-36.pyc | Bin 19364 -> 0 bytes .../jedi-vim/after/ftplugin/python/jedi.vim | 23 - .../bundle/jedi-vim/after/syntax/python.vim | 32 - .../bundle/jedi-vim/autoload/.jedi.vim.un~ | Bin 1044 -> 0 bytes .../bundle/jedi-vim/autoload/health/jedi.vim | 4 - vim-plugins/bundle/jedi-vim/autoload/jedi.vim | 609 ------ vim-plugins/bundle/jedi-vim/conftest.py | 60 - vim-plugins/bundle/jedi-vim/doc/jedi-vim.txt | 544 ------ vim-plugins/bundle/jedi-vim/doc/tags | 38 - .../bundle/jedi-vim/ftplugin/python/jedi.vim | 50 - vim-plugins/bundle/jedi-vim/initialize.py | 26 - vim-plugins/bundle/jedi-vim/jedi/.coveragerc | 19 - vim-plugins/bundle/jedi-vim/jedi/.travis.yml | 28 - vim-plugins/bundle/jedi-vim/jedi/AUTHORS.txt | 45 - .../bundle/jedi-vim/jedi/CHANGELOG.rst | 67 - .../bundle/jedi-vim/jedi/CONTRIBUTING.md | 28 - vim-plugins/bundle/jedi-vim/jedi/LICENSE.txt | 82 - vim-plugins/bundle/jedi-vim/jedi/MANIFEST.in | 14 - vim-plugins/bundle/jedi-vim/jedi/README.rst | 210 --- vim-plugins/bundle/jedi-vim/jedi/conftest.py | 72 - .../bundle/jedi-vim/jedi/docs/Makefile | 153 -- .../docs/_screenshots/screenshot_complete.png | Bin 17109 -> 0 bytes .../docs/_screenshots/screenshot_function.png | Bin 40035 -> 0 bytes .../docs/_screenshots/screenshot_pydoc.png | Bin 22041 -> 0 bytes .../jedi-vim/jedi/docs/_static/logo-src.txt | 3 - .../jedi-vim/jedi/docs/_static/logo.png | Bin 28795 -> 0 bytes .../jedi/docs/_templates/ghbuttons.html | 4 - .../jedi/docs/_templates/sidebarlogo.html | 3 - .../jedi-vim/jedi/docs/_themes/flask/LICENSE | 37 - .../jedi/docs/_themes/flask/layout.html | 28 - .../jedi/docs/_themes/flask/relations.html | 19 - .../docs/_themes/flask/static/flasky.css_t | 394 ---- .../docs/_themes/flask/static/small_flask.css | 70 - .../jedi/docs/_themes/flask/theme.conf | 9 - .../jedi/docs/_themes/flask_theme_support.py | 125 -- vim-plugins/bundle/jedi-vim/jedi/docs/conf.py | 291 --- .../jedi-vim/jedi/docs/docs/development.rst | 248 --- .../jedi-vim/jedi/docs/docs/features.rst | 263 --- .../jedi-vim/jedi/docs/docs/installation.rst | 83 - .../jedi/docs/docs/plugin-api-classes.rst | 10 - .../jedi-vim/jedi/docs/docs/plugin-api.rst | 100 - .../jedi-vim/jedi/docs/docs/settings.rst | 6 - .../jedi/docs/docs/static_analsysis.rst | 106 -- .../jedi-vim/jedi/docs/docs/testing.rst | 40 - .../bundle/jedi-vim/jedi/docs/docs/usage.rst | 119 -- .../bundle/jedi-vim/jedi/docs/global.rst | 3 - .../bundle/jedi-vim/jedi/docs/index.rst | 40 - .../bundle/jedi-vim/jedi/jedi/__init__.py | 43 - .../bundle/jedi-vim/jedi/jedi/__main__.py | 48 - .../jedi/__pycache__/__init__.cpython-35.pyc | Bin 1888 -> 0 bytes .../jedi/__pycache__/__init__.cpython-36.pyc | Bin 1862 -> 0 bytes .../__pycache__/_compatibility.cpython-35.pyc | Bin 7346 -> 0 bytes .../__pycache__/_compatibility.cpython-36.pyc | Bin 6828 -> 0 bytes .../jedi/__pycache__/cache.cpython-35.pyc | Bin 4072 -> 0 bytes .../jedi/__pycache__/cache.cpython-36.pyc | Bin 3890 -> 0 bytes .../jedi/__pycache__/common.cpython-35.pyc | Bin 6529 -> 0 bytes .../jedi/__pycache__/common.cpython-36.pyc | Bin 6231 -> 0 bytes .../jedi/__pycache__/debug.cpython-35.pyc | Bin 3770 -> 0 bytes .../jedi/__pycache__/debug.cpython-36.pyc | Bin 3511 -> 0 bytes .../jedi/__pycache__/settings.cpython-35.pyc | Bin 3044 -> 0 bytes .../jedi/__pycache__/settings.cpython-36.pyc | Bin 2939 -> 0 bytes .../jedi/__pycache__/utils.cpython-35.pyc | Bin 4812 -> 0 bytes .../jedi/__pycache__/utils.cpython-36.pyc | Bin 4574 -> 0 bytes .../jedi-vim/jedi/jedi/_compatibility.py | 263 --- .../bundle/jedi-vim/jedi/jedi/api/__init__.py | 463 ----- .../api/__pycache__/__init__.cpython-35.pyc | Bin 18112 -> 0 bytes .../api/__pycache__/__init__.cpython-36.pyc | Bin 17107 -> 0 bytes .../api/__pycache__/classes.cpython-35.pyc | Bin 26274 -> 0 bytes .../api/__pycache__/classes.cpython-36.pyc | Bin 24727 -> 0 bytes .../api/__pycache__/completion.cpython-35.pyc | Bin 8019 -> 0 bytes .../api/__pycache__/completion.cpython-36.pyc | Bin 7303 -> 0 bytes .../api/__pycache__/helpers.cpython-35.pyc | Bin 9338 -> 0 bytes .../api/__pycache__/helpers.cpython-36.pyc | Bin 8507 -> 0 bytes .../__pycache__/interpreter.cpython-35.pyc | Bin 2890 -> 0 bytes .../__pycache__/interpreter.cpython-36.pyc | Bin 2730 -> 0 bytes .../api/__pycache__/keywords.cpython-35.pyc | Bin 4305 -> 0 bytes .../api/__pycache__/keywords.cpython-36.pyc | Bin 4019 -> 0 bytes .../api/__pycache__/usages.cpython-35.pyc | Bin 2000 -> 0 bytes .../api/__pycache__/usages.cpython-36.pyc | Bin 1850 -> 0 bytes .../bundle/jedi-vim/jedi/jedi/api/classes.py | 764 -------- .../jedi-vim/jedi/jedi/api/completion.py | 256 --- .../bundle/jedi-vim/jedi/jedi/api/helpers.py | 315 ---- .../jedi-vim/jedi/jedi/api/interpreter.py | 67 - .../bundle/jedi-vim/jedi/jedi/api/keywords.py | 132 -- .../jedi-vim/jedi/jedi/api/replstartup.py | 27 - .../bundle/jedi-vim/jedi/jedi/api/usages.py | 49 - .../bundle/jedi-vim/jedi/jedi/cache.py | 127 -- .../bundle/jedi-vim/jedi/jedi/common.py | 169 -- .../bundle/jedi-vim/jedi/jedi/debug.py | 133 -- .../jedi/jedi/evaluate/.sys_path.py.un~ | Bin 9435 -> 0 bytes .../jedi-vim/jedi/jedi/evaluate/__init__.py | 534 ------ .../__pycache__/__init__.cpython-35.pyc | Bin 17518 -> 0 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 15953 -> 0 bytes .../__pycache__/analysis.cpython-35.pyc | Bin 7625 -> 0 bytes .../__pycache__/analysis.cpython-36.pyc | Bin 6939 -> 0 bytes .../evaluate/__pycache__/cache.cpython-35.pyc | Bin 2276 -> 0 bytes .../evaluate/__pycache__/cache.cpython-36.pyc | Bin 2182 -> 0 bytes .../__pycache__/docstrings.cpython-35.pyc | Bin 7293 -> 0 bytes .../__pycache__/docstrings.cpython-36.pyc | Bin 6867 -> 0 bytes .../__pycache__/dynamic.cpython-35.pyc | Bin 4479 -> 0 bytes .../__pycache__/dynamic.cpython-36.pyc | Bin 4175 -> 0 bytes .../__pycache__/finder.cpython-35.pyc | Bin 18216 -> 0 bytes .../__pycache__/finder.cpython-36.pyc | Bin 16627 -> 0 bytes .../__pycache__/flow_analysis.cpython-35.pyc | Bin 2604 -> 0 bytes .../__pycache__/flow_analysis.cpython-36.pyc | Bin 2367 -> 0 bytes .../__pycache__/helpers.cpython-35.pyc | Bin 6171 -> 0 bytes .../__pycache__/helpers.cpython-36.pyc | Bin 5811 -> 0 bytes .../__pycache__/imports.cpython-35.pyc | Bin 15579 -> 0 bytes .../__pycache__/imports.cpython-36.pyc | Bin 14195 -> 0 bytes .../__pycache__/iterable.cpython-35.pyc | Bin 30526 -> 0 bytes .../__pycache__/iterable.cpython-36.pyc | Bin 28271 -> 0 bytes .../evaluate/__pycache__/param.cpython-35.pyc | Bin 13602 -> 0 bytes .../evaluate/__pycache__/param.cpython-36.pyc | Bin 12314 -> 0 bytes .../__pycache__/pep0484.cpython-35.pyc | Bin 6976 -> 0 bytes .../__pycache__/pep0484.cpython-36.pyc | Bin 6451 -> 0 bytes .../__pycache__/precedence.cpython-35.pyc | Bin 5050 -> 0 bytes .../__pycache__/precedence.cpython-36.pyc | Bin 4492 -> 0 bytes .../__pycache__/recursion.cpython-35.pyc | Bin 5506 -> 0 bytes .../__pycache__/recursion.cpython-36.pyc | Bin 5122 -> 0 bytes .../__pycache__/representation.cpython-35.pyc | Bin 35140 -> 0 bytes .../__pycache__/representation.cpython-36.pyc | Bin 32598 -> 0 bytes .../evaluate/__pycache__/site.cpython-35.pyc | Bin 3181 -> 0 bytes .../evaluate/__pycache__/site.cpython-36.pyc | Bin 2950 -> 0 bytes .../__pycache__/stdlib.cpython-35.pyc | Bin 9261 -> 0 bytes .../__pycache__/stdlib.cpython-36.pyc | Bin 8478 -> 0 bytes .../__pycache__/sys_path.cpython-35.pyc | Bin 8619 -> 0 bytes .../__pycache__/sys_path.cpython-36.pyc | Bin 7923 -> 0 bytes .../jedi-vim/jedi/jedi/evaluate/analysis.py | 216 --- .../jedi-vim/jedi/jedi/evaluate/cache.py | 58 - .../jedi/jedi/evaluate/compiled/__init__.py | 544 ------ .../__pycache__/__init__.cpython-35.pyc | Bin 17132 -> 0 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 15795 -> 0 bytes .../compiled/__pycache__/fake.cpython-35.pyc | Bin 4895 -> 0 bytes .../compiled/__pycache__/fake.cpython-36.pyc | Bin 4442 -> 0 bytes .../compiled/__pycache__/mixed.cpython-35.pyc | Bin 5122 -> 0 bytes .../compiled/__pycache__/mixed.cpython-36.pyc | Bin 4791 -> 0 bytes .../jedi/jedi/evaluate/compiled/fake.py | 203 -- .../evaluate/compiled/fake/_functools.pym | 9 - .../jedi/evaluate/compiled/fake/_sqlite3.pym | 26 - .../jedi/jedi/evaluate/compiled/fake/_sre.pym | 99 - .../jedi/evaluate/compiled/fake/_weakref.pym | 8 - .../jedi/evaluate/compiled/fake/builtins.pym | 262 --- .../jedi/evaluate/compiled/fake/datetime.pym | 4 - .../jedi/jedi/evaluate/compiled/fake/io.pym | 6 - .../jedi/evaluate/compiled/fake/posix.pym | 5 - .../jedi/jedi/evaluate/compiled/mixed.py | 158 -- .../jedi-vim/jedi/jedi/evaluate/docstrings.py | 204 -- .../jedi-vim/jedi/jedi/evaluate/dynamic.py | 149 -- .../jedi-vim/jedi/jedi/evaluate/finder.py | 632 ------- .../jedi/jedi/evaluate/flow_analysis.py | 91 - .../jedi-vim/jedi/jedi/evaluate/helpers.py | 200 -- .../jedi-vim/jedi/jedi/evaluate/imports.py | 517 ----- .../jedi-vim/jedi/jedi/evaluate/iterable.py | 863 --------- .../jedi/jedi/evaluate/jedi_typing.py | 100 - .../jedi-vim/jedi/jedi/evaluate/param.py | 438 ----- .../jedi-vim/jedi/jedi/evaluate/pep0484.py | 195 -- .../jedi-vim/jedi/jedi/evaluate/precedence.py | 178 -- .../jedi-vim/jedi/jedi/evaluate/recursion.py | 157 -- .../jedi/jedi/evaluate/representation.py | 974 ---------- .../jedi-vim/jedi/jedi/evaluate/site.py | 110 -- .../jedi-vim/jedi/jedi/evaluate/stdlib.py | 280 --- .../jedi-vim/jedi/jedi/evaluate/sys_path.py | 284 --- .../jedi-vim/jedi/jedi/parser/__init__.py | 409 ---- .../__pycache__/__init__.cpython-35.pyc | Bin 11730 -> 0 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 10738 -> 0 bytes .../parser/__pycache__/fast.cpython-35.pyc | Bin 17787 -> 0 bytes .../parser/__pycache__/fast.cpython-36.pyc | Bin 16372 -> 0 bytes .../parser/__pycache__/token.cpython-35.pyc | Bin 1299 -> 0 bytes .../parser/__pycache__/token.cpython-36.pyc | Bin 1228 -> 0 bytes .../__pycache__/tokenize.cpython-35.pyc | Bin 8000 -> 0 bytes .../__pycache__/tokenize.cpython-36.pyc | Bin 7430 -> 0 bytes .../parser/__pycache__/tree.cpython-35.pyc | Bin 56261 -> 0 bytes .../parser/__pycache__/tree.cpython-36.pyc | Bin 52673 -> 0 bytes .../parser/__pycache__/utils.cpython-35.pyc | Bin 5389 -> 0 bytes .../parser/__pycache__/utils.cpython-36.pyc | Bin 4977 -> 0 bytes .../bundle/jedi-vim/jedi/jedi/parser/fast.py | 621 ------ .../jedi-vim/jedi/jedi/parser/grammar2.7.txt | 152 -- .../jedi-vim/jedi/jedi/parser/grammar3.4.txt | 135 -- .../jedi-vim/jedi/jedi/parser/grammar3.5.txt | 154 -- .../jedi/jedi/parser/pgen2/__init__.py | 8 - .../pgen2/__pycache__/__init__.cpython-35.pyc | Bin 151 -> 0 bytes .../pgen2/__pycache__/__init__.cpython-36.pyc | Bin 151 -> 0 bytes .../pgen2/__pycache__/grammar.cpython-35.pyc | Bin 4930 -> 0 bytes .../pgen2/__pycache__/grammar.cpython-36.pyc | Bin 4778 -> 0 bytes .../pgen2/__pycache__/parse.cpython-35.pyc | Bin 6211 -> 0 bytes .../pgen2/__pycache__/parse.cpython-36.pyc | Bin 5859 -> 0 bytes .../pgen2/__pycache__/pgen.cpython-35.pyc | Bin 10903 -> 0 bytes .../pgen2/__pycache__/pgen.cpython-36.pyc | Bin 9661 -> 0 bytes .../jedi/jedi/parser/pgen2/grammar.py | 125 -- .../jedi-vim/jedi/jedi/parser/pgen2/parse.py | 213 --- .../jedi-vim/jedi/jedi/parser/pgen2/pgen.py | 394 ---- .../bundle/jedi-vim/jedi/jedi/parser/token.py | 90 - .../jedi-vim/jedi/jedi/parser/tokenize.py | 329 ---- .../bundle/jedi-vim/jedi/jedi/parser/tree.py | 1658 ----------------- .../bundle/jedi-vim/jedi/jedi/parser/utils.py | 198 -- .../bundle/jedi-vim/jedi/jedi/refactoring.py | 202 -- .../bundle/jedi-vim/jedi/jedi/settings.py | 233 --- .../bundle/jedi-vim/jedi/jedi/utils.py | 131 -- vim-plugins/bundle/jedi-vim/jedi/pytest.ini | 10 - .../jedi-vim/jedi/scripts/memory_check.py | 58 - .../bundle/jedi-vim/jedi/scripts/profile.py | 49 - .../bundle/jedi-vim/jedi/scripts/wx_check.py | 61 - vim-plugins/bundle/jedi-vim/jedi/setup.py | 50 - vim-plugins/bundle/jedi-vim/jedi/sith.py | 220 --- .../bundle/jedi-vim/jedi/test/__init__.py | 0 .../jedi/test/blabla_test_documentation.py | 30 - .../jedi-vim/jedi/test/completion/__init__.py | 3 - .../jedi-vim/jedi/test/completion/arrays.py | 430 ----- .../jedi-vim/jedi/test/completion/basic.py | 293 --- .../jedi-vim/jedi/test/completion/classes.py | 470 ----- .../jedi/test/completion/completion.py | 26 - .../jedi-vim/jedi/test/completion/complex.py | 14 - .../jedi/test/completion/comprehensions.py | 200 -- .../jedi-vim/jedi/test/completion/context.py | 32 - .../jedi/test/completion/decorators.py | 306 --- .../jedi/test/completion/definition.py | 68 - .../jedi/test/completion/descriptors.py | 219 --- .../jedi/test/completion/docstring.py | 235 --- .../jedi/test/completion/dynamic_arrays.py | 306 --- .../jedi/test/completion/dynamic_params.py | 134 -- .../jedi/test/completion/flow_analysis.py | 257 --- .../jedi/test/completion/functions.py | 475 ----- .../jedi/test/completion/generators.py | 199 -- .../jedi-vim/jedi/test/completion/goto.py | 231 --- .../test/completion/import_tree/__init__.py | 7 - .../completion/import_tree/flow_import.py | 4 - .../completion/import_tree/invisible_pkg.py | 7 - .../jedi/test/completion/import_tree/mod1.py | 4 - .../jedi/test/completion/import_tree/mod2.py | 1 - .../completion/import_tree/pkg/__init__.py | 3 - .../test/completion/import_tree/pkg/mod1.py | 1 - .../test/completion/import_tree/random.py | 4 - .../completion/import_tree/recurse_class1.py | 5 - .../completion/import_tree/recurse_class2.py | 4 - .../test/completion/import_tree/rename1.py | 3 - .../test/completion/import_tree/rename2.py | 6 - .../jedi-vim/jedi/test/completion/imports.py | 285 --- .../jedi-vim/jedi/test/completion/invalid.py | 214 --- .../jedi/test/completion/isinstance.py | 100 - .../jedi-vim/jedi/test/completion/keywords.py | 59 - .../jedi-vim/jedi/test/completion/lambdas.py | 106 -- .../jedi/test/completion/named_param.py | 48 - .../jedi/test/completion/on_import.py | 108 -- .../jedi-vim/jedi/test/completion/ordering.py | 195 -- .../jedi-vim/jedi/test/completion/parser.py | 43 - .../jedi-vim/jedi/test/completion/pep0484.py | 160 -- .../jedi/test/completion/pep0484_comments.py | 109 -- .../jedi/test/completion/pep0484_typing.py | 263 --- .../jedi/test/completion/precedence.py | 138 -- .../jedi/test/completion/recursion.py | 51 - .../jedi-vim/jedi/test/completion/stdlib.py | 224 --- .../jedi-vim/jedi/test/completion/sys_path.py | 25 - .../jedi/test/completion/thirdparty/PyQt4_.py | 19 - .../test/completion/thirdparty/django_.py | 11 - .../jedi/test/completion/thirdparty/jedi_.py | 52 - .../test/completion/thirdparty/psycopg2_.py | 11 - .../jedi/test/completion/thirdparty/pylab_.py | 36 - .../jedi-vim/jedi/test/completion/types.py | 127 -- .../jedi-vim/jedi/test/completion/usages.py | 275 --- .../bundle/jedi-vim/jedi/test/conftest.py | 130 -- .../bundle/jedi-vim/jedi/test/helpers.py | 40 - .../bundle/jedi-vim/jedi/test/refactor.py | 99 - .../jedi-vim/jedi/test/refactor/extract.py | 47 - .../jedi-vim/jedi/test/refactor/inline.py | 18 - .../jedi-vim/jedi/test/refactor/rename.py | 17 - vim-plugins/bundle/jedi-vim/jedi/test/run.py | 444 ----- .../jedi-vim/jedi/test/speed/precedence.py | 37 - .../jedi/test/static_analysis/arguments.py | 73 - .../test/static_analysis/attribute_error.py | 119 -- .../static_analysis/attribute_warnings.py | 46 - .../jedi/test/static_analysis/branches.py | 46 - .../jedi/test/static_analysis/builtins.py | 11 - .../jedi/test/static_analysis/class_simple.py | 13 - .../test/static_analysis/comprehensions.py | 41 - .../jedi/test/static_analysis/descriptors.py | 13 - .../jedi/test/static_analysis/generators.py | 7 - .../static_analysis/import_tree/__init__.py | 5 - .../test/static_analysis/import_tree/a.py | 1 - .../test/static_analysis/import_tree/b.py | 0 .../jedi/test/static_analysis/imports.py | 25 - .../jedi/test/static_analysis/iterable.py | 21 - .../jedi/test/static_analysis/keywords.py | 7 - .../jedi/test/static_analysis/operations.py | 16 - .../jedi/test/static_analysis/python2.py | 11 - .../test/static_analysis/star_arguments.py | 119 -- .../jedi/test/static_analysis/try_except.py | 89 - .../jedi-vim/jedi/test/test_api/__init__.py | 0 .../jedi-vim/jedi/test/test_api/test_api.py | 179 -- .../test_api_classes_follow_definition.py | 62 - .../test/test_api/test_call_signatures.py | 389 ---- .../jedi/test/test_api/test_classes.py | 354 ---- .../test/test_api/test_completion_context.py | 9 - .../jedi/test/test_api/test_defined_names.py | 92 - .../jedi/test/test_api/test_full_name.py | 91 - .../jedi/test/test_api/test_interpreter.py | 160 -- .../jedi/test/test_api/test_unicode.py | 66 - .../jedi/test/test_api/test_usages.py | 6 - .../bundle/jedi-vim/jedi/test/test_cache.py | 109 -- .../bundle/jedi-vim/jedi/test/test_debug.py | 9 - .../jedi/test/test_evaluate/__init__.py | 0 .../absolute_import/local_module.py | 14 - .../test_evaluate/absolute_import/unittest.py | 14 - .../test_evaluate/buildout_project/bin/app | 12 - .../buildout_project/bin/binary_file | 1 - .../buildout_project/bin/empty_file | 0 .../buildout_project/buildout.cfg | 0 .../src/proj_name/module_name.py | 0 .../flask-site-packages/flask/__init__.py | 1 - .../flask-site-packages/flask/ext/__init__.py | 1 - .../flask-site-packages/flask_baz/__init__.py | 1 - .../flask-site-packages/flask_foo.py | 2 - .../flask-site-packages/flaskext/__init__.py | 0 .../flask-site-packages/flaskext/bar.py | 2 - .../flaskext/moo/__init__.py | 1 - .../__init__.cpython-34m.so | Bin 16493 -> 0 bytes .../init_extension_module/module.c | 15 - .../init_extension_module/setup.py | 10 - .../namespace_package/ns1/pkg/__init__.py | 9 - .../namespace_package/ns1/pkg/ns1_file.py | 1 - .../ns1/pkg/ns1_folder/__init__.py | 1 - .../namespace_package/ns2/pkg/ns2_file.py | 1 - .../ns2/pkg/ns2_folder/__init__.py | 1 - .../ns2/pkg/ns2_folder/nested/__init__.py | 1 - .../nested_namespaces/__init__.py | 0 .../nested_namespaces/namespace/__init__.py | 4 - .../namespace/pkg/__init__.py | 1 - .../test_evaluate/not_in_sys_path/__init__.py | 0 .../not_in_sys_path/not_in_sys_path.py | 1 - .../not_in_sys_path_package/__init__.py | 1 - .../not_in_sys_path_package/module.py | 1 - .../not_in_sys_path/pkg/__init__.py | 0 .../not_in_sys_path/pkg/module.py | 7 - .../dir-from-foo-pth/__init__.py | 2 - .../python2.7/site-packages/egg_link.egg-link | 1 - .../lib/python2.7/site-packages/foo.pth | 1 - .../python2.7/site-packages/import_smth.pth | 1 - .../python2.7/site-packages/relative.egg-link | 1 - .../lib/python2.7/site-packages/smth.py | 6 - .../dir-from-foo-pth/__init__.py | 2 - .../python3.4/site-packages/egg_link.egg-link | 1 - .../lib/python3.4/site-packages/foo.pth | 1 - .../python3.4/site-packages/import_smth.pth | 1 - .../python3.4/site-packages/relative.egg-link | 1 - .../lib/python3.4/site-packages/smth.py | 6 - .../test_evaluate/test_absolute_import.py | 40 - .../test/test_evaluate/test_annotations.py | 60 - .../test_evaluate/test_buildout_detection.py | 89 - .../jedi/test/test_evaluate/test_compiled.py | 86 - .../jedi/test/test_evaluate/test_docstring.py | 152 -- .../jedi/test/test_evaluate/test_extension.py | 57 - .../jedi/test/test_evaluate/test_helpers.py | 16 - .../jedi/test/test_evaluate/test_imports.py | 129 -- .../test_evaluate/test_namespace_package.py | 65 - .../test/test_evaluate/test_precedence.py | 20 - .../jedi/test/test_evaluate/test_pyc.py | 64 - .../test/test_evaluate/test_representation.py | 36 - .../jedi/test/test_evaluate/test_sys_path.py | 59 - .../test_evaluate/zipped_imports/not_pkg.zip | Bin 204 -> 0 bytes .../test/test_evaluate/zipped_imports/pkg.zip | Bin 504 -> 0 bytes .../jedi-vim/jedi/test/test_integration.py | 60 - .../jedi/test/test_integration_analysis.py | 12 - .../jedi/test/test_integration_import.py | 83 - .../jedi/test/test_integration_keyword.py | 29 - .../jedi/test/test_integration_stdlib.py | 45 - .../jedi-vim/jedi/test/test_jedi_system.py | 61 - .../jedi-vim/jedi/test/test_new_parser.py | 13 - .../jedi/test/test_parser/__init__.py | 0 .../jedi/test/test_parser/test_fast_parser.py | 496 ----- .../jedi/test/test_parser/test_get_code.py | 107 -- .../test/test_parser/test_param_splitting.py | 34 - .../jedi/test/test_parser/test_parser.py | 238 --- .../jedi/test/test_parser/test_parser_tree.py | 69 - .../jedi/test/test_parser/test_pgen2.py | 279 --- .../jedi/test/test_parser/test_tokenize.py | 152 -- .../test/test_parser/test_user_context.py | 6 - .../jedi-vim/jedi/test/test_regression.py | 206 -- .../bundle/jedi-vim/jedi/test/test_speed.py | 53 - .../bundle/jedi-vim/jedi/test/test_utils.py | 111 -- .../bundle/jedi-vim/jedi/test/test_windows.py | 8 - vim-plugins/bundle/jedi-vim/jedi/tox.ini | 47 - vim-plugins/bundle/jedi-vim/jedi_vim.py | 723 ------- vim-plugins/bundle/jedi-vim/plugin/jedi.vim | 38 - vim-plugins/bundle/jedi-vim/pytest.ini | 3 - .../bundle/jedi-vim/test/completions.vim | 63 - .../jedi-vim/test/completions_disabled.vim | 21 - .../bundle/jedi-vim/test/documentation.vim | 31 - vim-plugins/bundle/jedi-vim/test/goto.vim | 217 --- vim-plugins/bundle/jedi-vim/test/pyimport.vim | 32 - .../bundle/jedi-vim/test/signatures.vim | 130 -- vim-plugins/bundle/jedi-vim/test/utils.vim | 11 - .../bundle/jedi-vim/test_integration.py | 2 - .../pymode/__pycache__/rope.cpython-36.pyc | Bin 0 -> 24837 bytes .../rope/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 837 bytes .../base/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 322 bytes .../base/__pycache__/arguments.cpython-36.pyc | Bin 0 -> 3981 bytes .../rope/base/__pycache__/ast.cpython-36.pyc | Bin 0 -> 1960 bytes .../base/__pycache__/astutils.cpython-36.pyc | Bin 0 -> 2505 bytes .../base/__pycache__/builtins.cpython-36.pyc | Bin 0 -> 25905 bytes .../base/__pycache__/change.cpython-36.pyc | Bin 0 -> 16091 bytes .../__pycache__/codeanalyze.cpython-36.pyc | Bin 0 -> 11207 bytes .../__pycache__/default_config.cpython-36.pyc | Bin 0 -> 1139 bytes .../base/__pycache__/evaluate.cpython-36.pyc | Bin 0 -> 11603 bytes .../__pycache__/exceptions.cpython-36.pyc | Bin 0 -> 2803 bytes .../__pycache__/fscommands.cpython-36.pyc | Bin 0 -> 9744 bytes .../base/__pycache__/history.cpython-36.pyc | Bin 0 -> 8338 bytes .../base/__pycache__/libutils.cpython-36.pyc | Bin 0 -> 3787 bytes .../base/__pycache__/prefs.cpython-36.pyc | Bin 0 -> 1678 bytes .../base/__pycache__/project.cpython-36.pyc | Bin 0 -> 17219 bytes .../base/__pycache__/pycore.cpython-36.pyc | Bin 0 -> 13381 bytes .../base/__pycache__/pynames.cpython-36.pyc | Bin 0 -> 7705 bytes .../__pycache__/pynamesdef.cpython-36.pyc | Bin 0 -> 2573 bytes .../base/__pycache__/pyobjects.cpython-36.pyc | Bin 0 -> 12035 bytes .../__pycache__/pyobjectsdef.cpython-36.pyc | Bin 0 -> 20322 bytes .../base/__pycache__/pyscopes.cpython-36.pyc | Bin 0 -> 12222 bytes .../resourceobserver.cpython-36.pyc | Bin 0 -> 10138 bytes .../base/__pycache__/resources.cpython-36.pyc | Bin 0 -> 9485 bytes .../base/__pycache__/simplify.cpython-36.pyc | Bin 0 -> 1750 bytes .../base/__pycache__/stdmods.cpython-36.pyc | Bin 0 -> 1760 bytes .../__pycache__/taskhandle.cpython-36.pyc | Bin 0 -> 5085 bytes .../base/__pycache__/worder.cpython-36.pyc | Bin 0 -> 18355 bytes .../oi/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 1848 bytes .../base/oi/__pycache__/doa.cpython-36.pyc | Bin 0 -> 5608 bytes .../oi/__pycache__/docstrings.cpython-36.pyc | Bin 0 -> 6654 bytes .../oi/__pycache__/memorydb.cpython-36.pyc | Bin 0 -> 5288 bytes .../oi/__pycache__/objectdb.cpython-36.pyc | Bin 0 -> 7178 bytes .../oi/__pycache__/objectinfo.cpython-36.pyc | Bin 0 -> 9100 bytes .../base/oi/__pycache__/soa.cpython-36.pyc | Bin 0 -> 5049 bytes .../base/oi/__pycache__/soi.cpython-36.pyc | Bin 0 -> 5967 bytes .../oi/__pycache__/transform.cpython-36.pyc | Bin 0 -> 12117 bytes .../utils/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 3196 bytes .../__pycache__/datastructures.cpython-36.pyc | Bin 0 -> 2553 bytes .../utils/__pycache__/pycompat.cpython-36.pyc | Bin 0 -> 1248 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 330 bytes .../__pycache__/autoimport.cpython-36.pyc | Bin 0 -> 7362 bytes .../__pycache__/codeassist.cpython-36.pyc | Bin 0 -> 23230 bytes .../contrib/__pycache__/findit.cpython-36.pyc | Bin 0 -> 4184 bytes .../__pycache__/fixsyntax.cpython-36.pyc | Bin 0 -> 6162 bytes .../__pycache__/generate.cpython-36.pyc | Bin 0 -> 13775 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 2248 bytes .../change_signature.cpython-36.pyc | Bin 0 -> 12975 bytes .../__pycache__/extract.cpython-36.pyc | Bin 0 -> 27661 bytes .../__pycache__/functionutils.cpython-36.pyc | Bin 0 -> 7169 bytes .../__pycache__/inline.cpython-36.pyc | Bin 0 -> 20321 bytes .../refactor/__pycache__/move.cpython-36.pyc | Bin 0 -> 24078 bytes .../__pycache__/occurrences.cpython-36.pyc | Bin 0 -> 14164 bytes .../__pycache__/patchedast.cpython-36.pyc | Bin 0 -> 26312 bytes .../__pycache__/rename.cpython-36.pyc | Bin 0 -> 7933 bytes .../__pycache__/restructure.cpython-36.pyc | Bin 0 -> 10434 bytes .../__pycache__/similarfinder.cpython-36.pyc | Bin 0 -> 13202 bytes .../__pycache__/sourceutils.cpython-36.pyc | Bin 0 -> 2678 bytes .../__pycache__/suites.cpython-36.pyc | Bin 0 -> 5228 bytes .../__pycache__/topackage.cpython-36.pyc | Bin 0 -> 1467 bytes .../__pycache__/usefunction.cpython-36.pyc | Bin 0 -> 6642 bytes .../__pycache__/wildcards.cpython-36.pyc | Bin 0 -> 6474 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 9920 bytes .../__pycache__/actions.cpython-36.pyc | Bin 0 -> 11994 bytes .../__pycache__/importinfo.cpython-36.pyc | Bin 0 -> 7686 bytes .../__pycache__/module_imports.cpython-36.pyc | Bin 0 -> 17057 bytes .../vim-lion/README.md | 0 .../vim-lion/doc/lion.txt | 0 .../vim-lion/doc/tags | 0 .../vim-lion/plugin/lion.vim | 0 471 files changed, 14 insertions(+), 34403 deletions(-) delete mode 100644 vim-plugins/bundle/jedi-vim/.jedi_vim.py.un~ delete mode 100644 vim-plugins/bundle/jedi-vim/.travis.yml delete mode 100644 vim-plugins/bundle/jedi-vim/AUTHORS.txt delete mode 100644 vim-plugins/bundle/jedi-vim/CONTRIBUTING.md delete mode 100644 vim-plugins/bundle/jedi-vim/LICENSE.txt delete mode 100644 vim-plugins/bundle/jedi-vim/Makefile delete mode 100644 vim-plugins/bundle/jedi-vim/README.rst delete mode 100644 vim-plugins/bundle/jedi-vim/__pycache__/jedi_vim.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/__pycache__/jedi_vim.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/after/ftplugin/python/jedi.vim delete mode 100644 vim-plugins/bundle/jedi-vim/after/syntax/python.vim delete mode 100644 vim-plugins/bundle/jedi-vim/autoload/.jedi.vim.un~ delete mode 100644 vim-plugins/bundle/jedi-vim/autoload/health/jedi.vim delete mode 100644 vim-plugins/bundle/jedi-vim/autoload/jedi.vim delete mode 100644 vim-plugins/bundle/jedi-vim/conftest.py delete mode 100644 vim-plugins/bundle/jedi-vim/doc/jedi-vim.txt delete mode 100644 vim-plugins/bundle/jedi-vim/doc/tags delete mode 100644 vim-plugins/bundle/jedi-vim/ftplugin/python/jedi.vim delete mode 100644 vim-plugins/bundle/jedi-vim/initialize.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/.coveragerc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/.travis.yml delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/AUTHORS.txt delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/CHANGELOG.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/CONTRIBUTING.md delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/LICENSE.txt delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/MANIFEST.in delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/README.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/conftest.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/Makefile delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_screenshots/screenshot_complete.png delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_screenshots/screenshot_function.png delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_screenshots/screenshot_pydoc.png delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_static/logo-src.txt delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_static/logo.png delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_templates/ghbuttons.html delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_templates/sidebarlogo.html delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/LICENSE delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/layout.html delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/relations.html delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/static/flasky.css_t delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/static/small_flask.css delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/theme.conf delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask_theme_support.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/conf.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/docs/development.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/docs/features.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/docs/installation.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/docs/plugin-api-classes.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/docs/plugin-api.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/docs/settings.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/docs/static_analsysis.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/docs/testing.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/docs/usage.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/global.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/docs/index.rst delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__main__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/__init__.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/__init__.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/_compatibility.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/_compatibility.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/cache.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/cache.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/common.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/common.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/debug.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/debug.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/settings.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/settings.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/utils.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/utils.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/_compatibility.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/__init__.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/__init__.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/classes.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/classes.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/completion.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/completion.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/helpers.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/helpers.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/interpreter.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/interpreter.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/keywords.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/keywords.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/usages.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/usages.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/classes.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/completion.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/helpers.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/interpreter.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/keywords.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/replstartup.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/api/usages.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/cache.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/common.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/debug.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/.sys_path.py.un~ delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/__init__.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/__init__.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/analysis.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/analysis.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/cache.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/cache.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/docstrings.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/docstrings.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/dynamic.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/dynamic.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/finder.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/finder.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/flow_analysis.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/flow_analysis.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/helpers.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/helpers.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/imports.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/imports.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/iterable.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/iterable.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/param.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/param.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/pep0484.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/pep0484.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/precedence.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/precedence.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/recursion.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/recursion.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/representation.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/representation.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/site.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/site.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/stdlib.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/stdlib.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/sys_path.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/sys_path.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/analysis.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/cache.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/__init__.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/__init__.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/fake.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/fake.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/mixed.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/mixed.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_functools.pym delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_sqlite3.pym delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_sre.pym delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_weakref.pym delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/builtins.pym delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/datetime.pym delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/io.pym delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/posix.pym delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/mixed.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/docstrings.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/dynamic.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/finder.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/flow_analysis.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/helpers.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/imports.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/iterable.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/jedi_typing.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/param.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/pep0484.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/precedence.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/recursion.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/representation.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/site.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/stdlib.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/sys_path.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/__init__.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/__init__.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/fast.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/fast.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/token.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/token.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/tokenize.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/tokenize.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/tree.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/tree.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/utils.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/utils.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/fast.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar2.7.txt delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar3.4.txt delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar3.5.txt delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/__init__.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/__init__.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/grammar.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/grammar.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/parse.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/parse.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/pgen.cpython-35.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/pgen.cpython-36.pyc delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/grammar.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/parse.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/pgen.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/token.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/tokenize.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/tree.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/parser/utils.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/refactoring.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/settings.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/jedi/utils.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/pytest.ini delete mode 100755 vim-plugins/bundle/jedi-vim/jedi/scripts/memory_check.py delete mode 100755 vim-plugins/bundle/jedi-vim/jedi/scripts/profile.py delete mode 100755 vim-plugins/bundle/jedi-vim/jedi/scripts/wx_check.py delete mode 100755 vim-plugins/bundle/jedi-vim/jedi/setup.py delete mode 100755 vim-plugins/bundle/jedi-vim/jedi/sith.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/blabla_test_documentation.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/arrays.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/basic.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/classes.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/completion.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/complex.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/comprehensions.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/context.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/decorators.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/definition.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/descriptors.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/docstring.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/dynamic_arrays.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/dynamic_params.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/flow_analysis.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/functions.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/generators.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/goto.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/flow_import.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/invisible_pkg.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/mod1.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/mod2.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/pkg/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/pkg/mod1.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/random.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/recurse_class1.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/recurse_class2.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/rename1.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/rename2.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/imports.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/invalid.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/isinstance.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/keywords.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/lambdas.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/named_param.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/on_import.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/ordering.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/parser.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484_comments.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484_typing.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/precedence.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/recursion.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/stdlib.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/sys_path.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/PyQt4_.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/django_.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/jedi_.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/psycopg2_.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/pylab_.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/types.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/completion/usages.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/conftest.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/helpers.py delete mode 100755 vim-plugins/bundle/jedi-vim/jedi/test/refactor.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/refactor/extract.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/refactor/inline.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/refactor/rename.py delete mode 100755 vim-plugins/bundle/jedi-vim/jedi/test/run.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/speed/precedence.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/arguments.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/attribute_error.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/attribute_warnings.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/branches.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/builtins.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/class_simple.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/comprehensions.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/descriptors.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/generators.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/a.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/b.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/imports.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/iterable.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/keywords.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/operations.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/python2.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/star_arguments.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/try_except.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_api.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_api_classes_follow_definition.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_call_signatures.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_classes.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_completion_context.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_defined_names.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_full_name.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_interpreter.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_unicode.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_usages.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_cache.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_debug.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/absolute_import/local_module.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/absolute_import/unittest.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/app delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/binary_file delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/empty_file delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/buildout.cfg delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/src/proj_name/module_name.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask/ext/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask_baz/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask_foo.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/bar.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/moo/__init__.py delete mode 100755 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/init_extension_module/__init__.cpython-34m.so delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/init_extension_module/module.c delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/init_extension_module/setup.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/namespace_package/ns1/pkg/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/namespace_package/ns1/pkg/ns1_file.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/namespace_package/ns1/pkg/ns1_folder/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/namespace_package/ns2/pkg/ns2_file.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/namespace_package/ns2/pkg/ns2_folder/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/namespace_package/ns2/pkg/ns2_folder/nested/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/nested_namespaces/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/nested_namespaces/namespace/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/nested_namespaces/namespace/pkg/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/not_in_sys_path/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/not_in_sys_path/not_in_sys_path.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/not_in_sys_path/not_in_sys_path_package/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/not_in_sys_path/not_in_sys_path_package/module.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/not_in_sys_path/pkg/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/not_in_sys_path/pkg/module.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv27/lib/python2.7/site-packages/dir-from-foo-pth/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv27/lib/python2.7/site-packages/egg_link.egg-link delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv27/lib/python2.7/site-packages/foo.pth delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv27/lib/python2.7/site-packages/import_smth.pth delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv27/lib/python2.7/site-packages/relative.egg-link delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv27/lib/python2.7/site-packages/smth.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv34/lib/python3.4/site-packages/dir-from-foo-pth/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv34/lib/python3.4/site-packages/egg_link.egg-link delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv34/lib/python3.4/site-packages/foo.pth delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv34/lib/python3.4/site-packages/import_smth.pth delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv34/lib/python3.4/site-packages/relative.egg-link delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/sample_venvs/venv34/lib/python3.4/site-packages/smth.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_absolute_import.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_annotations.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_buildout_detection.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_compiled.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_docstring.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_extension.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_helpers.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_imports.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_namespace_package.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_precedence.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_pyc.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_representation.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_sys_path.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/zipped_imports/not_pkg.zip delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/zipped_imports/pkg.zip delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_integration.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_integration_analysis.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_integration_import.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_integration_keyword.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_integration_stdlib.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_jedi_system.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_new_parser.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_parser/__init__.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_fast_parser.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_get_code.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_param_splitting.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_parser.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_parser_tree.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_pgen2.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_tokenize.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_user_context.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_regression.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_speed.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_utils.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/test/test_windows.py delete mode 100644 vim-plugins/bundle/jedi-vim/jedi/tox.ini delete mode 100644 vim-plugins/bundle/jedi-vim/jedi_vim.py delete mode 100644 vim-plugins/bundle/jedi-vim/plugin/jedi.vim delete mode 100644 vim-plugins/bundle/jedi-vim/pytest.ini delete mode 100644 vim-plugins/bundle/jedi-vim/test/completions.vim delete mode 100644 vim-plugins/bundle/jedi-vim/test/completions_disabled.vim delete mode 100644 vim-plugins/bundle/jedi-vim/test/documentation.vim delete mode 100644 vim-plugins/bundle/jedi-vim/test/goto.vim delete mode 100644 vim-plugins/bundle/jedi-vim/test/pyimport.vim delete mode 100644 vim-plugins/bundle/jedi-vim/test/signatures.vim delete mode 100644 vim-plugins/bundle/jedi-vim/test/utils.vim delete mode 100644 vim-plugins/bundle/jedi-vim/test_integration.py create mode 100644 vim-plugins/bundle/python-mode/pymode/__pycache__/rope.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/__pycache__/__init__.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/__init__.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/arguments.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/ast.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/astutils.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/builtins.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/change.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/codeanalyze.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/default_config.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/evaluate.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/exceptions.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/fscommands.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/history.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/libutils.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/prefs.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/project.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pycore.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pynames.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pynamesdef.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pyobjects.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pyobjectsdef.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pyscopes.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/resourceobserver.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/resources.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/simplify.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/stdmods.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/taskhandle.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/worder.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/__init__.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/doa.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/docstrings.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/memorydb.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/objectdb.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/objectinfo.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/soa.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/soi.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/transform.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/utils/__pycache__/__init__.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/utils/__pycache__/datastructures.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/base/utils/__pycache__/pycompat.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/__init__.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/autoimport.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/codeassist.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/findit.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/fixsyntax.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/generate.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/__init__.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/change_signature.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/extract.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/functionutils.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/inline.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/move.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/occurrences.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/patchedast.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/rename.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/restructure.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/similarfinder.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/sourceutils.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/suites.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/topackage.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/usefunction.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/wildcards.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/__init__.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/actions.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/importinfo.cpython-36.pyc create mode 100644 vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/module_imports.cpython-36.pyc rename vim-plugins/{bundle => temp-unloaded-plugins}/vim-lion/README.md (100%) rename vim-plugins/{bundle => temp-unloaded-plugins}/vim-lion/doc/lion.txt (100%) rename vim-plugins/{bundle => temp-unloaded-plugins}/vim-lion/doc/tags (100%) rename vim-plugins/{bundle => temp-unloaded-plugins}/vim-lion/plugin/lion.vim (100%) diff --git a/.vimrc b/.vimrc index 861b135..0575edc 100644 --- a/.vimrc +++ b/.vimrc @@ -2,7 +2,7 @@ " autocmd! VimEnter * source ~/.vimrc " Load rename plugin -so ~/.vim/Rename.vim +" so ~/.vim/Rename.vim " let g:EclimCompletionMethod = 'omnifunc' " Java Autocomplete @@ -182,17 +182,13 @@ vnoremap :b# " Quicksave command -noremap :update -vnoremap :update -inoremap :update +" noremap :update +" vnoremap :update +" inoremap :update " Execute current file with python noremap e :!python % -" Quick quit command -noremap E :qa! " Quit all windows - - " bind Ctrl+ keys to move around the windows, instead of using " Ctrl+w + " Every unnecessary keystroke that can be saved is good for your health :) @@ -201,7 +197,6 @@ map k map l map h - " easier moving between tabs map m :bn map n :bp @@ -213,21 +208,17 @@ map t :enew " map sort function to a key vnoremap s :sort - " easier moving of code blocks " Try to go into visual mode (v), thenselect several lines of code here and " then press ``>`` several times. vnoremap < >gv " better indentation - - " Show whitespace " MUST be inserted BEFORE the colorscheme command autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red au InsertLeave * match ExtraWhitespace /\s\+$/ - " Color scheme " mkdir -p ~/.vim/colors && cd ~/.vim/colors " wget -O wombat256mod.vim @@ -252,11 +243,11 @@ syntax on " E128 - visual continuation " W391 - blank line at end of file let g:syntastic_python_flake8_args='--ignore=W391, E501, E702' -let g:syntastic_python_flake8_show_quickfix=0 +let g:syntastic_python_flake8_show_quickfix=1 let g:pymode_lint_ignore="E501,W601,W391,W0401,E702" let g:pymode_rope_lookup_project = 0 -let g:pymode_lint_cwindow = 0 -let g:pymode_rope = 0 +let g:pymode_lint_cwindow = 1 +let g:pymode_rope = 1 let g:pymode_python="python3" let g:pymode_lint_checkers = ['pep8'] let g:pymode_breakpoint_cmd = 'import ipdb; ipdb.set_trace() # XXX BREAKPOINT' @@ -274,17 +265,10 @@ set fo-=t " don't automatically wrap text when typing set colorcolumn=120 highlight ColorColumn ctermbg=233 - -" easier formatting of paragraphs -vmap Q gq -nmap Q gqap - - " Useful settings set history=700 set undolevels=700 - " Real programmers don't use TABs but spaces set tabstop=4 set softtabstop=4 @@ -292,14 +276,12 @@ set shiftwidth=4 set shiftround set expandtab - " Make search case insensitive set hlsearch set incsearch set ignorecase set smartcase - " Disable stupid backup and swap files - they trigger too many events " for file system watchers "set nobackup @@ -364,12 +346,12 @@ let g:SuperTabDefaultCompletionType = "" " Settings for jedi-vim " cd ~/.vim/bundle " git clone git://github.com/davidhalter/jedi-vim.git -let g:jedi#usages_command = "z" -let g:jedi#popup_on_dot = 0 -let g:jedi#popup_select_first = 0 -let g:jedi#force_py_version = 3 +" let g:jedi#usages_command = "z" +" let g:jedi#popup_on_dot = 0 +" let g:jedi#popup_select_first = 0 +" let g:jedi#force_py_version = 3 " let g:jedi#completions_command = '.' -map b Oimport ipdb; ipdb.set_trace() # BREAKPOINT +" map b Oimport ipdb; ipdb.set_trace() # BREAKPOINT " Map C-a to select entire file "nnoremap ggVG @@ -381,11 +363,12 @@ noremap noremap " Do splits with Leader-\ and Leader-- +" Close splits with Leader-Shift-\ (leader-|) " nnoremap :vsp " nnoremap :sp noremap \ :vsp noremap - :sp - +noremap \| q " NERDTree settings " Open NERDTree by default @@ -451,14 +434,12 @@ endfunction " map visual mode keycombo 'co' to this function vmap co :call CommentLines() - " Encryption algo (vim -x file) set cm=blowfish2 " Improve perfomance with long lines set synmaxcol=200 - set autoread " Autosave diff --git a/vim-plugins/bundle/jedi-vim/.jedi_vim.py.un~ b/vim-plugins/bundle/jedi-vim/.jedi_vim.py.un~ deleted file mode 100644 index 5da8bd2835c2772f9c7e67918d8752b052f94e0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 976 zcmWH`%$*;a=aT=FfvH(dLQtY&?-_=VTVzs84^5H%Q_*UE?{CSIS97h*E9a&&Ffd(Z zU|`@-fC3;p1H=bnMj&PaVh{k)Fw79~=j$65kSrrZ`~{FK5Wp0I*dQsO!3^vm&VL{P zi-0&o4S;+y=m9V~UV)>7f#ItJ(6ykT&jiNEWsu8F8^KY8?h#OQf#MkqMxzK8611X$ dQS=&`V^E?9l=VPS1J8aavR6RPF>QRl3IJ)bH&g%s diff --git a/vim-plugins/bundle/jedi-vim/.travis.yml b/vim-plugins/bundle/jedi-vim/.travis.yml deleted file mode 100644 index 8f407fc..0000000 --- a/vim-plugins/bundle/jedi-vim/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -sudo: false -language: python -env: - matrix: - - ENV=test - - ENV=check -matrix: - allow_failures: - # Needs to be fixed! - - env: ENV=test -install: - - | - if [ "$ENV" = "test" ]; then - pip install pytest - fi -script: - - vim --version - - make "$ENV" diff --git a/vim-plugins/bundle/jedi-vim/AUTHORS.txt b/vim-plugins/bundle/jedi-vim/AUTHORS.txt deleted file mode 100644 index 57c581e..0000000 --- a/vim-plugins/bundle/jedi-vim/AUTHORS.txt +++ /dev/null @@ -1,55 +0,0 @@ -Main Authors -============ - -David Halter (@davidhalter) - - -Contributors (in order of contributions) -======================================== - -Patrice Peterson (@runiq) -tek (@tek) -heavenshell (@heavenshell) -Danilo Bargen (@dbrgn) -mattn (@mattn) -Enrico Batista da Luz (@ricobl) -coot (@coot) -Artur Dryomov (@ming13) -andviro (@andviro) -Jean-Louis Fuchs (@ganwell) -Mathieu Comandon (@strycore) -Nick Hurley (@todesschaf) -gpoulin (@gpoulin) -Akinori Hattori (@hattya) -Luper Rouch (@flupke) -Matthew Moses (@mlmoses) -Tyler Wymer (@twymer) -Artem Nezvigin (@artnez) -rogererens (@rogererens) -Emily Strickland (@emilyst) -Tin Tvrtković (@Tinche) -Zekeriya Koc (@zekzekus) -ethinx (@ethinx) -Wouter Overmeire (@lodagro) -Stephen J. Fuhry (@fuhrysteve) -Sheng Yun (@ShengYun) -Yann Thomas-Gérard (@inside) -Colin Su (@littleq0903) -Arthur Jaron (@eyetracker) -Justin M. Keyes (@justinmk) -nagev (@np1) -Chris Lasher (@gotgenes) -Doan Thanh Nam (@tndoan) -Markus Koller (@toupeira) -Justin Cheevers @justincheevers -Talha Ahmed (@talha81) -Matthew Tylee Atkinson (@matatk) -Pedro Ferrari (@petobens) -Daniel Hahler (@blueyed) -Dave Honneffer (@pearofducks) -Bagrat Aznauryan (@n9code) -Tomoyuki Kashiro (@kashiro) -Tommy Allen (@tweekmonster) -Mingliang (@Aulddays) - -@something are github user names. diff --git a/vim-plugins/bundle/jedi-vim/CONTRIBUTING.md b/vim-plugins/bundle/jedi-vim/CONTRIBUTING.md deleted file mode 100644 index 285eb30..0000000 --- a/vim-plugins/bundle/jedi-vim/CONTRIBUTING.md +++ /dev/null @@ -1,12 +0,0 @@ -# We <3 pull requests! - - 1. Fork the Repo on github. - 2. Add yourself to AUTHORS.txt - 3. Add a test if possible. - 4. Push to your fork and submit a pull request. - -Please use PEP8 as a Python code style. For VIM, just try to style your -code similar to the jedi-vim code that is already there. - -# Bug reports -Please include the output of `:version` and `:JediDebugInfo`. diff --git a/vim-plugins/bundle/jedi-vim/LICENSE.txt b/vim-plugins/bundle/jedi-vim/LICENSE.txt deleted file mode 100644 index 12f223f..0000000 --- a/vim-plugins/bundle/jedi-vim/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) <2013> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vim-plugins/bundle/jedi-vim/Makefile b/vim-plugins/bundle/jedi-vim/Makefile deleted file mode 100644 index 22712ef..0000000 --- a/vim-plugins/bundle/jedi-vim/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -test: - py.test - -build: - mkdir $@ -build/vint: | build - virtualenv $@ - $@/bin/pip install vim-vint -check: LINT_FILES:=after autoload ftplugin plugin -check: build/vint - build/vint/bin/vint $(LINT_FILES) - -clean: - rm -rf .cache build - -.PHONY: test check clean diff --git a/vim-plugins/bundle/jedi-vim/README.rst b/vim-plugins/bundle/jedi-vim/README.rst deleted file mode 100644 index 36002cf..0000000 --- a/vim-plugins/bundle/jedi-vim/README.rst +++ /dev/null @@ -1,246 +0,0 @@ -################################################# -jedi-vim - awesome Python autocompletion with VIM -################################################# - -.. image:: https://travis-ci.org/davidhalter/jedi-vim.png?branch=master - :target: https://travis-ci.org/davidhalter/jedi-vim - :alt: Travis-CI build status - -jedi-vim is a VIM binding to the autocompletion library -`Jedi `_. - -Here are some pictures: - -.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_complete.png - -Completion for almost anything (Ctrl+Space). - -.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_function.png - -Display of function/class bodies, docstrings. - -.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_pydoc.png - -Documentation (Pydoc) support (with highlighting, Shift+k). - -There is also support for goto and renaming. - - -Get the latest from `github `_. - -Documentation -============= - -Documentation is available in your vim: ``:help jedi-vim``. You can also look -it up `on github `_. - -You can read the Jedi library documentation `here `_. - -If you want to report issues, just use the github issue tracker. In case of -questions about the software, please use `stackoverflow -`_ and tag your question with ``jedi-vim``. - - -Contributing -============ - -We love Pull Requests! Read the instructions in ``CONTRIBUTING.md``. - - -Features -======== - -The Jedi library understands most of Python's core features. From decorators to -generators, there is broad support. - -Apart from that, jedi-vim supports the following commands - -- Completion ```` -- Goto assignments ``g`` (typical goto function) -- Goto definitions ``d`` (follow identifier as far as possible, - includes imports and statements) -- Show Documentation/Pydoc ``K`` (shows a popup with assignments) -- Renaming ``r`` -- Usages ``n`` (shows all the usages of a name) -- Open module, e.g. ``:Pyimport os`` (opens the ``os`` module) - - -Installation -============ - -Requirements ------------- -You need a VIM version that was compiled with Python 2.6 or later -(``+python`` or ``+python3``), which is typical for most distributions on -Linux. You can check this from within VIM using -``:python3 import sys; print(sys.version)`` (use ``:python`` for Python 2). - -Manual installation -------------------- - -You might want to use `pathogen `_ or -`Vundle `_ to install jedi-vim. - -The first thing you need after that is an up-to-date version of Jedi. You can -either install it via ``pip install jedi`` or with -``git submodule update --init`` in your jedi-vim repository. - -Example installation command using Pathogen: - -.. code-block:: sh - - cd ~/.vim/bundle/ && git clone --recursive https://github.com/davidhalter/jedi-vim.git - - -Installation with your distribution ------------------------------------ - -On Arch Linux, you can also install jedi-vim from official repositories as -`vim-jedi `__. -It is also available on -`Debian (≥8) `__ and -`Ubuntu (≥14.04) `__ as -vim-python-jedi. -On Fedora Linux, it is available as -`vim-jedi `__. - -Please note that this version might be quite old compared to using jedi-vim -from Git. - -Caveats -------- - -Note that the `python-mode `_ VIM plugin seems -to conflict with jedi-vim, therefore you should disable it before enabling -jedi-vim. - -To enjoy the full features of jedi-vim, you should have VIM >= 7.3, compiled with -``+conceal`` (which is not the case on some platforms, including OS X). If your VIM -does not meet these requirements, the parameter recommendation list may not appear -when you type an open bracket after a function name. Please read -`the documentation `_ -for details. - - -Settings -======== - -Jedi is by default automatically initialized. If you don't want that I suggest -you disable the auto-initialization in your ``.vimrc``: - -.. code-block:: vim - - let g:jedi#auto_initialization = 0 - -There are also some VIM options (like ``completeopt`` and key defaults) which -are automatically initialized, but you can skip this: - -.. code-block:: vim - - let g:jedi#auto_vim_configuration = 0 - - -You can make jedi-vim use tabs when going to a definition etc: - -.. code-block:: vim - - let g:jedi#use_tabs_not_buffers = 1 - -If you are a person who likes to use VIM-splits, you might want to put this in your ``.vimrc``: - -.. code-block:: vim - - let g:jedi#use_splits_not_buffers = "left" - -This options could be "left", "right", "top", "bottom" or "winwidth". It will decide the direction where the split open. - -Jedi automatically starts the completion, if you type a dot, e.g. ``str.``, if -you don't want this: - -.. code-block:: vim - - let g:jedi#popup_on_dot = 0 - -Jedi selects the first line of the completion menu: for a better typing-flow -and usually saves one keypress. - -.. code-block:: vim - - let g:jedi#popup_select_first = 0 - -Jedi displays function call signatures in insert mode in real-time, highlighting -the current argument. The call signatures can be displayed as a pop-up in the -buffer (set to 1, the default), which has the advantage of being easier to refer -to, or in Vim's command line aligned with the function call (set to 2), which -can improve the integrity of Vim's undo history. - -.. code-block:: vim - - let g:jedi#show_call_signatures = "1" - -Here are a few more defaults for actions, read the docs (``:help jedi-vim``) to -get more information. If you set them to ``""``, they are not assigned. - -.. code-block:: vim - - NOTE: subject to change! - - let g:jedi#goto_command = "d" - let g:jedi#goto_assignments_command = "g" - let g:jedi#goto_definitions_command = "" - let g:jedi#documentation_command = "K" - let g:jedi#usages_command = "n" - let g:jedi#completions_command = "" - let g:jedi#rename_command = "r" - - -Finally, if you don't want completion, but all the other features, use: - -.. code-block:: vim - - let g:jedi#completions_enabled = 0 - -FAQ -=== - -I don't want the docstring window to popup during completion ------------------------------------------------------------- - -This depends on the ``completeopt`` option. Jedi initializes it in its -``ftplugin``. Add the following line to your ``.vimrc`` to disable it: - -.. code-block:: vim - - autocmd FileType python setlocal completeopt-=preview - - -I want to do autocompletion ---------------------------------- - -Don't even think about changing the Jedi command to ````, -use `supertab `_! - - -The completion is waaay too slow! ---------------------------------- - -Completion of complex libraries (like Numpy) should only be slow the first time -you complete it. After that, the results should be cached and very fast. - -If it's still slow, in case you've installed the python-mode VIM plugin, disable -it. It seems to conflict with jedi-vim. See issue `#163 -`__. - - -Testing -======= - -jedi-vim is being tested with a combination of `vspec -`_ and `py.test `_. - -The tests are in the ``test`` subdirectory, you can run them calling:: - - py.test - -The tests are automatically run with `travis -`_. diff --git a/vim-plugins/bundle/jedi-vim/__pycache__/jedi_vim.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/__pycache__/jedi_vim.cpython-35.pyc deleted file mode 100644 index 7f1a3c554c296156eadab2d14713157d23154f3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21300 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 fzs*=LlZKYQ-l_8sTQ?2Yuu9CB@%~4#XTltkj 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 o*' - " In terminals, sometimes equals . - imap - smap - endif - if len(g:jedi#completions_command) - execute 'inoremap '.g:jedi#completions_command.' jedi#complete_string(0)' - " A separate mapping for select mode: deletes and completes. - execute 'snoremap '.g:jedi#completions_command." '\c'.jedi#complete_string(0)" - endif - endif -endif diff --git a/vim-plugins/bundle/jedi-vim/after/syntax/python.vim b/vim-plugins/bundle/jedi-vim/after/syntax/python.vim deleted file mode 100644 index a410b3d..0000000 --- a/vim-plugins/bundle/jedi-vim/after/syntax/python.vim +++ /dev/null @@ -1,32 +0,0 @@ -if !jedi#init_python() - finish -endif - -if g:jedi#show_call_signatures > 0 && has('conceal') - " +conceal is the default for vim >= 7.3 - - let s:e = g:jedi#call_signature_escape - let s:full = s:e.'jedi=.\{-}'.s:e.'.\{-}'.s:e.'jedi'.s:e - let s:ignore = s:e.'jedi.\{-}'.s:e - exe 'syn match jediIgnore "'.s:ignore.'" contained conceal' - setlocal conceallevel=2 - syn match jediFatSymbol "\*_\*" contained conceal - syn match jediFat "\*_\*.\{-}\*_\*" contained contains=jediFatSymbol - syn match jediSpace "\v[ ]+( )@=" contained - exe 'syn match jediFunction "'.s:full.'" keepend extend ' - \ .' contains=jediIgnore,jediFat,jediSpace' - \ .' containedin=pythonComment,pythonString,pythonRawString' - unlet! s:e s:full s:ignore - - hi def link jediIgnore Ignore - hi def link jediFatSymbol Ignore - hi def link jediSpace Normal - - if exists('g:colors_name') - hi def link jediFunction CursorLine - hi def link jediFat TabLine - else - hi jediFunction term=NONE cterm=NONE ctermfg=6 guifg=Black gui=NONE ctermbg=0 guibg=Grey - hi jediFat term=bold,underline cterm=bold,underline gui=bold,underline ctermbg=0 guibg=#555555 - endif -endif diff --git a/vim-plugins/bundle/jedi-vim/autoload/.jedi.vim.un~ b/vim-plugins/bundle/jedi-vim/autoload/.jedi.vim.un~ deleted file mode 100644 index cfcf2964d0a054a414cb737a536193d686287f5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1044 zcmWH`%$*;a=aT=Ff$948t;b@{x%xbBHrkq9Wwq(U?yr?5O^UPU_;abAKH8khz`&Hq zz`&pY139TB3dy-C@u?N5$qKd#>IIc08Tom}>OeJ9fmj}h8G)Dyh(Q2E!!Sd{pAS!2 zAhPinz|shXATCG>W(dQ7AOMR%6%Hv1d'", - \ 'goto_assignments_command': "'g'", - \ 'goto_definitions_command': "''", - \ 'completions_command': "''", - \ 'call_signatures_command': "'n'", - \ 'usages_command': "'n'", - \ 'rename_command': "'r'", - \ 'popup_on_dot': 1, - \ 'documentation_command': "'K'", - \ 'show_call_signatures': 1, - \ 'show_call_signatures_delay': 500, - \ 'call_signature_escape': "'?!?'", - \ 'auto_close_doc': 1, - \ 'max_doc_height': 30, - \ 'popup_select_first': 1, - \ 'quickfix_window_height': 10, - \ 'completions_enabled': 1, - \ 'force_py_version': "'auto'", - \ 'smart_auto_mappings': 1, - \ 'use_tag_stack': 1 -\ } - -for [s:key, s:val] in items(s:deprecations) - if exists('g:jedi#'.s:key) - echom "'g:jedi#".s:key."' is deprecated. Please use 'g:jedi#".s:val."' instead. Sorry for the inconvenience." - exe 'let g:jedi#'.s:val.' = g:jedi#'.s:key - endif -endfor - -for [s:key, s:val] in items(s:default_settings) - if !exists('g:jedi#'.s:key) - exe 'let g:jedi#'.s:key.' = '.s:val - endif -endfor - - -" ------------------------------------------------------------------------ -" Python initialization -" ------------------------------------------------------------------------ -let s:script_path = fnameescape(expand(':p:h:h')) - -function! s:init_python() abort - if g:jedi#force_py_version !=# 'auto' - " Always use the user supplied version. - try - return jedi#force_py_version(g:jedi#force_py_version) - catch - throw 'Could not setup g:jedi#force_py_version: '.v:exception - endtry - endif - - " Handle "auto" version. - if has('nvim') || (has('python') && has('python3')) - " Neovim usually has both python providers. Skipping the `has` check - " avoids starting both of them. - - " Get default python version from interpreter in $PATH. - let s:def_py = system('python -c '.shellescape('import sys; sys.stdout.write(str(sys.version_info[0]))')) - if v:shell_error != 0 || !len(s:def_py) - if !exists('g:jedi#squelch_py_warning') - echohl WarningMsg - echom 'Warning: jedi-vim failed to get Python version from sys.version_info: ' . s:def_py - echom 'Falling back to version 2.' - echohl None - endif - let s:def_py = 2 - elseif &verbose - echom 'jedi-vim: auto-detected Python: '.s:def_py - endif - - " Make sure that the auto-detected version is available in Vim. - if !has('nvim') || has('python'.(s:def_py == 2 ? '' : s:def_py)) - return jedi#force_py_version(s:def_py) - endif - - " Add a warning in case the auto-detected version is not available, - " usually because of a missing neovim module in a VIRTUAL_ENV. - if has('nvim') - echohl WarningMsg - echom 'jedi-vim: the detected Python version ('.s:def_py.')' - \ 'is not functional.' - \ 'Is the "neovim" module installed?' - \ 'While jedi-vim will work, it might not use the' - \ 'expected Python path.' - echohl None - endif - endif - - if has('python') - call jedi#setup_py_version(2) - elseif has('python3') - call jedi#setup_py_version(3) - else - throw 'jedi-vim requires Vim with support for Python 2 or 3.' - endif - return 1 -endfunction - - -function! jedi#reinit_python() abort - unlet! s:_init_python - call jedi#init_python() -endfunction - - -let s:_init_python = -1 -function! jedi#init_python() abort - if s:_init_python == -1 - try - let s:_init_python = s:init_python() - catch - let s:_init_python = 0 - if !exists('g:jedi#squelch_py_warning') - echoerr 'Error: jedi-vim failed to initialize Python: ' - \ .v:exception.' (in '.v:throwpoint.')' - endif - endtry - endif - return s:_init_python -endfunction - - -let s:python_version = 'null' -function! jedi#setup_py_version(py_version) abort - if a:py_version == 2 - let cmd_init = 'pyfile' - let cmd_exec = 'python' - let s:python_version = 2 - elseif a:py_version == 3 - let cmd_init = 'py3file' - let cmd_exec = 'python3' - let s:python_version = 3 - else - throw 'jedi#setup_py_version: invalid py_version: '.a:py_version - endif - - try - execute cmd_init.' '.s:script_path.'/initialize.py' - catch - throw 'jedi#setup_py_version: '.v:exception - endtry - execute 'command! -nargs=1 PythonJedi '.cmd_exec.' ' - return 1 -endfunction - - -function! jedi#debug_info() abort - if s:python_version ==# 'null' - call s:init_python() - endif - if &verbose - if &filetype !=# 'python' - echohl WarningMsg | echo 'You should run this in a buffer with filetype "python".' | echohl None - endif - endif - echo '#### Jedi-vim debug information' - echo 'Using Python version:' s:python_version - let pyeval = s:python_version == 3 ? 'py3eval' : 'pyeval' - let s:pythonjedi_called = 0 - PythonJedi import vim; vim.command('let s:pythonjedi_called = 1') - if !s:pythonjedi_called - echohl WarningMsg - echom 'PythonJedi failed to run, likely a Python config issue.' - if exists(':CheckHealth') == 2 - echom 'Try :CheckHealth for more information.' - endif - echohl None - else - PythonJedi << EOF -vim.command("echo printf(' - sys.version: `%s`', {0!r})".format(', '.join([x.strip() for x in __import__('sys').version.split('\n')]))) -vim.command("echo printf(' - site module: `%s`', {0!r})".format(__import__('site').__file__)) - -try: - jedi_vim -except Exception as e: - vim.command("echo printf('ERROR: jedi_vim is not available: %s: %s', {0!r}, {1!r})".format(e.__class__.__name__, str(e))) -else: - try: - if jedi_vim.jedi is None: - vim.command("echo 'ERROR: the \"jedi\" Python module could not be imported.'") - vim.command("echo printf(' The error was: %s', {0!r})".format(getattr(jedi_vim, "jedi_import_error", "UNKNOWN"))) - else: - vim.command("echo printf('Jedi path: `%s`', {0!r})".format(jedi_vim.jedi.__file__)) - vim.command("echo printf(' - version: %s', {0!r})".format(jedi_vim.jedi.__version__)) - vim.command("echo ' - sys_path:'") - for p in jedi_vim.jedi.Script('')._evaluator.sys_path: - vim.command("echo printf(' - `%s`', {0!r})".format(p)) - except Exception as e: - vim.command("echo printf('There was an error accessing jedi_vim.jedi: %s', {0!r})".format(e)) -EOF - endif - echo ' - jedi-vim git version: ' - echon substitute(system('git -C '.s:script_path.' describe --tags --always --dirty'), '\v\n$', '', '') - echo ' - jedi git submodule status: ' - echon substitute(system('git -C '.s:script_path.' submodule status'), '\v\n$', '', '') - echo "\n" - echo '##### Settings' - echo '```' - for [k, V] in items(filter(copy(g:), "v:key =~# '\\v^jedi#'")) - exe 'let default = '.get(s:default_settings, - \ substitute(k, '\v^jedi#', '', ''), "'-'") - " vint: -ProhibitUsingUndeclaredVariable - if default !=# V - echo printf('g:%s = %s (default: %s)', k, string(V), string(default)) - unlet! V " Fix variable type mismatch with Vim 7.3. - endif - " vint: +ProhibitUsingUndeclaredVariable - endfor - echo "\n" - verb set omnifunc? completeopt? - echo '```' - - if &verbose - echo "\n" - echo '#### :version' - echo '```' - version - echo '```' - echo "\n" - echo '#### :messages' - echo '```' - messages - echo '```' - echo "\n" - echo "
:scriptnames" - echo "\n" - echo '```' - scriptnames - echo '```' - echo "
" - endif -endfunction - -function! jedi#force_py_version(py_version) abort - let g:jedi#force_py_version = a:py_version - return jedi#setup_py_version(a:py_version) -endfunction - - -function! jedi#force_py_version_switch() abort - if g:jedi#force_py_version == 2 - call jedi#force_py_version(3) - elseif g:jedi#force_py_version == 3 - call jedi#force_py_version(2) - else - throw "Don't know how to switch from ".g:jedi#force_py_version.'!' - endif -endfunction - - -" Helper function instead of `python vim.eval()`, and `.command()` because -" these also return error definitions. -function! jedi#_vim_exceptions(str, is_eval) abort - let l:result = {} - try - if a:is_eval - let l:result.result = eval(a:str) - else - execute a:str - let l:result.result = '' - endif - catch - let l:result.exception = v:exception - let l:result.throwpoint = v:throwpoint - endtry - return l:result -endfunction - -call jedi#init_python() " Might throw an error. - -" ------------------------------------------------------------------------ -" functions that call python code -" ------------------------------------------------------------------------ -function! jedi#goto() abort - PythonJedi jedi_vim.goto(mode="goto") -endfunction - -function! jedi#goto_assignments() abort - PythonJedi jedi_vim.goto(mode="assignment") -endfunction - -function! jedi#goto_definitions() abort - PythonJedi jedi_vim.goto(mode="definition") -endfunction - -function! jedi#usages() abort - PythonJedi jedi_vim.goto(mode="related_name") -endfunction - -function! jedi#rename(...) abort - PythonJedi jedi_vim.rename() -endfunction - -function! jedi#rename_visual(...) abort - PythonJedi jedi_vim.rename_visual() -endfunction - -function! jedi#completions(findstart, base) abort - PythonJedi jedi_vim.completions() -endfunction - -function! jedi#enable_speed_debugging() abort - PythonJedi jedi_vim.jedi.set_debug_function(jedi_vim.print_to_stdout, speed=True, warnings=False, notices=False) -endfunction - -function! jedi#enable_debugging() abort - PythonJedi jedi_vim.jedi.set_debug_function(jedi_vim.print_to_stdout) -endfunction - -function! jedi#disable_debugging() abort - PythonJedi jedi_vim.jedi.set_debug_function(None) -endfunction - -function! jedi#py_import(args) abort - PythonJedi jedi_vim.py_import() -endfun - -function! jedi#py_import_completions(argl, cmdl, pos) abort - PythonJedi jedi_vim.py_import_completions() -endfun - -function! jedi#clear_cache(bang) abort - PythonJedi jedi_vim.jedi.cache.clear_time_caches(True) - if a:bang - PythonJedi jedi_vim.jedi.parser.utils.ParserPickling.clear_cache() - endif -endfunction - - -" ------------------------------------------------------------------------ -" show_documentation -" ------------------------------------------------------------------------ -function! jedi#show_documentation() abort - PythonJedi if jedi_vim.show_documentation() is None: vim.command('return') - - let bn = bufnr('__doc__') - if bn > 0 - let wi=index(tabpagebuflist(tabpagenr()), bn) - if wi >= 0 - " If the __doc__ buffer is open in the current tab, jump to it - silent execute (wi+1).'wincmd w' - else - silent execute 'sbuffer '.bn - endif - else - split '__doc__' - endif - - setlocal modifiable - setlocal noswapfile - setlocal buftype=nofile - silent normal! ggdG - silent $put=l:doc - silent normal! 1Gdd - setlocal nomodifiable - setlocal nomodified - setlocal filetype=rst - - if l:doc_lines > g:jedi#max_doc_height " max lines for plugin - let l:doc_lines = g:jedi#max_doc_height - endif - execute 'resize '.l:doc_lines - - " quit comands - nnoremap q ZQ - execute 'nnoremap '.g:jedi#documentation_command.' ZQ' - - " highlight python code within rst - unlet! b:current_syntax - syn include @rstPythonScript syntax/python.vim - " 4 spaces - syn region rstPythonRegion start=/^\v {4}/ end=/\v^( {4}|\n)@!/ contains=@rstPythonScript - " >>> python code -> (doctests) - syn region rstPythonRegion matchgroup=pythonDoctest start=/^>>>\s*/ end=/\n/ contains=@rstPythonScript - let b:current_syntax = 'rst' -endfunction - -" ------------------------------------------------------------------------ -" helper functions -" ------------------------------------------------------------------------ - -function! jedi#add_goto_window(len) abort - set lazyredraw - cclose - let height = min([a:len, g:jedi#quickfix_window_height]) - execute 'belowright copen '.height - set nolazyredraw - if g:jedi#use_tabs_not_buffers == 1 - noremap :call jedi#goto_window_on_enter() - endif - augroup jedi_goto_window - au! - au WinLeave q " automatically leave, if an option is chosen - augroup END - redraw! -endfunction - - -function! jedi#goto_window_on_enter() abort - let l:list = getqflist() - let l:data = l:list[line('.') - 1] - if l:data.bufnr - " close goto_window buffer - normal! ZQ - PythonJedi jedi_vim.new_buffer(vim.eval('bufname(l:data.bufnr)')) - call cursor(l:data.lnum, l:data.col) - else - echohl WarningMsg | echo 'Builtin module cannot be opened.' | echohl None - endif -endfunction - - -function! s:syn_stack() abort - if !exists('*synstack') - return [] - endif - return map(synstack(line('.'), col('.') - 1), "synIDattr(v:val, 'name')") -endfunc - - -function! jedi#do_popup_on_dot_in_highlight() abort - let highlight_groups = s:syn_stack() - for a in highlight_groups - if a ==# 'pythonDoctest' - return 1 - endif - endfor - - for a in highlight_groups - for b in ['pythonString', 'pythonComment', 'pythonNumber'] - if a == b - return 0 - endif - endfor - endfor - return 1 -endfunc - - -let s:show_call_signatures_last = [0, 0, ''] -function! jedi#show_call_signatures() abort - if s:_init_python == 0 - return 1 - endif - let [line, col] = [line('.'), col('.')] - let curline = getline(line) - let reload_signatures = 1 - - " Caching. On the same line only. - if line == s:show_call_signatures_last[0] - " Check if the number of commas and parenthesis before or after the - " cursor has not changed since the last call, which means that the - " argument position was not changed and we can skip repainting. - let prevcol = s:show_call_signatures_last[1] - let prevline = s:show_call_signatures_last[2] - if substitute(curline[:col-2], '[^,()]', '', 'g') - \ == substitute(prevline[:prevcol-2], '[^,()]', '', 'g') - \ && substitute(curline[(col-2):], '[^,()]', '', 'g') - \ == substitute(prevline[(prevcol-2):], '[^,()]', '', 'g') - let reload_signatures = 0 - endif - endif - let s:show_call_signatures_last = [line, col, curline] - - if reload_signatures - PythonJedi jedi_vim.show_call_signatures() - endif -endfunction - - -function! jedi#clear_call_signatures() abort - if s:_init_python == 0 - return 1 - endif - - let s:show_call_signatures_last = [0, 0, ''] - PythonJedi jedi_vim.clear_call_signatures() -endfunction - - -function! jedi#configure_call_signatures() abort - augroup jedi_call_signatures - autocmd! * - if g:jedi#show_call_signatures == 2 " Command line call signatures - autocmd InsertEnter let g:jedi#first_col = s:save_first_col() - endif - autocmd InsertEnter let s:show_call_signatures_last = [0, 0, ''] - autocmd InsertLeave call jedi#clear_call_signatures() - if g:jedi#show_call_signatures_delay > 0 - autocmd InsertEnter let b:_jedi_orig_updatetime = &updatetime - \ | let &updatetime = g:jedi#show_call_signatures_delay - autocmd InsertLeave if exists('b:_jedi_orig_updatetime') - \ | let &updatetime = b:_jedi_orig_updatetime - \ | unlet b:_jedi_orig_updatetime - \ | endif - autocmd CursorHoldI call jedi#show_call_signatures() - else - autocmd CursorMovedI call jedi#show_call_signatures() - endif - augroup END -endfunction - - -" Determine where the current window is on the screen for displaying call -" signatures in the correct column. -function! s:save_first_col() abort - if bufname('%') ==# '[Command Line]' || winnr('$') == 1 - return 0 - endif - - let startwin = winnr() - let winwidth = winwidth(0) - if winwidth == &columns - return 0 - elseif winnr('$') == 2 - return startwin == 1 ? 0 : (winwidth(1) + 1) - elseif winnr('$') == 3 - if startwin == 1 - return 0 - endif - let ww1 = winwidth(1) - let ww2 = winwidth(2) - let ww3 = winwidth(3) - if ww1 + ww2 + ww3 + 2 == &columns - if startwin == 2 - return ww1 + 1 - else - return ww1 + ww2 + 2 - endif - elseif startwin == 2 - if ww2 + ww3 + 1 == &columns - return 0 - else - return ww1 + 1 - endif - else " startwin == 3 - if ww2 + ww3 + 1 == &columns - return ww2 + 1 - else - return ww1 + 1 - endif - endif - endif - return 0 -endfunction - - -function! jedi#complete_string(is_popup_on_dot) abort - if a:is_popup_on_dot && !(g:jedi#popup_on_dot && jedi#do_popup_on_dot_in_highlight()) - return '' - endif - if pumvisible() && !a:is_popup_on_dot - return "\" - else - return "\\\=jedi#complete_opened(".a:is_popup_on_dot.")\" - endif -endfunction - - -function! jedi#complete_opened(is_popup_on_dot) abort - if pumvisible() - " Only go down if it is visible, user-enabled and the longest - " option is set. - if g:jedi#popup_select_first && stridx(&completeopt, 'longest') > -1 - return "\" - endif - if a:is_popup_on_dot - if &completeopt !~# '\(noinsert\|noselect\)' - " Prevent completion of the first entry with dot completion. - return "\" - endif - endif - endif - return '' -endfunction - - -function! jedi#smart_auto_mappings() abort - " Auto put import statement after from module.name and complete - if search('\m^\s*from\s\+[A-Za-z0-9._]\{1,50}\%#\s*$', 'bcn', line('.')) - " Enter character and start completion. - return "\import \\\=jedi#complete_opened(1)\" - endif - return "\" -endfunction - - -"PythonJedi jedi_vim.jedi.set_debug_function(jedi_vim.print_to_stdout, speed=True, warnings=False, notices=False) -"PythonJedi jedi_vim.jedi.set_debug_function(jedi_vim.print_to_stdout) - -" vim: set et ts=4: diff --git a/vim-plugins/bundle/jedi-vim/conftest.py b/vim-plugins/bundle/jedi-vim/conftest.py deleted file mode 100644 index 34a4603..0000000 --- a/vim-plugins/bundle/jedi-vim/conftest.py +++ /dev/null @@ -1,60 +0,0 @@ -import os -import subprocess -import urllib -import zipfile - -import pytest - -VSPEC_URL = 'https://github.com/kana/vim-vspec/archive/1.4.1.zip' -CACHE_FOLDER = '.cache' -VSPEC_FOLDER = os.path.join(CACHE_FOLDER, 'vim-vspec-1.4.1') -VSPEC_RUNNER = os.path.join(VSPEC_FOLDER, 'bin/vspec') -TEST_DIR = 'test' - - -class IntegrationTestFile(object): - def __init__(self, path): - self.path = path - - def run(self): - output = subprocess.check_output( - [VSPEC_RUNNER, '.', VSPEC_FOLDER, self.path]) - for line in output.splitlines(): - if line.startswith(b'not ok') or line.startswith(b'Error'): - pytest.fail("{0} failed:\n{1}".format( - self.path, output.decode('utf-8')), pytrace=False) - - def __repr__(self): - return "<%s: %s>" % (type(self), self.path) - - -def pytest_configure(config): - if not os.path.isdir(CACHE_FOLDER): - os.mkdir(CACHE_FOLDER) - - if not os.path.exists(VSPEC_FOLDER): - name, hdrs = urllib.urlretrieve(VSPEC_URL) - z = zipfile.ZipFile(name) - for n in z.namelist(): - dest = os.path.join(CACHE_FOLDER, n) - destdir = os.path.dirname(dest) - if not os.path.isdir(destdir): - os.makedirs(destdir) - data = z.read(n) - if not os.path.isdir(dest): - with open(dest, 'w') as f: - f.write(data) - z.close() - os.chmod(VSPEC_RUNNER, 0o777) - - -def pytest_generate_tests(metafunc): - """ - :type metafunc: _pytest.python.Metafunc - """ - def collect_tests(): - for f in os.listdir(TEST_DIR): - if f.endswith('.vim'): - yield IntegrationTestFile(os.path.join(TEST_DIR, f)) - - metafunc.parametrize('case', list(collect_tests())) diff --git a/vim-plugins/bundle/jedi-vim/doc/jedi-vim.txt b/vim-plugins/bundle/jedi-vim/doc/jedi-vim.txt deleted file mode 100644 index 81bf2ce..0000000 --- a/vim-plugins/bundle/jedi-vim/doc/jedi-vim.txt +++ /dev/null @@ -1,544 +0,0 @@ -*jedi-vim.txt* - For Vim version 7.3 - Last change: 2014/07/29 - __ _______ _______ __ ____ ____ __ .___ ___.~ - | | | ____|| \ | | \ \ / / | | | \/ |~ - | | | |__ | .--. || | _____\ \/ / | | | \ / |~ -.--. | | | __| | | | || | |______\ / | | | |\/| |~ -| `--' | | |____ | '--' || | \ / | | | | | |~ - \______/ |_______||_______/ |__| \__/ |__| |__| |__|~ - - jedi-vim - awesome Python autocompletion with Vim - -============================================================================== -Contents *jedi-vim-contents* - -1. Introduction |jedi-vim-introduction| -2. Installation |jedi-vim-installation| - 2.0. Requirements |jedi-vim-installation-requirements| - 2.1. Manually |jedi-vim-installation-manually| - 2.2. Using Pathogen |jedi-vim-installation-pathogen| - 2.3. Using Vundle |jedi-vim-installation-vundle| - 2.4. Installing from Repositories |jedi-vim-installation-repos| -3. Supported Python features |jedi-vim-support| -4. Usage |jedi-vim-usage| -5. Mappings |jedi-vim-keybindings| - 5.1. Start completion |g:jedi#completions_command| - 5.2. Go to definition |g:jedi#goto_command| - 5.3. Go to assignment |g:jedi#goto_assignments_command| - 5.4 Go to definition (deprecated) |g:jedi#goto_definitions_command| - 5.5. Show documentation |g:jedi#documentation_command| - 5.6. Rename variables |g:jedi#rename_command| - 5.7. Show name usages |g:jedi#usages_command| - 5.8. Open module by name |:Pyimport| -6. Configuration |jedi-vim-configuration| - 6.1. auto_initialization |g:jedi#auto_initialization| - 6.2. auto_vim_configuration |g:jedi#auto_vim_configuration| - 6.3. popup_on_dot |g:jedi#popup_on_dot| - 6.4. popup_select_first |g:jedi#popup_select_first| - 6.5. auto_close_doc |g:jedi#auto_close_doc| - 6.6. show_call_signatures |g:jedi#show_call_signatures| - 6.7. show_call_signatures_delay |g:jedi#show_call_signatures_delay| - 6.8. use_tabs_not_buffers |g:jedi#use_tabs_not_buffers| - 6.9. squelch_py_warning |g:jedi#squelch_py_warning| - 6.10. completions_enabled |g:jedi#completions_enabled| - 6.11. use_splits_not_buffers |g:jedi#use_splits_not_buffers| - 6.12. force_py_version |g:jedi#force_py_version| - 6.13. smart_auto_mappings |g:jedi#smart_auto_mappings| - 6.14. use_tag_stack |g:jedi#use_tag_stack| -7. Testing |jedi-vim-testing| -8. Contributing |jedi-vim-contributing| -9. License |jedi-vim-license| - -============================================================================== -1. Introduction *jedi-vim-introduction* - -Jedi-vim is a Vim binding to the awesome Python autocompletion library -`jedi`. Among jedi's (and, therefore, jedi-vim's) features are: - -- Completion for a wide array of Python features (see |jedi-vim-support|) -- Robust in dealing with syntax errors and wrong indentation -- Parses complex module/function/class structures -- Infers function arguments from Sphinx/Epydoc strings -- Doesn't execute Python code -- Supports Virtualenv -- Supports Python 2.5+ and 3.2+ - -By leveraging this library, jedi-vim adds the following capabilities to Vim: - -- Displaying function/class bodies -- "Go to definition" command -- Displaying docstrings -- Renaming and refactoring -- Looking up related names - -============================================================================== -2. Installation *jedi-vim-installation* - ------------------------------------------------------------------------------- -2.0. Requirements *jedi-vim-installation-requirements* - -First of all, jedi-vim requires Vim to be compiled with the `+python` option. - -The jedi library has to be installed for jedi-vim to work properly. You can -install it first, by using e.g. your distribution's package manager, or by -using pip: > - - pip install jedi - -However, you can also install it as a git submodule if you don't want to use -jedi for anything but this plugin. How to do this is detailed below. - -It is best if you have VIM >= 7.3, compiled with the `+conceal` option. With -older versions, you will probably not see the parameter recommendation list -for functions after typing the open bracket. Some platforms (including OS X -releases) do not ship a VIM with `+conceal`. You can check if your VIM has the -feature with > - - :ver - -and look for "`+conceal`" (as opposed to "`-conceal`") or > - - :echo has('conceal') - -which will report 0 (not included) or 1 (included). If your VIM lacks this -feature and you would like function parameter completion, you will need to -build your own VIM, or use a package for your operating system that has this -feature (such as MacVim on OS X, which also contains a console binary). - ------------------------------------------------------------------------------- -2.1. Installing manually *jedi-vim-installation-manually* - -1a. Get the latest repository from Github: > - - git clone http://github.com/davidhalter/jedi-vim path/to/bundles/jedi-vim - -1b. If you want to install jedi as a submodule instead, issue this command: > - - git clone --recursive http://github.com/davidhalter/jedi-vim - -2. Put the plugin files into their respective folders in your vim runtime - directory (usually ~/.vim). Be sure to pay attention to the directory - structure! -3. Update the Vim help tags with > - - :helptags /doc - ------------------------------------------------------------------------------- -2.1. Installing using Pathogen *jedi-vim-installation-pathogen* - -Pathogen simplifies installation considerably. - -1.a Clone the git repository into your bundles directory: > - - git clone http://github.com/davidhalter/jedi-vim path/to/bundles/jedi-vim - -1b. Again, if you want to install jedi as a submodule, use this command - instead: > - - git clone --recursive http://github.com/davidhalter/jedi-vim - ------------------------------------------------------------------------------- -2.3. Installing using Vundle *jedi-vim-installation-vundle* - -1. Vundle automatically downloads subrepositories as git submodules, so you - will automatically get the jedi library with the jedi-vim plugin. Add the - following to the Bundles section in your .vimrc file: > - - Plugin 'davidhalter/jedi-vim' - -2. Issue the following command in Vim: > - - :PluginInstall - -Help tags are generated automatically, so you should be good to go. - ------------------------------------------------------------------------------- -2.4. Installing from Repositories *jedi-vim-installation-repos* - -Some Linux distributions have jedi-vim packages in their official -repositories. On Arch Linux, install vim-jedi. On Debian (8+) or Ubuntu -(14.04+) install vim-python-jedi. - -============================================================================== -3. Supported Python features *jedi-vim-support* - -The Jedi library does all the hard work behind the scenes. It supports -completion of a large number of Python features, among them: - -- Builtins -- Multiple `return`s or `yield`s -- Tuple assignments/array indexing/dictionary indexing -- `with`-statement/exception handling -- `*args` and `**kwargs` -- Decorators, lambdas, closures -- Generators, iterators -- Some descriptors: `property`/`staticmethod`/`classmethod` -- Some magic methods: `__call__`, `__iter__`, `__next__`, `__get__`, - `__getitem__`, `__init__` -- `list.append()`, `set.add()`, `list.extend()`, etc. -- (Nested) list comprehensions and ternary expressions -- Relative `import`s -- `getattr()`/`__getattr__`/`__getattribute__` -- Function annotations (py3k feature, are being ignored at the moment, but are - parsed) -- Class decorators (py3k feature, are being ignored at the moment, but are - parsed) -- Simple/usual `sys.path` modifications -- `isinstance` checks for `if`/`while`/`assert` case, that doesn’t work with - Jedi -- And more... - -Note: This list is not necessarily up to date. For a complete list of -features, please refer to the Jedi documentation at http://jedi.jedidjah.ch. - -============================================================================== -4. Usage *jedi-vim-usage* - -With the default settings, autocompletion can be triggered by typing -. The first entry will automatically be selected, so you can press - to insert it into your code or keep typing and narrow down your -completion options. The usual and / keybindings work as -well. Autocompletion is also triggered by typing a period in insert mode. -Since periods rarely occur in Python code outside of method/import lookups, -this is handy to have (but can be disabled). - -When it encounters a new module, jedi might take a few seconds to parse that -module's contents. Afterwards, the contents are cached and completion will be -almost instantaneous. - -============================================================================== -5. Key Bindings *jedi-vim-keybindings* - -All keybindings can be mapped by setting the appropriate global option. For -example, to set the keybinding for starting omnicompletion to instead of -, add the following setting to your .vimrc file: > - - let g:jedi#completions_command = "" - -Note: If you have |g:jedi#auto_initialization| set to 0, you have to create -a mapping yourself by calling a function: > - - " Using for omnicompletion - inoremap - " Use r (by default <\-r>) for renaming - nnoremap r :call jedi#rename() - " etc. - -Note: You can set commands to '', which means that they are empty and not -assigned. It's an easy way to "disable" functionality of jedi-vim. - ------------------------------------------------------------------------------- -5.1. `g:jedi#completions_command` *g:jedi#completions_command* -Function: n/a; see above -Default: Start completion - -Performs autocompletion (or omnicompletion, to be precise). - -Note: If you want to use for completion, please install Supertab: -https://github.com/ervandew/supertab. - ------------------------------------------------------------------------------- -5.2. `g:jedi#goto_command` *g:jedi#goto_command* -Function: `jedi#goto()` -Default: d Go to definition (or assignment) - -This function first tries |jedi#goto_definitions|, and falls back to -|jedi#goto_assignments| for builtin modules. It produces an error if nothing -could be found. -NOTE: this implementation is subject to change. -Ref: https://github.com/davidhalter/jedi/issues/570 - -This command tries to find the original definition of the function/class under -the cursor. Just like the `jedi#goto_assignments()` function, it does not work -if the definition isn't in a Python source file. - -The difference between `jedi#goto_assignments()` and `jedi#goto_definitions()` -is that the latter performs recursive lookups. Take, for example, the -following module structure: > - - # file1.py: - from file2 import foo - - # file2.py: - from file3 import bar as foo - - # file3.py - def bar(): - pass - -The `jedi#goto_assignments()` function will take you to the > - - from file2 import foo - -statement in file1.py, while the `jedi#goto_definitions()` function will take -you all the way to the > - - def bar(): - -line in file3.py. - ------------------------------------------------------------------------------- -5.3. `g:jedi#goto_assignments_command` *g:jedi#goto_assignments_command* -Function: `jedi#goto_assignments()` -Default: g Go to assignment - -This function finds the first definition of the function/class under the -cursor. It produces an error if the definition is not in a Python file. - ------------------------------------------------------------------------------- -5.4. `g:jedi#goto_definitions_command` *g:jedi#goto_definitions_command* -Function: `jedi#goto_definitions()` -Default: - Go to original definition - -NOTE: Deprecated. Use |g:jedi#goto_command| / |jedi#goto()| instead, which -currently uses this internally. - ------------------------------------------------------------------------------- -5.5. `g:jedi#documentation_command` *g:jedi#documentation_command* -Function: `jedi#show_documentation()` -Default: Show pydoc documentation - -This shows the pydoc documentation for the item currently under the cursor. -The documentation is opened in a horizontally split buffer. The height of this -buffer is controlled by `g:jedi#max_doc_height` (set by default to 30). - ------------------------------------------------------------------------------- -5.6. `g:jedi#rename_command` *g:jedi#rename_command* -Function: `jedi#rename()` -Default: r Rename variables - -Jedi-vim deletes the word currently under the cursor and puts Vim in insert -mode, where the user is expected to enter the new variable name. Upon leaving -insert mode, jedi-vim then renames all occurences of the old variable name -with the new one. The number of performed renames is displayed in the command -line. - ------------------------------------------------------------------------------- -5.7. `g:jedi#usages_command` *g:jedi#usages_command* -Function: `jedi#usages()` -Default: n Show usages of a name. - -The quickfix window is populated with a list of all names which point to the -definition of the name under the cursor. - ------------------------------------------------------------------------------- -5.8. Open module by name *:Pyimport* -Function: `jedi#py_import(args)` -Default: :Pyimport e.g. `:Pyimport os` shows os.py in VIM. - -Simulate an import and open that module in VIM. - -============================================================================== -6. Configuration *jedi-vim-configuration* - -Note: You currently have to set these options in your .vimrc. Setting them in -an ftplugin (e.g. ~/.vim/ftplugin/python/jedi-vim-settings.vim) will not work -because jedi-vim is not set up as an filetype plugin, but as a "regular" -plugin. - ------------------------------------------------------------------------------- -6.1. `g:jedi#auto_initialization` *g:jedi#auto_initialization* - -Upon initialization, jedi-vim performs the following steps: - -1. Set the current buffers 'omnifunc' to its own completion function - `jedi#completions` -2. Create mappings to commands specified in |jedi-vim-keybindings| -3. Call `jedi#configure_call_signatures()` if - `g:jedi#show_call_signatures` is set - -You can disable the default initialization routine by setting this option to -0. Beware that you have to perform the above steps yourself, though. - -Options: 0 or 1 -Default: 1 (Perform automatic initialization) - ------------------------------------------------------------------------------- -6.2. `g:jedi#auto_vim_configuration` *g:jedi#auto_vim_configuration* - -Jedi-vim sets 'completeopt' to `menuone,longest,preview` by default, if -'completeopt' is not changed from Vim's default. -It also remaps to in insert mode. - -If you want to keep your own configuration, disable this setting. - -Options: 0 or 1 -Default: 1 (Set 'completeopt' and mapping as described above) - ------------------------------------------------------------------------------- -6.3. `g:jedi#popup_on_dot` *g:jedi#popup_on_dot* - -Jedi-vim automatically starts completion upon typing a period in insert mode. - -However, when working with large modules, this can slow down your typing flow -since you have to wait for jedi to parse the module and show the completion -menu. By disabling this setting, completion is only started when you manually -press the completion key. - -Options: 0 or 1 -Default: 1 (Start completion on typing a period) - ------------------------------------------------------------------------------- -6.4. `g:jedi#popup_select_first` *g:jedi#popup_select_first* - -Upon starting completion, jedi-vim can automatically select the first entry -that pops up (without actually inserting it). - -This leads to a better typing flow: As you type more characters, the entries -in the completion menu are narrowed down. If they are narrowed down enough, -you can just press to insert the first match. - -Options: 0 or 1 -Default: 1 (Automatically select first completion entry) - ------------------------------------------------------------------------------- -6.5. `g:jedi#auto_close_doc` *g:jedi#auto_close_doc* - -When doing completion, jedi-vim shows the docstring of the currently selected -item in a preview window. By default, this window is being closed after -insertion of a completion item. - -Set this to 0 to leave the preview window open even after leaving insert mode. -This could be useful if you want to browse longer docstrings. - -Options: 0 or 1 -Default: 1 (Automatically close preview window upon leaving insert mode) - ------------------------------------------------------------------------------- -6.6. `g:jedi#show_call_signatures` *g:jedi#show_call_signatures* - -Jedi-vim can display a small window detailing the arguments of the currently -completed function and highlighting the currently selected argument. This can -be disabled by setting this option to 0. Setting this option to 2 shows call -signatures in the command line instead of a popup window. - -Options: 0, 1, or 2 -Default: 1 (Show call signatures window) - -Note: 'showmode' must be disabled for command line call signatures to be -visible. - -Note: This setting is ignored if |g:jedi#auto_initialization| is set to 0. In -that case, if you want to see call signatures, you have to set it up -manually by calling a function in your configuration file: > - - call jedi#configure_call_signatures() - ------------------------------------------------------------------------------- -6.7. `g:jedi#show_call_signatures_delay` *g:jedi#show_call_signatures_delay* - -The delay to be used with |g:jedi#show_call_signatures|. If it is greater -than 0 it will use Vim's |CursorHoldI| event instead of |CursorMovedI|. -It will temporarily set Vim's |'updatetime'| option during insert mode. - -Options: delay in milliseconds -Default: 500 - ------------------------------------------------------------------------------- -6.8. `g:jedi#use_tabs_not_buffers` *g:jedi#use_tabs_not_buffers* - -You can make jedi-vim open a new tab if you use the "go to", "show -definition", or "related names" commands. When you leave this at the default -(0), they open in the current buffer instead. - -Options: 0 or 1 -Default: 0 (Command output is put in a new tab) - ------------------------------------------------------------------------------- -6.9. `g:jedi#squelch_py_warning` *g:jedi#squelch_py_warning* - -When Vim has not been compiled with +python, jedi-vim shows a warning to that -effect and aborts loading itself. Set this to 1 to suppress that warning. - -Options: 0 or 1 -Default: 0 (Warning is shown) - ------------------------------------------------------------------------------- -6.10. `g:jedi#completions_enabled` *g:jedi#completions_enabled* - -If you don't want Jedi completion, but all the other features, you can disable -it in favor of another completion engine (that probably also uses Jedi, like -YCM). - -Options: 0 or 1 -Default: 1 - ------------------------------------------------------------------------------- -6.11. `g:jedi#use_splits_not_buffers` *g:jedi#use_splits_not_buffers* - -If you want to open new split for "go to", you could set this option to the -direction which you want to open a split with. - -Options: top, left, right, bottom or winwidth -Default: "" (not enabled by default) - -Note: with the 'winwidth' option the window is split vertically or horizontally -depending on the width of the window relative to 'textwidth'. This essentially -means that if the window is big enough it will be split vertically but if it is -small a horizontal split happens. - ------------------------------------------------------------------------------- -6.12. `g:jedi#force_py_version` *g:jedi#force_py_version* - -If you have installed both python 2 and python 3, you can force which one jedi -should use by setting this variable. It forces the internal Vim command, which -will be used for every jedi call to the respective python interpreter. -The variable can be set in the .vimrc like this to force python 3: - -let g:jedi#force_py_version = 3 - -This variable can be switched during runtime using the following function: -Function: `jedi#force_py_version_switch()` - -or set directly using this function, which has the same name as the variable: -Function: `jedi#force_py_version(py_version)` - -Options: 2 or 3 -Default: "auto" (will use sys.version_info from "python" in your $PATH) ------------------------------------------------------------------------------- -6.13. `g:jedi#smart_auto_mappings` *g:jedi#smart_auto_mappings* - -When you start typing `from module.name` jedi-vim automatically -adds the "import" statement and displays the autocomplete popup. - -This option can be disabled in the .vimrc: - -`let g:jedi#smart_auto_mappings = 0` - -Options: 0 or 1 -Default: 1 (enabled by default) - ------------------------------------------------------------------------------- -6.14. `g:jedi#use_tag_stack` *g:jedi#use_tag_stack* - -Write results of |jedi#goto| to a temporary file and use the |:tjump| command -to enable full |tagstack| functionality. Use of the tag stack allows -returning to the usage of a function with CTRL-T after exploring the -definition with arbitrary changes to the |jumplist|. - -Options: 0 or 1 -Default: 1 (enabled by default) - -============================================================================== -7. Testing *jedi-vim-testing* - -jedi-vim is being tested with a combination of vspec -https://github.com/kana/vim-vspec and py.test http://pytest.org/. - -The tests are in the test subdirectory, you can run them calling:: - - py.test - -The tests are automatically run with `travis -`_. - -============================================================================== -8. Contributing *jedi-vim-contributing* - -We love Pull Requests! Read the instructions in `CONTRIBUTING.md`. - -============================================================================== -9. License *jedi-vim-license* - -Jedi-vim is licensed with the MIT license. - - vim: textwidth=78 et filetype=help:norightleft: diff --git a/vim-plugins/bundle/jedi-vim/doc/tags b/vim-plugins/bundle/jedi-vim/doc/tags deleted file mode 100644 index 9538e5b..0000000 --- a/vim-plugins/bundle/jedi-vim/doc/tags +++ /dev/null @@ -1,38 +0,0 @@ -:Pyimport jedi-vim.txt /*:Pyimport* -g:jedi#auto_close_doc jedi-vim.txt /*g:jedi#auto_close_doc* -g:jedi#auto_initialization jedi-vim.txt /*g:jedi#auto_initialization* -g:jedi#auto_vim_configuration jedi-vim.txt /*g:jedi#auto_vim_configuration* -g:jedi#completions_command jedi-vim.txt /*g:jedi#completions_command* -g:jedi#completions_enabled jedi-vim.txt /*g:jedi#completions_enabled* -g:jedi#documentation_command jedi-vim.txt /*g:jedi#documentation_command* -g:jedi#force_py_version jedi-vim.txt /*g:jedi#force_py_version* -g:jedi#goto_assignments_command jedi-vim.txt /*g:jedi#goto_assignments_command* -g:jedi#goto_command jedi-vim.txt /*g:jedi#goto_command* -g:jedi#goto_definitions_command jedi-vim.txt /*g:jedi#goto_definitions_command* -g:jedi#popup_on_dot jedi-vim.txt /*g:jedi#popup_on_dot* -g:jedi#popup_select_first jedi-vim.txt /*g:jedi#popup_select_first* -g:jedi#rename_command jedi-vim.txt /*g:jedi#rename_command* -g:jedi#show_call_signatures jedi-vim.txt /*g:jedi#show_call_signatures* -g:jedi#show_call_signatures_delay jedi-vim.txt /*g:jedi#show_call_signatures_delay* -g:jedi#smart_auto_mappings jedi-vim.txt /*g:jedi#smart_auto_mappings* -g:jedi#squelch_py_warning jedi-vim.txt /*g:jedi#squelch_py_warning* -g:jedi#usages_command jedi-vim.txt /*g:jedi#usages_command* -g:jedi#use_splits_not_buffers jedi-vim.txt /*g:jedi#use_splits_not_buffers* -g:jedi#use_tabs_not_buffers jedi-vim.txt /*g:jedi#use_tabs_not_buffers* -g:jedi#use_tag_stack jedi-vim.txt /*g:jedi#use_tag_stack* -jedi-vim-configuration jedi-vim.txt /*jedi-vim-configuration* -jedi-vim-contents jedi-vim.txt /*jedi-vim-contents* -jedi-vim-contributing jedi-vim.txt /*jedi-vim-contributing* -jedi-vim-installation jedi-vim.txt /*jedi-vim-installation* -jedi-vim-installation-manually jedi-vim.txt /*jedi-vim-installation-manually* -jedi-vim-installation-pathogen jedi-vim.txt /*jedi-vim-installation-pathogen* -jedi-vim-installation-repos jedi-vim.txt /*jedi-vim-installation-repos* -jedi-vim-installation-requirements jedi-vim.txt /*jedi-vim-installation-requirements* -jedi-vim-installation-vundle jedi-vim.txt /*jedi-vim-installation-vundle* -jedi-vim-introduction jedi-vim.txt /*jedi-vim-introduction* -jedi-vim-keybindings jedi-vim.txt /*jedi-vim-keybindings* -jedi-vim-license jedi-vim.txt /*jedi-vim-license* -jedi-vim-support jedi-vim.txt /*jedi-vim-support* -jedi-vim-testing jedi-vim.txt /*jedi-vim-testing* -jedi-vim-usage jedi-vim.txt /*jedi-vim-usage* -jedi-vim.txt jedi-vim.txt /*jedi-vim.txt* diff --git a/vim-plugins/bundle/jedi-vim/ftplugin/python/jedi.vim b/vim-plugins/bundle/jedi-vim/ftplugin/python/jedi.vim deleted file mode 100644 index 158ea1f..0000000 --- a/vim-plugins/bundle/jedi-vim/ftplugin/python/jedi.vim +++ /dev/null @@ -1,50 +0,0 @@ -if !jedi#init_python() - finish -endif -" ------------------------------------------------------------------------ -" Initialization of jedi-vim -" ------------------------------------------------------------------------ - -if g:jedi#auto_initialization - " goto / get_definition / usages - if len(g:jedi#goto_command) - execute 'nnoremap '.g:jedi#goto_command.' :call jedi#goto()' - endif - if len(g:jedi#goto_assignments_command) - execute 'nnoremap '.g:jedi#goto_assignments_command.' :call jedi#goto_assignments()' - endif - if len(g:jedi#goto_definitions_command) - execute 'nnoremap '.g:jedi#goto_definitions_command.' :call jedi#goto_definitions()' - endif - if len(g:jedi#usages_command) - execute 'nnoremap '.g:jedi#usages_command.' :call jedi#usages()' - endif - " rename - if len(g:jedi#rename_command) - execute 'nnoremap '.g:jedi#rename_command.' :call jedi#rename()' - execute 'vnoremap '.g:jedi#rename_command.' :call jedi#rename_visual()' - endif - " documentation/pydoc - if len(g:jedi#documentation_command) - execute 'nnoremap '.g:jedi#documentation_command.' :call jedi#show_documentation()' - endif - - if g:jedi#show_call_signatures > 0 && has('conceal') - call jedi#configure_call_signatures() - endif - - if g:jedi#completions_enabled == 1 - inoremap . .=jedi#complete_string(1) - endif - - if g:jedi#smart_auto_mappings == 1 - inoremap =jedi#smart_auto_mappings() - end - - if g:jedi#auto_close_doc - " close preview if its still open after insert - augroup jedi_preview - autocmd! InsertLeave if pumvisible() == 0|pclose|endif - augroup END - endif -endif diff --git a/vim-plugins/bundle/jedi-vim/initialize.py b/vim-plugins/bundle/jedi-vim/initialize.py deleted file mode 100644 index 0636889..0000000 --- a/vim-plugins/bundle/jedi-vim/initialize.py +++ /dev/null @@ -1,26 +0,0 @@ -"""Python initialization for jedi module.""" - -try: - import traceback -except Exception as excinfo: - raise Exception('Failed to import traceback: {0}'.format(excinfo)) - -try: - import os, sys, vim - jedi_path = os.path.join(vim.eval('expand(s:script_path)'), 'jedi') - sys.path.insert(0, jedi_path) - - jedi_vim_path = vim.eval('expand(s:script_path)') - if jedi_vim_path not in sys.path: # Might happen when reloading. - sys.path.insert(0, jedi_vim_path) -except Exception as excinfo: - raise Exception('Failed to add to sys.path: {0}\n{1}'.format( - excinfo, traceback.format_exc())) - -try: - import jedi_vim -except Exception as excinfo: - raise Exception('Failed to import jedi_vim: {0}\n{1}'.format( - excinfo, traceback.format_exc())) -finally: - sys.path.remove(jedi_path) diff --git a/vim-plugins/bundle/jedi-vim/jedi/.coveragerc b/vim-plugins/bundle/jedi-vim/jedi/.coveragerc deleted file mode 100644 index 939a317..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/.coveragerc +++ /dev/null @@ -1,19 +0,0 @@ -[run] -omit = - jedi/_compatibility.py - jedi/evaluate/site.py - -[report] -# Regexes for lines to exclude from consideration -exclude_lines = - # Don't complain about missing debug-only code: - def __repr__ - if self\.debug - - # Don't complain if tests don't hit defensive assertion code: - raise AssertionError - raise NotImplementedError - - # Don't complain if non-runnable code isn't run: - if 0: - if __name__ == .__main__.: diff --git a/vim-plugins/bundle/jedi-vim/jedi/.travis.yml b/vim-plugins/bundle/jedi-vim/jedi/.travis.yml deleted file mode 100644 index 25c3a21..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ -language: python -python: 3.5 -sudo: false -env: - - TOXENV=py26 - - TOXENV=py27 - - TOXENV=py33 - - TOXENV=py34 - - TOXENV=py35 - - TOXENV=pypy - - TOXENV=cov - - TOXENV=sith -matrix: - allow_failures: - - env: TOXENV=cov - - env: TOXENV=sith - - env: TOXENV=pypy -python: 3.5 -install: - - pip install --quiet tox -script: - - tox -after_script: - - if [ $TOXENV == "cov" ]; then - pip install --quiet --use-mirrors coveralls; - coveralls; - fi - diff --git a/vim-plugins/bundle/jedi-vim/jedi/AUTHORS.txt b/vim-plugins/bundle/jedi-vim/jedi/AUTHORS.txt deleted file mode 100644 index bbd7ecd..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/AUTHORS.txt +++ /dev/null @@ -1,45 +0,0 @@ -Main Authors -============ - -David Halter (@davidhalter) -Takafumi Arakaki (@tkf) - -Code Contributors -================= - -Danilo Bargen (@dbrgn) -Laurens Van Houtven (@lvh) <_@lvh.cc> -Aldo Stracquadanio (@Astrac) -Jean-Louis Fuchs (@ganwell) -tek (@tek) -Yasha Borevich (@jjay) -Aaron Griffin -andviro (@andviro) -Mike Gilbert (@floppym) -Aaron Meurer (@asmeurer) -Lubos Trilety -Akinori Hattori (@hattya) -srusskih (@srusskih) -Steven Silvester (@blink1073) -Colin Duquesnoy (@ColinDuquesnoy) -Jorgen Schaefer (@jorgenschaefer) -Fredrik Bergroth (@fbergroth) -Mathias Fußenegger (@mfussenegger) -Syohei Yoshida (@syohex) -ppalucky (@ppalucky) -immerrr (@immerrr) immerrr@gmail.com -Albertas Agejevas (@alga) -Savor d'Isavano (@KenetJervet) -Phillip Berndt (@phillipberndt) -Ian Lee (@IanLee1521) -Farkhad Khatamov (@hatamov) -Kevin Kelley (@kelleyk) -Sid Shanker (@squidarth) -Reinoud Elhorst (@reinhrst) -Guido van Rossum (@gvanrossum) -Dmytro Sadovnychyi (@sadovnychyi) -Cristi Burcă (@scribu) -bstaint (@bstaint) - - -Note: (@user) means a github user name. diff --git a/vim-plugins/bundle/jedi-vim/jedi/CHANGELOG.rst b/vim-plugins/bundle/jedi-vim/jedi/CHANGELOG.rst deleted file mode 100644 index 4d000d8..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/CHANGELOG.rst +++ /dev/null @@ -1,67 +0,0 @@ -.. :changelog: - -Changelog ---------- - -0.10.0 (2016-06-) -+++++++++++++++++ - -- Actual semantic completions for the complete Python syntax. -- Basic type inference for ``yield from`` PEP 380. -- PEP 484 support (most of the important features of it). Thanks Claude! (@reinhrst) -- Added ``get_line_code`` to ``Definition`` and ``Completion`` objects. -- Again a lot of internal changes. - -0.9.0 (2015-04-10) -++++++++++++++++++ - -- The import logic has been rewritten to look more like Python's. There is now - an ``Evaluator.modules`` import cache, which resembles ``sys.modules``. -- Integrated the parser of 2to3. This will make refactoring possible. It will - also be possible to check for error messages (like compiling an AST would give) - in the future. -- With the new parser, the evaluation also completely changed. It's now simpler - and more readable. -- Completely rewritten REPL completion. -- Added ``jedi.names``, a command to do static analysis. Thanks to that - sourcegraph guys for sponsoring this! -- Alpha version of the linter. - - -0.8.1 (2014-07-23) -+++++++++++++++++++ - -- Bugfix release, the last release forgot to include files that improve - autocompletion for builtin libraries. Fixed. - -0.8.0 (2014-05-05) -+++++++++++++++++++ - -- Memory Consumption for compiled modules (e.g. builtins, sys) has been reduced - drastically. Loading times are down as well (it takes basically as long as an - import). -- REPL completion is starting to become usable. -- Various small API changes. Generally this release focuses on stability and - refactoring of internal APIs. -- Introducing operator precedence, which makes calculating correct Array - indices and ``__getattr__`` strings possible. - -0.7.0 (2013-08-09) -++++++++++++++++++ - -- Switched from LGPL to MIT license. -- Added an Interpreter class to the API to make autocompletion in REPL - possible. -- Added autocompletion support for namespace packages. -- Add sith.py, a new random testing method. - -0.6.0 (2013-05-14) -++++++++++++++++++ - -- Much faster parser with builtin part caching. -- A test suite, thanks @tkf. - -0.5 versions (2012) -+++++++++++++++++++ - -- Initial development. diff --git a/vim-plugins/bundle/jedi-vim/jedi/CONTRIBUTING.md b/vim-plugins/bundle/jedi-vim/jedi/CONTRIBUTING.md deleted file mode 100644 index 4dc59bf..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/CONTRIBUTING.md +++ /dev/null @@ -1,28 +0,0 @@ -Pull Requests are great (on the **dev** branch)! Readme/Documentation changes -are ok in the master branch. - - 1. Fork the Repo on github. - 2. If you are adding functionality or fixing a bug, please add a test! - 3. Add your name to AUTHORS.txt - 4. Push to your fork and submit a **pull request to the dev branch**. - -My **master** branch is a 100% stable (should be). I only push to it after I am -certain that things are working out. Many people are using Jedi directly from -the github master branch. - -**Try to use the PEP8 style guide.** - - -Changing Issues to Pull Requests (Github) ------------------------------------------ - -If you have have previously filed a GitHub issue and want to contribute code -that addresses that issue, we prefer it if you use -[hub](https://github.com/github/hub) to convert your existing issue to a pull -request. To do that, first push the changes to a separate branch in your fork -and then issue the following command: - - hub pull-request -b davidhalter:dev -i -h : - -It's no strict requirement though, if you don't have hub installed or prefer to -use the web interface, then feel free to post a traditional pull request. diff --git a/vim-plugins/bundle/jedi-vim/jedi/LICENSE.txt b/vim-plugins/bundle/jedi-vim/jedi/LICENSE.txt deleted file mode 100644 index 9492c4e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/LICENSE.txt +++ /dev/null @@ -1,82 +0,0 @@ -All contributions towards Jedi are MIT licensed. - -Some Python files have been taken from the standard library and are therefore -PSF licensed. Modifications on these files are dual licensed (both MIT and -PSF). These files are: - -- jedi/parser/pgen2 -- jedi/parser/tokenize.py -- jedi/parser/token.py -- test/test_parser/test_pgen2.py - -------------------------------------------------------------------------------- -The MIT License (MIT) - -Copyright (c) <2013> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -------------------------------------------------------------------------------- - -PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 --------------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using this software ("Python") in source or binary form and -its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby -grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, -analyze, test, perform and/or display publicly, prepare derivative works, -distribute, and otherwise use Python alone or in any derivative version, -provided, however, that PSF's License Agreement and PSF's notice of copyright, -i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -2011, 2012, 2013, 2014, 2015 Python Software Foundation; All Rights Reserved" -are retained in Python alone or in any derivative version prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python. - -4. PSF is making Python available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. diff --git a/vim-plugins/bundle/jedi-vim/jedi/MANIFEST.in b/vim-plugins/bundle/jedi-vim/jedi/MANIFEST.in deleted file mode 100644 index f25326a..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/MANIFEST.in +++ /dev/null @@ -1,14 +0,0 @@ -include README.rst -include CHANGELOG.rst -include LICENSE.txt -include AUTHORS.txt -include .coveragerc -include sith.py -include conftest.py -include pytest.ini -include tox.ini -include jedi/evaluate/compiled/fake/*.pym -include jedi/parser/grammar*.txt -recursive-include test * -recursive-include docs * -recursive-exclude * *.pyc diff --git a/vim-plugins/bundle/jedi-vim/jedi/README.rst b/vim-plugins/bundle/jedi-vim/jedi/README.rst deleted file mode 100644 index 1adf138..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/README.rst +++ /dev/null @@ -1,210 +0,0 @@ -################################################################### -Jedi - an awesome autocompletion/static analysis library for Python -################################################################### - -.. image:: https://secure.travis-ci.org/davidhalter/jedi.png?branch=master - :target: http://travis-ci.org/davidhalter/jedi - :alt: Travis-CI build status - -.. image:: https://coveralls.io/repos/davidhalter/jedi/badge.png?branch=master - :target: https://coveralls.io/r/davidhalter/jedi - :alt: Coverage Status - - -*If you have specific questions, please add an issue or ask on* `stackoverflow -`_ *with the label* ``python-jedi``. - - -Jedi is a static analysis tool for Python that can be used in IDEs/editors. Its -historic focus is autocompletion, but does static analysis for now as well. -Jedi is fast and is very well tested. It understands Python on a deeper level -than all other static analysis frameworks for Python. - -Jedi has support for two different goto functions. It's possible to search for -related names and to list all names in a Python file and infer them. Jedi -understands docstrings and you can use Jedi autocompletion in your REPL as -well. - -Jedi uses a very simple API to connect with IDE's. There's a reference -implementation as a `VIM-Plugin `_, -which uses Jedi's autocompletion. We encourage you to use Jedi in your IDEs. -It's really easy. - -Jedi can currently be used with the following editors/projects: - -- Vim (jedi-vim_, YouCompleteMe_, deoplete-jedi_) -- Emacs (Jedi.el_, company-mode_, elpy_, anaconda-mode_, ycmd_) -- Sublime Text (SublimeJEDI_ [ST2 + ST3], anaconda_ [only ST3]) -- TextMate_ (Not sure if it's actually working) -- Kate_ version 4.13+ supports it natively, you have to enable it, though. [`proof - `_] -- Atom_ (autocomplete-python_) -- SourceLair_ -- `GNOME Builder`_ (with support for GObject Introspection) -- `Visual Studio Code`_ (via `Python Extension `_) -- Gedit (gedi_) -- wdb_ - Web Debugger -- `Eric IDE`_ (Available as a plugin) - -and many more! - - -Here are some pictures taken from jedi-vim_: - -.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_complete.png - -Completion for almost anything (Ctrl+Space). - -.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_function.png - -Display of function/class bodies, docstrings. - -.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_pydoc.png - -Pydoc support (Shift+k). - -There is also support for goto and renaming. - -Get the latest version from `github `_ -(master branch should always be kind of stable/working). - -Docs are available at `https://jedi.readthedocs.org/en/latest/ -`_. Pull requests with documentation -enhancements and/or fixes are awesome and most welcome. Jedi uses `semantic -versioning `_. - - -Installation -============ - - pip install jedi - -Note: This just installs the Jedi library, not the editor plugins. For -information about how to make it work with your editor, refer to the -corresponding documentation. - -You don't want to use ``pip``? Please refer to the `manual -`_. - - -Feature Support and Caveats -=========================== - -Jedi really understands your Python code. For a comprehensive list what Jedi -understands, see: `Features -`_. A list of -caveats can be found on the same page. - -You can run Jedi on cPython 2.6, 2.7, 3.3, 3.4 or 3.5 but it should also -understand/parse code older than those versions. - -Tips on how to use Jedi efficiently can be found `here -`_. - -API ---- - -You can find the documentation for the `API here `_. - - -Autocompletion / Goto / Pydoc ------------------------------ - -Please check the API for a good explanation. There are the following commands: - -- ``jedi.Script.goto_assignments`` -- ``jedi.Script.completions`` -- ``jedi.Script.usages`` - -The returned objects are very powerful and really all you might need. - - -Autocompletion in your REPL (IPython, etc.) -------------------------------------------- - -It's possible to have Jedi autocompletion in REPL modes - `example video `_. -This means that IPython and others are `supported -`_. - - -Static Analysis / Linter ------------------------- - -To do all forms of static analysis, please try to use ``jedi.names``. It will -return a list of names that you can use to infer types and so on. - -Linting is another thing that is going to be part of Jedi. For now you can try -an alpha version ``python -m jedi linter``. The API might change though and -it's still buggy. It's Jedi's goal to be smarter than classic linter and -understand ``AttributeError`` and other code issues. - - -Refactoring ------------ - -Jedi's parser would support refactoring, but there's no API to use it right -now. If you're interested in helping out here, let me know. With the latest -parser changes, it should be very easy to actually make it work. - - -Development -=========== - -There's a pretty good and extensive `development documentation -`_. - - -Testing -======= - -The test suite depends on ``tox`` and ``pytest``:: - - pip install tox pytest - -To run the tests for all supported Python versions:: - - tox - -If you want to test only a specific Python version (e.g. Python 2.7), it's as -easy as :: - - tox -e py27 - -Tests are also run automatically on `Travis CI -`_. - -For more detailed information visit the `testing documentation -`_ - - -Acknowledgements -================ - -- Takafumi Arakaki (@tkf) for creating a solid test environment and a lot of - other things. -- Danilo Bargen (@dbrgn) for general housekeeping and being a good friend :). -- Guido van Rossum (@gvanrossum) for creating the parser generator pgen2 - (originally used in lib2to3). - - - -.. _jedi-vim: https://github.com/davidhalter/jedi-vim -.. _youcompleteme: http://valloric.github.io/YouCompleteMe/ -.. _deoplete-jedi: https://github.com/zchee/deoplete-jedi -.. _Jedi.el: https://github.com/tkf/emacs-jedi -.. _company-mode: https://github.com/syohex/emacs-company-jedi -.. _elpy: https://github.com/jorgenschaefer/elpy -.. _anaconda-mode: https://github.com/proofit404/anaconda-mode -.. _ycmd: https://github.com/abingham/emacs-ycmd -.. _sublimejedi: https://github.com/srusskih/SublimeJEDI -.. _anaconda: https://github.com/DamnWidget/anaconda -.. _wdb: https://github.com/Kozea/wdb -.. _TextMate: https://github.com/lawrenceakka/python-jedi.tmbundle -.. _Kate: http://kate-editor.org -.. _Atom: https://atom.io/ -.. _autocomplete-python: https://atom.io/packages/autocomplete-python -.. _SourceLair: https://www.sourcelair.com -.. _GNOME Builder: https://wiki.gnome.org/Apps/Builder -.. _Visual Studio Code: https://code.visualstudio.com/ -.. _gedi: https://github.com/isamert/gedi -.. _Eric IDE: http://eric-ide.python-projects.org diff --git a/vim-plugins/bundle/jedi-vim/jedi/conftest.py b/vim-plugins/bundle/jedi-vim/jedi/conftest.py deleted file mode 100644 index 2567fcd..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/conftest.py +++ /dev/null @@ -1,72 +0,0 @@ -import tempfile -import shutil - -import pytest - -import jedi - -collect_ignore = ["setup.py"] - - -# The following hooks (pytest_configure, pytest_unconfigure) are used -# to modify `jedi.settings.cache_directory` because `clean_jedi_cache` -# has no effect during doctests. Without these hooks, doctests uses -# user's cache (e.g., ~/.cache/jedi/). We should remove this -# workaround once the problem is fixed in py.test. -# -# See: -# - https://github.com/davidhalter/jedi/pull/168 -# - https://bitbucket.org/hpk42/pytest/issue/275/ - -jedi_cache_directory_orig = None -jedi_cache_directory_temp = None - - -def pytest_addoption(parser): - parser.addoption("--jedi-debug", "-D", action='store_true', - help="Enables Jedi's debug output.") - - parser.addoption("--warning-is-error", action='store_true', - help="Warnings are treated as errors.") - - -def pytest_configure(config): - global jedi_cache_directory_orig, jedi_cache_directory_temp - jedi_cache_directory_orig = jedi.settings.cache_directory - jedi_cache_directory_temp = tempfile.mkdtemp(prefix='jedi-test-') - jedi.settings.cache_directory = jedi_cache_directory_temp - - if config.option.jedi_debug: - jedi.set_debug_function() - - if config.option.warning_is_error: - import warnings - warnings.simplefilter("error") - - -def pytest_unconfigure(config): - global jedi_cache_directory_orig, jedi_cache_directory_temp - jedi.settings.cache_directory = jedi_cache_directory_orig - shutil.rmtree(jedi_cache_directory_temp) - - -@pytest.fixture(scope='session') -def clean_jedi_cache(request): - """ - Set `jedi.settings.cache_directory` to a temporary directory during test. - - Note that you can't use built-in `tmpdir` and `monkeypatch` - fixture here because their scope is 'function', which is not used - in 'session' scope fixture. - - This fixture is activated in ../pytest.ini. - """ - from jedi import settings - old = settings.cache_directory - tmp = tempfile.mkdtemp(prefix='jedi-test-') - settings.cache_directory = tmp - - @request.addfinalizer - def restore(): - settings.cache_directory = old - shutil.rmtree(tmp) diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/Makefile b/vim-plugins/bundle/jedi-vim/jedi/docs/Makefile deleted file mode 100644 index 14cfdf4..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/Makefile +++ /dev/null @@ -1,153 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Jedi.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Jedi.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/Jedi" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Jedi" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_screenshots/screenshot_complete.png b/vim-plugins/bundle/jedi-vim/jedi/docs/_screenshots/screenshot_complete.png deleted file mode 100644 index 2bafad6a2f7f47cad8f662a3d3846adf91a32267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17109 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_screenshots/screenshot_function.png b/vim-plugins/bundle/jedi-vim/jedi/docs/_screenshots/screenshot_function.png deleted file mode 100644 index 6109703e4af92dd779158256ac380ce137ca99fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40035 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 NqO71HUny%6@;~sTl^y^9 diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_screenshots/screenshot_pydoc.png b/vim-plugins/bundle/jedi-vim/jedi/docs/_screenshots/screenshot_pydoc.png deleted file mode 100644 index a399d5f73389b7811c91c4bef352a886818a6d10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22041 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

Pxul8DQ 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 z z=YY6fCPIFR)n%%diufE>&c6Eq+4il?ej}JTM^1C1m=Ct0^ajuzX#-uaA;~*Puj$GYZwRhG`1r{C+rVK3uE9>Kt>B*MAi2Cv+6EiT zNfJK((!UkS__6IrTcPQ7=$_~xC)J(YY+D>=k9nx$^KGc-CD5#E16{8o>4^?9q?I1v zP76QtpAW5Q0M0QEBzNFw%b@e$e4w!vmc0($6CI?rr%jKdmw4nu3mSlP@cUSNi?A*4 znXd)iy)CfowWyqP5OiE|bJ_-uUj;m;IlPAROMq3a(3~hbmq*YxebpX19D(EePym1O zfL~i|EhIp2J#?DOPXM&mh7-o;)SYy6TtBqr5yU@7huj@(mB#%Xu-2XzS{W?Y$?4IM zV{!+1a+BdO+Sisx%iB{`zh-3P@2T(toP*2xIQU-q032-%--oQr+e+Nq=yJ+IpxiIv zn2qBv=_Gt5ODR!{FoGebI=1TYu1nJuWVR+r~AL!7Ya3d?1W#pamFG7txI3u6b zAsZuEyA_JrgUhOqwYy+ufv=-OvpIWY*4F!S+<>?r$5QC=t=`wX6KheoI|!VEv)Bzd zPIP&|QSO`Q)LRkfL;E$r%>ph>Z-)+_Yk%?HU836^1nT8-gBQPi-1-b0?Fp}d_}|d6 zkGH2#Gqhc~+&q!NAl{7J?E!Pk_ArhuI9|rF9LH+tZy(}pg|_JRL^lz#C9}uZf^xh} zcP22C@csvPsy>3_EF65ht)X(cgT&6{jVo>g-w*j~5O+ABemdwCII^t}Zu72(+-uq@ zG-RUzeGo?}j<(9jdZ;hXu+$N+E%xKshq^oRRwP)oJwSGDDPPt~2|fh5y%m~nLFbHv z1Y56_dMaQvT65onoy?D$ZR^SoMt%8k5^EqQ9pohLk9^Z}Oal#o~v i2kBn@=WEY#4g7zKv=URK%^~an0000Github - -

diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_templates/sidebarlogo.html b/vim-plugins/bundle/jedi-vim/jedi/docs/_templates/sidebarlogo.html deleted file mode 100644 index d9243c4..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/_templates/sidebarlogo.html +++ /dev/null @@ -1,3 +0,0 @@ -

diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/LICENSE b/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/LICENSE deleted file mode 100644 index 8daab7e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/LICENSE +++ /dev/null @@ -1,37 +0,0 @@ -Copyright (c) 2010 by Armin Ronacher. - -Some rights reserved. - -Redistribution and use in source and binary forms of the theme, with or -without modification, are permitted provided that the following conditions -are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -We kindly ask you to only use these themes in an unmodified manner just -for Flask and Flask-related products, not for unrelated projects. If you -like the visual style and want to use it for your own projects, please -consider making some larger changes to the themes (such as changing -font faces, sizes, colors or margins). - -THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/layout.html b/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/layout.html deleted file mode 100644 index e781a11..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/layout.html +++ /dev/null @@ -1,28 +0,0 @@ -{%- extends "basic/layout.html" %} -{%- block extrahead %} - {{ super() }} - {% if theme_touch_icon %} - - {% endif %} - - - Fork me on GitHub - -{% endblock %} -{%- block relbar2 %}{% endblock %} -{% block header %} - {{ super() }} - {% if pagename == 'index' %} -
- {% endif %} -{% endblock %} -{%- block footer %} - - {% if pagename == 'index' %} -
- {% endif %} -{%- endblock %} diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/relations.html b/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/relations.html deleted file mode 100644 index 3bbcde8..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/relations.html +++ /dev/null @@ -1,19 +0,0 @@ -

Related Topics

- diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/static/flasky.css_t b/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/static/flasky.css_t deleted file mode 100644 index 79ab478..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/static/flasky.css_t +++ /dev/null @@ -1,394 +0,0 @@ -/* - * flasky.css_t - * ~~~~~~~~~~~~ - * - * :copyright: Copyright 2010 by Armin Ronacher. - * :license: Flask Design License, see LICENSE for details. - */ - -{% set page_width = '940px' %} -{% set sidebar_width = '220px' %} - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'Georgia', serif; - font-size: 17px; - background-color: white; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - width: {{ page_width }}; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 {{ sidebar_width }}; -} - -div.sphinxsidebar { - width: {{ sidebar_width }}; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #ffffff; - color: #3E4349; - padding: 0 30px 0 30px; -} - -img.floatingflask { - padding: 0 0 10px 10px; - float: right; -} - -div.footer { - width: {{ page_width }}; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -div.related { - display: none; -} - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebar { - font-size: 14px; - line-height: 1.5; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0 0 20px 0; - margin: 0; - text-align: center; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: 'Garamond', 'Georgia', serif; - color: #444; - font-size: 24px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: #444; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: #000; -} - -div.sphinxsidebar input { - border: 1px solid #ccc; - font-family: 'Georgia', serif; - font-size: 1em; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -{% if theme_index_logo %} -div.indexwrapper h1 { - text-indent: -999999px; - background: url({{ theme_index_logo }}) no-repeat center center; - height: {{ theme_index_logo_height }}; -} -{% endif %} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #ddd; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - background: #fafafa; - margin: 20px -30px; - padding: 10px 30px; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - -div.admonition tt.xref, div.admonition a tt { - border-bottom: 1px solid #fafafa; -} - -dd div.admonition { - margin-left: -60px; - padding-left: 60px; -} - -div.admonition p.admonition-title { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: white; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt { - font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.9em; -} - -img.screenshot { -} - -tt.descname, tt.descclassname { - font-size: 0.95em; -} - -tt.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #eee; - background: #fdfdfd; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.footnote td.label { - width: 0px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: #eee; - padding: 7px 30px; - margin: 15px -30px; - line-height: 1.3em; -} - -dl pre, blockquote pre, li pre { - margin-left: -60px; - padding-left: 60px; -} - -dl dl pre { - margin-left: -90px; - padding-left: 90px; -} - -tt { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, a tt { - background-color: #FBFBFB; - border-bottom: 1px solid white; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #004B6B; -} - -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #004B6B; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #6D4100; -} - -a:hover tt { - background: #EEE; -} diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/static/small_flask.css b/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/static/small_flask.css deleted file mode 100644 index 1c6df30..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/static/small_flask.css +++ /dev/null @@ -1,70 +0,0 @@ -/* - * small_flask.css_t - * ~~~~~~~~~~~~~~~~~ - * - * :copyright: Copyright 2010 by Armin Ronacher. - * :license: Flask Design License, see LICENSE for details. - */ - -body { - margin: 0; - padding: 20px 30px; -} - -div.documentwrapper { - float: none; - background: white; -} - -div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - margin: 50px -30px -20px -30px; - padding: 10px 20px; - background: #333; - color: white; -} - -div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, -div.sphinxsidebar h3 a { - color: white; -} - -div.sphinxsidebar a { - color: #aaa; -} - -div.sphinxsidebar p.logo { - display: none; -} - -div.document { - width: 100%; - margin: 0; -} - -div.related { - display: block; - margin: 0; - padding: 10px 0 20px 0; -} - -div.related ul, -div.related ul li { - margin: 0; - padding: 0; -} - -div.footer { - display: none; -} - -div.bodywrapper { - margin: 0; -} - -div.body { - min-height: 0; - padding: 0; -} diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/theme.conf b/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/theme.conf deleted file mode 100644 index 1d5657f..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask/theme.conf +++ /dev/null @@ -1,9 +0,0 @@ -[theme] -inherit = basic -stylesheet = flasky.css -pygments_style = flask_theme_support.FlaskyStyle - -[options] -index_logo = -index_logo_height = 120px -touch_icon = diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask_theme_support.py b/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask_theme_support.py deleted file mode 100644 index d3e33c0..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/_themes/flask_theme_support.py +++ /dev/null @@ -1,125 +0,0 @@ -""" -Copyright (c) 2010 by Armin Ronacher. - -Some rights reserved. - -Redistribution and use in source and binary forms of the theme, with or -without modification, are permitted provided that the following conditions -are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -We kindly ask you to only use these themes in an unmodified manner just -for Flask and Flask-related products, not for unrelated projects. If you -like the visual style and want to use it for your own projects, please -consider making some larger changes to the themes (such as changing -font faces, sizes, colors or margins). - -THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -""" -# flasky extensions. flasky pygments style based on tango style -from pygments.style import Style -from pygments.token import Keyword, Name, Comment, String, Error, \ - Number, Operator, Generic, Whitespace, Punctuation, Other, Literal - - -class FlaskyStyle(Style): - background_color = "#f8f8f8" - default_style = "" - - styles = { - # No corresponding class for the following: - #Text: "", # class: '' - Whitespace: "underline #f8f8f8", # class: 'w' - Error: "#a40000 border:#ef2929", # class: 'err' - Other: "#000000", # class 'x' - - Comment: "italic #8f5902", # class: 'c' - Comment.Preproc: "noitalic", # class: 'cp' - - Keyword: "bold #004461", # class: 'k' - Keyword.Constant: "bold #004461", # class: 'kc' - Keyword.Declaration: "bold #004461", # class: 'kd' - Keyword.Namespace: "bold #004461", # class: 'kn' - Keyword.Pseudo: "bold #004461", # class: 'kp' - Keyword.Reserved: "bold #004461", # class: 'kr' - Keyword.Type: "bold #004461", # class: 'kt' - - Operator: "#582800", # class: 'o' - Operator.Word: "bold #004461", # class: 'ow' - like keywords - - Punctuation: "bold #000000", # class: 'p' - - # because special names such as Name.Class, Name.Function, etc. - # are not recognized as such later in the parsing, we choose them - # to look the same as ordinary variables. - Name: "#000000", # class: 'n' - Name.Attribute: "#c4a000", # class: 'na' - to be revised - Name.Builtin: "#004461", # class: 'nb' - Name.Builtin.Pseudo: "#3465a4", # class: 'bp' - Name.Class: "#000000", # class: 'nc' - to be revised - Name.Constant: "#000000", # class: 'no' - to be revised - Name.Decorator: "#888", # class: 'nd' - to be revised - Name.Entity: "#ce5c00", # class: 'ni' - Name.Exception: "bold #cc0000", # class: 'ne' - Name.Function: "#000000", # class: 'nf' - Name.Property: "#000000", # class: 'py' - Name.Label: "#f57900", # class: 'nl' - Name.Namespace: "#000000", # class: 'nn' - to be revised - Name.Other: "#000000", # class: 'nx' - Name.Tag: "bold #004461", # class: 'nt' - like a keyword - Name.Variable: "#000000", # class: 'nv' - to be revised - Name.Variable.Class: "#000000", # class: 'vc' - to be revised - Name.Variable.Global: "#000000", # class: 'vg' - to be revised - Name.Variable.Instance: "#000000", # class: 'vi' - to be revised - - Number: "#990000", # class: 'm' - - Literal: "#000000", # class: 'l' - Literal.Date: "#000000", # class: 'ld' - - String: "#4e9a06", # class: 's' - String.Backtick: "#4e9a06", # class: 'sb' - String.Char: "#4e9a06", # class: 'sc' - String.Doc: "italic #8f5902", # class: 'sd' - like a comment - String.Double: "#4e9a06", # class: 's2' - String.Escape: "#4e9a06", # class: 'se' - String.Heredoc: "#4e9a06", # class: 'sh' - String.Interpol: "#4e9a06", # class: 'si' - String.Other: "#4e9a06", # class: 'sx' - String.Regex: "#4e9a06", # class: 'sr' - String.Single: "#4e9a06", # class: 's1' - String.Symbol: "#4e9a06", # class: 'ss' - - Generic: "#000000", # class: 'g' - Generic.Deleted: "#a40000", # class: 'gd' - Generic.Emph: "italic #000000", # class: 'ge' - Generic.Error: "#ef2929", # class: 'gr' - Generic.Heading: "bold #000080", # class: 'gh' - Generic.Inserted: "#00A000", # class: 'gi' - Generic.Output: "#888", # class: 'go' - Generic.Prompt: "#745334", # class: 'gp' - Generic.Strong: "bold #000000", # class: 'gs' - Generic.Subheading: "bold #800080", # class: 'gu' - Generic.Traceback: "bold #a40000", # class: 'gt' - } diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/conf.py b/vim-plugins/bundle/jedi-vim/jedi/docs/conf.py deleted file mode 100644 index 0e25a88..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/conf.py +++ /dev/null @@ -1,291 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Jedi documentation build configuration file, created by -# sphinx-quickstart on Wed Dec 26 00:11:34 2012. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os -import datetime - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('..')) -sys.path.append(os.path.abspath('_themes')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.todo', - 'sphinx.ext.intersphinx', 'sphinx.ext.inheritance_diagram'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -source_encoding = 'utf-8' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Jedi' -copyright = u'2012 - {today.year}, Jedi contributors'.format(today=datetime.date.today()) - -import jedi -from jedi.utils import version_info - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '.'.join(str(x) for x in version_info()[:2]) -# The full version, including alpha/beta/rc tags. -release = jedi.__version__ - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'flask' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = ['_themes'] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -html_sidebars = { - '**': [ - 'sidebarlogo.html', - 'localtoc.html', - #'relations.html', - 'ghbuttons.html', - #'sourcelink.html', - #'searchbox.html' - ] -} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'Jedidoc' - -#html_style = 'default.css' # Force usage of default template on RTD - - -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - #'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - #'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - #'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'Jedi.tex', u'Jedi Documentation', - u'Jedi contributors', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'jedi', u'Jedi Documentation', - [u'Jedi contributors'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------------ - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'Jedi', u'Jedi Documentation', - u'Jedi contributors', 'Jedi', 'Awesome Python autocompletion library.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# -- Options for todo module --------------------------------------------------- - -todo_include_todos = False - -# -- Options for autodoc module ------------------------------------------------ - -autoclass_content = 'both' -autodoc_member_order = 'bysource' -autodoc_default_flags = [] -#autodoc_default_flags = ['members', 'undoc-members'] - - -# -- Options for intersphinx module -------------------------------------------- - -intersphinx_mapping = { - 'http://docs.python.org/': None, -} - - -def skip_deprecated(app, what, name, obj, skip, options): - """ - All attributes containing a deprecated note shouldn't be documented - anymore. This makes it even clearer that they are not supported anymore. - """ - doc = obj.__doc__ - return skip or doc and '.. deprecated::' in doc - - -def setup(app): - app.connect('autodoc-skip-member', skip_deprecated) diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/development.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/docs/development.rst deleted file mode 100644 index bb2c479..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/development.rst +++ /dev/null @@ -1,248 +0,0 @@ -.. include:: ../global.rst - -Jedi Development -================ - -.. currentmodule:: jedi - -.. note:: This documentation is for Jedi developers who want to improve Jedi - itself, but have no idea how Jedi works. If you want to use Jedi for - your IDE, look at the `plugin api `_. - - -Introduction ------------- - -This page tries to address the fundamental demand for documentation of the -|jedi| interals. Understanding a dynamic language is a complex task. Especially -because type inference in Python can be a very recursive task. Therefore |jedi| -couldn't get rid of complexity. I know that **simple is better than complex**, -but unfortunately it sometimes requires complex solutions to understand complex -systems. - -Since most of the Jedi internals have been written by me (David Halter), this -introduction will be written mostly by me, because no one else understands to -the same level how Jedi works. Actually this is also the reason for exactly this -part of the documentation. To make multiple people able to edit the Jedi core. - -In five chapters I'm trying to describe the internals of |jedi|: - -- :ref:`The Jedi Core ` -- :ref:`Core Extensions ` -- :ref:`Imports & Modules ` -- :ref:`Caching & Recursions ` -- :ref:`Helper modules ` - -.. note:: Testing is not documented here, you'll find that - `right here `_. - - -.. _core: - -The Jedi Core -------------- - -The core of Jedi consists of three parts: - -- :ref:`Parser ` -- :ref:`Python code evaluation ` -- :ref:`API ` - -Most people are probably interested in :ref:`code evaluation `, -because that's where all the magic happens. I need to introduce the :ref:`parser -` first, because :mod:`jedi.evaluate` uses it extensively. - -.. _parser: - -Parser (parser/__init__.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.parser - -Parser Representation (parser/representation.py) -++++++++++++++++++++++++++++++++++++++++++++++++ - -.. automodule:: jedi.parser.representation - -Class inheritance diagram: - -.. inheritance-diagram:: - SubModule - Class - Function - Lambda - Flow - ForFlow - Import - Statement - Param - Call - Array - Name - ListComprehension - :parts: 1 - -.. _evaluate: - -Evaluation of python code (evaluate/__init__.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.evaluate - -Evaluation Representation (evaluate/representation.py) -++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -.. automodule:: jedi.evaluate.representation - -.. inheritance-diagram:: - Executable - Instance - InstanceElement - Class - Function - FunctionExecution - :parts: 1 - - -.. _name_resolution: - -Name resolution (evaluate/finder.py) -++++++++++++++++++++++++++++++++++++ - -.. automodule:: jedi.evaluate.finder - - -.. _dev-api: - -API (api.py and api_classes.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The API has been designed to be as easy to use as possible. The API -documentation can be found `here `_. The API itself contains -little code that needs to be mentioned here. Generally I'm trying to be -conservative with the API. I'd rather not add new API features if they are not -necessary, because it's much harder to deprecate stuff than to add it later. - - -.. _core-extensions: - -Core Extensions ---------------- - -Core Extensions is a summary of the following topics: - -- :ref:`Iterables & Dynamic Arrays ` -- :ref:`Dynamic Parameters ` -- :ref:`Fast Parser ` -- :ref:`Docstrings ` -- :ref:`Refactoring ` - -These topics are very important to understand what Jedi additionally does, but -they could be removed from Jedi and Jedi would still work. But slower and -without some features. - -.. _iterables: - -Iterables & Dynamic Arrays (evaluate/iterable.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -To understand Python on a deeper level, |jedi| needs to understand some of the -dynamic features of Python, however this probably the most complicated part: - -.. automodule:: jedi.evaluate.iterable - - -.. _dynamic: - -Parameter completion (evaluate/dynamic.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.evaluate.dynamic - - -.. _fast_parser: - -Fast Parser (parser/fast.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.parser.fast - -.. _docstrings: - -Docstrings (evaluate/docstrings.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.evaluate.docstrings - -.. _refactoring: - -Refactoring (evaluate/refactoring.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.refactoring - - -.. _imports-modules: - -Imports & Modules -------------------- - - -- :ref:`Modules ` -- :ref:`Builtin Modules ` -- :ref:`Imports ` - - -.. _builtin: - -Compiled Modules (evaluate/compiled.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.evaluate.compiled - - -.. _imports: - -Imports (evaluate/imports.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.evaluate.imports - - -.. _caching-recursions: - -Caching & Recursions --------------------- - - -- :ref:`Caching ` -- :ref:`Recursions ` - -.. _cache: - -Caching (cache.py) -~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.cache - -.. _recursion: - -Recursions (recursion.py) -~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.evaluate.recursion - - -.. _dev-helpers: - -Helper Modules ---------------- - -Most other modules are not really central to how Jedi works. They all contain -relevant code, but you if you understand the modules above, you pretty much -understand Jedi. - -Python 2/3 compatibility (_compatibility.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi._compatibility diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/features.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/docs/features.rst deleted file mode 100644 index fd5b3ba..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/features.rst +++ /dev/null @@ -1,263 +0,0 @@ -.. include:: ../global.rst - -Features and Caveats -==================== - -Jedi obviously supports autocompletion. It's also possible to get it working in -(:ref:`your REPL (IPython, etc.) `). - -Static analysis is also possible by using the command ``jedi.names``. - -The Jedi Linter is currently in an alpha version and can be tested by calling -``python -m jedi linter``. - -Jedi would in theory support refactoring, but we have never publicized it, -because it's not production ready. If you're interested in helping out here, -let me know. With the latest parser changes, it should be very easy to actually -make it work. - - -General Features ----------------- - -- python 2.6+ and 3.3+ support -- ignores syntax errors and wrong indentation -- can deal with complex module / function / class structures -- virtualenv support -- can infer function arguments from sphinx, epydoc and basic numpydoc docstrings, - and PEP0484-style type hints (:ref:`type hinting `) - - -Supported Python Features -------------------------- - -|jedi| supports many of the widely used Python features: - -- builtins -- returns, yields, yield from -- tuple assignments / array indexing / dictionary indexing / star unpacking -- with-statement / exception handling -- ``*args`` / ``**kwargs`` -- decorators / lambdas / closures -- generators / iterators -- some descriptors: property / staticmethod / classmethod -- some magic methods: ``__call__``, ``__iter__``, ``__next__``, ``__get__``, - ``__getitem__``, ``__init__`` -- ``list.append()``, ``set.add()``, ``list.extend()``, etc. -- (nested) list comprehensions / ternary expressions -- relative imports -- ``getattr()`` / ``__getattr__`` / ``__getattribute__`` -- function annotations (py3k feature, are ignored right now, but being parsed. - I don't know what to do with them.) -- class decorators (py3k feature, are being ignored too, until I find a use - case, that doesn't work with |jedi|) -- simple/usual ``sys.path`` modifications -- ``isinstance`` checks for if/while/assert -- namespace packages (includes ``pkgutil`` and ``pkg_resources`` namespaces) -- Django / Flask / Buildout support - - -Unsupported Features --------------------- - -Not yet implemented: - -- manipulations of instances outside the instance variables without using - methods -- implicit namespace packages (Python 3.3+, `PEP 420 `_) - -Will probably never be implemented: - -- metaclasses (how could an auto-completion ever support this) -- ``setattr()``, ``__import__()`` -- writing to some dicts: ``globals()``, ``locals()``, ``object.__dict__`` -- evaluating ``if`` / ``while`` / ``del`` - - -Caveats -------- - -**Malformed Syntax** - -Syntax errors and other strange stuff may lead to undefined behaviour of the -completion. |jedi| is **NOT** a Python compiler, that tries to correct you. It -is a tool that wants to help you. But **YOU** have to know Python, not |jedi|. - -**Legacy Python 2 Features** - -This framework should work for both Python 2/3. However, some things were just -not as *pythonic* in Python 2 as things should be. To keep things simple, some -older Python 2 features have been left out: - -- Classes: Always Python 3 like, therefore all classes inherit from ``object``. -- Generators: No ``next()`` method. The ``__next__()`` method is used instead. - -**Slow Performance** - -Importing ``numpy`` can be quite slow sometimes, as well as loading the -builtins the first time. If you want to speed things up, you could write import -hooks in |jedi|, which preload stuff. However, once loaded, this is not a -problem anymore. The same is true for huge modules like ``PySide``, ``wx``, -etc. - -**Security** - -Security is an important issue for |jedi|. Therefore no Python code is -executed. As long as you write pure python, everything is evaluated -statically. But: If you use builtin modules (``c_builtin``) there is no other -option than to execute those modules. However: Execute isn't that critical (as -e.g. in pythoncomplete, which used to execute *every* import!), because it -means one import and no more. So basically the only dangerous thing is using -the import itself. If your ``c_builtin`` uses some strange initializations, it -might be dangerous. But if it does you're screwed anyways, because eventualy -you're going to execute your code, which executes the import. - - -Recipes -------- - -Here are some tips on how to use |jedi| efficiently. - - -.. _type-hinting: - -Type Hinting -~~~~~~~~~~~~ - -If |jedi| cannot detect the type of a function argument correctly (due to the -dynamic nature of Python), you can help it by hinting the type using -one of the following docstring/annotation syntax styles: - -**PEP-0484 style** - -https://www.python.org/dev/peps/pep-0484/ - -function annotations (python 3 only; python 2 function annotations with -comments in planned but not yet implemented) - -:: - - def myfunction(node: ProgramNode, foo: str) -> None: - """Do something with a ``node``. - - """ - node.| # complete here - - -assignment, for-loop and with-statement type hints (all python versions). -Note that the type hints must be on the same line as the statement - -:: - - x = foo() # type: int - x, y = 2, 3 # type: typing.Optional[int], typing.Union[int, str] # typing module is mostly supported - for key, value in foo.items(): # type: str, Employee # note that Employee must be in scope - pass - with foo() as f: # type: int - print(f + 3) - -Most of the features in PEP-0484 are supported including the typing module -(for python < 3.5 you have to do ``pip install typing`` to use these), -and forward references. - -Things that are missing (and this is not an exhaustive list; some of these -are planned, others might be hard to implement and provide little worth): - -- annotating functions with comments: https://www.python.org/dev/peps/pep-0484/#suggested-syntax-for-python-2-7-and-straddling-code -- understanding ``typing.cast()`` -- stub files: https://www.python.org/dev/peps/pep-0484/#stub-files -- ``typing.Callable`` -- ``typing.TypeVar`` -- User defined generic types: https://www.python.org/dev/peps/pep-0484/#user-defined-generic-types - -**Sphinx style** - -http://sphinx-doc.org/domains.html#info-field-lists - -:: - - def myfunction(node, foo): - """Do something with a ``node``. - - :type node: ProgramNode - :param str foo: foo parameter description - - """ - node.| # complete here - -**Epydoc** - -http://epydoc.sourceforge.net/manual-fields.html - -:: - - def myfunction(node): - """Do something with a ``node``. - - @type node: ProgramNode - - """ - node.| # complete here - -**Numpydoc** - -https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt - -In order to support the numpydoc format, you need to install the `numpydoc -`__ package. - -:: - - def foo(var1, var2, long_var_name='hi'): - r"""A one-line summary that does not use variable names or the - function name. - - ... - - Parameters - ---------- - var1 : array_like - Array_like means all those objects -- lists, nested lists, - etc. -- that can be converted to an array. We can also - refer to variables like `var1`. - var2 : int - The type above can either refer to an actual Python type - (e.g. ``int``), or describe the type of the variable in more - detail, e.g. ``(N,) ndarray`` or ``array_like``. - long_variable_name : {'hi', 'ho'}, optional - Choices in brackets, default first when optional. - - ... - - """ - var2.| # complete here - -A little history ----------------- - -The Star Wars Jedi are awesome. My Jedi software tries to imitate a little bit -of the precognition the Jedi have. There's even an awesome `scene -`_ of Monty Python Jedis :-). - -But actually the name hasn't so much to do with Star Wars. It's part of my -second name. - -After I explained Guido van Rossum, how some parts of my auto-completion work, -he said (we drank a beer or two): - - *"Oh, that worries me..."* - -When it's finished, I hope he'll like it :-) - -I actually started Jedi, because there were no good solutions available for VIM. -Most auto-completions just didn't work well. The only good solution was PyCharm. -But I like my good old VIM. Rope was never really intended to be an -auto-completion (and also I really hate project folders for my Python scripts). -It's more of a refactoring suite. So I decided to do my own version of a -completion, which would execute non-dangerous code. But I soon realized, that -this wouldn't work. So I built an extremely recursive thing which understands -many of Python's key features. - -By the way, I really tried to program it as understandable as possible. But I -think understanding it might need quite some time, because of its recursive -nature. diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/installation.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/docs/installation.rst deleted file mode 100644 index c6acbe9..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/installation.rst +++ /dev/null @@ -1,83 +0,0 @@ -.. include:: ../global.rst - -Installation and Configuration -============================== - -You can either include |jedi| as a submodule in your text editor plugin (like -jedi-vim_ does by default), or you can install it systemwide. - -.. note:: This just installs the |jedi| library, not the :ref:`editor plugins - `. For information about how to make it work with your - editor, refer to the corresponding documentation. - - -The preferred way ------------------ - -On any system you can install |jedi| directly from the Python package index -using pip:: - - sudo pip install jedi - -If you want to install the current development version (master branch):: - - sudo pip install -e git://github.com/davidhalter/jedi.git#egg=jedi - - -System-wide installation via a package manager ----------------------------------------------- - -Arch Linux -~~~~~~~~~~ - -You can install |jedi| directly from official Arch Linux packages: - -- `python-jedi `__ - (Python 3) -- `python2-jedi `__ - (Python 2) - -The specified Python version just refers to the *runtime environment* for -|jedi|. Use the Python 2 version if you're running vim (or whatever editor you -use) under Python 2. Otherwise, use the Python 3 version. But whatever version -you choose, both are able to complete both Python 2 and 3 *code*. - -(There is also a packaged version of the vim plugin available: `vim-jedi at -Arch Linux`__.) - -Debian -~~~~~~ - -Debian packages are available in the `unstable repository -`__. - -Others -~~~~~~ - -We are in the discussion of adding |jedi| to the Fedora repositories. - - -Manual installation from a downloaded package ---------------------------------------------- - -If you prefer not to use an automated package installer, you can `download -`__ a current copy of -|jedi| and install it manually. - -To install it, navigate to the directory containing `setup.py` on your console -and type:: - - sudo python setup.py install - - -Inclusion as a submodule ------------------------- - -If you use an editor plugin like jedi-vim_, you can simply include |jedi| as a -git submodule of the plugin directory. Vim plugin managers like Vundle_ or -Pathogen_ make it very easy to keep submodules up to date. - - -.. _jedi-vim: https://github.com/davidhalter/jedi-vim -.. _vundle: https://github.com/gmarik/vundle -.. _pathogen: https://github.com/tpope/vim-pathogen diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/plugin-api-classes.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/docs/plugin-api-classes.rst deleted file mode 100644 index 74eb28b..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/plugin-api-classes.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. include:: ../global.rst - -.. _plugin-api-classes: - -API Return Classes ------------------- - -.. automodule:: jedi.api.classes - :members: - :undoc-members: diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/plugin-api.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/docs/plugin-api.rst deleted file mode 100644 index 93b081e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/plugin-api.rst +++ /dev/null @@ -1,100 +0,0 @@ -.. include:: ../global.rst - -The Plugin API -============== - -.. currentmodule:: jedi - -Note: This documentation is for Plugin developers, who want to improve their -editors/IDE autocompletion - -If you want to use |jedi|, you first need to ``import jedi``. You then have -direct access to the :class:`.Script`. You can then call the functions -documented here. These functions return :ref:`API classes -`. - - -Deprecations ------------- - -The deprecation process is as follows: - -1. A deprecation is announced in the next major/minor release. -2. We wait either at least a year & at least two minor releases until we remove - the deprecated functionality. - - -API documentation ------------------ - -API Interface -~~~~~~~~~~~~~ - -.. automodule:: jedi.api - :members: - :undoc-members: - - -Examples --------- - -Completions: - -.. sourcecode:: python - - >>> import jedi - >>> source = '''import json; json.l''' - >>> script = jedi.Script(source, 1, 19, '') - >>> script - - >>> completions = script.completions() - >>> completions - [, ] - >>> completions[1] - - >>> completions[1].complete - 'oads' - >>> completions[1].name - 'loads' - -Definitions / Goto: - -.. sourcecode:: python - - >>> import jedi - >>> source = '''def my_func(): - ... print 'called' - ... - ... alias = my_func - ... my_list = [1, None, alias] - ... inception = my_list[2] - ... - ... inception()''' - >>> script = jedi.Script(source, 8, 1, '') - >>> - >>> script.goto_assignments() - [] - >>> - >>> script.goto_definitions() - [] - -Related names: - -.. sourcecode:: python - - >>> import jedi - >>> source = '''x = 3 - ... if 1 == 2: - ... x = 4 - ... else: - ... del x''' - >>> script = jedi.Script(source, 5, 8, '') - >>> rns = script.related_names() - >>> rns - [, ] - >>> rns[0].start_pos - (3, 4) - >>> rns[0].is_keyword - False - >>> rns[0].text - 'x' diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/settings.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/docs/settings.rst deleted file mode 100644 index 640a110..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/settings.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. include:: ../global.rst - -Settings -======== - -.. automodule:: jedi.settings diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/static_analsysis.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/docs/static_analsysis.rst deleted file mode 100644 index 7ad03c7..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/static_analsysis.rst +++ /dev/null @@ -1,106 +0,0 @@ - -This file is the start of the documentation of how static analysis works. - -Below is a list of parser names that are used within nodes_to_execute. - ------------- cared for: -global_stmt -exec_stmt # no priority -assert_stmt -if_stmt -while_stmt -for_stmt -try_stmt -(except_clause) -with_stmt -(with_item) -(with_var) -print_stmt -del_stmt -return_stmt -raise_stmt -yield_expr -file_input -funcdef -param -old_lambdef -lambdef -import_name -import_from -(import_as_name) -(dotted_as_name) -(import_as_names) -(dotted_as_names) -(dotted_name) -classdef -comp_for -(comp_if) ? -decorator - ------------ add basic -test -or_test -and_test -not_test -expr -xor_expr -and_expr -shift_expr -arith_expr -term -factor -power -atom -comparison -expr_stmt -testlist -testlist1 -testlist_safe - ------------ special care: -# mostly depends on how we handle the other ones. -testlist_star_expr # should probably just work with expr_stmt -star_expr -exprlist # just ignore? then names are just resolved. Strange anyway, bc expr is not really allowed in the list, typically. - ------------ ignore: -suite -subscriptlist -subscript -simple_stmt -?? sliceop # can probably just be added. -testlist_comp # prob ignore and care about it with atom. -dictorsetmaker -trailer -decorators -decorated -# always execute function arguments? -> no problem with stars. -# Also arglist and argument are different in different grammars. -arglist -argument - - ------------ remove: -tname # only exists in current Jedi parser. REMOVE! -tfpdef # python 2: tuple assignment; python 3: annotation -vfpdef # reduced in python 3 and therefore not existing. -tfplist # not in 3 -vfplist # not in 3 - ---------- not existing with parser reductions. -small_stmt -import_stmt -flow_stmt -compound_stmt -stmt -pass_stmt -break_stmt -continue_stmt -comp_op -augassign -old_test -typedargslist # afaik becomes [param] -varargslist # dito -vname -comp_iter -test_nocond diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/testing.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/docs/testing.rst deleted file mode 100644 index 0c666a1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/testing.rst +++ /dev/null @@ -1,40 +0,0 @@ -.. include:: ../global.rst - -Jedi Testing -============ - -The test suite depends on ``tox`` and ``pytest``:: - - pip install tox pytest - -To run the tests for all supported Python versions:: - - tox - -If you want to test only a specific Python version (e.g. Python 2.7), it's as -easy as:: - - tox -e py27 - -Tests are also run automatically on `Travis CI -`_. - -You want to add a test for |jedi|? Great! We love that. Normally you should -write your tests as :ref:`Blackbox Tests `. Most tests would -fit right in there. - -For specific API testing we're using simple unit tests, with a focus on a -simple and readable testing structure. - -.. _blackbox: - -Blackbox Tests (run.py) -~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: test.run - -Refactoring Tests (refactor.py) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: test.refactor - diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/usage.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/docs/usage.rst deleted file mode 100644 index 82e1040..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/docs/usage.rst +++ /dev/null @@ -1,119 +0,0 @@ -.. include:: ../global.rst - -End User Usage -============== - -If you are a not an IDE Developer, the odds are that you just want to use -|jedi| as a browser plugin or in the shell. Yes that's :ref:`also possible -`! - -|jedi| is relatively young and can be used in a variety of Plugins and -Software. If your Editor/IDE is not among them, recommend |jedi| to your IDE -developers. - - -.. _editor-plugins: - -Editor Plugins --------------- - -Vim: - -- jedi-vim_ -- YouCompleteMe_ -- deoplete-jedi_ - -Emacs: - -- Jedi.el_ -- elpy_ -- anaconda-mode_ - -Sublime Text 2/3: - -- SublimeJEDI_ (ST2 & ST3) -- anaconda_ (only ST3) - -SynWrite: - -- SynJedi_ - -TextMate: - -- Textmate_ (Not sure if it's actually working) - -Kate: - -- Kate_ version 4.13+ `supports it natively - `__, - you have to enable it, though. - -Visual Studio Code: - -- `Python Extension`_ - -Atom: - -- autocomplete-python_ - -SourceLair: - -- SourceLair_ - -GNOME Builder: - -- `GNOME Builder`_ `supports it natively - `__, - and is enabled by default. - -Gedit: - -- gedi_ - -Eric IDE: - -- `Eric IDE`_ (Available as a plugin) - -Web Debugger: - -- wdb_ - -and many more! - -.. _repl-completion: - -Tab completion in the Python Shell ----------------------------------- - -There are two different options how you can use Jedi autocompletion in -your Python interpreter. One with your custom ``$HOME/.pythonrc.py`` file -and one that uses ``PYTHONSTARTUP``. - -Using ``PYTHONSTARTUP`` -~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: jedi.replstartup - -Using a custom ``$HOME/.pythonrc.py`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. autofunction:: jedi.utils.setup_readline - -.. _jedi-vim: https://github.com/davidhalter/jedi-vim -.. _youcompleteme: http://valloric.github.io/YouCompleteMe/ -.. _deoplete-jedi: https://github.com/zchee/deoplete-jedi -.. _Jedi.el: https://github.com/tkf/emacs-jedi -.. _elpy: https://github.com/jorgenschaefer/elpy -.. _anaconda-mode: https://github.com/proofit404/anaconda-mode -.. _sublimejedi: https://github.com/srusskih/SublimeJEDI -.. _anaconda: https://github.com/DamnWidget/anaconda -.. _SynJedi: http://uvviewsoft.com/synjedi/ -.. _wdb: https://github.com/Kozea/wdb -.. _TextMate: https://github.com/lawrenceakka/python-jedi.tmbundle -.. _kate: http://kate-editor.org/ -.. _autocomplete-python: https://atom.io/packages/autocomplete-python -.. _SourceLair: https://www.sourcelair.com -.. _GNOME Builder: https://wiki.gnome.org/Apps/Builder/ -.. _gedi: https://github.com/isamert/gedi -.. _Eric IDE: http://eric-ide.python-projects.org -.. _Python Extension: https://marketplace.visualstudio.com/items?itemName=donjayamanne.python diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/global.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/global.rst deleted file mode 100644 index 0279842..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/global.rst +++ /dev/null @@ -1,3 +0,0 @@ -:orphan: - -.. |jedi| replace:: *Jedi* diff --git a/vim-plugins/bundle/jedi-vim/jedi/docs/index.rst b/vim-plugins/bundle/jedi-vim/jedi/docs/index.rst deleted file mode 100644 index 19c0706..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/docs/index.rst +++ /dev/null @@ -1,40 +0,0 @@ -.. include global.rst - -Jedi - an awesome autocompletion/static analysis library for Python -=================================================================== - -Release v\ |release|. (:doc:`Installation `) - -.. automodule:: jedi - -Autocompletion can look like this (e.g. VIM plugin): - -.. figure:: _screenshots/screenshot_complete.png - - -.. _toc: - -Docs ----- - -.. toctree:: - :maxdepth: 2 - - docs/usage - docs/installation - docs/features - docs/plugin-api - docs/plugin-api-classes - docs/settings - docs/development - docs/testing - - -.. _resources: - -Resources ---------- - -- `Source Code on Github `_ -- `Travis Testing `_ -- `Python Package Index `_ diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/__init__.py deleted file mode 100644 index c278276..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/__init__.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Jedi is a static analysis tool for Python that can be used in IDEs/editors. Its -historic focus is autocompletion, but does static analysis for now as well. -Jedi is fast and is very well tested. It understands Python on a deeper level -than all other static analysis frameworks for Python. - -Jedi has support for two different goto functions. It's possible to search for -related names and to list all names in a Python file and infer them. Jedi -understands docstrings and you can use Jedi autocompletion in your REPL as -well. - -Jedi uses a very simple API to connect with IDE's. There's a reference -implementation as a `VIM-Plugin `_, -which uses Jedi's autocompletion. We encourage you to use Jedi in your IDEs. -It's really easy. - -To give you a simple example how you can use the Jedi library, here is an -example for the autocompletion feature: - ->>> import jedi ->>> source = ''' -... import datetime -... datetime.da''' ->>> script = jedi.Script(source, 3, len('datetime.da'), 'example.py') ->>> script - ->>> completions = script.completions() ->>> completions #doctest: +ELLIPSIS -[, , ...] ->>> print(completions[0].complete) -te ->>> print(completions[0].name) -date - -As you see Jedi is pretty simple and allows you to concentrate on writing a -good text editor, while still having very good IDE features for Python. -""" - -__version__ = '0.10.0' - -from jedi.api import Script, Interpreter, NotFoundError, set_debug_function -from jedi.api import preload_module, defined_names, names -from jedi import settings diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__main__.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/__main__.py deleted file mode 100644 index f2ee047..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/__main__.py +++ /dev/null @@ -1,48 +0,0 @@ -import sys -from os.path import join, dirname, abspath, isdir - - -def _start_linter(): - """ - This is a pre-alpha API. You're not supposed to use it at all, except for - testing. It will very likely change. - """ - import jedi - - if '--debug' in sys.argv: - jedi.set_debug_function() - - for path in sys.argv[2:]: - if path.startswith('--'): - continue - if isdir(path): - import fnmatch - import os - - paths = [] - for root, dirnames, filenames in os.walk(path): - for filename in fnmatch.filter(filenames, '*.py'): - paths.append(os.path.join(root, filename)) - else: - paths = [path] - - try: - for path in paths: - for error in jedi.Script(path=path)._analysis(): - print(error) - except Exception: - if '--pdb' in sys.argv: - import traceback - traceback.print_exc() - import pdb - pdb.post_mortem() - else: - raise - - -if len(sys.argv) == 2 and sys.argv[1] == 'repl': - # don't want to use __main__ only for repl yet, maybe we want to use it for - # something else. So just use the keyword ``repl`` for now. - print(join(dirname(abspath(__file__)), 'api', 'replstartup.py')) -elif len(sys.argv) > 1 and sys.argv[1] == 'linter': - _start_linter() diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/__init__.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/__init__.cpython-35.pyc deleted file mode 100644 index e36f041df7bb88cfc95c1ccae266969777fdcab3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1888 zcma)7U2o$=6rJ=VObTy<|?I_c1-%03m zReDX*(wd7Re!w=D)&UnXT3WH$gky4S9cMl()m6p@_^Zrr(E_lfjCsk13SMy$0YCPN zg0#!A`ER;&BTHUu^V;r^j-wVt4otRQF12yt)U7pTYCdPfm7|4rn&x$tdV--2eM?Ji zt(p~#I+A5+(%gGSh6@SUR3RIx4pKNTP_zK8-9=&Lmd9KnMBrW_8=AmnOulK+F6m6C z))`eT+K?MvhfbkQ!ItEs9{A3|#Ly4dw>Kzv)Rw!Y3LmeAP-m-r+vw_c;!&o$syKDD zRxbCQ?}O@dl#;<#lHpK|l%wEOqA<{tZ-YO5_2cCGr?*ADKJgWi=qDzwQt*)r_PjjS2j*Lxdy}8S@(%nCFn=ZZT2*wxETY8EG~{^8AC!t7z-wb?glv z1Eo1jR~x>FqVaf4$m7N2xrTQO{3+9y)bIDBIF7dl8Pwub$zgB%5@*tz`8YN;YU$wT zBgJ>&?W_$pq|b-Yes$L0^&1SSe~&a?Zu*0rDA8r>fAPp-94!8sV2fmJR^Pe%v9@Pz zpq(B1zrRnQUO&ti^yK>HW^#Ksxr<(0e*F;pf;|55klxwzg~2|`^)i55Vg%gT4u%)! zFSj6h5IO#DD?fRI$R~=TD;t__`M%k>c9w>n+id0G=Mfsx>(;QHjTDME@F!?~ZIr__ zl8hEwW5oH5BlHJ1J2u!KyvLV0`-{nkB?KRb`l|HPL;3=W!Z z+p6YdQekF1JT}egGwr_BxEQXD(Wd#pvP&|a)r(|%I}P@m_hDRUnI)yp>VliojOVK2 zED4uSa~S>&I!zDWo`iiic&|B15_Bm^nv)~}T8qI>l4&o9PA--4UoNxnmjl1x%OVWE zZo(Y-rH7?C@W$pCk8g!J_1k{=>x)sYOCGJ%YgA_xW9~;YFev!p9taQZk|e59E=i!= XrgzyA7=MZ|)~D$1b@x8*eAM|H2c2J; diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index a55b3a49d2efca80d8a341ec08bcf57c433e8bd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1862 zcma)7QE%f!5O&(MO}CT>!~>5bA(Td!bBgW(sVWf_SEQhFs^|$sPAA{Sp2W-9-e`B7 zT=*IMi~CD{<%z$*6W^|zl5#@AQa1K@cINwLzF9vzJrz%WzxqWTM$sS9&b5d8Z}79v zv1HLS$~x0dwwLV}d*%LgzwA!C<-zozJe(eOBG|jIA5D+S-n3U9PmhD`pb+KB^aS^Z zchTTTzCVZ}@jYjXlqE^lNvBehl`J+E7N>PVb8YB$<8ob*%cY}KRy1R(EoY=EnmoU@ zBSdi8*qA2Hidl&GR^jbgg#fL*CZ{ixhUcXY;$QH za3Q0m6`M_XO^&VO%x9&#%GdyZmDw#?0G5<7FWFGRD=q}^!&VfeT@K^F>CTNTd9BS` zyF)q_Er=YLY`t7+%mH@Xg;LYsmw z$wxi#or8;^AFpq3P;SwdyQPXfUJaqnR{6Hk)$PQiOm$Up>S(Q8?mOQH)t4wGgRLaP zp&BWRu&G30peNr3|MtyKlOLYm7WD$DFLURX_F^d8`l2w^Y4SV=-|EU>GXc5KFs3e_v`^ zs8zcWL(nqjcQP=~A;;ZfqWo<^3pF#+Y=-3d2bEW1yUFX=J3a1*ou`y!6xtwRR2I8}16Z6D%HdN&`(rbaCt_W4NhU3fZcgAM7~5ZbTK z`n&rEL+alnjhCDLU?+;WZ1-P0@)!q?eS)0{&?tZN8SsQ4_LjU*r9P0JMd_hmH zZ*C^HcauBu>hjx%*casSkB9Vu%@+oClxx@&#vmFet&R=gq@<2HLZ!bT21K|@1 zab-i(E#EgA$IjBQbDOO^{5(QKdfhsfFYm7L*bAI{ zjhV7e;V8->d$@&R3!aeaRw$3pq2CVA<1f$S^FML^M}uy2*tV)UnN*k=506cA`a-+! zG!BMqW3*{LvFwtJXZ0f4o=$`P=3_V)T4qV9v%28sG~>CdI7`Ce(;S4qL8s|qwyk$+^%m6`#hCli3=9f>I0wQ_yCjLKluHsQx9MHB1jb(=jP)tHd)>Xy II-hp_1|L9Qg#Z8m diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/_compatibility.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/_compatibility.cpython-35.pyc deleted file mode 100644 index 5c1c895a47f0a41ba767ca85ddada37989803b14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7346 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 Rcid`Ot)^w1!1|LI{XcG8V#xpi diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/_compatibility.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/_compatibility.cpython-36.pyc deleted file mode 100644 index 8fd0c8452db10620eaad3f3697435ee35b61e239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6828 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/cache.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/cache.cpython-35.pyc deleted file mode 100644 index 6b893df605f8dceaafe99cb511ae87e97c188084..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4072 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%0DFH$QGQ#%$?EXeJ$-@{HwIaR0-4#3eY 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/common.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/common.cpython-36.pyc deleted file mode 100644 index 9494c9840a368a9766ebb0bb0a73f8b96ec8d319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6231 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/debug.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/debug.cpython-35.pyc deleted file mode 100644 index f47f611d85810581e8d4d2f9fce63740ea478a54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3770 zcmbtW%W~Vu6}=4*0ACVqNtP@>k%yCEGD9UZlgvcraz?Q^Dpx#o%2Gu(t5P&Xv?NFb zKsP|!Vo94gm1L1*kzE$^0a@oS@(I1oYJS11oZBEN$#GQ{LlT$Wjegw6xu@^S++6j? zf8Tg^d7kJ$bna6_`wKjo6ht9@f(Asfpst|UqOL`;Ol>ieb~Lingv%$x^(FBCc!F&a}>@S!>&=-pzxAuU#IXgg$t&AgF@`N zWZE|=#GcEheTzbDc-6FT^Fdq9)o7a3kg6aK{AkZlWM5`kppHNElQj49)X(}#zVb&y zKg+{(l>1TUhjMqc&+pAvG6{AEGHg{%Z~FifUP_fkY2v4QetsbRy;0K7xgVx7<8=p6 zx@D$!{z=M#a%bZ0r)vjkEZ1H}M|rB&S}&t`ZFiJ}1G#o6!{{UKbE6POmDccBFZKq( z__#Nk`6|3|?f%H##-F|>{Iet|}goz~ce zxuBj!$2H1r4zAcq7O0e$45(TRDgz%(3=H76n)di##!~h=f4+_9FKjf6f`2gr#WBAB z|08iB`b9iui#tt6d&Y}0RP2gwEy(5TDDQ=7B2^V5y3&5#mqU*1S@?<;d)~Nw6^#s} zK~#226=92-n6n*m!O@J;FYsh72#J#frx2(EUIcZp1ZO~kEg-=YkYET-23u9INK>a- z*5zI=31Zpn>1wYRr{QS8?Ru~GViXJ}Z|o=S2ing%w(c_)2_tnN`yR*Ha zohR+B_V#;i;ZxRFM>f1J+{xFRKCUqyTf;zQQvHu*213hN1qdCIAq3b5e84{9jO-|O z0P?w%N3qnkUX}+c@0reA&qNt<2xXGLPcvOrGLyyhHY>=fPF7tgc730><_~9qJ$W+L z=1)X>Mi030k3^?}PM9C;@zMj?2OS{y{5?Eza1Yz zXQC7Q1pN(`?ZCX^?dN#=bYko`##o`QVlAg)p!PHE9=+m!Bx8xW;tWIDd!>TmP^z!^ zyfOq?RiNmyH3oNqnSxACoYT5HNc+JcyVsg5F}pM^brXx!Ef!2PO;HRmLUrSvJ${YB zi31lr#Wv0y$o#?2W1jLg#EHe>gza$P8;eeDI(WA(drvPrw*OqlJh7p(~-w3aK+>mS~_(puNs!YcG&#{(06GCF3xKdA_K~N zFTmXounT_6D^P^5ysc(+{44)anjU3-02T)a162K^4-KJ9$xI(iXgp@V-^YZ5bTkP4 zUFi>1l;j|EUpt0Q)gsJQ*I01y-U@&0guDCe{>(Xy3dUW=&vzi8;_p@%Q~&@R0u>7l ze=A-fp&9m~gV69AT~czW00pb{6D@*s80QeZt=!$0iF`d&_ZWkQ&0QKV9u@2ObZ*iDP*9pkhOGj=d3TYw;Y zLDZ4Bm&BrIh^p{}`WT}#Co_84VFrOO(0C65Evjd?&p|LY5R4glK;aU=2NRmhm$HD0bwyGMTXMH(m7u-t31gK7i2klgLk|6p`eMr|Bpr_;ca= zgu6dwaZw?VQlY>e-W8XdSP*jvT@}~DO`(2<@tJFEbeK5q^W=vRND0;E7_kJ2fIbZW zf=a*_OQ)7$O(ZgMC-d)QFvr+i zpV({ODrWw|QAt=yX<@_3U0c)^U&Uh~jb||7B8BN|4oFFdF0&(wZhR zs15vP2rDz(mIp}~sL)5HIw?rkaW4lk_)isu?z+Fh9pI-}jB+(dz>*l+9p#d1*5}Ws zWn_yh#pln9+DLm~szK0~Tx@ut2wr3=07C_eeV|=aluO0V(T>qfT|pa_iqAtH&h9}w zZR3o0fz>ecdwGf)fQ#+dSYav-avR_S7cf)5veO0y#D3_?|B@fnZT9>&8|<%S=-<*C7iIb7tJqEEZ&?jeY=>vkS*KfK@WdOI6W zIuARWU1#ez?e+upbDsGrizW+(oZ_{xLvTQsbSy$qhbbY)Il_bLKk%T#2xi?%E3cHOPl>y3J??)?{WRT69f diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/debug.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/debug.cpython-36.pyc deleted file mode 100644 index ec6d4d4da28704efab483c7856f089bb059bd830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3511 zcmbtWTW=e=6(;9yS+-0<8odayTUCT)y)i-k6)K{q(P! zPcP0h_D^=^H;eHdwDMmNf(hPZeV*{XlQ?}haXHO7JumTW?7jQ;nT zsEOIvOw7uKV>hWkWx4Y$!sbXClW zd1!Z4EQkx}-xC+bCG_u$MX`kb194d_qyJE>h%4wn63%1RSp6P8U=7zqGVc^3%lAx> zmF>ad4a0}64!u12aSZOFl^%rP*zAn{T#NC0n2xgEVVvcejypxKP-#Dnv)wqC9a)yC zI{Y-w3mxksE;~xTjE94`)S?*bI4ffzcZPfP-X10Mbf+i9TFpLf?_$xCGt5O#u6L!# zKBH$ERKlvVHaIkk?Or-MY@gWDCd&dc-GN}C3L(ETPOck{@xCgQG#)K!a8si`OM6)< z&pD4UXPx&83^Xf05nS`Ob6C^vF;DKR)mJ>N9ct-$QUN>{TG9n_CUvgw}mhDDpuvn`-$g(``}YQq?eHW}2@$azG(H zjaxM$ms?-2Vo)ND8H+qG;0~|xc{kwaJWTMsgI2~6k|kWQ#1TAk(L6LCEkFw^f2tWQ zGpyB!Ow?}YXiMemVy4JSut!-Rg!3IjNRPB`}ICx1t63nCgKZS=0U#fI4km_stNCZKa z03gl?d<3>hOF8ky+O1yENqgn(waFHHO2bhfV3Ycg1d&IBR}%z2v+&j#zs2OlU-eLt zVN-t*Cs2DtOI|>Xoi1z>&ardkj@@!e^Y6HJl+rGm*Y%H?a97!phjB3Wgty9$`H?^N zyP=K_LZyVSXO`Geplies+8Mj!Km;rBoSqe-h+e~k_ps-fFS8YP>`;|~2Wz8W#}A9* zpo~*cE(jCg=p1}%*;h)U<#fWieIn;QEZ8rGJrVE7c%ZUegMDM;TkcbfutQxXK~Z_b z0R_BP_F)f8jGPf3jyj@j=o9dXSxFhaV01KpojxaBQ4n-&{S$$>&}owc7Co}K|I zIsMJdtv#8`R|9pMpkz7MW20q!_%wvmC9Ou?xPxL~<~K{E5z$CfsY03gDi2P|g_*1P zt&NJ2b)*Tiyd21mHoouJ(W!Z|tf&K#4Cr;h#mx5l|!uYayX%f*H!X2&9Gt?x%WN{ot$u z|5JDse6b{0WJV zA)ne{~Zx9SSe~ z$Rujkq%SbA`3p{g5ikktjEX1F0`+((Uy7^)R4^{V5ELUhs9>m7JJ+&`-4CC$%1=no2|ExRSriNTdQbi1(kD-#quUC>$*v>t6g zxZ6y^C!1TX2d(>w|M+*!<~>ExRiBe+kRXJq&qz?cRfH*f4Y0M%l92_!g^RW1j0bEI zQ9_&ORz;n+sY=+KSgLU5L^Ga4)i`i3z!&w)^L#lB;F-X&S0UH4UW(i(i0aWoG#iEg E1_gHyR{#J2 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/settings.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/settings.cpython-35.pyc deleted file mode 100644 index a95e9c470b7d54fd9eb044a4f27f4e95ca0c5938..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3044 zcmai0O>^8d7}lnVH*u3R{Y*#;h=G~Xq20`IVP*$tL)uapS~8FW=;CNCc~^;TEtb5= zb~?S}A8>i0RDonobnfX;*q`HY&J>pBpTW8t4HtW^X}@>lK;uCn?FBXCFEZ+ z@yucW2><3`gAhRo!`dKXhQtlRu&MSlgv}6fiLgsV%n~+R?&r$YBXWl9HOUbnd-HA; zb7X&pWQRmH$le0k^UKX;B0O@`AbmwdlZbiucLcyilCm=h3njvzCkXC{PXs`43I^cR zM<-Hu5k!k6{y#)45wT2;VDn<7rn?+mn7r_V_^QjOu8l zdVfMZfhlC9QYolPX&X1UcO7o4hTU!X{&t*qogJp9^H@-M*w;o=j37$j4ptQyE5)DFu*(=X^wmP=f)b@EN;wx3)7_4MQWtrq3E)q-2zZo}pa zai=u75P{G(;1L24RQWnbrIYb+U)E|-o`%lGDaBMz*dK_zAFGgCY2d?Cg`^LSl?iMM zk<|b909t`inGCJYhEq2oF+ntj3@S*ZmuJY>2zxpv5jQsIR~o+mc$o4;h1A$QicVWI zeNa@Y0nai%3=lA+N~dPZq*@C%@Z{~nAktZ&QDAkzr`78_cpTKQRc6j8BIQ9whdT%B?p7=bjQpz(qs$8C0svrgx+>vA*Vbs< z9SFb}JdZ6nB+fxf&g%|ZM^HEda*!DyQVX`~q1eVSX}3fj(N?U`9H>xbjf^Auu}VYP zcXoepuSLJgE&XN`INMX{e&zXH+?5V#Sp#&t3fu?>3f%fI(a>?~9HVh+5TTf7h-MXi ziBuq_@BiAP!a_oNK9RKZ>H(0vA|K^^*9%9_P z=f$JZX8zH=cZ+6#fe;2kF{4c}-;cQkT_x=HTV@JdcVp!I8Nt>r8VkjZ^Ju*AsyR{2 z#ri;I#cZG39-PvMg4dN+rh{UoV*HcwQ26Lpo(ceF#g!@{G^R z1NZJW)l&0St3NE}Kd-{@<#S+}HWsh3*jV(uInVQaZ*Hye9^SFe+-@v1t}T0)ONoow}AIKd~JHO{{d880nq>e diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/settings.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/settings.cpython-36.pyc deleted file mode 100644 index 01c8f27a54018cf17a39f82452b7a016df4cdece..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2939 zcmai0&vF|z7`NSx?QZ_IP1}%`K@5k|p><~9z>KHRhP0tDv}7O$&_$6~vaMuyWmZ}z z?sR&|3=hB!-hfBo4R`_$d*zf@=!u_py^iA~WoM*aNuR#|-|ySc78m_be%t){@$E|G z-^$c8hwmpC<{wO=LMx&wYGIXD^LLHb#1(o)c+|st4x=t>`;Ftue)G5@<_>Dfj;!uq z-S;uii~4bOuq_&*DVoPu=tBHxiuNjKZ9xkPU(AEX1I^mh{RQ0rRV<37;~HJa_ZKDh z=n~{EW2|6Y!?@n7&>MKKisfFF-V`hJmbgZ5i|cev+@SA?Rk|*2(mUc7y(?-zR_@>C zA2li!f48p;iL^*VNdg^Pu3|%mJW;$8N<$8n?UP=pJ3J(>_oYy;iILW-xMx~qSCgR6 zwo{(@c%q_#PVB_E{Ipc56>uXN6q2z~Rt+T!wBzMilP}0_l1d2JI^EN$9i-NO zGyC{{t3`NfwcwVw+tB$^zB80u2qv^;ybA}gB3>7ebP^sM$das^#(~puhA`Gs`ZJLZ zLKSc;4Q$v}2>Qra89}!ILH&OVK*fYgWMFkNnvsOSu zLE-yPM=_67K#Wbh-Lu-vUK9l><4M9t3=Tu6bZll+DyblWNAEslU7awE1S=grOJ2(0 zAuHJykvT_*kh3Dg#<6qGMlP^2#U8?eX=0!-GV_P>+e}$JwLQsF!V@{pTpnAZx@4qN zB6NJul0&y6k8C2NaO98K4<#9lY#(VGXo0fTq^Ak*7#*foh9eRr{MD#MwpD^MLLEEf zA;A#tk3k?*k+P(nC-7dxkC;4ywz;SGfCvsv3KD!27DJB*P7+M@Il&bbr4iwgPNATa zp&|(a)bUhRMSSGS8il)y10V)ZLkkQEQ-G4Qx`WaY1cm?{WC9kk1zPoyY!fzdFXuXj ztx%yjkfF*N8FtCXDh}kp>HXpT7Wpc*pDvPJ6NhT1N{tTH3cnH|#VaSZ?#oVSz4p>`2DKw+9PG*famM3N5 z<>N15l^PS)si(??33dja8Vn5~U@WU?lQjn+w}7jN-g!q)q3f=VT-+n* z+GTAaTfGRzvwG1dvbj(n$|Um!-1cFVh8OBRX=OajRtm&FZ4a4`YUQy2!z5cS0y60x zbbbo@@#Ataoa4V|d{ATyC1=;?K|6C+=e^)OPG@W7?Jmqfi+4WEe;Mcv*Qd+e8N)hV zzr330U3Yd_0nrc6R>8TNp-X28vYQvCJYBy$rRmybS^Q@uxr+qKr?;PP^nocGLv?_T zz0n$~Xrq(HB9t30BOki8`zWRouUdmq)_hdB;ma4`W!jj$YO~s`dvjjh^S!y1>MGWl dYuBsw>cWyYpP#tXdVRrbdRMWY!*0X#{sUno0Vn_f diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/utils.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/__pycache__/utils.cpython-35.pyc deleted file mode 100644 index 559685342641a45233c12722ca7c813e65c13d9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4812 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/_compatibility.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/_compatibility.py deleted file mode 100644 index 3c14b6f..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/_compatibility.py +++ /dev/null @@ -1,263 +0,0 @@ -""" -To ensure compatibility from Python ``2.6`` - ``3.3``, a module has been -created. Clearly there is huge need to use conforming syntax. -""" -import sys -import imp -import os -import re -import pkgutil -try: - import importlib -except ImportError: - pass - -is_py3 = sys.version_info[0] >= 3 -is_py33 = is_py3 and sys.version_info.minor >= 3 -is_py34 = is_py3 and sys.version_info.minor >= 4 -is_py35 = is_py3 and sys.version_info.minor >= 5 -is_py26 = not is_py3 and sys.version_info[1] < 7 - - -class DummyFile(object): - def __init__(self, loader, string): - self.loader = loader - self.string = string - - def read(self): - return self.loader.get_source(self.string) - - def close(self): - del self.loader - - -def find_module_py33(string, path=None): - loader = importlib.machinery.PathFinder.find_module(string, path) - - if loader is None and path is None: # Fallback to find builtins - try: - loader = importlib.find_loader(string) - except ValueError as e: - # See #491. Importlib might raise a ValueError, to avoid this, we - # just raise an ImportError to fix the issue. - raise ImportError("Originally " + repr(e)) - - if loader is None: - raise ImportError("Couldn't find a loader for {0}".format(string)) - - try: - is_package = loader.is_package(string) - if is_package: - if hasattr(loader, 'path'): - module_path = os.path.dirname(loader.path) - else: - # At least zipimporter does not have path attribute - module_path = os.path.dirname(loader.get_filename(string)) - if hasattr(loader, 'archive'): - module_file = DummyFile(loader, string) - else: - module_file = None - else: - module_path = loader.get_filename(string) - module_file = DummyFile(loader, string) - except AttributeError: - # ExtensionLoader has not attribute get_filename, instead it has a - # path attribute that we can use to retrieve the module path - try: - module_path = loader.path - module_file = DummyFile(loader, string) - except AttributeError: - module_path = string - module_file = None - finally: - is_package = False - - if hasattr(loader, 'archive'): - module_path = loader.archive - - return module_file, module_path, is_package - - -def find_module_pre_py33(string, path=None): - try: - module_file, module_path, description = imp.find_module(string, path) - module_type = description[2] - return module_file, module_path, module_type is imp.PKG_DIRECTORY - except ImportError: - pass - - if path is None: - path = sys.path - for item in path: - loader = pkgutil.get_importer(item) - if loader: - try: - loader = loader.find_module(string) - if loader: - is_package = loader.is_package(string) - is_archive = hasattr(loader, 'archive') - try: - module_path = loader.get_filename(string) - except AttributeError: - # fallback for py26 - try: - module_path = loader._get_filename(string) - except AttributeError: - continue - if is_package: - module_path = os.path.dirname(module_path) - if is_archive: - module_path = loader.archive - file = None - if not is_package or is_archive: - file = DummyFile(loader, string) - return (file, module_path, is_package) - except ImportError: - pass - raise ImportError("No module named {0}".format(string)) - - -find_module = find_module_py33 if is_py33 else find_module_pre_py33 -find_module.__doc__ = """ -Provides information about a module. - -This function isolates the differences in importing libraries introduced with -python 3.3 on; it gets a module name and optionally a path. It will return a -tuple containin an open file for the module (if not builtin), the filename -or the name of the module if it is a builtin one and a boolean indicating -if the module is contained in a package. -""" - - -# unicode function -try: - unicode = unicode -except NameError: - unicode = str - -if is_py3: - u = lambda s: s -else: - u = lambda s: s.decode('utf-8') - -u.__doc__ = """ -Decode a raw string into unicode object. Do nothing in Python 3. -""" - -# exec function -if is_py3: - def exec_function(source, global_map): - exec(source, global_map) -else: - eval(compile("""def exec_function(source, global_map): - exec source in global_map """, 'blub', 'exec')) - -# re-raise function -if is_py3: - def reraise(exception, traceback): - raise exception.with_traceback(traceback) -else: - eval(compile(""" -def reraise(exception, traceback): - raise exception, None, traceback -""", 'blub', 'exec')) - -reraise.__doc__ = """ -Re-raise `exception` with a `traceback` object. - -Usage:: - - reraise(Exception, sys.exc_info()[2]) - -""" - -class Python3Method(object): - def __init__(self, func): - self.func = func - - def __get__(self, obj, objtype): - if obj is None: - return lambda *args, **kwargs: self.func(*args, **kwargs) - else: - return lambda *args, **kwargs: self.func(obj, *args, **kwargs) - - -def use_metaclass(meta, *bases): - """ Create a class with a metaclass. """ - if not bases: - bases = (object,) - return meta("HackClass", bases, {}) - - -try: - encoding = sys.stdout.encoding - if encoding is None: - encoding = 'utf-8' -except AttributeError: - encoding = 'ascii' - - -def u(string): - """Cast to unicode DAMMIT! - Written because Python2 repr always implicitly casts to a string, so we - have to cast back to a unicode (and we now that we always deal with valid - unicode, because we check that in the beginning). - """ - if is_py3: - return str(string) - elif not isinstance(string, unicode): - return unicode(str(string), 'UTF-8') - return string - -try: - import builtins # module name in python 3 -except ImportError: - import __builtin__ as builtins - - -import ast - - -def literal_eval(string): - # py3.0, py3.1 and py32 don't support unicode literals. Support those, I - # don't want to write two versions of the tokenizer. - if is_py3 and sys.version_info.minor < 3: - if re.match('[uU][\'"]', string): - string = string[1:] - return ast.literal_eval(string) - - -try: - from itertools import zip_longest -except ImportError: - from itertools import izip_longest as zip_longest # Python 2 - - -def no_unicode_pprint(dct): - """ - Python 2/3 dict __repr__ may be different, because of unicode differens - (with or without a `u` prefix). Normally in doctests we could use `pprint` - to sort dicts and check for equality, but here we have to write a separate - function to do that. - """ - import pprint - s = pprint.pformat(dct) - print(re.sub("u'", "'", s)) - - -def utf8_repr(func): - """ - ``__repr__`` methods in Python 2 don't allow unicode objects to be - returned. Therefore cast them to utf-8 bytes in this decorator. - """ - def wrapper(self): - result = func(self) - if isinstance(result, unicode): - return result.encode('utf-8') - else: - return result - - if is_py3: - return func - else: - return wrapper diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__init__.py deleted file mode 100644 index d443910..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__init__.py +++ /dev/null @@ -1,463 +0,0 @@ -""" -The API basically only provides one class. You can create a :class:`Script` and -use its methods. - -Additionally you can add a debug function with :func:`set_debug_function`. -Alternatively, if you don't need a custom function and are happy with printing -debug messages to stdout, simply call :func:`set_debug_function` without -arguments. - -.. warning:: Please, note that Jedi is **not thread safe**. -""" -import os -import warnings -import sys - -from jedi._compatibility import unicode -from jedi.parser import load_grammar -from jedi.parser import tree -from jedi.parser.fast import FastParser -from jedi.parser.utils import save_parser -from jedi import debug -from jedi import settings -from jedi import common -from jedi import cache -from jedi.api import classes -from jedi.api import interpreter -from jedi.api import usages -from jedi.api import helpers -from jedi.api.completion import Completion -from jedi.evaluate import Evaluator -from jedi.evaluate import representation as er -from jedi.evaluate import imports -from jedi.evaluate.param import try_iter_content -from jedi.evaluate.helpers import get_module_names -from jedi.evaluate.sys_path import get_venv_path -from jedi.evaluate.iterable import unpack_tuple_to_dict - -# Jedi uses lots and lots of recursion. By setting this a little bit higher, we -# can remove some "maximum recursion depth" errors. -sys.setrecursionlimit(2000) - - -class NotFoundError(Exception): - """A custom error to avoid catching the wrong exceptions. - - .. deprecated:: 0.9.0 - Not in use anymore, Jedi just returns no goto result if you're not on a - valid name. - .. todo:: Remove! - """ - - -class Script(object): - """ - A Script is the base for completions, goto or whatever you want to do with - |jedi|. - - You can either use the ``source`` parameter or ``path`` to read a file. - Usually you're going to want to use both of them (in an editor). - - The script might be analyzed in a different ``sys.path`` than |jedi|: - - - if `sys_path` parameter is not ``None``, it will be used as ``sys.path`` - for the script; - - - if `sys_path` parameter is ``None`` and ``VIRTUAL_ENV`` environment - variable is defined, ``sys.path`` for the specified environment will be - guessed (see :func:`jedi.evaluate.sys_path.get_venv_path`) and used for - the script; - - - otherwise ``sys.path`` will match that of |jedi|. - - :param source: The source code of the current file, separated by newlines. - :type source: str - :param line: The line to perform actions on (starting with 1). - :type line: int - :param column: The column of the cursor (starting with 0). - :type column: int - :param path: The path of the file in the file system, or ``''`` if - it hasn't been saved yet. - :type path: str or None - :param encoding: The encoding of ``source``, if it is not a - ``unicode`` object (default ``'utf-8'``). - :type encoding: str - :param source_encoding: The encoding of ``source``, if it is not a - ``unicode`` object (default ``'utf-8'``). - :type encoding: str - :param sys_path: ``sys.path`` to use during analysis of the script - :type sys_path: list - - """ - def __init__(self, source=None, line=None, column=None, path=None, - encoding='utf-8', source_path=None, source_encoding=None, - sys_path=None): - if source_path is not None: - warnings.warn("Use path instead of source_path.", DeprecationWarning) - path = source_path - if source_encoding is not None: - warnings.warn("Use encoding instead of source_encoding.", DeprecationWarning) - encoding = source_encoding - - self._orig_path = path - # An empty path (also empty string) should always result in no path. - self.path = os.path.abspath(path) if path else None - - if source is None: - # TODO add a better warning than the traceback! - with open(path, 'rb') as f: - source = f.read() - - self._source = common.source_to_unicode(source, encoding) - self._code_lines = common.splitlines(self._source) - line = max(len(self._code_lines), 1) if line is None else line - if not (0 < line <= len(self._code_lines)): - raise ValueError('`line` parameter is not in a valid range.') - - line_len = len(self._code_lines[line - 1]) - column = line_len if column is None else column - if not (0 <= column <= line_len): - raise ValueError('`column` parameter is not in a valid range.') - self._pos = line, column - self._path = path - - cache.clear_time_caches() - debug.reset_time() - self._grammar = load_grammar(version='%s.%s' % sys.version_info[:2]) - if sys_path is None: - venv = os.getenv('VIRTUAL_ENV') - if venv: - sys_path = list(get_venv_path(venv)) - self._evaluator = Evaluator(self._grammar, sys_path=sys_path) - debug.speed('init') - - def _get_module(self): - cache.invalidate_star_import_cache(self._path) - parser = FastParser(self._grammar, self._source, self.path) - save_parser(self.path, parser, pickling=False) - - module = self._evaluator.wrap(parser.module) - imports.add_module(self._evaluator, unicode(module.name), module) - return parser.module - - @property - def source_path(self): - """ - .. deprecated:: 0.7.0 - Use :attr:`.path` instead. - .. todo:: Remove! - """ - warnings.warn("Use path instead of source_path.", DeprecationWarning) - return self.path - - def __repr__(self): - return '<%s: %s>' % (self.__class__.__name__, repr(self._orig_path)) - - def completions(self): - """ - Return :class:`classes.Completion` objects. Those objects contain - information about the completions, more than just names. - - :return: Completion objects, sorted by name and __ comes last. - :rtype: list of :class:`classes.Completion` - """ - debug.speed('completions start') - completion = Completion( - self._evaluator, self._get_module(), self._code_lines, - self._pos, self.call_signatures - ) - completions = completion.completions() - debug.speed('completions end') - return completions - - def goto_definitions(self): - """ - Return the definitions of a the path under the cursor. goto function! - This follows complicated paths and returns the end, not the first - definition. The big difference between :meth:`goto_assignments` and - :meth:`goto_definitions` is that :meth:`goto_assignments` doesn't - follow imports and statements. Multiple objects may be returned, - because Python itself is a dynamic language, which means depending on - an option you can have two different versions of a function. - - :rtype: list of :class:`classes.Definition` - """ - leaf = self._get_module().name_for_position(self._pos) - if leaf is None: - leaf = self._get_module().get_leaf_for_position(self._pos) - if leaf is None: - return [] - definitions = helpers.evaluate_goto_definition(self._evaluator, leaf) - - names = [s.name for s in definitions] - defs = [classes.Definition(self._evaluator, name) for name in names] - # The additional set here allows the definitions to become unique in an - # API sense. In the internals we want to separate more things than in - # the API. - return helpers.sorted_definitions(set(defs)) - - def goto_assignments(self, follow_imports=False): - """ - Return the first definition found, while optionally following imports. - Multiple objects may be returned, because Python itself is a - dynamic language, which means depending on an option you can have two - different versions of a function. - - :rtype: list of :class:`classes.Definition` - """ - def filter_follow_imports(names): - for name in names: - definition = name.get_definition() - if definition.type in ('import_name', 'import_from'): - imp = imports.ImportWrapper(self._evaluator, name) - for name in filter_follow_imports(imp.follow(is_goto=True)): - yield name - else: - yield name - - names = self._goto() - if follow_imports: - names = filter_follow_imports(names) - - defs = [classes.Definition(self._evaluator, d) for d in set(names)] - return helpers.sorted_definitions(defs) - - def _goto(self): - """ - Used for goto_assignments and usages. - """ - name = self._get_module().name_for_position(self._pos) - if name is None: - return [] - return list(self._evaluator.goto(name)) - - def usages(self, additional_module_paths=()): - """ - Return :class:`classes.Definition` objects, which contain all - names that point to the definition of the name under the cursor. This - is very useful for refactoring (renaming), or to show all usages of a - variable. - - .. todo:: Implement additional_module_paths - - :rtype: list of :class:`classes.Definition` - """ - temp, settings.dynamic_flow_information = \ - settings.dynamic_flow_information, False - try: - user_stmt = self._get_module().get_statement_for_position(self._pos) - definitions = self._goto() - if not definitions and isinstance(user_stmt, tree.Import): - # For not defined imports (goto doesn't find something, we take - # the name as a definition. This is enough, because every name - # points to it. - name = user_stmt.name_for_position(self._pos) - if name is None: - # Must be syntax - return [] - definitions = [name] - - if not definitions: - # Without a definition for a name we cannot find references. - return [] - - if not isinstance(user_stmt, tree.Import): - # import case is looked at with add_import_name option - definitions = usages.usages_add_import_modules(self._evaluator, - definitions) - - module = set([d.get_parent_until() for d in definitions]) - module.add(self._get_module()) - names = usages.usages(self._evaluator, definitions, module) - - for d in set(definitions): - names.append(classes.Definition(self._evaluator, d)) - finally: - settings.dynamic_flow_information = temp - - return helpers.sorted_definitions(set(names)) - - def call_signatures(self): - """ - Return the function object of the call you're currently in. - - E.g. if the cursor is here:: - - abs(# <-- cursor is here - - This would return the ``abs`` function. On the other hand:: - - abs()# <-- cursor is here - - This would return an empty list.. - - :rtype: list of :class:`classes.CallSignature` - """ - call_signature_details = \ - helpers.get_call_signature_details(self._get_module(), self._pos) - if call_signature_details is None: - return [] - - with common.scale_speed_settings(settings.scale_call_signatures): - definitions = helpers.cache_call_signatures( - self._evaluator, - call_signature_details.bracket_leaf, - self._code_lines, - self._pos - ) - debug.speed('func_call followed') - - return [classes.CallSignature(self._evaluator, d.name, - call_signature_details.bracket_leaf.start_pos, - call_signature_details.call_index, - call_signature_details.keyword_name_str) - for d in definitions if hasattr(d, 'py__call__')] - - def _analysis(self): - self._evaluator.is_analysis = True - self._evaluator.analysis_modules = [self._get_module()] - try: - for node in self._get_module().nodes_to_execute(): - if node.type in ('funcdef', 'classdef'): - if node.type == 'classdef': - continue - raise NotImplementedError - er.Function(self._evaluator, node).get_decorated_func() - elif isinstance(node, tree.Import): - import_names = set(node.get_defined_names()) - if node.is_nested(): - import_names |= set(path[-1] for path in node.paths()) - for n in import_names: - imports.ImportWrapper(self._evaluator, n).follow() - elif node.type == 'expr_stmt': - types = self._evaluator.eval_element(node) - for testlist in node.children[:-1:2]: - # Iterate tuples. - unpack_tuple_to_dict(self._evaluator, types, testlist) - else: - try_iter_content(self._evaluator.goto_definitions(node)) - self._evaluator.reset_recursion_limitations() - - ana = [a for a in self._evaluator.analysis if self.path == a.path] - return sorted(set(ana), key=lambda x: x.line) - finally: - self._evaluator.is_analysis = False - - -class Interpreter(Script): - """ - Jedi API for Python REPLs. - - In addition to completion of simple attribute access, Jedi - supports code completion based on static code analysis. - Jedi can complete attributes of object which is not initialized - yet. - - >>> from os.path import join - >>> namespace = locals() - >>> script = Interpreter('join("").up', [namespace]) - >>> print(script.completions()[0].name) - upper - """ - - def __init__(self, source, namespaces, **kwds): - """ - Parse `source` and mixin interpreted Python objects from `namespaces`. - - :type source: str - :arg source: Code to parse. - :type namespaces: list of dict - :arg namespaces: a list of namespace dictionaries such as the one - returned by :func:`locals`. - - Other optional arguments are same as the ones for :class:`Script`. - If `line` and `column` are None, they are assumed be at the end of - `source`. - """ - try: - namespaces = [dict(n) for n in namespaces] - except Exception: - raise TypeError("namespaces must be a non-empty list of dicts.") - - super(Interpreter, self).__init__(source, **kwds) - self.namespaces = namespaces - - parser_module = super(Interpreter, self)._get_module() - self._module = interpreter.MixedModule(self._evaluator, parser_module, self.namespaces) - - def _get_module(self): - return self._module - - -def defined_names(source, path=None, encoding='utf-8'): - """ - Get all definitions in `source` sorted by its position. - - This functions can be used for listing functions, classes and - data defined in a file. This can be useful if you want to list - them in "sidebar". Each element in the returned list also has - `defined_names` method which can be used to get sub-definitions - (e.g., methods in class). - - :rtype: list of classes.Definition - - .. deprecated:: 0.9.0 - Use :func:`names` instead. - .. todo:: Remove! - """ - warnings.warn("Use call_signatures instead.", DeprecationWarning) - return names(source, path, encoding) - - -def names(source=None, path=None, encoding='utf-8', all_scopes=False, - definitions=True, references=False): - """ - Returns a list of `Definition` objects, containing name parts. - This means you can call ``Definition.goto_assignments()`` and get the - reference of a name. - The parameters are the same as in :py:class:`Script`, except or the - following ones: - - :param all_scopes: If True lists the names of all scopes instead of only - the module namespace. - :param definitions: If True lists the names that have been defined by a - class, function or a statement (``a = b`` returns ``a``). - :param references: If True lists all the names that are not listed by - ``definitions=True``. E.g. ``a = b`` returns ``b``. - """ - def def_ref_filter(_def): - is_def = _def.is_definition() - return definitions and is_def or references and not is_def - - # Set line/column to a random position, because they don't matter. - script = Script(source, line=1, column=0, path=path, encoding=encoding) - defs = [classes.Definition(script._evaluator, name_part) - for name_part in get_module_names(script._get_module(), all_scopes)] - return sorted(filter(def_ref_filter, defs), key=lambda x: (x.line, x.column)) - - -def preload_module(*modules): - """ - Preloading modules tells Jedi to load a module now, instead of lazy parsing - of modules. Usful for IDEs, to control which modules to load on startup. - - :param modules: different module names, list of string. - """ - for m in modules: - s = "import %s as x; x." % m - Script(s, 1, len(s), None).completions() - - -def set_debug_function(func_cb=debug.print_to_stdout, warnings=True, - notices=True, speed=True): - """ - Define a callback debug function to get all the debug messages. - - If you don't specify any arguments, debug messages will be printed to stdout. - - :param func_cb: The callback function for debug messages, with n params. - """ - debug.debug_function = func_cb - debug.enable_warning = warnings - debug.enable_notice = notices - debug.enable_speed = speed diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/__init__.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/__init__.cpython-35.pyc deleted file mode 100644 index cf46de33ea77fe53c71a79090635085f7e20f6a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18112 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]s+AS;e&(>Bl3 z4K|Jo85$!E_O-E&B*I`-Toby0uF5P@i5?(_8VRb>zhv7<>E_LwE=cG$zeVFNn>+Nm$gS;404Un^J{>EBv2b8z&RFs%tTJKL=qp*`eFc7 zXF+ho(*P^&`7ZK9nH|)U)o-QQUpyMa4AZL|@{z!W*Ajr{V#HG zlmkgM2W*_EBuH=eoz7txyd#HNj30H{%61zV(>DnLWCRcEqbEV+&6%8_w3VaZW&^IA zkq_+b5vRV0f|@Tnry<0a;IgP7D`<4;q=m>f1FwnV^9KGttN471+6jFt@03FB({#NR zoZ1uJP=hc@PjDd9+WA~TneQVyl8K3_#8vzT!Ix2}&6f+y>$0+Gj%^Xu{O~W4NyhJ@ z00d%$M^bpevTPC=OaaF1B)!T17r+%neJhN`ikCMLcoTN3YgI8mBcsV!3E#w|qXGOT#sk}u>8Gk*%bv=!k^OuW z0huKB75r=a+SrQ8Fg8MXfv%o3BzOg7eTx@C`waJ!xrr5nTgIlGEiO75 zYLvQjzfH8|X9nLYzQoh$o47!!`fM`Dj2HpA9xOre*TE=8GISup#Q*^SI`vB5DX7m1 z5^7G(ObF_4Ln4cy|@BV%y@ z8v!6XbLA;2d5n=_L#V){e-J-K>!Q1>H3q41Jk+#NZy6CobOLq?BzXLJAP6cHz4>ED z+3o{<(IYyB9)K(q$s5C25i8n&Ynum0X*|Qqw5#?s9uG&P9T*QBCjnU&S%;xLVL~@q z)P};21V2c@`+67(1slmJ=qAI$%uKTsg;>kOurdWM2#L*bzFhvBrLtX(k zC?h98EWS|>$m1MBL{~Eg!>RhB6`T0R2Hd95Mz^ulhWL3J%FoYj$dclbUG--s&RyhW z%;aT2TzV?YKw7@JYkKpv;*f)6> z;v|3&0S`a8Kqu(n0?RdHoO^RHP4hLa7rYX0y|Sr>%0P!)f(-3+qPgTu=Ft*qnMiJt zaQPo*lnfJV^qkB*R~aVTic>(lfURHWg@ZTQzqe4Dm=|?%n!x|F{GMmR;9i9TLzcJZ z5!tda5AsQgCiEwqiD*L3X#LncayP2h<3r^P_=@OdR3*$7@G1;T*1KTl{W=~)UPt(I zj5%uXGWDnI9)H#7^fR3s9|&}v=lSv}Uc^;?|_dg4eycC zc|g86_UJo&B&q~i`tNc;I0ySLwjej#RdKh}e8nwBR@CVI5p z7^_+1ptRLtEK9NwH^(ya##z`^A$W2+`1&yrL%O47EQ^z_fN{(N>3C(S(0Ny{O2)9%l>Um`=N=Ww7v{|Z{Ssps*-zeLnG z@QvtD#6|(@kRX6fVj&BOOYRkG;MJf%v@rTtS;gDbJE-MTG1x}L18UgBe;KfX%lgs``f;W$FI?ksy?dcnD&fbHyciQl? z*;{i0rR0e#y4l{AOnh(Jw2DmX^RZoA<|&xT-u{X^Ni9fKDsWp>9Q~^(*MH3T%jzhb z4F4~oZH2uO1?d z9?6-Eq{MoYxy>O-WJpeWBs1~`POX~=G%YpbnqwH+jtfu6yfBjX?aj%1X(FVYiiQ{T~X#6TP*`XX)7~IWBbkA^&RvcT~Ks$r3gpbFhkk zRezI%IgLwFHm(yxpfs{XVKvEQB(h{daFgz3gPF2jW7H};E+jj1!_ewY@iE=O%k)g* hr?7}KDL>LrX|A|dUHeaUdF|TrshYEVwpOb+{{`WOH!lDH diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 93629259873406030cdaef9d727145656fa7305c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17107 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 HCG)=llchi* diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/classes.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/classes.cpython-35.pyc deleted file mode 100644 index dc9b58a41c90bc75b903254b97f717164280b537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26274 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 O{9ifw?)=sH+5Zdl2Jnsm diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/classes.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/classes.cpython-36.pyc deleted file mode 100644 index 6419232e851e153cbeb014109173a9a6c60f940e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24727 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 JyEZrXe*h4h-pT*~ diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/completion.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/completion.cpython-35.pyc deleted file mode 100644 index 1ef7440955f6d99fb93d52db80e22653ab90ed06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8019 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 L)Mx6;_4EG=Fb!Mm diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/completion.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/completion.cpython-36.pyc deleted file mode 100644 index 047f2bc5577159595fcb305f22ee02f61cd17bfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7303 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 Fe*w^7R+s<) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/helpers.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/helpers.cpython-35.pyc deleted file mode 100644 index fa7cd3aef421b2c0a434f32c66a98a3cb0455ecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9338 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 KnX61yj{gr%FWy=J diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/helpers.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/helpers.cpython-36.pyc deleted file mode 100644 index e2e675d1edc7608e4843ac65c94804fdb72eae3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8507 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/interpreter.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/interpreter.cpython-35.pyc deleted file mode 100644 index 283022f67c9fd06caaf486e2a7687cfcc90a0ccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2890 zcmZuz%Wm676uqP*N}?n?brPqKJcvHfuu0?s0lEs@1P+oe8l`}Z8c`8UX>w#!rbK#% ziftiYrH^&{2VM4y3UJ$1e<7=$JCtNO2<;ioi}!Kvxp#Q2({b8WD; z5KaGzE+XoqwXw;;B zldPvvouUT)0;vs>F1>-67Cnuc6uD;AC0V0k+iY}L@3!BXe(UZ$fBf9rPDj$q0+nko z9eDXcti4ehO%mw^N_skvlf)aRxpyovh|+K}lH*)PUH3ouLOtIq)+gggDjlXuijf?p z@ifTebc~()flM-NVc2w6TZKC31rW+~YY9$}Y&_ zjTnJenUd(c+38#NK@#gcOh?(~6*iEqZPN7i63Sg6;&Ge{(S4AlVUXxe4CXH(BCe3H zf@BiFfPU-TWL>PCPei&mlwqzFhp1Q;$A&V|EO13NOtaIX5lNYu(TV_hwN&%{MtBe> zk&@%W!3MbM*NUo^$)IR1bQhhA@3;%_bWtncXT%I_s>NnB=8j#$Os}9Lt7$dub!)A< zW?#0ZSKfz0$Pn?vEaS#>*T?8iZW(5P9N-G#X@MUtIs=t#`q4VNOuHvNbHc{P7M)d? zZ$m?$VQofDkPXxV6+o+#>r5*ML#n(h>}T3Nx;rDA-FxCU)G90}TE=M+#f&w3q}ak) z(mXdYP#s=g7k=H*NOgeAFDDt{*$%uCj9SVy&7 z6wE4L0}`cjUN*rL{G(t>Q=+(pnsQn$Lew^U{CzMz?ZM}e`N0qWavZqnO>~GuZfYKC z;Se0IuviOJMs!43Couqf4S~g+zyhYQ4n(b9)bs=wgW@B0sUPHpd5nMQAQ8Vz* zh^W?ax^T*pZbDqt%rVr!rVwEgXf4Ef8XLiP*=oj@Ksw|w{-z(yeOwf2u@uxWdfIDzeccOk~FmW9X(*)3Vtps#?$`>|Gh7kz_PBHWy=E)Xv3 z|Aq4Lo=8sb_oR$uE89@H=8v#E1z z)+06xjr^wi3_t2~?!Ms86oU$m;~ DI=q!d diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/interpreter.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/interpreter.cpython-36.pyc deleted file mode 100644 index 5743fd74fab71e9ab1e13541c5e4beaad59263e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2730 zcmZuz%Wm676rJHiqG(BRgVYVu7ty9@)Fg7z09_ew(gbN1tr8$cjS@%)6gjdfQ=&XW zCAJ{16d>#N54!9Z72vk3{z6tgcPPnr5DGII&hy@L&ppF?t(JfL&j-K#o?o{r?WkV)774~DW{hnHK^aUzwDb0x({j`DOC6=^=kNc~V|6AYo* z`o(Ozuc8Th(BY2K6Pd)c$?CDtxR0Xmppp!}v(QR-XeU?9!aXOJ5tF*e`mVEp-Q$BWhySsgeXl=ht zkBVGvcVDKX?LNTIa!`Dn6xjm)ZSoZY&B zT~~;7oEAcKcd|T=GQEq&Y7ubug?t%h(+CEH8|NnL^6L4E$ooSX7g`bUSQ*p^F!eF2&roy|72{XAZ#DTfzR71FT}0}Faci&$v~{A<@&ep9P?7ZT9*A8( zkVRA!${5|TjJfJlOnt|UazlvaR3W~`xFIcj$A}AadL55qO=bxJx-MCTc2kJsX_PHT zHkH(}&|;G7l;ldQI-P!lDso+YLDe~l&ViwB?HAYYT89tV`$%^bI;kZ*Q2xLQ*+6_H#5l?ZLH}C_oSW6Vz0U zZWgS7PA#mVHMbX>vpFdkX&H2E4kil2L{T$(g;3N>S5G0yioiAQm-QuPhE-)vP{Pa7 zHJC1$rM57;tW^SQ;#Rt58nmk+M4Uxh3vr%)W@D0d0~!O1kbC&eK3I9Q7M`_&l9Ez+ zNXrPzgaZVtw`aEP@QO3%5i)7sO0`JjfHVw2y+=z;3iH|4`lL%!E*(cGn&U_$3Zg9X z7{y)~;?Dl@gXQy3N!)VdgJ2LH(KQ(rk}gIa4045AR0bEN*IzGtB5|p{s_xc8ozezH z9%SkGDCkG=5xqP+Ee`W>5a)@!6QqLx1l4Ijligs?T+T8Y>-B!v3fs^!xSW`SC)N5Y zG{&4LAkGK3=o%-}`qMOn?Vav=n~qayN-ZY0WF;rx0E73VtmyXm9;L#zF}t$Hwo>d% zO7NZ-&hGW3Ok@)DWgJa4oPb$|hJm3DoJyr8w~(XsbpmL+y(;cYt+ znT3Ln0`(>S)J>|sqRQm`OQ8_qYoGK!Rai^@|D7ap>mh_GB!Ly<;kql6DX|g$q zlI1qaQUjWG&$f8mH%ZiKBZCA!m9Uz46#8^2cjG8Nl;*s$WjdCZnN-BO@{>z_T_tgC zYq)K`rOZtlZe5;2_jsDgWEr~Z(lshndXK?M(updo&vV4IOrm%@6+?FEbaNj%+=IfK IpS}6{|MrBMDgXcg diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/keywords.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/keywords.cpython-35.pyc deleted file mode 100644 index 2c8dde55808a7d2fcd3b092a1d38d01aeb047e51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4305 zcmaJ^PjB4D6@No=xqrm9){-q-wqtG6xWUHl%59PYZ5_dFQWb7f0f`(aCgL*GawJj9 zCD${Q?OoU>8%=sDTJ%d4$fX~kU!v%Vrvg3o)JxHWPyM|icP-hfDb4KT%$u1vzxS6H z+U?f$KmPRYxi-;1>DaRb`WBjw1W|;4K?#vRrv>@Kj9ZjgG_uLJY2=XakYH|`k{XR% z^4;>?p`=cu2KkNhy+%osMlJGNBqry~MlK}_H1f!Alh{c=AV;2|VT;sXNC+|M%!Ft& z!%li}KK~8RLp%)MO$B{!I%$*o2T6z2-$@EOT%@Q@QG@m^y5M){{(q}c(CNyIqe)SV zq6ONw4O8S%)TU>+^;wF}P_$_1C5o<41aZ#NGaR~1(Hj(DaM`>96Wr#!;RJD&{PXmS z=psd{JcM4Z&{KeQfuc(kT{e7}6|~)3`xnE%)w2pW*1>r4Zc#6P-|vaS9b}_XmV#<* zhC{g(jwER3V;S!8Y@Utdfi7yHo}>f(JPhN!aJI5k7PZYV(Xw#vs3SSB_y{~s)olFg zO>{ZYS44XdAO9Bpmgq516ZF)gCl)>W7CpA;qkF6L#HPnK9a@yzG;~Q_V^we8zeYQe zgFDo=1~3=%@Goz_jHb_{drWj_>}d7t@@Hsag|(%avnTxKUaWK;j5CcJ)ud9H0%7C* z&-DB!>j&9Lu0M!}d8XF;58~1K?ok>ga{W+7@%Q+hiLwjF@%m6s9%d@i{qdw|+)TpJ zZWL~GSr#;!-Z%(#5U1gItg^9+!(0XlunekY{hLWP0B#!~%B6QUdrsl*#Yrxezha~d zbdGf+ndVFlhT3nX@=+e-*-)m1gROMWQD<;m;f}KCD3Si6l8Jl}Vujg3E4Ur0MRYx3 zI8}$)ufATotKiYRF9};L3eRezZ&->^9fe zcn~IW6aaXJ8l&|JZ395r@%7bNbnCnk8cpAX>5mhc$5|SruzUTga^^Cs?ai|4r6NZr-g|P3!(fKGZ?cp3IeXjy4U|C+0 zu;{!j$~#!1J#+-qSc8c)MblDic%S<}-+~Q=vC>_1rT>2=XwP~P0$?SqXrpWUg=h0( zmVOyczlp8_`67dijo{ueuCKAsei`lhuS&P zS2W?G%4DLV@w3lve|+cm)^_2JLxoU}EZ}IF?3Gr_?5CpL2#{UkJP3Xbj!M7h;fT{t z!%5+R?r=h~IU=pO zWc!?Z#Psd%W~RDf_e)$IVRgUHMbVetBp%8x+e)YqZL_os)L2db2fUg|DR<|R+0*t+ zGBa~Rm^nyC9XkI3+w`MK8g%cqh|_>6uy zE}}#$&&I(xp4DY>++N{oYTCGYP5-!iO>gwIdvf6(C4hdwd!#eY=J}FHf0SZAw&=)pg1St&#@DBF<K8{u7$JgVG9&?z!@N$UCFabnS#Y9nbn@P2Teg&)f_p zxB33D;ZjA-3>D6SOvZ{u#dp+xnkg9-4Y=6P`NP7m>&a+0OLWmhoXBG?F4Yz0ZQg;) z7#_t!_i84i79#NLsNLb)k>BD_iVVTmsU_jAOw0`sU_QW#vVOS%Y7fnn4^;Dn<9G=F z9hB;8){6b?_97@RkpRf#G4431RVBt5@l<~WQ>)z6hIi&MW+p62)XN-HDE21B6VL+7D> nT@fAgXNz;94Xl8f-LYKZ+A9`jZO`)-7M;bqS0mv%D_8yp#+Y-< diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/keywords.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/keywords.cpython-36.pyc deleted file mode 100644 index 1994403a44a29de80ca35f8db1cc0398266981dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4019 zcmaJ^Pjeed74PmDjmEO z%_u$XBvQ#Ir)t9m3O)fx_Qr`52R_GKIq?;8;`e$a#g0v+>h3qwue)FW-ru>gu+aGE zuRnjhvcTAX*sSBlJCow zJpYo1%kqj`lFOjDT#*+rw<3e^!mpUTB-dUtxu#Z+obaMtmzObjN%H%w{jL8JOxtZy zdPxxthBwN3HGb0OrPs;({X7HZ--&x_JMJsc?mZRn(yYk`Nv9}laWTv~7@o(8Dc$Wn zQ)TT=oEEBdALs+s5p)E8?xZ;wiyxsg>}$5mC70r*KjvM2Bo4)k^|APjJy|+*#!gol zr|0Q)>D*^e*B>(JLgLzX2THU*8fmj-w1RXzW?d+EjlHscPk>!)Yhr8jaBerzg^31v z0pV*(>s*6y@ca#X{nO3;ystK&B|Vet&5dVCe{<&`ld0P5Dw%wro{6Zsc#v%N)bM$( zWw9|Bmj10Y?(fKWD$#lnz&|bWvfjuCFpfRHs*jjZD2Tk;!{1D_v|=v|YW3<4Uie%Y#&f=d?=IvluJv z4uys%FntbPn_EuZBK8m7E!_v;DQI8D1#fU)G;FUg;7y0LNWU5yf&VF5aTA>Z{73xI zHGIsCI1)`(d|;fh7&}Koe{5W0x z7-U*|5adbY5O?dczlf)>#0jjWOMAhA#Kv`f5u9%c@w#yjig92SVPuP+M~lrCz=EV>l{>{9>lQV(k)EiR2pBwWZ0Y_6p<`% zNm#bt7Ug?bQZ&&qD1Q}3;BimrD|ntcGu?trfj}xQp(AJhn(vCroed||TID)#9Jadp z#9?WXMYVOv4P182U-2X7B)0Y6R&Lf7dJXI)?}2(BRCP5nY-`ba9n_D}rsxL8Q9G{Z z8M2~u3T5;%7MtUA#kn06+n;05dxTm zEm0#o7WP;jfVJ(|`;;Ekl4N_w?)Bz!WK};wD@fx|32zE(X=e*SdLv()9&8=w_*wcp z;5h4`vbm>Bln<098@dfH3n#976?Ex$^2{XJ0mA!^R&lR`m$M&Xa2u_-hfXm{t08P5 zbfl0D(v2%!S;JUUp7dn>C9ET?gZAZ|rG3yyah9H&q_~D$1YYN??BUWeBb^v?XBvxW zoGBo{1MV+?fOF)GS;WWG3wSP#?oHp%3yZ0X4-M(LXgIFW@ zA}+gyN_Q)}Bla_~^CQIj#6;2Wz%kL(A{=Mbn%MBhlwlTRD9%x{c0;?4}&|o4&vY|TpICjZ-YvauYxq` zsesHP)(DGv7632O&;Nm~W`q9YnOx3jVJerMIU&jnpa%HKolu@wVW?JGNcsuoW)w^^ z@4V|w5A*QsKgMW5lX3DM3Ju86{}<$VteG@x>no_t`%Et zr*zG5pi0;t-5`qIB?_3d8t5q6nF({kIIGF+_Po9UhO!YwRZ$T|WiyJN9>nS749a5q zBkDdTMxRO?rOnW)T~of*KcJ3Eykn;OCY}YD_zjw^F?{X{zveqlw^?ht*4Jl{kb_cW zCs>Mqp)&xb=j*0KX-B~o^#(Jd>->=!w_7vb5&v_*kxRPuF&KPv1;bV*bj9|O0j}=efsDjs`xSc64eT=%T`=w8gD9mlHd^= zE*Yl(W>|NA?5;0`;`)B71eXv5RHwlobZF=X|^hA+s(3R zFNB)aek(Zeg|cQ}mF~Vu2bv_rH^*Li=~x}v@HSx$_Po+>1>VAy@@z#6)1A(Y;0RR91 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/usages.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/usages.cpython-35.pyc deleted file mode 100644 index 767b47eb87f4ed792254503ffc84c151831f8ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2000 zcmZ8iOK;mo5S}F|>SZN`A@K^iozdngK|KwZF%P(!B4wM>~0d6!CT zLpr7C13k4sF9q@gdhFlfwWt1tT-tAT(LZ$Q zaj^arLw}Dc!BHvGgh>%~qOEN>%CDWpz9qj4K!{>$Wfu zfeKdUE>%R8pqZc-f)bb3@iX^m<}S8=A(}ZY6eD!z@i6n) z!qA^!;wT6@zR$)tckU4agQ$&(UYHmoWMjk_pt0%DzQuOb0|)^S;`G;G_mb(|AW|~e zlW8#u;xY#`nFM<$L0%@)Om65ZQq^!$>JOk3M^kOlu^YO~WtHYq2i1WL(&Syu4)D6% z8_T%TL3|JuBN^P2{ZT)V$1t9Rsh$3P#rDm%ow%f4bsln>u+c}?A#1kL zrqdg5!n#m<4Gw3~8sEE%X#wZ$1svq=p-%t+XqQ1*WR6)?J@G&)v{6zmTxlamO4F*%c6=<3&m(yAph$Q(kwAcUAMlHCtoO4s@fZs z;IxU`iUV7BHqQ$v?9^@fEXt-4GzQBT$QCd0U`ea1e5(tF4w_;HYTt&MLFfPzc}tzQkQ}##FK!7}tRPidqUT%{?}&BxrckUDa|HNd zdUUiCgB;GHvsr=}1ugY%6q6?*xyN#Fp)Xg0sq9bn~EYrh3Tn{x)o>Yd~6G zVZtr~TX#~O7AVjnmWmUr_P;d$1eV^O6}Arc&34XhK>l>rKz>EOJU3rwo_o-Iowvz-&FVv3$gBz;upfVLtBC G-TwhZX4T68 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/usages.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/__pycache__/usages.cpython-36.pyc deleted file mode 100644 index 324efef3b8b8ec7380b37744dc420ad7243054ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1850 zcmZ8hUvJ|?5Z_%pj^i|?(4$;AkbLN*!~98*cmPgSbqD2v104@Nsa&Kg=X$rPUH?gU zH*FF*PpQNmhzIxBLiyPjQ-cYZVToB6!c@jm|J(X)RYLjEQz zgMs`IrrLvr6HZf-(LSXpvy^34-!ih5+F7IDFtVLGS+m~+xxt-F(sy~2yYO!D);Q#V8Gx5(-3HOJR=UY*a|CA`8`Fcre#t;$Hm)3#Xi2lDVacrX^ia zZf%nVo!g~_yO*S7nsJ*qE=fuE;LC#kNak!v=8efO+DhyaG)jA6?UBRD+?lSIPSPmt zZ8C2jkbKJ~+Bx;4qy(Rf$InR4ej<|}$|mUV&E1kD&C&&Xt)Iy;$u3( z13!(G_KRcxNtg+v6j5*C;8f{#pm7}A z4xS`}$DiUJg?b4`ac```p-|n?wCXI~AB0kd(>BHz=|^mvdeo)2==wwSVPEKlc!rC3`t22*XF=l%+T-b%-*jt2UJ16J2KkeKM&c`7kf660Pub$}6s@?jyi>umrPwx|tsV00ZGmwL>Dleerb zDp4uI2;jh^;`|1tdJ2oi%4Cy=*qIK$gc`LH3MaOPj)c8w!Q`55Bo1^BYr*CX=w;9; zk|y@N->> from jedi import Script - >>> source = ''' - ... import keyword - ... - ... class C: - ... pass - ... - ... class D: - ... pass - ... - ... x = D() - ... - ... def f(): - ... pass - ... - ... for variable in [keyword, f, C, x]: - ... variable''' - - >>> script = Script(source) - >>> defs = script.goto_definitions() - - Before showing what is in ``defs``, let's sort it by :attr:`line` - so that it is easy to relate the result to the source code. - - >>> defs = sorted(defs, key=lambda d: d.line) - >>> defs # doctest: +NORMALIZE_WHITESPACE - [, , - , ] - - Finally, here is what you can get from :attr:`type`: - - >>> defs[0].type - 'module' - >>> defs[1].type - 'class' - >>> defs[2].type - 'instance' - >>> defs[3].type - 'function' - - """ - stripped = self._definition - if isinstance(stripped, er.InstanceElement): - stripped = stripped.var - - if isinstance(stripped, (compiled.CompiledObject, mixed.MixedObject)): - return stripped.api_type() - elif isinstance(stripped, iterable.Array): - return 'instance' - elif isinstance(stripped, tree.Import): - return 'import' - - string = type(stripped).__name__.lower().replace('wrapper', '') - if string == 'exprstmt': - return 'statement' - else: - return string - - def _path(self): - """The path to a module/class/function definition.""" - path = [] - par = self._definition - while par is not None: - if isinstance(par, tree.Import): - path += imports.ImportWrapper(self._evaluator, self._name).import_path - break - try: - name = par.name - except AttributeError: - pass - else: - if isinstance(par, er.ModuleWrapper): - # TODO just make the path dotted from the beginning, we - # shouldn't really split here. - path[0:0] = par.py__name__().split('.') - break - else: - path.insert(0, unicode(name)) - par = par.parent - return path - - @property - def module_name(self): - """ - The module name. - - >>> from jedi import Script - >>> source = 'import json' - >>> script = Script(source, path='example.py') - >>> d = script.goto_definitions()[0] - >>> print(d.module_name) # doctest: +ELLIPSIS - json - """ - return str(self._module.name) - - def in_builtin_module(self): - """Whether this is a builtin module.""" - return isinstance(self._module, compiled.CompiledObject) - - @property - def line(self): - """The line where the definition occurs (starting with 1).""" - if self.in_builtin_module(): - return None - return self._name.start_pos[0] - - @property - def column(self): - """The column where the definition occurs (starting with 0).""" - if self.in_builtin_module(): - return None - return self._name.start_pos[1] - - def docstring(self, raw=False): - r""" - Return a document string for this completion object. - - Example: - - >>> from jedi import Script - >>> source = '''\ - ... def f(a, b=1): - ... "Document for function f." - ... ''' - >>> script = Script(source, 1, len('def f'), 'example.py') - >>> doc = script.goto_definitions()[0].docstring() - >>> print(doc) - f(a, b=1) - - Document for function f. - - Notice that useful extra information is added to the actual - docstring. For function, it is call signature. If you need - actual docstring, use ``raw=True`` instead. - - >>> print(script.goto_definitions()[0].docstring(raw=True)) - Document for function f. - - """ - if raw: - return _Help(self._definition).raw() - else: - return _Help(self._definition).full() - - @property - def doc(self): - """ - .. deprecated:: 0.8.0 - Use :meth:`.docstring` instead. - .. todo:: Remove! - """ - warnings.warn("Use docstring() instead.", DeprecationWarning) - return self.docstring() - - @property - def raw_doc(self): - """ - .. deprecated:: 0.8.0 - Use :meth:`.docstring` instead. - .. todo:: Remove! - """ - warnings.warn("Use docstring() instead.", DeprecationWarning) - return self.docstring(raw=True) - - @property - def description(self): - """A textual description of the object.""" - return unicode(self._name) - - @property - def full_name(self): - """ - Dot-separated path of this object. - - It is in the form of ``[.[...]][.]``. - It is useful when you want to look up Python manual of the - object at hand. - - Example: - - >>> from jedi import Script - >>> source = ''' - ... import os - ... os.path.join''' - >>> script = Script(source, 3, len('os.path.join'), 'example.py') - >>> print(script.goto_definitions()[0].full_name) - os.path.join - - Notice that it correctly returns ``'os.path.join'`` instead of - (for example) ``'posixpath.join'``. - - """ - path = [unicode(p) for p in self._path()] - # TODO add further checks, the mapping should only occur on stdlib. - if not path: - return None # for keywords the path is empty - - with common.ignored(KeyError): - path[0] = self._mapping[path[0]] - for key, repl in self._tuple_mapping.items(): - if tuple(path[:len(key)]) == key: - path = [repl] + path[len(key):] - - return '.'.join(path if path[0] else path[1:]) - - def goto_assignments(self): - defs = self._evaluator.goto(self._name) - return [Definition(self._evaluator, d) for d in defs] - - @memoize_default() - def _follow_statements_imports(self): - """ - Follow both statements and imports, as far as possible. - """ - if self._definition.isinstance(tree.ExprStmt): - return self._evaluator.eval_statement(self._definition) - elif self._definition.isinstance(tree.Import): - return imports.ImportWrapper(self._evaluator, self._name).follow() - else: - return set([self._definition]) - - @property - @memoize_default() - def params(self): - """ - Raises an ``AttributeError``if the definition is not callable. - Otherwise returns a list of `Definition` that represents the params. - """ - followed = list(self._follow_statements_imports()) - if not followed or not hasattr(followed[0], 'py__call__'): - raise AttributeError() - followed = followed[0] # only check the first one. - - if followed.type in ('funcdef', 'lambda'): - if isinstance(followed, er.InstanceElement): - params = followed.params[1:] - else: - params = followed.params - elif followed.isinstance(er.compiled.CompiledObject): - params = followed.params - elif isinstance(followed, er.Class): - try: - sub = followed.get_subscope_by_name('__init__') - params = sub.params[1:] # ignore self - except KeyError: - return [] - elif isinstance(followed, er.Instance): - try: - sub = followed.get_subscope_by_name('__call__') - params = sub.params[1:] # ignore self - except KeyError: - return [] - else: - return [] - return [_Param(self._evaluator, p.name) for p in params] - - def parent(self): - scope = self._definition.get_parent_scope() - scope = self._evaluator.wrap(scope) - return Definition(self._evaluator, scope.name) - - def __repr__(self): - return "<%s %s>" % (type(self).__name__, self.description) - - def get_line_code(self, before=0, after=0): - """ - Returns the line of code where this object was defined. - - :param before: Add n lines before the current line to the output. - :param after: Add n lines after the current line to the output. - - :return str: Returns the line(s) of code or an empty string if it's a - builtin. - """ - if self.in_builtin_module(): - return '' - - path = self._definition.get_parent_until().path - parser = load_parser(path) - lines = common.splitlines(parser.source) - - line_nr = self._name.start_pos[0] - start_line_nr = line_nr - before - return '\n'.join(lines[start_line_nr:line_nr + after + 1]) - - -class Completion(BaseDefinition): - """ - `Completion` objects are returned from :meth:`api.Script.completions`. They - provide additional information about a completion. - """ - def __init__(self, evaluator, name, stack, like_name_length): - super(Completion, self).__init__(evaluator, name) - - self._like_name_length = like_name_length - self._stack = stack - - # Completion objects with the same Completion name (which means - # duplicate items in the completion) - self._same_name_completions = [] - - def _complete(self, like_name): - append = '' - if settings.add_bracket_after_function \ - and self.type == 'Function': - append = '(' - - if isinstance(self._definition, tree.Param) and self._stack is not None: - node_names = list(self._stack.get_node_names(self._evaluator.grammar)) - if 'trailer' in node_names and 'argument' not in node_names: - append += '=' - - name = str(self._name) - if like_name: - name = name[self._like_name_length:] - return name + append - - @property - def complete(self): - """ - Return the rest of the word, e.g. completing ``isinstance``:: - - isinstan# <-- Cursor is here - - would return the string 'ce'. It also adds additional stuff, depending - on your `settings.py`. - """ - return self._complete(True) - - @property - def name_with_symbols(self): - """ - Similar to :attr:`name`, but like :attr:`name` - returns also the symbols, for example:: - - list() - - would return ``.append`` and others (which means it adds a dot). - """ - return self._complete(False) - - @property - def description(self): - """Provide a description of the completion object.""" - if self._definition is None: - return '' - t = self.type - if t == 'statement' or t == 'import': - desc = self._definition.get_code() - else: - desc = '.'.join(unicode(p) for p in self._path()) - - line = '' if self.in_builtin_module else '@%s' % self.line - return '%s: %s%s' % (t, desc, line) - - def __repr__(self): - return '<%s: %s>' % (type(self).__name__, self._name) - - def docstring(self, raw=False, fast=True): - """ - :param fast: Don't follow imports that are only one level deep like - ``import foo``, but follow ``from foo import bar``. This makes - sense for speed reasons. Completing `import a` is slow if you use - the ``foo.docstring(fast=False)`` on every object, because it - parses all libraries starting with ``a``. - """ - definition = self._definition - if isinstance(definition, tree.Import): - i = imports.ImportWrapper(self._evaluator, self._name) - if len(i.import_path) > 1 or not fast: - followed = self._follow_statements_imports() - if followed: - # TODO: Use all of the followed objects as input to Documentation. - definition = list(followed)[0] - - if raw: - return _Help(definition).raw() - else: - return _Help(definition).full() - - @property - def type(self): - """ - The type of the completion objects. Follows imports. For a further - description, look at :attr:`jedi.api.classes.BaseDefinition.type`. - """ - if isinstance(self._definition, tree.Import): - i = imports.ImportWrapper(self._evaluator, self._name) - if len(i.import_path) <= 1: - return 'module' - - followed = self.follow_definition() - if followed: - # Caveat: Only follows the first one, ignore the other ones. - # This is ok, since people are almost never interested in - # variations. - return followed[0].type - return super(Completion, self).type - - @memoize_default() - def _follow_statements_imports(self): - # imports completion is very complicated and needs to be treated - # separately in Completion. - definition = self._definition - if definition.isinstance(tree.Import): - i = imports.ImportWrapper(self._evaluator, self._name) - return i.follow() - return super(Completion, self)._follow_statements_imports() - - @memoize_default() - def follow_definition(self): - """ - Return the original definitions. I strongly recommend not using it for - your completions, because it might slow down |jedi|. If you want to - read only a few objects (<=20), it might be useful, especially to get - the original docstrings. The basic problem of this function is that it - follows all results. This means with 1000 completions (e.g. numpy), - it's just PITA-slow. - """ - defs = self._follow_statements_imports() - return [Definition(self._evaluator, d.name) for d in defs] - - -class Definition(use_metaclass(CachedMetaClass, BaseDefinition)): - """ - *Definition* objects are returned from :meth:`api.Script.goto_assignments` - or :meth:`api.Script.goto_definitions`. - """ - def __init__(self, evaluator, definition): - super(Definition, self).__init__(evaluator, definition) - - @property - def description(self): - """ - A description of the :class:`.Definition` object, which is heavily used - in testing. e.g. for ``isinstance`` it returns ``def isinstance``. - - Example: - - >>> from jedi import Script - >>> source = ''' - ... def f(): - ... pass - ... - ... class C: - ... pass - ... - ... variable = f if random.choice([0,1]) else C''' - >>> script = Script(source, column=3) # line is maximum by default - >>> defs = script.goto_definitions() - >>> defs = sorted(defs, key=lambda d: d.line) - >>> defs - [, ] - >>> str(defs[0].description) # strip literals in python2 - 'def f' - >>> str(defs[1].description) - 'class C' - - """ - d = self._definition - if isinstance(d, er.InstanceElement): - d = d.var - - if isinstance(d, compiled.CompiledObject): - typ = d.api_type() - if typ == 'instance': - typ = 'class' # The description should be similar to Py objects. - d = typ + ' ' + d.name.get_code() - elif isinstance(d, iterable.Array): - d = 'class ' + d.type - elif isinstance(d, (tree.Class, er.Class, er.Instance)): - d = 'class ' + unicode(d.name) - elif isinstance(d, (er.Function, tree.Function)): - d = 'def ' + unicode(d.name) - elif isinstance(d, tree.Module): - # only show module name - d = 'module %s' % self.module_name - elif isinstance(d, tree.Param): - d = d.get_code().strip() - if d.endswith(','): - d = d[:-1] # Remove the comma. - else: # ExprStmt - try: - first_leaf = d.first_leaf() - except AttributeError: - # `d` is already a Leaf (Name). - first_leaf = d - # Remove the prefix, because that's not what we want for get_code - # here. - old, first_leaf.prefix = first_leaf.prefix, '' - try: - d = d.get_code() - finally: - first_leaf.prefix = old - # Delete comments: - d = re.sub('#[^\n]+\n', ' ', d) - # Delete multi spaces/newlines - return re.sub('\s+', ' ', d).strip() - - @property - def desc_with_module(self): - """ - In addition to the definition, also return the module. - - .. warning:: Don't use this function yet, its behaviour may change. If - you really need it, talk to me. - - .. todo:: Add full path. This function is should return a - `module.class.function` path. - """ - position = '' if self.in_builtin_module else '@%s' % (self.line) - return "%s:%s%s" % (self.module_name, self.description, position) - - @memoize_default() - def defined_names(self): - """ - List sub-definitions (e.g., methods in class). - - :rtype: list of Definition - """ - defs = self._follow_statements_imports() - # For now we don't want base classes or evaluate decorators. - defs = [d.base if isinstance(d, (er.Class, er.Function)) else d for d in defs] - iterable = (defined_names(self._evaluator, d) for d in defs) - iterable = list(iterable) - return list(chain.from_iterable(iterable)) - - def is_definition(self): - """ - Returns True, if defined as a name in a statement, function or class. - Returns False, if it's a reference to such a definition. - """ - return self._name.is_definition() - - def __eq__(self, other): - return self._name.start_pos == other._name.start_pos \ - and self.module_path == other.module_path \ - and self.name == other.name \ - and self._evaluator == other._evaluator - - def __ne__(self, other): - return not self.__eq__(other) - - def __hash__(self): - return hash((self._name.start_pos, self.module_path, self.name, self._evaluator)) - - -class CallSignature(Definition): - """ - `CallSignature` objects is the return value of `Script.function_definition`. - It knows what functions you are currently in. e.g. `isinstance(` would - return the `isinstance` function. without `(` it would return nothing. - """ - def __init__(self, evaluator, executable_name, bracket_start_pos, index, key_name_str): - super(CallSignature, self).__init__(evaluator, executable_name) - self._index = index - self._key_name_str = key_name_str - self._bracket_start_pos = bracket_start_pos - - @property - def index(self): - """ - The Param index of the current call. - Returns None if the index cannot be found in the curent call. - """ - if self._key_name_str is not None: - for i, param in enumerate(self.params): - if self._key_name_str == param.name: - return i - if self.params and self.params[-1]._name.get_definition().stars == 2: - return i - else: - return None - - if self._index >= len(self.params): - - for i, param in enumerate(self.params): - # *args case - if param._name.get_definition().stars == 1: - return i - return None - return self._index - - @property - def bracket_start(self): - """ - The indent of the bracket that is responsible for the last function - call. - """ - return self._bracket_start_pos - - @property - def call_name(self): - """ - .. deprecated:: 0.8.0 - Use :attr:`.name` instead. - .. todo:: Remove! - - The name (e.g. 'isinstance') as a string. - """ - warnings.warn("Use name instead.", DeprecationWarning) - return unicode(self.name) - - @property - def module(self): - """ - .. deprecated:: 0.8.0 - Use :attr:`.module_name` for the module name. - .. todo:: Remove! - """ - return self._executable.get_parent_until() - - def __repr__(self): - return '<%s: %s index %s>' % (type(self).__name__, self._name, - self.index) - - -class _Param(Definition): - """ - Just here for backwards compatibility. - """ - def get_code(self): - """ - .. deprecated:: 0.8.0 - Use :attr:`.description` and :attr:`.name` instead. - .. todo:: Remove! - - A function to get the whole code of the param. - """ - warnings.warn("Use description instead.", DeprecationWarning) - return self.description - - -class _Help(object): - """ - Temporary implementation, will be used as `Script.help() or something in - the future. - """ - def __init__(self, definition): - self._name = definition - - def full(self): - try: - return self._name.doc - except AttributeError: - return self.raw() - - def raw(self): - """ - The raw docstring ``__doc__`` for any object. - - See :attr:`doc` for example. - """ - try: - return self._name.raw_doc - except AttributeError: - return '' diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/completion.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/completion.py deleted file mode 100644 index 2c0c44d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/completion.py +++ /dev/null @@ -1,256 +0,0 @@ -from itertools import chain - -from jedi.parser import token -from jedi.parser import tree -from jedi import debug -from jedi import settings -from jedi.api import classes -from jedi.api import helpers -from jedi.evaluate import imports -from jedi.api import keywords -from jedi.evaluate import compiled -from jedi.evaluate.helpers import call_of_leaf -from jedi.evaluate.finder import global_names_dict_generator, filter_definition_names - - -def get_call_signature_param_names(call_signatures): - # add named params - for call_sig in call_signatures: - # Allow protected access, because it's a public API. - module = call_sig._name.get_parent_until() - # Compiled modules typically don't allow keyword arguments. - if not isinstance(module, compiled.CompiledObject): - for p in call_sig.params: - # Allow access on _definition here, because it's a - # public API and we don't want to make the internal - # Name object public. - if p._definition.stars == 0: # no *args/**kwargs - yield p._name - - -def filter_names(evaluator, completion_names, stack, like_name): - comp_dct = {} - for name in set(completion_names): - if settings.case_insensitive_completion \ - and str(name).lower().startswith(like_name.lower()) \ - or str(name).startswith(like_name): - - if isinstance(name.parent, (tree.Function, tree.Class)): - # TODO I think this is a hack. It should be an - # er.Function/er.Class before that. - name = evaluator.wrap(name.parent).name - new = classes.Completion( - evaluator, - name, - stack, - len(like_name) - ) - k = (new.name, new.complete) # key - if k in comp_dct and settings.no_completion_duplicates: - comp_dct[k]._same_name_completions.append(new) - else: - comp_dct[k] = new - yield new - - -def get_user_scope(module, position): - """ - Returns the scope in which the user resides. This includes flows. - """ - user_stmt = module.get_statement_for_position(position) - if user_stmt is None: - def scan(scope): - for s in scope.children: - if s.start_pos <= position <= s.end_pos: - if isinstance(s, (tree.Scope, tree.Flow)): - return scan(s) or s - elif s.type in ('suite', 'decorated'): - return scan(s) - return None - - return scan(module) or module - else: - return user_stmt.get_parent_scope(include_flows=True) - - -class Completion: - def __init__(self, evaluator, module, code_lines, position, call_signatures_method): - self._evaluator = evaluator - self._module = evaluator.wrap(module) - self._code_lines = code_lines - - # The first step of completions is to get the name - self._like_name = helpers.get_on_completion_name(module, code_lines, position) - # The actual cursor position is not what we need to calculate - # everything. We want the start of the name we're on. - self._position = position[0], position[1] - len(self._like_name) - self._call_signatures_method = call_signatures_method - - def completions(self): - completion_names = self._get_context_completions() - - completions = filter_names(self._evaluator, completion_names, - self.stack, self._like_name) - - return sorted(completions, key=lambda x: (x.name.startswith('__'), - x.name.startswith('_'), - x.name.lower())) - - def _get_context_completions(self): - """ - Analyzes the context that a completion is made in and decides what to - return. - - Technically this works by generating a parser stack and analysing the - current stack for possible grammar nodes. - - Possible enhancements: - - global/nonlocal search global - - yield from / raise from <- could be only exceptions/generators - - In args: */**: no completion - - In params (also lambda): no completion before = - """ - - grammar = self._evaluator.grammar - - try: - self.stack = helpers.get_stack_at_position( - grammar, self._code_lines, self._module, self._position - ) - except helpers.OnErrorLeaf as e: - self.stack = None - if e.error_leaf.value == '.': - # After ErrorLeaf's that are dots, we will not do any - # completions since this probably just confuses the user. - return [] - # If we don't have a context, just use global completion. - - return self._global_completions() - - allowed_keywords, allowed_tokens = \ - helpers.get_possible_completion_types(grammar, self.stack) - - completion_names = list(self._get_keyword_completion_names(allowed_keywords)) - - if token.NAME in allowed_tokens: - # This means that we actually have to do type inference. - - symbol_names = list(self.stack.get_node_names(grammar)) - - nodes = list(self.stack.get_nodes()) - - if "import_stmt" in symbol_names: - level = 0 - only_modules = True - level, names = self._parse_dotted_names(nodes) - if "import_from" in symbol_names: - if 'import' in nodes: - only_modules = False - else: - assert "import_name" in symbol_names - - completion_names += self._get_importer_names( - names, - level, - only_modules - ) - elif nodes and nodes[-1] in ('as', 'def', 'class'): - # No completions for ``with x as foo`` and ``import x as foo``. - # Also true for defining names as a class or function. - return list(self._get_class_context_completions(is_function=True)) - elif symbol_names[-1] == 'trailer' and nodes[-1] == '.': - dot = self._module.get_leaf_for_position(self._position) - atom_expr = call_of_leaf(dot.get_previous_leaf()) - completion_names += self._trailer_completions(atom_expr) - else: - completion_names += self._global_completions() - completion_names += self._get_class_context_completions(is_function=False) - - if 'trailer' in symbol_names: - call_signatures = self._call_signatures_method() - completion_names += get_call_signature_param_names(call_signatures) - - return completion_names - - def _get_keyword_completion_names(self, keywords_): - for k in keywords_: - yield keywords.keyword(self._evaluator, k).name - - def _global_completions(self): - scope = get_user_scope(self._module, self._position) - if not scope.is_scope(): # Might be a flow (if/while/etc). - scope = scope.get_parent_scope() - scope = self._evaluator.wrap(scope) - debug.dbg('global completion scope: %s', scope) - names_dicts = global_names_dict_generator( - self._evaluator, - scope, - self._position - ) - completion_names = [] - for names_dict, pos in names_dicts: - names = list(chain.from_iterable(names_dict.values())) - if not names: - continue - completion_names += filter_definition_names( - names, self._module.get_statement_for_position(self._position), pos - ) - return completion_names - - def _trailer_completions(self, atom_expr): - scopes = self._evaluator.eval_element(atom_expr) - completion_names = [] - debug.dbg('trailer completion scopes: %s', scopes) - for s in scopes: - names = [] - for names_dict in s.names_dicts(search_global=False): - names += chain.from_iterable(names_dict.values()) - - completion_names += filter_definition_names( - names, self._module.get_statement_for_position(self._position) - ) - return completion_names - - def _parse_dotted_names(self, nodes): - level = 0 - names = [] - for node in nodes[1:]: - if node in ('.', '...'): - if not names: - level += len(node.value) - elif node.type == 'dotted_name': - names += node.children[::2] - elif node.type == 'name': - names.append(node) - else: - break - return level, names - - def _get_importer_names(self, names, level=0, only_modules=True): - names = [str(n) for n in names] - i = imports.Importer(self._evaluator, names, self._module, level) - return i.completion_names(self._evaluator, only_modules=only_modules) - - def _get_class_context_completions(self, is_function=True): - """ - Autocomplete inherited methods when overriding in child class. - """ - leaf = self._module.get_leaf_for_position(self._position, include_prefixes=True) - cls = leaf.get_parent_until(tree.Class) - if isinstance(cls, (tree.Class, tree.Function)): - # Complete the methods that are defined in the super classes. - cls = self._evaluator.wrap(cls) - else: - return - - if cls.start_pos[1] >= leaf.start_pos[1]: - return - - names_dicts = cls.names_dicts(search_global=False, is_instance=True) - # The first dict is the dictionary of class itself. - next(names_dicts) - for names_dict in names_dicts: - for values in names_dict.values(): - for value in values: - if (value.parent.type == 'funcdef') == is_function: - yield value diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/helpers.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/helpers.py deleted file mode 100644 index 8102cc7..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/helpers.py +++ /dev/null @@ -1,315 +0,0 @@ -""" -Helpers for the API -""" -import re -from collections import namedtuple - -from jedi._compatibility import u -from jedi.evaluate.helpers import call_of_leaf -from jedi import parser -from jedi.parser import tokenize -from jedi.cache import time_cache -from jedi import common - - -CompletionParts = namedtuple('CompletionParts', ['path', 'has_dot', 'name']) - - -def sorted_definitions(defs): - # Note: `or ''` below is required because `module_path` could be - return sorted(defs, key=lambda x: (x.module_path or '', x.line or 0, x.column or 0)) - - -def get_on_completion_name(module, lines, position): - leaf = module.get_leaf_for_position(position) - if leaf is None or leaf.type in ('string', 'error_leaf'): - # Completions inside strings are a bit special, we need to parse the - # string. The same is true for comments and error_leafs. - line = lines[position[0] - 1] - # The first step of completions is to get the name - return re.search(r'(?!\d)\w+$|$', line[:position[1]]).group(0) - elif leaf.type not in ('name', 'keyword'): - return '' - - return leaf.value[:position[1] - leaf.start_pos[1]] - - -def _get_code(code_lines, start_pos, end_pos): - # Get relevant lines. - lines = code_lines[start_pos[0] - 1:end_pos[0]] - # Remove the parts at the end of the line. - lines[-1] = lines[-1][:end_pos[1]] - # Remove first line indentation. - lines[0] = lines[0][start_pos[1]:] - return '\n'.join(lines) - - -class OnErrorLeaf(Exception): - @property - def error_leaf(self): - return self.args[0] - - -def _is_on_comment(leaf, position): - # We might be on a comment. - if leaf.type == 'endmarker': - try: - dedent = leaf.get_previous_leaf() - if dedent.type == 'dedent' and dedent.prefix: - # TODO This is needed because the fast parser uses multiple - # endmarker tokens within a file which is obviously ugly. - # This is so ugly that I'm not even commenting how it exactly - # happens, but let me tell you that I want to get rid of it. - leaf = dedent - except IndexError: - pass - - comment_lines = common.splitlines(leaf.prefix) - difference = leaf.start_pos[0] - position[0] - prefix_start_pos = leaf.get_start_pos_of_prefix() - if difference == 0: - indent = leaf.start_pos[1] - elif position[0] == prefix_start_pos[0]: - indent = prefix_start_pos[1] - else: - indent = 0 - line = comment_lines[-difference - 1][:position[1] - indent] - return '#' in line - - -def _get_code_for_stack(code_lines, module, position): - leaf = module.get_leaf_for_position(position, include_prefixes=True) - # It might happen that we're on whitespace or on a comment. This means - # that we would not get the right leaf. - if leaf.start_pos >= position: - if _is_on_comment(leaf, position): - return u('') - - # If we're not on a comment simply get the previous leaf and proceed. - try: - leaf = leaf.get_previous_leaf() - except IndexError: - return u('') # At the beginning of the file. - - is_after_newline = leaf.type == 'newline' - while leaf.type == 'newline': - try: - leaf = leaf.get_previous_leaf() - except IndexError: - return u('') - - if leaf.type in ('indent', 'dedent'): - return u('') - elif leaf.type == 'error_leaf' or leaf.type == 'string': - # Error leafs cannot be parsed, completion in strings is also - # impossible. - raise OnErrorLeaf(leaf) - else: - if leaf == ';': - user_stmt = leaf.parent - else: - user_stmt = leaf.get_definition() - if user_stmt.parent.type == 'simple_stmt': - user_stmt = user_stmt.parent - - if is_after_newline: - if user_stmt.start_pos[1] > position[1]: - # This means that it's actually a dedent and that means that we - # start without context (part of a suite). - return u('') - - # This is basically getting the relevant lines. - return _get_code(code_lines, user_stmt.get_start_pos_of_prefix(), position) - - -def get_stack_at_position(grammar, code_lines, module, pos): - """ - Returns the possible node names (e.g. import_from, xor_test or yield_stmt). - """ - class EndMarkerReached(Exception): - pass - - def tokenize_without_endmarker(code): - tokens = tokenize.source_tokens(code, use_exact_op_types=True) - for token_ in tokens: - if token_.string == safeword: - raise EndMarkerReached() - else: - yield token_ - - code = _get_code_for_stack(code_lines, module, pos) - # We use a word to tell Jedi when we have reached the start of the - # completion. - # Use Z as a prefix because it's not part of a number suffix. - safeword = 'ZZZ_USER_WANTS_TO_COMPLETE_HERE_WITH_JEDI' - # Remove as many indents from **all** code lines as possible. - code = code + safeword - - p = parser.ParserWithRecovery(grammar, code, start_parsing=False) - try: - p.parse(tokenizer=tokenize_without_endmarker(code)) - except EndMarkerReached: - return Stack(p.stack) - raise SystemError("This really shouldn't happen. There's a bug in Jedi.") - - -class Stack(list): - def get_node_names(self, grammar): - for dfa, state, (node_number, nodes) in self: - yield grammar.number2symbol[node_number] - - def get_nodes(self): - for dfa, state, (node_number, nodes) in self: - for node in nodes: - yield node - - -def get_possible_completion_types(grammar, stack): - def add_results(label_index): - try: - grammar_labels.append(inversed_tokens[label_index]) - except KeyError: - try: - keywords.append(inversed_keywords[label_index]) - except KeyError: - t, v = grammar.labels[label_index] - assert t >= 256 - # See if it's a symbol and if we're in its first set - inversed_keywords - itsdfa = grammar.dfas[t] - itsstates, itsfirst = itsdfa - for first_label_index in itsfirst.keys(): - add_results(first_label_index) - - inversed_keywords = dict((v, k) for k, v in grammar.keywords.items()) - inversed_tokens = dict((v, k) for k, v in grammar.tokens.items()) - - keywords = [] - grammar_labels = [] - - def scan_stack(index): - dfa, state, node = stack[index] - states, first = dfa - arcs = states[state] - - for label_index, new_state in arcs: - if label_index == 0: - # An accepting state, check the stack below. - scan_stack(index - 1) - else: - add_results(label_index) - - scan_stack(-1) - - return keywords, grammar_labels - - -def evaluate_goto_definition(evaluator, leaf): - if leaf.type == 'name': - # In case of a name we can just use goto_definition which does all the - # magic itself. - return evaluator.goto_definitions(leaf) - - node = None - parent = leaf.parent - if parent.type == 'atom': - node = leaf.parent - elif parent.type == 'trailer': - node = call_of_leaf(leaf) - - if node is None: - return [] - return evaluator.eval_element(node) - - -CallSignatureDetails = namedtuple( - 'CallSignatureDetails', - ['bracket_leaf', 'call_index', 'keyword_name_str'] -) - - -def _get_index_and_key(nodes, position): - """ - Returns the amount of commas and the keyword argument string. - """ - nodes_before = [c for c in nodes if c.start_pos < position] - if nodes_before[-1].type == 'arglist': - nodes_before = [c for c in nodes_before[-1].children if c.start_pos < position] - - key_str = None - - if nodes_before: - last = nodes_before[-1] - if last.type == 'argument' and last.children[1].end_pos <= position: - # Checked if the argument - key_str = last.children[0].value - elif last == '=': - key_str = nodes_before[-2].value - - return nodes_before.count(','), key_str - - -def _get_call_signature_details_from_error_node(node, position): - for index, element in reversed(list(enumerate(node.children))): - # `index > 0` means that it's a trailer and not an atom. - if element == '(' and element.end_pos <= position and index > 0: - # It's an error node, we don't want to match too much, just - # until the parentheses is enough. - children = node.children[index:] - name = element.get_previous_leaf() - if name.type == 'name' or name.parent.type in ('trailer', 'atom'): - return CallSignatureDetails( - element, - *_get_index_and_key(children, position) - ) - - -def get_call_signature_details(module, position): - leaf = module.get_leaf_for_position(position, include_prefixes=True) - if leaf == ')': - if leaf.end_pos == position: - leaf = leaf.get_next_leaf() - # Now that we know where we are in the syntax tree, we start to look at - # parents for possible function definitions. - node = leaf.parent - while node is not None: - if node.type in ('funcdef', 'classdef'): - # Don't show call signatures if there's stuff before it that just - # makes it feel strange to have a call signature. - return None - - for n in node.children[::-1]: - if n.start_pos < position and n.type == 'error_node': - result = _get_call_signature_details_from_error_node(n, position) - if result is not None: - return result - - if node.type == 'trailer' and node.children[0] == '(': - leaf = node.get_previous_leaf() - return CallSignatureDetails( - node.children[0], *_get_index_and_key(node.children, position)) - - node = node.parent - - return None - - -@time_cache("call_signatures_validity") -def cache_call_signatures(evaluator, bracket_leaf, code_lines, user_pos): - """This function calculates the cache key.""" - index = user_pos[0] - 1 - - before_cursor = code_lines[index][:user_pos[1]] - other_lines = code_lines[bracket_leaf.start_pos[0]:index] - whole = '\n'.join(other_lines + [before_cursor]) - before_bracket = re.match(r'.*\(', whole, re.DOTALL) - - module_path = bracket_leaf.get_parent_until().path - if module_path is None: - yield None # Don't cache! - else: - yield (module_path, before_bracket, bracket_leaf.start_pos) - yield evaluate_goto_definition( - evaluator, - bracket_leaf.get_previous_leaf() - ) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/interpreter.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/interpreter.py deleted file mode 100644 index a6778a6..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/interpreter.py +++ /dev/null @@ -1,67 +0,0 @@ -""" -TODO Some parts of this module are still not well documented. -""" -import copy - -from jedi.cache import underscore_memoization -from jedi.evaluate import helpers -from jedi.evaluate.representation import ModuleWrapper -from jedi.evaluate.compiled import mixed - - -class MixedModule(object): - resets_positions = True - type = 'mixed_module' - - def __init__(self, evaluator, parser_module, namespaces): - self._evaluator = evaluator - self._namespaces = namespaces - - self._namespace_objects = [type('jedi_namespace', (), n) for n in namespaces] - self._wrapped_module = ModuleWrapper(evaluator, parser_module) - # Usually we are dealing with very small code sizes when it comes to - # interpreter modules. In this case we just copy the whole syntax tree - # to be able to modify it. - self._parser_module = copy.deepcopy(parser_module) - - for child in self._parser_module.children: - child.parent = self - - def names_dicts(self, search_global): - for names_dict in self._wrapped_module.names_dicts(search_global): - yield names_dict - - for namespace_obj in self._namespace_objects: - m = mixed.MixedObject(self._evaluator, namespace_obj, self._parser_module.name) - for names_dict in m.names_dicts(False): - yield names_dict - - def __getattr__(self, name): - return getattr(self._parser_module, name) - - -class LazyName(helpers.FakeName): - def __init__(self, evaluator, module, name, value): - super(LazyName, self).__init__(name) - self._module = module - self._evaluator = evaluator - self._value = value - self._name = name - - def is_definition(self): - return True - - @property - @underscore_memoization - def parent(self): - """ - Creating fake statements for the interpreter. - - Here we are trying to link back to Python code, if possible. This means - we try to find the python module for a name (not the builtin). - """ - return mixed.create(self._evaluator, self._value) - - @parent.setter - def parent(self, value): - """Needed because the super class tries to set parent.""" diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/keywords.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/keywords.py deleted file mode 100644 index d6a72b1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/keywords.py +++ /dev/null @@ -1,132 +0,0 @@ -import pydoc -import keyword - -from jedi._compatibility import is_py3, is_py35 -from jedi import common -from jedi.evaluate.helpers import FakeName -from jedi.parser.tree import Leaf -try: - from pydoc_data import topics as pydoc_topics -except ImportError: - # Python 2 - try: - import pydoc_topics - except ImportError: - # This is for Python 3 embeddable version, which dont have - # pydoc_data module in its file python3x.zip. - pydoc_topics = None - -if is_py3: - if is_py35: - # in python 3.5 async and await are not proper keywords, but for - # completion pursposes should as as though they are - keys = keyword.kwlist + ["async", "await"] - else: - keys = keyword.kwlist -else: - keys = keyword.kwlist + ['None', 'False', 'True'] - - -def has_inappropriate_leaf_keyword(pos, module): - relevant_errors = filter( - lambda error: error.first_pos[0] == pos[0], - module.error_statement_stacks) - - for error in relevant_errors: - if error.next_token in keys: - return True - - return False - - -def completion_names(evaluator, stmt, pos, module): - keyword_list = all_keywords(evaluator) - - if not isinstance(stmt, Leaf) or has_inappropriate_leaf_keyword(pos, module): - keyword_list = filter( - lambda keyword: not keyword.only_valid_as_leaf, - keyword_list - ) - return [keyword.name for keyword in keyword_list] - - -def all_keywords(evaluator, pos=(0, 0)): - return set([Keyword(evaluator, k, pos) for k in keys]) - - -def keyword(evaluator, string, pos=(0, 0)): - if string in keys: - return Keyword(evaluator, string, pos) - else: - return None - - -def get_operator(evaluator, string, pos): - return Keyword(evaluator, string, pos) - - -keywords_only_valid_as_leaf = ( - 'continue', - 'break', -) - - -class Keyword(object): - type = 'completion_keyword' - - def __init__(self, evaluator, name, pos): - self.name = FakeName(name, self, pos) - self.start_pos = pos - self.parent = evaluator.BUILTINS - - def get_parent_until(self): - return self.parent - - @property - def only_valid_as_leaf(self): - return self.name.value in keywords_only_valid_as_leaf - - @property - def names(self): - """ For a `parsing.Name` like comparision """ - return [self.name] - - @property - def docstr(self): - return imitate_pydoc(self.name) - - def __repr__(self): - return '<%s: %s>' % (type(self).__name__, self.name) - - -def imitate_pydoc(string): - """ - It's not possible to get the pydoc's without starting the annoying pager - stuff. - """ - if pydoc_topics is None: - return '' - - # str needed because of possible unicode stuff in py2k (pydoc doesn't work - # with unicode strings) - string = str(string) - h = pydoc.help - with common.ignored(KeyError): - # try to access symbols - string = h.symbols[string] - string, _, related = string.partition(' ') - - get_target = lambda s: h.topics.get(s, h.keywords.get(s)) - while isinstance(string, str): - string = get_target(string) - - try: - # is a tuple now - label, related = string - except TypeError: - return '' - - try: - return pydoc_topics.topics[label] if pydoc_topics else '' - except KeyError: - return '' diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/replstartup.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/replstartup.py deleted file mode 100644 index 5bfcc8c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/replstartup.py +++ /dev/null @@ -1,27 +0,0 @@ -""" -To use Jedi completion in Python interpreter, add the following in your shell -setup (e.g., ``.bashrc``):: - - export PYTHONSTARTUP="$(python -m jedi repl)" - -Then you will be able to use Jedi completer in your Python interpreter:: - - $ python - Python 2.7.2+ (default, Jul 20 2012, 22:15:08) - [GCC 4.6.1] on linux2 - Type "help", "copyright", "credits" or "license" for more information. - >>> import os - >>> os.path.join().split().in # doctest: +SKIP - os.path.join().split().index os.path.join().split().insert - -""" -import jedi.utils -from jedi import __version__ as __jedi_version__ - -print('REPL completion using Jedi %s' % __jedi_version__) -jedi.utils.setup_readline() - -del jedi - -# Note: try not to do many things here, as it will contaminate global -# namespace of the interpreter. diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/usages.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/api/usages.py deleted file mode 100644 index ecb8856..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/api/usages.py +++ /dev/null @@ -1,49 +0,0 @@ -from jedi._compatibility import unicode -from jedi.api import classes -from jedi.parser import tree -from jedi.evaluate import imports - - -def usages(evaluator, definition_names, mods): - """ - :param definitions: list of Name - """ - def compare_array(definitions): - """ `definitions` are being compared by module/start_pos, because - sometimes the id's of the objects change (e.g. executions). - """ - result = [] - for d in definitions: - module = d.get_parent_until() - result.append((module, d.start_pos)) - return result - - search_name = unicode(list(definition_names)[0]) - compare_definitions = compare_array(definition_names) - mods |= set([d.get_parent_until() for d in definition_names]) - definitions = [] - for m in imports.get_modules_containing_name(evaluator, mods, search_name): - try: - check_names = m.used_names[search_name] - except KeyError: - continue - for name in check_names: - - result = evaluator.goto(name) - if [c for c in compare_array(result) if c in compare_definitions]: - definitions.append(classes.Definition(evaluator, name)) - # Previous definitions might be imports, so include them - # (because goto might return that import name). - compare_definitions += compare_array([name]) - return definitions - - -def usages_add_import_modules(evaluator, definitions): - """ Adds the modules of the imports """ - new = set() - for d in definitions: - imp_or_stmt = d.get_definition() - if isinstance(imp_or_stmt, tree.Import): - s = imports.ImportWrapper(evaluator, d) - new |= set(s.follow(is_goto=True)) - return set(definitions) | new diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/cache.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/cache.py deleted file mode 100644 index 8dc8254..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/cache.py +++ /dev/null @@ -1,127 +0,0 @@ -""" -This caching is very important for speed and memory optimizations. There's -nothing really spectacular, just some decorators. The following cache types are -available: - -- module caching (`load_parser` and `save_parser`), which uses pickle and is - really important to assure low load times of modules like ``numpy``. -- ``time_cache`` can be used to cache something for just a limited time span, - which can be useful if there's user interaction and the user cannot react - faster than a certain time. - -This module is one of the reasons why |jedi| is not thread-safe. As you can see -there are global variables, which are holding the cache information. Some of -these variables are being cleaned after every API usage. -""" -import time - -from jedi import settings -from jedi.parser.utils import parser_cache -from jedi.parser.utils import underscore_memoization - -_time_caches = {} - - -def clear_time_caches(delete_all=False): - """ Jedi caches many things, that should be completed after each completion - finishes. - - :param delete_all: Deletes also the cache that is normally not deleted, - like parser cache, which is important for faster parsing. - """ - global _time_caches - - if delete_all: - for cache in _time_caches.values(): - cache.clear() - parser_cache.clear() - else: - # normally just kill the expired entries, not all - for tc in _time_caches.values(): - # check time_cache for expired entries - for key, (t, value) in list(tc.items()): - if t < time.time(): - # delete expired entries - del tc[key] - - -def time_cache(time_add_setting): - """ - This decorator works as follows: Call it with a setting and after that - use the function with a callable that returns the key. - But: This function is only called if the key is not available. After a - certain amount of time (`time_add_setting`) the cache is invalid. - - If the given key is None, the function will not be cached. - """ - def _temp(key_func): - dct = {} - _time_caches[time_add_setting] = dct - - def wrapper(*args, **kwargs): - generator = key_func(*args, **kwargs) - key = next(generator) - try: - expiry, value = dct[key] - if expiry > time.time(): - return value - except KeyError: - pass - - value = next(generator) - time_add = getattr(settings, time_add_setting) - if key is not None: - dct[key] = time.time() + time_add, value - return value - return wrapper - return _temp - - -def memoize_method(method): - """A normal memoize function.""" - def wrapper(self, *args, **kwargs): - dct = self.__dict__.setdefault('_memoize_method_dct', {}) - key = (args, frozenset(kwargs.items())) - try: - return dct[key] - except KeyError: - result = method(self, *args, **kwargs) - dct[key] = result - return result - return wrapper - - -def cache_star_import(func): - @time_cache("star_import_cache_validity") - def wrapper(self): - yield self.base # The cache key - yield func(self) - return wrapper - - -def _invalidate_star_import_cache_module(module, only_main=False): - """ Important if some new modules are being reparsed """ - try: - t, modules = _time_caches['star_import_cache_validity'][module] - except KeyError: - pass - else: - del _time_caches['star_import_cache_validity'][module] - - # This stuff was part of load_parser. However since we're most likely - # not going to use star import caching anymore, just ignore it. - #else: - # In case there is already a module cached and this module - # has to be reparsed, we also need to invalidate the import - # caches. - # _invalidate_star_import_cache_module(parser_cache_item.parser.module) - - -def invalidate_star_import_cache(path): - """On success returns True.""" - try: - parser_cache_item = parser_cache[path] - except KeyError: - pass - else: - _invalidate_star_import_cache_module(parser_cache_item.parser.module) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/common.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/common.py deleted file mode 100644 index ae10f42..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/common.py +++ /dev/null @@ -1,169 +0,0 @@ -""" A universal module with functions / classes without dependencies. """ -import sys -import contextlib -import functools -import re -from itertools import chain -from ast import literal_eval - -from jedi._compatibility import unicode, reraise -from jedi import settings - - -class UncaughtAttributeError(Exception): - """ - Important, because `__getattr__` and `hasattr` catch AttributeErrors - implicitly. This is really evil (mainly because of `__getattr__`). - `hasattr` in Python 2 is even more evil, because it catches ALL exceptions. - Therefore this class originally had to be derived from `BaseException` - instead of `Exception`. But because I removed relevant `hasattr` from - the code base, we can now switch back to `Exception`. - - :param base: return values of sys.exc_info(). - """ - - -def safe_property(func): - return property(reraise_uncaught(func)) - - -def reraise_uncaught(func): - """ - Re-throw uncaught `AttributeError`. - - Usage: Put ``@rethrow_uncaught`` in front of the function - which does **not** suppose to raise `AttributeError`. - - AttributeError is easily get caught by `hasattr` and another - ``except AttributeError`` clause. This becomes problem when you use - a lot of "dynamic" attributes (e.g., using ``@property``) because you - can't distinguish if the property does not exist for real or some code - inside of the "dynamic" attribute through that error. In a well - written code, such error should not exist but getting there is very - difficult. This decorator is to help us getting there by changing - `AttributeError` to `UncaughtAttributeError` to avoid unexpected catch. - This helps us noticing bugs earlier and facilitates debugging. - - .. note:: Treating StopIteration here is easy. - Add that feature when needed. - """ - @functools.wraps(func) - def wrapper(*args, **kwds): - try: - return func(*args, **kwds) - except AttributeError: - exc_info = sys.exc_info() - reraise(UncaughtAttributeError(exc_info[1]), exc_info[2]) - return wrapper - - -class PushBackIterator(object): - def __init__(self, iterator): - self.pushes = [] - self.iterator = iterator - self.current = None - - def push_back(self, value): - self.pushes.append(value) - - def __iter__(self): - return self - - def next(self): - """ Python 2 Compatibility """ - return self.__next__() - - def __next__(self): - if self.pushes: - self.current = self.pushes.pop() - else: - self.current = next(self.iterator) - return self.current - - -@contextlib.contextmanager -def scale_speed_settings(factor): - a = settings.max_executions - b = settings.max_until_execution_unique - settings.max_executions *= factor - settings.max_until_execution_unique *= factor - try: - yield - finally: - settings.max_executions = a - settings.max_until_execution_unique = b - - -def indent_block(text, indention=' '): - """This function indents a text block with a default of four spaces.""" - temp = '' - while text and text[-1] == '\n': - temp += text[-1] - text = text[:-1] - lines = text.split('\n') - return '\n'.join(map(lambda s: indention + s, lines)) + temp - - -@contextlib.contextmanager -def ignored(*exceptions): - """ - Context manager that ignores all of the specified exceptions. This will - be in the standard library starting with Python 3.4. - """ - try: - yield - except exceptions: - pass - - -def source_to_unicode(source, encoding=None): - def detect_encoding(): - """ - For the implementation of encoding definitions in Python, look at: - - http://www.python.org/dev/peps/pep-0263/ - - http://docs.python.org/2/reference/lexical_analysis.html#encoding-declarations - """ - byte_mark = literal_eval(r"b'\xef\xbb\xbf'") - if source.startswith(byte_mark): - # UTF-8 byte-order mark - return 'utf-8' - - first_two_lines = re.match(br'(?:[^\n]*\n){0,2}', source).group(0) - possible_encoding = re.search(br"coding[=:]\s*([-\w.]+)", - first_two_lines) - if possible_encoding: - return possible_encoding.group(1) - else: - # the default if nothing else has been set -> PEP 263 - return encoding if encoding is not None else 'utf-8' - - if isinstance(source, unicode): - # only cast str/bytes - return source - - encoding = detect_encoding() - if not isinstance(encoding, unicode): - encoding = unicode(encoding, 'utf-8', 'replace') - # cast to unicode by default - return unicode(source, encoding, 'replace') - - -def splitlines(string): - """ - A splitlines for Python code. In contrast to Python's ``str.splitlines``, - looks at form feeds and other special characters as normal text. Just - splits ``\n`` and ``\r\n``. - Also different: Returns ``['']`` for an empty string input. - """ - return re.split('\n|\r\n', string) - - -def unite(iterable): - """Turns a two dimensional array into a one dimensional.""" - return set(chain.from_iterable(iterable)) - - -def to_list(func): - def wrapper(*args, **kwargs): - return list(func(*args, **kwargs)) - return wrapper diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/debug.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/debug.py deleted file mode 100644 index 692f9c8..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/debug.py +++ /dev/null @@ -1,133 +0,0 @@ -from jedi._compatibility import encoding, is_py3, u -import inspect -import os -import time - -def _lazy_colorama_init(): - """ - Lazily init colorama if necessary, not to screw up stdout is debug not - enabled. - - This version of the function does nothing. - """ - pass - -_inited=False - -try: - if os.name == 'nt': - # Does not work on Windows, as pyreadline and colorama interfere - raise ImportError - else: - # Use colorama for nicer console output. - from colorama import Fore, init - from colorama import initialise - def _lazy_colorama_init(): - """ - Lazily init colorama if necessary, not to screw up stdout is - debug not enabled. - - This version of the function does init colorama. - """ - global _inited - if not _inited: - # pytest resets the stream at the end - causes troubles. Since - # after every output the stream is reset automatically we don't - # need this. - initialise.atexit_done = True - try: - init() - except Exception: - # Colorama fails with initializing under vim and is buggy in - # version 0.3.6. - pass - _inited = True - -except ImportError: - class Fore(object): - RED = '' - GREEN = '' - YELLOW = '' - MAGENTA = '' - RESET = '' - -NOTICE = object() -WARNING = object() -SPEED = object() - -enable_speed = False -enable_warning = False -enable_notice = False - -# callback, interface: level, str -debug_function = None -ignored_modules = ['jedi.parser'] -_debug_indent = 0 -_start_time = time.time() - - -def reset_time(): - global _start_time, _debug_indent - _start_time = time.time() - _debug_indent = 0 - - -def increase_indent(func): - """Decorator for makin """ - def wrapper(*args, **kwargs): - global _debug_indent - _debug_indent += 1 - try: - return func(*args, **kwargs) - finally: - _debug_indent -= 1 - return wrapper - - -def dbg(message, *args, **kwargs): - """ Looks at the stack, to see if a debug message should be printed. """ - # Python 2 compatibility, because it doesn't understand default args - color = kwargs.pop('color', 'GREEN') - assert color - - if debug_function and enable_notice: - frm = inspect.stack()[1] - mod = inspect.getmodule(frm[0]) - if not (mod.__name__ in ignored_modules): - i = ' ' * _debug_indent - _lazy_colorama_init() - debug_function(color, i + 'dbg: ' + message % tuple(u(repr(a)) for a in args)) - - -def warning(message, *args, **kwargs): - format = kwargs.pop('format', True) - assert not kwargs - - if debug_function and enable_warning: - i = ' ' * _debug_indent - if format: - message = message % tuple(u(repr(a)) for a in args) - debug_function('RED', i + 'warning: ' + message) - - -def speed(name): - if debug_function and enable_speed: - now = time.time() - i = ' ' * _debug_indent - debug_function('YELLOW', i + 'speed: ' + '%s %s' % (name, now - _start_time)) - - -def print_to_stdout(color, str_out): - """ - The default debug function that prints to standard out. - - :param str color: A string that is an attribute of ``colorama.Fore``. - """ - col = getattr(Fore, color) - _lazy_colorama_init() - if not is_py3: - str_out = str_out.encode(encoding, 'replace') - print(col + str_out + Fore.RESET) - - -# debug_function = print_to_stdout diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/.sys_path.py.un~ b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/.sys_path.py.un~ deleted file mode 100644 index 397417eb685ed7c080344a6f9acf1eef41b8842b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9435 zcmeI2&ubGw6vsD7Ya8488?4s0(NOjv?TV%Gtn{FNfU;0R*@oB#x4U6?6X;EkB6tzJ zsV5J56?^ce7eP@JyjAg{c=J|KWYPDX%!FxOHw80RVIE9o_6M7p_xaA7$=h70E#Eos z&H5jW?E2N~v!|{-DxEzuymsSOcIffF&o4imyM1@&{ef?*#ha%MBXh(s46i^IRHH`V z6~dKpzV1Xzh2v;W@#dUq1->6yQ_WfsH5|9<6Bu}9(He>05apEoL`G=1CL&eCC?~n62xa|5IZl% zb7ejqK`u|Fk9QPQLGmb$HA#3ur4h*&X(T5)M(8=yEdO@>1JY%ao=Soi@s!8{N-dDj};KXUTM$}h!%z95VcJ^&VOg3=uZ}fpB^iU zw1jju1XjO1$sITmJa6sN$!1afDR#l{5fJ9`-(Ieo(eaN2cMIKI2 zYV;mrO-3XV-*|0;boTZ{bBI7T2n3>FrgwhA6RK(w#akwd{Dx@Gz7C=oPmksWDf;f> zeZ(|J6xPv~J4AhD#{&&O*qetUQ^}9Z=JxRDt>BxkTz|0;$%0 x9FhDk3F%HGvN7@W{{mWWQv6AYtmm5%iI}%xgVX-I#}<;FW|y;`l=S>`|0n4!kC6ZX diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__init__.py deleted file mode 100644 index 9a6ad64..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__init__.py +++ /dev/null @@ -1,534 +0,0 @@ -""" -Evaluation of Python code in |jedi| is based on three assumptions: - -* The code uses as least side effects as possible. Jedi understands certain - list/tuple/set modifications, but there's no guarantee that Jedi detects - everything (list.append in different modules for example). -* No magic is being used: - - - metaclasses - - ``setattr()`` / ``__import__()`` - - writing to ``globals()``, ``locals()``, ``object.__dict__`` -* The programmer is not a total dick, e.g. like `this - `_ :-) - -The actual algorithm is based on a principle called lazy evaluation. If you -don't know about it, google it. That said, the typical entry point for static -analysis is calling ``eval_statement``. There's separate logic for -autocompletion in the API, the evaluator is all about evaluating an expression. - -Now you need to understand what follows after ``eval_statement``. Let's -make an example:: - - import datetime - datetime.date.toda# <-- cursor here - -First of all, this module doesn't care about completion. It really just cares -about ``datetime.date``. At the end of the procedure ``eval_statement`` will -return the ``date`` class. - -To *visualize* this (simplified): - -- ``Evaluator.eval_statement`` doesn't do much, because there's no assignment. -- ``Evaluator.eval_element`` cares for resolving the dotted path -- ``Evaluator.find_types`` searches for global definitions of datetime, which - it finds in the definition of an import, by scanning the syntax tree. -- Using the import logic, the datetime module is found. -- Now ``find_types`` is called again by ``eval_element`` to find ``date`` - inside the datetime module. - -Now what would happen if we wanted ``datetime.date.foo.bar``? Two more -calls to ``find_types``. However the second call would be ignored, because the -first one would return nothing (there's no foo attribute in ``date``). - -What if the import would contain another ``ExprStmt`` like this:: - - from foo import bar - Date = bar.baz - -Well... You get it. Just another ``eval_statement`` recursion. It's really -easy. Python can obviously get way more complicated then this. To understand -tuple assignments, list comprehensions and everything else, a lot more code had -to be written. - -Jedi has been tested very well, so you can just start modifying code. It's best -to write your own test first for your "new" feature. Don't be scared of -breaking stuff. As long as the tests pass, you're most likely to be fine. - -I need to mention now that lazy evaluation is really good because it -only *evaluates* what needs to be *evaluated*. All the statements and modules -that are not used are just being ignored. -""" - -import copy -import sys -from itertools import chain - -from jedi.parser import tree -from jedi import debug -from jedi.evaluate import representation as er -from jedi.evaluate import imports -from jedi.evaluate import recursion -from jedi.evaluate import iterable -from jedi.evaluate.cache import memoize_default -from jedi.evaluate import stdlib -from jedi.evaluate import finder -from jedi.evaluate import compiled -from jedi.evaluate import precedence -from jedi.evaluate import param -from jedi.evaluate import helpers - - -class Evaluator(object): - def __init__(self, grammar, sys_path=None): - self.grammar = grammar - self.memoize_cache = {} # for memoize decorators - # To memorize modules -> equals `sys.modules`. - self.modules = {} # like `sys.modules`. - self.compiled_cache = {} # see `evaluate.compiled.create()` - self.mixed_cache = {} # see `evaluate.compiled.mixed.create()` - self.analysis = [] - self.predefined_if_name_dict_dict = {} - self.dynamic_params_depth = 0 - self.is_analysis = False - - if sys_path is None: - sys_path = sys.path - self.sys_path = copy.copy(sys_path) - try: - self.sys_path.remove('') - except ValueError: - pass - - self.reset_recursion_limitations() - - # Constants - self.BUILTINS = compiled.get_special_object(self, 'BUILTINS') - - def reset_recursion_limitations(self): - self.recursion_detector = recursion.RecursionDetector(self) - self.execution_recursion_detector = recursion.ExecutionRecursionDetector(self) - - def wrap(self, element): - if isinstance(element, (er.Wrapper, er.InstanceElement, - er.ModuleWrapper, er.FunctionExecution, er.Instance, compiled.CompiledObject)) or element is None: - # TODO this is so ugly, please refactor. - return element - - if element.type == 'classdef': - return er.Class(self, element) - elif element.type == 'funcdef': - return er.Function(self, element) - elif element.type == 'lambda': - return er.LambdaWrapper(self, element) - elif element.type == 'file_input': - return er.ModuleWrapper(self, element) - else: - return element - - def find_types(self, scope, name_str, position=None, search_global=False, - is_goto=False): - """ - This is the search function. The most important part to debug. - `remove_statements` and `filter_statements` really are the core part of - this completion. - - :param position: Position of the last statement -> tuple of line, column - :return: List of Names. Their parents are the types. - """ - f = finder.NameFinder(self, scope, name_str, position) - scopes = f.scopes(search_global) - if is_goto: - return f.filter_name(scopes) - return f.find(scopes, attribute_lookup=not search_global) - - #@memoize_default(default=[], evaluator_is_first_arg=True) - #@recursion.recursion_decorator - @debug.increase_indent - def eval_statement(self, stmt, seek_name=None): - """ - The starting point of the completion. A statement always owns a call - list, which are the calls, that a statement does. In case multiple - names are defined in the statement, `seek_name` returns the result for - this name. - - :param stmt: A `tree.ExprStmt`. - """ - debug.dbg('eval_statement %s (%s)', stmt, seek_name) - rhs = stmt.get_rhs() - types = self.eval_element(rhs) - - if seek_name: - types = finder.check_tuple_assignments(self, types, seek_name) - - first_operation = stmt.first_operation() - if first_operation not in ('=', None) and not isinstance(stmt, er.InstanceElement): # TODO don't check for this. - # `=` is always the last character in aug assignments -> -1 - operator = copy.copy(first_operation) - operator.value = operator.value[:-1] - name = str(stmt.get_defined_names()[0]) - parent = self.wrap(stmt.get_parent_scope()) - left = self.find_types(parent, name, stmt.start_pos, search_global=True) - - for_stmt = stmt.get_parent_until(tree.ForStmt) - if isinstance(for_stmt, tree.ForStmt) and types \ - and for_stmt.defines_one_name(): - # Iterate through result and add the values, that's possible - # only in for loops without clutter, because they are - # predictable. Also only do it, if the variable is not a tuple. - node = for_stmt.get_input_node() - for_iterables = self.eval_element(node) - ordered = list(iterable.py__iter__(self, for_iterables, node)) - - for index_types in ordered: - dct = {str(for_stmt.children[1]): index_types} - self.predefined_if_name_dict_dict[for_stmt] = dct - t = self.eval_element(rhs) - left = precedence.calculate(self, left, operator, t) - types = left - if ordered: - # If there are no for entries, we cannot iterate and the - # types are defined by += entries. Therefore the for loop - # is never called. - del self.predefined_if_name_dict_dict[for_stmt] - else: - types = precedence.calculate(self, left, operator, types) - debug.dbg('eval_statement result %s', types) - return types - - def eval_element(self, element): - if isinstance(element, iterable.AlreadyEvaluated): - return set(element) - elif isinstance(element, iterable.MergedNodes): - return iterable.unite(self.eval_element(e) for e in element) - - if_stmt = element.get_parent_until((tree.IfStmt, tree.ForStmt, tree.IsScope)) - predefined_if_name_dict = self.predefined_if_name_dict_dict.get(if_stmt) - if predefined_if_name_dict is None and isinstance(if_stmt, tree.IfStmt): - if_stmt_test = if_stmt.children[1] - name_dicts = [{}] - # If we already did a check, we don't want to do it again -> If - # predefined_if_name_dict_dict is filled, we stop. - # We don't want to check the if stmt itself, it's just about - # the content. - if element.start_pos > if_stmt_test.end_pos: - # Now we need to check if the names in the if_stmt match the - # names in the suite. - if_names = helpers.get_names_of_node(if_stmt_test) - element_names = helpers.get_names_of_node(element) - str_element_names = [str(e) for e in element_names] - if any(str(i) in str_element_names for i in if_names): - for if_name in if_names: - definitions = self.goto_definitions(if_name) - # Every name that has multiple different definitions - # causes the complexity to rise. The complexity should - # never fall below 1. - if len(definitions) > 1: - if len(name_dicts) * len(definitions) > 16: - debug.dbg('Too many options for if branch evaluation %s.', if_stmt) - # There's only a certain amount of branches - # Jedi can evaluate, otherwise it will take to - # long. - name_dicts = [{}] - break - - original_name_dicts = list(name_dicts) - name_dicts = [] - for definition in definitions: - new_name_dicts = list(original_name_dicts) - for i, name_dict in enumerate(new_name_dicts): - new_name_dicts[i] = name_dict.copy() - new_name_dicts[i][str(if_name)] = [definition] - - name_dicts += new_name_dicts - else: - for name_dict in name_dicts: - name_dict[str(if_name)] = definitions - if len(name_dicts) > 1: - result = set() - for name_dict in name_dicts: - self.predefined_if_name_dict_dict[if_stmt] = name_dict - try: - result |= self._eval_element_not_cached(element) - finally: - del self.predefined_if_name_dict_dict[if_stmt] - return result - else: - return self._eval_element_if_evaluated(element) - return self._eval_element_cached(element) - else: - if predefined_if_name_dict: - return self._eval_element_not_cached(element) - else: - return self._eval_element_if_evaluated(element) - return self._eval_element_cached(element) - - def _eval_element_if_evaluated(self, element): - """ - TODO This function is temporary: Merge with eval_element. - """ - parent = element - while parent is not None: - parent = parent.parent - predefined_if_name_dict = self.predefined_if_name_dict_dict.get(parent) - if predefined_if_name_dict is not None: - return self._eval_element_not_cached(element) - return self._eval_element_cached(element) - - @memoize_default(default=set(), evaluator_is_first_arg=True) - def _eval_element_cached(self, element): - return self._eval_element_not_cached(element) - - @debug.increase_indent - def _eval_element_not_cached(self, element): - debug.dbg('eval_element %s@%s', element, element.start_pos) - types = set() - if isinstance(element, (tree.Name, tree.Literal)) or tree.is_node(element, 'atom'): - types = self._eval_atom(element) - elif isinstance(element, tree.Keyword): - # For False/True/None - if element.value in ('False', 'True', 'None'): - types.add(compiled.builtin_from_name(self, element.value)) - # else: print e.g. could be evaluated like this in Python 2.7 - elif element.isinstance(tree.Lambda): - types = set([er.LambdaWrapper(self, element)]) - elif element.isinstance(er.LambdaWrapper): - types = set([element]) # TODO this is no real evaluation. - elif element.type == 'expr_stmt': - types = self.eval_statement(element) - elif element.type in ('power', 'atom_expr'): - types = self._eval_atom(element.children[0]) - for trailer in element.children[1:]: - if trailer == '**': # has a power operation. - right = self.eval_element(element.children[2]) - types = set(precedence.calculate(self, types, trailer, right)) - break - types = self.eval_trailer(types, trailer) - elif element.type in ('testlist_star_expr', 'testlist',): - # The implicit tuple in statements. - types = set([iterable.ImplicitTuple(self, element)]) - elif element.type in ('not_test', 'factor'): - types = self.eval_element(element.children[-1]) - for operator in element.children[:-1]: - types = set(precedence.factor_calculate(self, types, operator)) - elif element.type == 'test': - # `x if foo else y` case. - types = (self.eval_element(element.children[0]) | - self.eval_element(element.children[-1])) - elif element.type == 'operator': - # Must be an ellipsis, other operators are not evaluated. - assert element.value == '...' - types = set([compiled.create(self, Ellipsis)]) - elif element.type == 'dotted_name': - types = self._eval_atom(element.children[0]) - for next_name in element.children[2::2]: - types = set(chain.from_iterable(self.find_types(typ, next_name) - for typ in types)) - types = types - elif element.type == 'eval_input': - types = self._eval_element_not_cached(element.children[0]) - else: - types = precedence.calculate_children(self, element.children) - debug.dbg('eval_element result %s', types) - return types - - def _eval_atom(self, atom): - """ - Basically to process ``atom`` nodes. The parser sometimes doesn't - generate the node (because it has just one child). In that case an atom - might be a name or a literal as well. - """ - if isinstance(atom, tree.Name): - # This is the first global lookup. - stmt = atom.get_definition() - scope = stmt.get_parent_until(tree.IsScope, include_current=True) - if isinstance(scope, (tree.Function, er.FunctionExecution)): - # Adjust scope: If the name is not in the suite, it's a param - # default or annotation and will be resolved as part of the - # parent scope. - colon = scope.children.index(':') - if atom.start_pos < scope.children[colon + 1].start_pos: - scope = scope.get_parent_scope() - if isinstance(stmt, tree.CompFor): - stmt = stmt.get_parent_until((tree.ClassOrFunc, tree.ExprStmt)) - if stmt.type != 'expr_stmt': - # We only need to adjust the start_pos for statements, because - # there the name cannot be used. - stmt = atom - return self.find_types(scope, atom, stmt.start_pos, search_global=True) - elif isinstance(atom, tree.Literal): - return set([compiled.create(self, atom.eval())]) - else: - c = atom.children - if c[0].type == 'string': - # Will be one string. - types = self._eval_atom(c[0]) - for string in c[1:]: - right = self._eval_atom(string) - types = precedence.calculate(self, types, '+', right) - return types - # Parentheses without commas are not tuples. - elif c[0] == '(' and not len(c) == 2 \ - and not(tree.is_node(c[1], 'testlist_comp') - and len(c[1].children) > 1): - return self.eval_element(c[1]) - - try: - comp_for = c[1].children[1] - except (IndexError, AttributeError): - pass - else: - if comp_for == ':': - # Dict comprehensions have a colon at the 3rd index. - try: - comp_for = c[1].children[3] - except IndexError: - pass - - if comp_for.type == 'comp_for': - return set([iterable.Comprehension.from_atom(self, atom)]) - return set([iterable.Array(self, atom)]) - - def eval_trailer(self, types, trailer): - trailer_op, node = trailer.children[:2] - if node == ')': # `arglist` is optional. - node = () - - new_types = set() - if trailer_op == '[': - new_types |= iterable.py__getitem__(self, types, trailer) - else: - for typ in types: - debug.dbg('eval_trailer: %s in scope %s', trailer, typ) - if trailer_op == '.': - new_types |= self.find_types(typ, node) - elif trailer_op == '(': - new_types |= self.execute(typ, node, trailer) - return new_types - - def execute_evaluated(self, obj, *args): - """ - Execute a function with already executed arguments. - """ - args = [iterable.AlreadyEvaluated([arg]) for arg in args] - return self.execute(obj, args) - - @debug.increase_indent - def execute(self, obj, arguments=(), trailer=None): - if not isinstance(arguments, param.Arguments): - arguments = param.Arguments(self, arguments, trailer) - - if self.is_analysis: - arguments.eval_all() - - if obj.isinstance(er.Function): - obj = obj.get_decorated_func() - - debug.dbg('execute: %s %s', obj, arguments) - try: - # Some stdlib functions like super(), namedtuple(), etc. have been - # hard-coded in Jedi to support them. - return stdlib.execute(self, obj, arguments) - except stdlib.NotInStdLib: - pass - - try: - func = obj.py__call__ - except AttributeError: - debug.warning("no execution possible %s", obj) - return set() - else: - types = func(arguments) - debug.dbg('execute result: %s in %s', types, obj) - return types - - def goto_definitions(self, name): - def_ = name.get_definition() - is_simple_name = name.parent.type not in ('power', 'trailer') - if is_simple_name: - if name.parent.type == 'classdef' and name.parent.name == name: - return [self.wrap(name.parent)] - if name.parent.type in ('file_input', 'funcdef'): - return [self.wrap(name.parent)] - if def_.type == 'expr_stmt' and name in def_.get_defined_names(): - return self.eval_statement(def_, name) - elif def_.type == 'for_stmt': - container_types = self.eval_element(def_.children[3]) - for_types = iterable.py__iter__types(self, container_types, def_.children[3]) - return finder.check_tuple_assignments(self, for_types, name) - elif def_.type in ('import_from', 'import_name'): - return imports.ImportWrapper(self, name).follow() - - call = helpers.call_of_leaf(name) - return self.eval_element(call) - - def goto(self, name): - def resolve_implicit_imports(names): - for name in names: - if isinstance(name.parent, helpers.FakeImport): - # Those are implicit imports. - s = imports.ImportWrapper(self, name) - for n in s.follow(is_goto=True): - yield n - else: - yield name - - stmt = name.get_definition() - par = name.parent - if par.type == 'argument' and par.children[1] == '=' and par.children[0] == name: - # Named param goto. - trailer = par.parent - if trailer.type == 'arglist': - trailer = trailer.parent - if trailer.type != 'classdef': - if trailer.type == 'decorator': - types = self.eval_element(trailer.children[1]) - else: - i = trailer.parent.children.index(trailer) - to_evaluate = trailer.parent.children[:i] - types = self.eval_element(to_evaluate[0]) - for trailer in to_evaluate[1:]: - types = self.eval_trailer(types, trailer) - param_names = [] - for typ in types: - try: - params = typ.params - except AttributeError: - pass - else: - param_names += [param.name for param in params - if param.name.value == name.value] - return param_names - elif isinstance(par, tree.ExprStmt) and name in par.get_defined_names(): - # Only take the parent, because if it's more complicated than just - # a name it's something you can "goto" again. - return [name] - elif isinstance(par, (tree.Param, tree.Function, tree.Class)) and par.name is name: - return [name] - elif isinstance(stmt, tree.Import): - modules = imports.ImportWrapper(self, name).follow(is_goto=True) - return list(resolve_implicit_imports(modules)) - elif par.type == 'dotted_name': # Is a decorator. - index = par.children.index(name) - if index > 0: - new_dotted = helpers.deep_ast_copy(par) - new_dotted.children[index - 1:] = [] - types = self.eval_element(new_dotted) - return resolve_implicit_imports(iterable.unite( - self.find_types(typ, name, is_goto=True) for typ in types - )) - - scope = name.get_parent_scope() - if tree.is_node(par, 'trailer') and par.children[0] == '.': - call = helpers.call_of_leaf(name, cut_own_trailer=True) - types = self.eval_element(call) - return resolve_implicit_imports(iterable.unite( - self.find_types(typ, name, is_goto=True) for typ in types - )) - else: - if stmt.type != 'expr_stmt': - # We only need to adjust the start_pos for statements, because - # there the name cannot be used. - stmt = name - return self.find_types(scope, name, stmt.start_pos, - search_global=True, is_goto=True) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/__init__.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/__init__.cpython-35.pyc deleted file mode 100644 index 71527fe0ba8d9c4361ba129affaa72ade28dc5d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17518 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 70a7c80d1d5833e3822a26f16d9cb39cc0fe2f92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15953 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 RU}gjN1DZjof5v~g{|7${wHg2b diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/analysis.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/analysis.cpython-35.pyc deleted file mode 100644 index accd8dd14b5e097e3729c865e51e9980376de3a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7625 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 JU!SVa{XZ{DnH~TD diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/analysis.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/analysis.cpython-36.pyc deleted file mode 100644 index 8727a9392b3c226ebe02785acab5788f13cd2e91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6939 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/cache.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/cache.cpython-35.pyc deleted file mode 100644 index e4f1aec8e59fad4a88c12c3041f569c5c91ffffb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2276 zcmaJ@O>f*p7=Fk0eq>1qD)b|SiV;YV73oIegi2abN{jePk&+6Ui!*D_CeC{8WyVgl ztK`&*=EQ*m{{e{$KL;PUa6=6{J0SibiW~IIr`>=)jhhs==ow^Mq#N`U zvzYN{yW5`r+PNi*11-n-xJ;FidwU~2%9E)MV?9u1TI}t~?JV%(9}6lruq@&OKd4>~2xlu)K*5${KcX%U4Gk2b887G4QKC?*Q##yD@$>rGSBb^m+LsS~e z3X(!vUD$J1VAqcK>zXmi_Fv@1Ml#rd{zzHvjy)=)1KCgZ_qAa!VNPYzjCfA%D zsroroD0xTrKa_pERJZ4ZBe>K(9!8GGtLXMk40RwlB0dd}lk;#0IuRU>t+_06o)*zr z%>ISpOpv)kCq#!XeA!!c=95`tLFieT%`Q3)F=Lv%%wazBXyr7ZZy*vB9t}HW1|){~Bop*43_xRn{P5^7;6i#TICV}Nbb=Ppuu0}8C)J>p?K7gHLBj@F5)KahWo`7>3`KDxIyg!Z6MwnBWv~+G}Gj z%Y|W>tqt>r-$!>zwb*D1cZ6=syv;0a3{?}D0YEW~(N13#;6Fe+#tW?%hpF0|^{(#n QpNnN3O;qcGfAyVz0p%A=UH||9 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/cache.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/cache.cpython-36.pyc deleted file mode 100644 index c886defa0e9bc506522acac52488300c26c47c92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2182 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 SU97!do3GuhRcq5X=Kcpm3^Yyv diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/docstrings.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/docstrings.cpython-36.pyc deleted file mode 100644 index 4853346c80bf004e7a6e4c1ca1ade6a4658b1384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6867 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 Y21Y0KNwa#U`f7Eydbw&>PtTnFAD-VYS^xk5 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/dynamic.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/dynamic.cpython-35.pyc deleted file mode 100644 index 7028f2d00e81deb7c60ef5e1de5b1bd95bc5c240..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4479 zcmaJ_TXP&o6+S()_lqP;wgNa*CML#SVy_Z-2pE@wVw>QEC@HTCIV#NTXs1^@tJ#@# zcdsRFt$1;YgqKj{k>U?f{0<)AB~?68^GflMzmO-s)3d8fg<|FD>C5TUr_bd(XZ%vL zS$qA9t&jh)O7w3!_bZ_PGd%k5XhNc0w1Ps1VnHK^b{!Htb}4pgRG{5LJ}yvPq)~}> zOZm7+ahXOH+O6c{k{wrRx0;X36xV1}r`>u!u29^dQImF?7=vty-VJLM*69)nu%D&f6)0=yNYTdCjJd07=`yRH8#<8@#22x48%*1cDYPH8a zb3=Pc>V@fK&v=IeX{6$(mRp9xhk2Vs*RB z`-V2^MyuPs1%?5*rjt0t#l~ZqyzTACIL3m!5y#$eqK&5q>7lomnnBxpNA`k=mNkQI zkjw54yuoAyQF1QwXe@iCU8_B0zUlx{YFs{!(?bn)-1cVgS!HSo-3Hz`P{9bZS_Y~& z0HN~wlcZ-%QcHU?Rs>W(ki7$I%P1L7Oxt@53s@1n z!^jM9R=4{RpZ3d08<|Me?Y3)Q!L6w!vSM!#LCOUtI>z9y4D2;A?plwb7A?B7_WDhhu5i<#0j-!G94x zA^sI@zer&Tu3FBT7o?tUSr4(7i|03CUw~CYcF%ojtP-qZS@Q}vU#PTg_x8kGFn+Ua z_weW@8pO?v$hV>1X^CyzYRxk8$EnuQUKB?rlB|e=mT~_tqhg?qOb zBt5$f3VyqItn_Q>K=i^8FF|iP=kK8ESZq0}fmc?_6=Ma@nbCc=?;WQT&!}T|_&I(8lRa}hmUGD6+}zAz7hrM|&@so|cDv2ci?B%TX-vk!!D!3# zr{ina0KYr~7(;XcTfKuMJp{@zU~)i+2kGFcfk$)Ua1w0%_`gJrp6g+*EP6S63;tH07 z-=TBhkSg)yA02uIjIu7>an$er+Ea)!?%pvh3X7DN+ME}#5&ZLE?5Evf$EAb3Yh&W+9b8P&} z#AF4=A%MbFY*jC#fuPknHl^yEu+_W!$QDOqwRxY9Vnvl`I@j(uC0!6tU%F@wloCi2 zu)%g~NpVbPOLIq`^T=G}ne6h#Nu-yt8DuL!btZ%0{v&KM33FiRhI{+q zVwCz04=>M^xd4Bky-czES+lRwksqOy2=-#xDk@f>`YtaOm^>@84Ruz^rJfu3j7nL| zY+kSyJB?mPLrYarc9w-JR>d{vntM~Mi;AN*nEU#vhW$wU{Rm}~AE^Dur)akVs#CQ4 z6TEX?ZW4_I{T^u{N0d*9QEd)H3(NvWv8P&8WE{$efH%NWk(W;3wID8A5B}T|7YPu0 zQYM2Xv=+JmdFpe!9mCV@W!?_#WcrHTTccr}W)IEvxDlJb&9KAUR?Ewxxz~5v})6v7KI*3RLTiga~!5zFz0w} zeJBSg1xs>-Eh#yMPr;7^F7Zyy&i>0;TJtkSbBwz|T4+zuw_)m?WSt5|&_RtZlL??{Vmc_c!lB5Z~h-n41SS@f}`NPUM<;!WCNrY(0n zD;pI=u~c7+o2_D2CIJk_k7dwTuRv&&j7SQo4@!AWkX1RD z>`rwX>v>$3_f*h3kVgHGr_O2u8&j(`(rvMYnj%5!(2qc-@nHt%cf}>q6ji4w8loz$ zis>8wE5^@o^P9|iYzY4G+r?u6|3h?gb>|?@txf%^ZRah39>6me!w!lNY+yPB2-Nzn zr7KbgvmL8OplvCuMM#GHY1EVI1`f$859hX(PzdU5c`^AQmLmpd_c^|lMCL-B zcscSM9>W^=+{$E>wHR~>@lF15a%`=Y)$Ix{ zrQtf(JO!Syc{k6M`QC-K+r0pvkE)DQ)O~K)V(L9Uw3O}*@j;s#b~#FV_@4qT@wpPh nQEgJQLY|9b8__nHD|d4}Z*uh7+*rb;SH$U`TXNUySG@lM{(M@7 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/dynamic.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/dynamic.cpython-36.pyc deleted file mode 100644 index 47489232df03412da5a5465001be142675530133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4175 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/finder.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/finder.cpython-36.pyc deleted file mode 100644 index 6105f52803244f907edcb11137b049909ef96e6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16627 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/flow_analysis.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/flow_analysis.cpython-35.pyc deleted file mode 100644 index 1988e0310cc8e2fb93914fbe2e69516ca5165f9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2604 zcmZuz&2JM&6o0e3UVq~x6v|f%6d|!Hb$UQlLQx8Z&{nOiDkhC;2~8dEglxRob!OKg ziIQHzwU_=E{TKS5FxQ?q_0FlkH)|U=>cTv~_h#nJZ{FAB<7Tt=`5#YydDtNOo8~?b z{9}ylH;@qj1;s>rf_j3)x1mF!OK+fdNjY@pQV)zvp+{kf&K&A_R`e+>Td`!t3WZfG zLJz)1VV&NHyoa5#MXt83z(D>tDcBzH=01Ti28A7n_(9kD+*@A;=SCGEX69vO?bN2&ePq(mJ zdrX>4E`S7%g=tD@zN7Scv}Fk&hf;ool@p&XG1Ln)pW5mFxO9f~8a5#}3%F+%6@zpb z_vLQjbdD=4ce6*g?q;i;Aoq|_w__y0b`BCSSRN{Be?vwHokV{`gS7n+@l$VAv<1s4LX5E#)&3aM!6vhXI|SpplbR z($DF{V{zz^encEx2&lzVm-auU%^Z`~4417(XC9rF=%j=ibvvdRC4+bzD#>M&y$DLi zd#(E;v+zpga@5x<$z?W3N6IFK@e38)wS}7uF}Y|_;g0}?BzXnT3)uEv@ISc z;7r)cE7NjYr=RxMX%p&Q^m*b__TO3~wTanNpH9$ni?F?&+QShJFHUaGp{iSK4Ytkj zuo!OvpV*u`@gK%uqm4%c4G9Y!VO92aLznbdf}1q1)}o0B8w>UxNQdbZlHxI2FS?l1 zF}3XobrB__aULvcE~g>^YEc#?S>8_uN^^Y~|NHGOf^1qziY)4H=SoWzXUf!VZb(*V zrdni*jJAtb!)0Zz*eytm*E`W*XR?BIru;%5S*z8}9pGTr_9T6gf!tv72}n@ZpE7@o z$xSA=nOp%ewGYP|kBy#7Gi%@hR%Z7>NVG)D@x>B;FJdf-5@b%eC2?JNF88*U>w&-K z*qyT`%+>2+*yQVinPi(yqaxd8&oJEm49QhwWs!j3@iKGZewZXq})o=SjxaLPWwy!8Md8s$NTEa zE0w6jkzU) zQ981L54<8`ZPu2!v1i7&Pk(j}kPfh917q?Sw!~G$V$rdB{E<@Ur@xJMl;Lq=w8l@j ycGVy+j-5SYMZVp^0vk8GeeNjR(CzzMSt%ZaRlb$&IScOPYe);xa$Ady+y4S2LJ*1o diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/flow_analysis.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/flow_analysis.cpython-36.pyc deleted file mode 100644 index 28e1ffc620b4e79d83f4c172a2630d57e47aed14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2367 zcmZuyOK%%D5GI%0)oS&ylcqr$q^Z*)Ko)J~04;)`FpQ*$`v3}|h~v5y5D=0`#Vf6M zWiI8|#tJB)TzlyuKcPVH{WUzcr~HMSI>S{I*XRly4k^xX=9>qqm+D0q$k-+BAN0Qtj83ST>1;I$AJrE4LBdTP}YG9!3KY!LI3>SutcFjvvlA9>FNC11V`q1SvhBz!`7MO1cHE zf;8>M+y>&fpU#x^MbLAB+e-a(R$u~Qj2l=7e zJWeJi*PET=8|ybf%{^6e7tIBSa0& z4uB9E!0&9Waot(jn47wVqzxqYoN3n2&4JPvEvyN^ zQwnhfPA>6lqIvBVe(vx8z_+pwg(O7_7hn%q=8e3oU}Nlc&%&+S#aA1*i)~B;b2?QR zE6e~Pw2x-}KVoo5tEmi6`=7;fKCri?f@Sw$Yb*C z#@shG01Eo*oR{2C6S@ky|06lNzfVd&t}n=(AH4#J2&Lyi893NqIk^Dkva8E`8gN&0 z5Y`qGm zNJdq)V}9FfP6T52;vg9wEKlH`tv%JJPHTPt0PH~4wFUhi8gc{4hd|<*zKQ$>l8=zw zLUIj=jow{vIV!!72~NS6aI*Le2%!;;JWiW1w_!A)9Y-GKM3Y{ooMC&37zh4}=OkCX z56g(baQU$fjLQm)9%M!Jtd-tl=rx!z7`p|PSVH$OS1?Z&cSiIDlQ$| z^|6l@HgNB0als%R!;w80%aH=G)qc0pF<1XhwtgMrPa_sx3UB=jS_=?2 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/helpers.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/helpers.cpython-35.pyc deleted file mode 100644 index 10971fc1b80300f817c7e0d06a2902970c413add..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6171 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/helpers.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/helpers.cpython-36.pyc deleted file mode 100644 index d8cda1567591507107bfd504d1518384b44b2a04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5811 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 Y^Km2Ob*JvuF4r!E^{~G9^x~=i0o|J&PXGV_ diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/imports.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/imports.cpython-35.pyc deleted file mode 100644 index a7dd086df409b2eb61d3305346e8637e3e220901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15579 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 F{};-DpuzwE diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/imports.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/imports.cpython-36.pyc deleted file mode 100644 index 324e015b190ca57047ae3d293097ec3e11528a7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14195 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/iterable.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/iterable.cpython-35.pyc deleted file mode 100644 index a8032497842ae111a64c2e15db8673e5efc61e04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30526 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/param.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/param.cpython-35.pyc deleted file mode 100644 index 032eeed589fef881a39acc8d4071d47d881d3458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13602 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 W-hz94!C7!D)17tCxwczz?f(Jsp|0ux diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/precedence.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/precedence.cpython-35.pyc deleted file mode 100644 index 477fae2155d5e69a3ec249a34f9b736a566afe95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5050 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 F{|m>k2Sxw@ diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/precedence.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/precedence.cpython-36.pyc deleted file mode 100644 index 242ac91b837a9607684dadff971f7cb2c9b084a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4492 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/recursion.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/recursion.cpython-35.pyc deleted file mode 100644 index 262d192716ae5f0b64a0163246955b7228f94f21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5506 zcmb7IOK;rB5pF()^Dw26rM2wX&YD@rn;kz!c{@=Iue9FSF%S#_&n}ErfKU`kNt9;D zaW_Y{2XYX=izJui5af`{0=edIkq}$R4H21QV2Gh9woGAA-Qv0>wk%z@#lRNBn%JtL zUK5cczQntZco5Y^)SwFTxGrAel?GayB5HAKt87Kf84`=*vodkkvC2J_XCs=UoOUlu(mih&L|w0sah{6v94&gi{g@Wb(0v$} z%kcz3-eOsjz5U$FlOdM-A{%>QkYes2@`f2+40f_HdiUd@w=Uz|^=+Q+PPxLZN{YMN z-Bzm?Kf~b6TOVf8`ZjH?8y^LOagfK|FbMbKZA_IYOdX8}n0%nLT&ff-%}6L({+0@M zA<^Ug=O26C_ICUX+s&awzgp3c;xLmzp2_WPZ>(bFg@ZsT?9DS)xva8CQVd0GFIb34i(s>uz!jFZm#VEQ)@@bA(mO|9wo!IopBls;x)4G zEvi#NXQj2*Dha!z=Y=K5=@KcyMJ9}<(KhPlIiqDvW+jppuUa0SO|OD2d5Tv1 zObyCQQusFUs}TFPL?sTy^qvfd;n<;P#_I5XLuY0`hBanmXDrc<#Zqyq(z7 zjub~;{xoB+hbxd=6>3R0lBu@}8S*%b1z$l-#ps2*&J1BcxA0K9L*(=fWhJ_jW90fm0Y?oB#jkb}Y^ zSYVjXOtS7>1JUjUNeX60apRi$?0% zqaryXyUO+-phB8p!yh(Vj6eoy~9ReK{kXZz;G#i%LE?vo-Hx4NX(GY+J80 za!Fd1L?lfm(Rw8j*!J0VwwS@p%VNTShp_EOOvI>wZeZX36IVQDpqjn=U=lI`w!*AJ zDlP0hR{2R~UPRANkQ5OQfzo2yvZ2z+2d7ne(xR381X4;2(mN>Z>7#-L1{j}x$auUx z-3#FnU<7gzzEH^$81!UWJjQ+soa9}Q$IfFuPX^N5s3@Qvwo--2^?G!-7 zp-{5RT@0IYvcrD2Vk{Vw@0{M=iT8SdH(WOb>G(dJ-PbgOvg`X##=&6PQ}_KS3w>W+ zz(R~qMu8;dN`lv%))_5?T)Bem5)w=1+Q4wlZMlxy~@5JN%PF;Qr zFHNp`o1n&sgE6Abxy?_bi>?>i7)cNP(wb~dIy+z$?FwWogD8Wl%rP(>m2ueX0*-R# zAsuXLzp-!NskvKc1blPOHD3k0>S?6pjjIGRoy;EKMi8N+_aX(`#mE zeDe9jUw`(n*DqR$@{_$3FSMurofRQYKO8L$l$u{uC)wil5@!6 zlf?1;_=)d-j)7Pi4;nx_8~CYF&Ufr?&X%zui4))~~J4=W9omxvUv zMgn6%pv{LC0LL1vX&7C8ee67q8yEQ$sD{Wo1Sl4WhpRS3oXx5tDTdo>=(r`5lBfoZ z&+*wzPZX))fGEM_BI0w+Hbs2btC?o!-z;u>*VymdZ=LOTBmt=xQD9U45WgW+%7<*V zfu!yudnfjIQxw?moGC8;vb?IyQHfUeSiLw) zs9;Pl5L8C+s(ZmZx_}^uXr(+loT4qu(9|E`ayckgryNsB;8WYHo*Hqs>LgzFFSvFQ@ZuEBL z>374DVd$3>$jb9jpsnJc4=mD<4fR2lKQqgi-t2wDfrce12r4Y_0q^q-u^sK{4@gsI zLlE&%rMgpI(0zqms&KxB_sLgT$ctE=4g)PJ4hn}YRJEAg!UwC3gBG&iHi3QK3NCD1 z)j$9%;^gHQVP=K{DmvO1WO;6~2^avwp)KU^>HgQxo71=QmN+;gD0js!2WIl0bUp0T zqzjBDtfUuP6bEgNLI15sAR7Iel?_~C{w1FOYn~q@ErpSv;t7ytK89_LHpS=n(XTAIUY$ z^CgnHi43Oz{@VCkF;);8*yj7V8M$b)O^0&C3>T17Y0`Ncfaz09B|)##cylB{R~AX` z!J^EGH#;kTgx*6W=112;yjw@SYfEbHbzBZh3Y)&MFzIMZF1+$_jg7~jISMD+IlzY; nj+Hqy;d75Cd)?|qgeFgh(F79S8uMKcNhK#_eswa diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/recursion.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/recursion.cpython-36.pyc deleted file mode 100644 index 86931aba2862f752a8e1ff1af011baf5e952a3fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5122 zcmb7IO^@5g8RnNLiq?MkBX;Vz4I9^K6x-UiX`6IwxOSYzHBbmeoWO_<<#IW*T52Uy zo}t#ef)*$s1MR6Odg`S;<AxvQn%%Rn_OlsR`+g+R6&cGSgx;3|@oTX34QU$*|&iAtvT_M}SZ?b3dP^w#j&W18e zr9T|&JkWVIA{h&@y(~$4!7vi-;4$U}TIM-M%JudoEt=u+fm|%d0;1e!U6S5@9^}ao z%YB)RgE&edI}*V#!;8^wHpbI^ISjUy+}qw^ad#Fg+^)2^yVLgljy%HTEZ81qVta?S z)|Q9SU>xPL9Y^uL+<~Y>L$nwVAbg-pz4St{G$W;G`P(|$gGNvGkAD>eJ3I0S+s$Fb zuv#$`GR{<#XKH6B7;CA6co1nF97ZaMb_eL^nIC84l=Tnx#%W9fu))DVxBYJs4o1r? zYC`UgduVuzO;J0^r6M6QJjj=Y+MXA^iN+s|J(EJ|xp!htO}N|c#59R67lkIjjiP^w zYHIY26KCr5F?D9D%egf(9vgqc_|)99rq(~Ksr_g3q=p&x%rK2<4Fb(h%PB6b?l+e) zwp%ntW4#~he3%zDlrFqcHsWr}EgEx!W17P=oJjR_;T}Ard)J3J7>)!Lu9A8@$gy3A zjPp<9Kliux5kFgp$pMzxY9A)Ut=(}d26Bshd7JvwD655Mw<-{Vna^#-b9 zGlZDi-MAy1LMgJoRFJY~=}6Xn ziSR_9Y> zJ(*g44;9*Ey28n&&QBZdDxUldMH5I+j9CmZ4oo+B=d8(2d#=)$VvY*O9BJG$N`%P8O$<+Qqp>Ma!3%yST%HP824ufb1ZJgF}7{XG;Npn5&V!g_V} z9ZZ{C5AFlP1k)gbx0UVA&-Hc?a~NVa-Dwr}7a=+07Wu`T5t;!R`h*nDlXeDqHx8_#t4rfN}j6V)QkY8i~LRw94_-3>$eGz`DM zL`_>VkYJA01UgOLIHNAj?6h2U9rM%=s3Kfb?^4Afcbi&Edn{v&0^uPF9~q2)O%9GK zPifosyu6ZjEjStl2~Fmx{RtZEe3On13Iq_Zt2rGbcG@KBwFi5FblG_7FzKR$1BYO( z43BFs=bUp6w$5l=O;L3$SF8~-R%2jqjjE%F4}na~xq~8T00uMHS=xhGPlz%P5)U}w z!Rla7?^lwR=g^V^{l7fwyRVh@d(wb2&ulgn88SwxF7nAe6iuP{`fNYVs9@l8#noRg z$oxvmmu8*ZWa{#OPj09EOeB{Mac$+$}cL zg4%@xd~OYj%X3tyRt$+C>(a>^r$&pF0sh?J@R_IA%h(de;!2@UP9x8NO%H0#`x;wDUUgsMN=ZMdeIW1&n{q<3^v>x`_Ta zD=b|768i$bzEn875l9jlmxEG)VxKP17-+25xL*GR(RlYa#A#u>p!K814ka*`5_SdqeL(Y=82(^%n_6zx>xt1ZZRj-rW*;yV_< z_3{VwcdSeEF9XMN@Px?jCJMDCt=EMe{Y_A5&}n(EKB2dZC( zmS=+x*1-oIMdO`TlaKqtq5lUMCQ47Pz3?XxJC8rn3pd;C<4*|Yl6>UzIm5zUwtC^+ YDJ^%GSQaw@G5~(I*WA3ddBt1%FCIhBL;wH) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/representation.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/representation.cpython-35.pyc deleted file mode 100644 index 290f6a46e9f35520cd3e1e69d050978f5f91ca0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35140 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 CQ}w(6 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/representation.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/representation.cpython-36.pyc deleted file mode 100644 index 9eeaa41da8ad17c7fc50b7fb2aac26fb7027a041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32598 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/site.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/site.cpython-35.pyc deleted file mode 100644 index 7fbf42eda5137e2d37ea0e6c47227e6730bb7e2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3181 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/stdlib.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/stdlib.cpython-35.pyc deleted file mode 100644 index 6283ff93ee85c98e4c4524f7002060d2d75908ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9261 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/stdlib.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/stdlib.cpython-36.pyc deleted file mode 100644 index d87ddc8e6576c3b94d2e311bef8065f5f4d9243e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8478 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/sys_path.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/__pycache__/sys_path.cpython-35.pyc deleted file mode 100644 index 9f2213dccfcd43c8e85f90c82f6195916a6c5d7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8619 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/analysis.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/analysis.py deleted file mode 100644 index 407bc7d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/analysis.py +++ /dev/null @@ -1,216 +0,0 @@ -""" -Module for statical analysis. -""" -from jedi import debug -from jedi.parser import tree -from jedi.evaluate.compiled import CompiledObject - -from jedi.common import unite - - -CODES = { - 'attribute-error': (1, AttributeError, 'Potential AttributeError.'), - 'name-error': (2, NameError, 'Potential NameError.'), - 'import-error': (3, ImportError, 'Potential ImportError.'), - 'type-error-too-many-arguments': (4, TypeError, None), - 'type-error-too-few-arguments': (5, TypeError, None), - 'type-error-keyword-argument': (6, TypeError, None), - 'type-error-multiple-values': (7, TypeError, None), - 'type-error-star-star': (8, TypeError, None), - 'type-error-star': (9, TypeError, None), - 'type-error-operation': (10, TypeError, None), - 'type-error-not-iterable': (11, TypeError, None), - 'type-error-isinstance': (12, TypeError, None), - 'type-error-not-subscriptable': (13, TypeError, None), - 'value-error-too-many-values': (14, ValueError, None), - 'value-error-too-few-values': (15, ValueError, None), -} - - -class Error(object): - def __init__(self, name, module_path, start_pos, message=None): - self.path = module_path - self._start_pos = start_pos - self.name = name - if message is None: - message = CODES[self.name][2] - self.message = message - - @property - def line(self): - return self._start_pos[0] - - @property - def column(self): - return self._start_pos[1] - - @property - def code(self): - # The class name start - first = self.__class__.__name__[0] - return first + str(CODES[self.name][0]) - - def __unicode__(self): - return '%s:%s:%s: %s %s' % (self.path, self.line, self.column, - self.code, self.message) - - def __str__(self): - return self.__unicode__() - - def __eq__(self, other): - return (self.path == other.path and self.name == other.name - and self._start_pos == other._start_pos) - - def __ne__(self, other): - return not self.__eq__(other) - - def __hash__(self): - return hash((self.path, self._start_pos, self.name)) - - def __repr__(self): - return '<%s %s: %s@%s,%s>' % (self.__class__.__name__, - self.name, self.path, - self._start_pos[0], self._start_pos[1]) - - -class Warning(Error): - pass - - -def add(evaluator, name, jedi_obj, message=None, typ=Error, payload=None): - from jedi.evaluate.iterable import MergedNodes - while isinstance(jedi_obj, MergedNodes): - if len(jedi_obj) != 1: - # TODO is this kosher? - return - jedi_obj = list(jedi_obj)[0] - - exception = CODES[name][1] - if _check_for_exception_catch(evaluator, jedi_obj, exception, payload): - return - - module_path = jedi_obj.get_parent_until().path - instance = typ(name, module_path, jedi_obj.start_pos, message) - debug.warning(str(instance), format=False) - evaluator.analysis.append(instance) - - -def _check_for_setattr(instance): - """ - Check if there's any setattr method inside an instance. If so, return True. - """ - module = instance.get_parent_until() - try: - stmts = module.used_names['setattr'] - except KeyError: - return False - - return any(instance.start_pos < stmt.start_pos < instance.end_pos - for stmt in stmts) - - -def add_attribute_error(evaluator, scope, name): - message = ('AttributeError: %s has no attribute %s.' % (scope, name)) - from jedi.evaluate.representation import Instance - # Check for __getattr__/__getattribute__ existance and issue a warning - # instead of an error, if that happens. - if isinstance(scope, Instance): - typ = Warning - try: - scope.get_subscope_by_name('__getattr__') - except KeyError: - try: - scope.get_subscope_by_name('__getattribute__') - except KeyError: - if not _check_for_setattr(scope): - typ = Error - else: - typ = Error - - payload = scope, name - add(evaluator, 'attribute-error', name, message, typ, payload) - - -def _check_for_exception_catch(evaluator, jedi_obj, exception, payload=None): - """ - Checks if a jedi object (e.g. `Statement`) sits inside a try/catch and - doesn't count as an error (if equal to `exception`). - Also checks `hasattr` for AttributeErrors and uses the `payload` to compare - it. - Returns True if the exception was catched. - """ - def check_match(cls, exception): - try: - return isinstance(cls, CompiledObject) and issubclass(exception, cls.obj) - except TypeError: - return False - - def check_try_for_except(obj, exception): - # Only nodes in try - iterator = iter(obj.children) - for branch_type in iterator: - colon = next(iterator) - suite = next(iterator) - if branch_type == 'try' \ - and not (branch_type.start_pos < jedi_obj.start_pos <= suite.end_pos): - return False - - for node in obj.except_clauses(): - if node is None: - return True # An exception block that catches everything. - else: - except_classes = evaluator.eval_element(node) - for cls in except_classes: - from jedi.evaluate import iterable - if isinstance(cls, iterable.Array) and cls.type == 'tuple': - # multiple exceptions - for typ in unite(cls.py__iter__()): - if check_match(typ, exception): - return True - else: - if check_match(cls, exception): - return True - - def check_hasattr(node, suite): - try: - assert suite.start_pos <= jedi_obj.start_pos < suite.end_pos - assert node.type in ('power', 'atom_expr') - base = node.children[0] - assert base.type == 'name' and base.value == 'hasattr' - trailer = node.children[1] - assert trailer.type == 'trailer' - arglist = trailer.children[1] - assert arglist.type == 'arglist' - from jedi.evaluate.param import Arguments - args = list(Arguments(evaluator, arglist).unpack()) - # Arguments should be very simple - assert len(args) == 2 - - # Check name - key, values = args[1] - assert len(values) == 1 - names = list(evaluator.eval_element(values[0])) - assert len(names) == 1 and isinstance(names[0], CompiledObject) - assert names[0].obj == str(payload[1]) - - # Check objects - key, values = args[0] - assert len(values) == 1 - objects = evaluator.eval_element(values[0]) - return payload[0] in objects - except AssertionError: - return False - - obj = jedi_obj - while obj is not None and not obj.isinstance(tree.Function, tree.Class): - if obj.isinstance(tree.Flow): - # try/except catch check - if obj.isinstance(tree.TryStmt) and check_try_for_except(obj, exception): - return True - # hasattr check - if exception == AttributeError and obj.isinstance(tree.IfStmt, tree.WhileStmt): - if check_hasattr(obj.children[1], obj.children[3]): - return True - obj = obj.parent - - return False diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/cache.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/cache.py deleted file mode 100644 index b44f812..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/cache.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -- the popular ``memoize_default`` works like a typical memoize and returns the - default otherwise. -- ``CachedMetaClass`` uses ``memoize_default`` to do the same with classes. -""" - -import inspect - -NO_DEFAULT = object() - - -def memoize_default(default=NO_DEFAULT, evaluator_is_first_arg=False, second_arg_is_evaluator=False): - """ This is a typical memoization decorator, BUT there is one difference: - To prevent recursion it sets defaults. - - Preventing recursion is in this case the much bigger use than speed. I - don't think, that there is a big speed difference, but there are many cases - where recursion could happen (think about a = b; b = a). - """ - def func(function): - def wrapper(obj, *args, **kwargs): - if evaluator_is_first_arg: - cache = obj.memoize_cache - elif second_arg_is_evaluator: # needed for meta classes - cache = args[0].memoize_cache - else: - cache = obj._evaluator.memoize_cache - - try: - memo = cache[function] - except KeyError: - memo = {} - cache[function] = memo - - key = (obj, args, frozenset(kwargs.items())) - if key in memo: - return memo[key] - else: - if default is not NO_DEFAULT: - memo[key] = default - rv = function(obj, *args, **kwargs) - if inspect.isgenerator(rv): - rv = list(rv) - memo[key] = rv - return rv - return wrapper - return func - - -class CachedMetaClass(type): - """ - This is basically almost the same than the decorator above, it just caches - class initializations. Either you do it this way or with decorators, but - with decorators you lose class access (isinstance, etc). - """ - @memoize_default(None, second_arg_is_evaluator=True) - def __call__(self, *args, **kwargs): - return super(CachedMetaClass, self).__call__(*args, **kwargs) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__init__.py deleted file mode 100644 index f004a14..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__init__.py +++ /dev/null @@ -1,544 +0,0 @@ -""" -Imitate the parser representation. -""" -import inspect -import re -import sys -import os -from functools import partial - -from jedi._compatibility import builtins as _builtins, unicode -from jedi import debug -from jedi.cache import underscore_memoization, memoize_method -from jedi.parser.tree import Param, Base, Operator, zero_position_modifier -from jedi.evaluate.helpers import FakeName -from . import fake - - -_sep = os.path.sep -if os.path.altsep is not None: - _sep += os.path.altsep -_path_re = re.compile('(?:\.[^{0}]+|[{0}]__init__\.py)$'.format(re.escape(_sep))) -del _sep - - -class CheckAttribute(object): - """Raises an AttributeError if the attribute X isn't available.""" - def __init__(self, func): - self.func = func - # Remove the py in front of e.g. py__call__. - self.check_name = func.__name__[2:] - - def __get__(self, instance, owner): - # This might raise an AttributeError. That's wanted. - getattr(instance.obj, self.check_name) - return partial(self.func, instance) - - -class CompiledObject(Base): - # comply with the parser - start_pos = 0, 0 - path = None # modules have this attribute - set it to None. - used_names = {} # To be consistent with modules. - - def __init__(self, evaluator, obj, parent=None): - self._evaluator = evaluator - self.obj = obj - self.parent = parent - - @CheckAttribute - def py__call__(self, params): - if inspect.isclass(self.obj): - from jedi.evaluate.representation import Instance - return set([Instance(self._evaluator, self, params)]) - else: - return set(self._execute_function(params)) - - @CheckAttribute - def py__class__(self): - return create(self._evaluator, self.obj.__class__) - - @CheckAttribute - def py__mro__(self): - return tuple(create(self._evaluator, cls) for cls in self.obj.__mro__) - - @CheckAttribute - def py__bases__(self): - return tuple(create(self._evaluator, cls) for cls in self.obj.__bases__) - - def py__bool__(self): - return bool(self.obj) - - def py__file__(self): - return self.obj.__file__ - - def is_class(self): - return inspect.isclass(self.obj) - - @property - def doc(self): - return inspect.getdoc(self.obj) or '' - - @property - def params(self): - params_str, ret = self._parse_function_doc() - tokens = params_str.split(',') - if inspect.ismethoddescriptor(self.obj): - tokens.insert(0, 'self') - params = [] - for p in tokens: - parts = [FakeName(part) for part in p.strip().split('=')] - if len(parts) > 1: - parts.insert(1, Operator(zero_position_modifier, '=', (0, 0))) - params.append(Param(parts, self)) - return params - - def __repr__(self): - return '<%s: %s>' % (type(self).__name__, repr(self.obj)) - - @underscore_memoization - def _parse_function_doc(self): - if self.doc is None: - return '', '' - - return _parse_function_doc(self.doc) - - def api_type(self): - obj = self.obj - if inspect.isclass(obj): - return 'class' - elif inspect.ismodule(obj): - return 'module' - elif inspect.isbuiltin(obj) or inspect.ismethod(obj) \ - or inspect.ismethoddescriptor(obj) or inspect.isfunction(obj): - return 'function' - # Everything else... - return 'instance' - - @property - def type(self): - """Imitate the tree.Node.type values.""" - cls = self._get_class() - if inspect.isclass(cls): - return 'classdef' - elif inspect.ismodule(cls): - return 'file_input' - elif inspect.isbuiltin(cls) or inspect.ismethod(cls) or \ - inspect.ismethoddescriptor(cls): - return 'funcdef' - - @underscore_memoization - def _cls(self): - """ - We used to limit the lookups for instantiated objects like list(), but - this is not the case anymore. Python itself - """ - # Ensures that a CompiledObject is returned that is not an instance (like list) - return self - - def _get_class(self): - if not fake.is_class_instance(self.obj) or \ - inspect.ismethoddescriptor(self.obj): # slots - return self.obj - - try: - return self.obj.__class__ - except AttributeError: - # happens with numpy.core.umath._UFUNC_API (you get it - # automatically by doing `import numpy`. - return type - - @property - def names_dict(self): - # For compatibility with `representation.Class`. - return self.names_dicts(False)[0] - - def names_dicts(self, search_global, is_instance=False): - return self._names_dict_ensure_one_dict(is_instance) - - @memoize_method - def _names_dict_ensure_one_dict(self, is_instance): - """ - search_global shouldn't change the fact that there's one dict, this way - there's only one `object`. - """ - return [LazyNamesDict(self._evaluator, self, is_instance)] - - def get_subscope_by_name(self, name): - if name in dir(self.obj): - return CompiledName(self._evaluator, self, name).parent - else: - raise KeyError("CompiledObject doesn't have an attribute '%s'." % name) - - @CheckAttribute - def py__getitem__(self, index): - if type(self.obj) not in (str, list, tuple, unicode, bytes, bytearray, dict): - # Get rid of side effects, we won't call custom `__getitem__`s. - return set() - - return set([create(self._evaluator, self.obj[index])]) - - @CheckAttribute - def py__iter__(self): - if type(self.obj) not in (str, list, tuple, unicode, bytes, bytearray, dict): - # Get rid of side effects, we won't call custom `__getitem__`s. - return - - for part in self.obj: - yield set([create(self._evaluator, part)]) - - @property - def name(self): - try: - name = self._get_class().__name__ - except AttributeError: - name = repr(self.obj) - return FakeName(name, self) - - def _execute_function(self, params): - if self.type != 'funcdef': - return - - for name in self._parse_function_doc()[1].split(): - try: - bltn_obj = getattr(_builtins, name) - except AttributeError: - continue - else: - if bltn_obj is None: - # We want to evaluate everything except None. - # TODO do we? - continue - bltn_obj = create(self._evaluator, bltn_obj) - for result in self._evaluator.execute(bltn_obj, params): - yield result - - @property - @underscore_memoization - def subscopes(self): - """ - Returns only the faked scopes - the other ones are not important for - internal analysis. - """ - module = self.get_parent_until() - faked_subscopes = [] - for name in dir(self.obj): - try: - faked_subscopes.append( - fake.get_faked(module.obj, self.obj, parent=self, name=name) - ) - except fake.FakeDoesNotExist: - pass - return faked_subscopes - - def is_scope(self): - return True - - def get_self_attributes(self): - return [] # Instance compatibility - - def get_imports(self): - return [] # Builtins don't have imports - - -class CompiledName(FakeName): - def __init__(self, evaluator, compiled_obj, name): - super(CompiledName, self).__init__(name) - self._evaluator = evaluator - self._compiled_obj = compiled_obj - self.name = name - - def __repr__(self): - try: - name = self._compiled_obj.name # __name__ is not defined all the time - except AttributeError: - name = None - return '<%s: (%s).%s>' % (type(self).__name__, name, self.name) - - def is_definition(self): - return True - - @property - @underscore_memoization - def parent(self): - module = self._compiled_obj.get_parent_until() - return _create_from_name(self._evaluator, module, self._compiled_obj, self.name) - - @parent.setter - def parent(self, value): - pass # Just ignore this, FakeName tries to overwrite the parent attribute. - - -class LazyNamesDict(object): - """ - A names_dict instance for compiled objects, resembles the parser.tree. - """ - name_class = CompiledName - - def __init__(self, evaluator, compiled_obj, is_instance=False): - self._evaluator = evaluator - self._compiled_obj = compiled_obj - self._is_instance = is_instance - - def __iter__(self): - return (v[0].value for v in self.values()) - - @memoize_method - def __getitem__(self, name): - try: - getattr(self._compiled_obj.obj, name) - except AttributeError: - raise KeyError('%s in %s not found.' % (name, self._compiled_obj)) - except Exception: - # This is a bit ugly. We're basically returning this to make - # lookups possible without having the actual attribute. However - # this makes proper completion possible. - return [FakeName(name, create(self._evaluator, None), is_definition=True)] - return [self.name_class(self._evaluator, self._compiled_obj, name)] - - def values(self): - obj = self._compiled_obj.obj - - values = [] - for name in dir(obj): - try: - values.append(self[name]) - except KeyError: - # The dir function can be wrong. - pass - - is_instance = self._is_instance or fake.is_class_instance(obj) - # ``dir`` doesn't include the type names. - if not inspect.ismodule(obj) and obj != type and not is_instance: - values += create(self._evaluator, type).names_dict.values() - return values - - -def dotted_from_fs_path(fs_path, sys_path): - """ - Changes `/usr/lib/python3.4/email/utils.py` to `email.utils`. I.e. - compares the path with sys.path and then returns the dotted_path. If the - path is not in the sys.path, just returns None. - """ - if os.path.basename(fs_path).startswith('__init__.'): - # We are calculating the path. __init__ files are not interesting. - fs_path = os.path.dirname(fs_path) - - # prefer - # - UNIX - # /path/to/pythonX.Y/lib-dynload - # /path/to/pythonX.Y/site-packages - # - Windows - # C:\path\to\DLLs - # C:\path\to\Lib\site-packages - # over - # - UNIX - # /path/to/pythonX.Y - # - Windows - # C:\path\to\Lib - path = '' - for s in sys_path: - if (fs_path.startswith(s) and len(path) < len(s)): - path = s - - # - Window - # X:\path\to\lib-dynload/datetime.pyd => datetime - module_path = fs_path[len(path):].lstrip(os.path.sep).lstrip('/') - # - Window - # Replace like X:\path\to\something/foo/bar.py - return _path_re.sub('', module_path).replace(os.path.sep, '.').replace('/', '.') - - -def load_module(evaluator, path=None, name=None): - sys_path = evaluator.sys_path - if path is not None: - dotted_path = dotted_from_fs_path(path, sys_path=sys_path) - else: - dotted_path = name - - if dotted_path is None: - p, _, dotted_path = path.partition(os.path.sep) - sys_path.insert(0, p) - - temp, sys.path = sys.path, sys_path - try: - __import__(dotted_path) - except RuntimeError: - if 'PySide' in dotted_path or 'PyQt' in dotted_path: - # RuntimeError: the PyQt4.QtCore and PyQt5.QtCore modules both wrap - # the QObject class. - # See https://github.com/davidhalter/jedi/pull/483 - return None - raise - except ImportError: - # If a module is "corrupt" or not really a Python module or whatever. - debug.warning('Module %s not importable.', path) - return None - finally: - sys.path = temp - - # Just access the cache after import, because of #59 as well as the very - # complicated import structure of Python. - module = sys.modules[dotted_path] - - return create(evaluator, module) - - -docstr_defaults = { - 'floating point number': 'float', - 'character': 'str', - 'integer': 'int', - 'dictionary': 'dict', - 'string': 'str', -} - - -def _parse_function_doc(doc): - """ - Takes a function and returns the params and return value as a tuple. - This is nothing more than a docstring parser. - - TODO docstrings like utime(path, (atime, mtime)) and a(b [, b]) -> None - TODO docstrings like 'tuple of integers' - """ - # parse round parentheses: def func(a, (b,c)) - try: - count = 0 - start = doc.index('(') - for i, s in enumerate(doc[start:]): - if s == '(': - count += 1 - elif s == ')': - count -= 1 - if count == 0: - end = start + i - break - param_str = doc[start + 1:end] - except (ValueError, UnboundLocalError): - # ValueError for doc.index - # UnboundLocalError for undefined end in last line - debug.dbg('no brackets found - no param') - end = 0 - param_str = '' - else: - # remove square brackets, that show an optional param ( = None) - def change_options(m): - args = m.group(1).split(',') - for i, a in enumerate(args): - if a and '=' not in a: - args[i] += '=None' - return ','.join(args) - - while True: - param_str, changes = re.subn(r' ?\[([^\[\]]+)\]', - change_options, param_str) - if changes == 0: - break - param_str = param_str.replace('-', '_') # see: isinstance.__doc__ - - # parse return value - r = re.search('-[>-]* ', doc[end:end + 7]) - if r is None: - ret = '' - else: - index = end + r.end() - # get result type, which can contain newlines - pattern = re.compile(r'(,\n|[^\n-])+') - ret_str = pattern.match(doc, index).group(0).strip() - # New object -> object() - ret_str = re.sub(r'[nN]ew (.*)', r'\1()', ret_str) - - ret = docstr_defaults.get(ret_str, ret_str) - - return param_str, ret - - -def _create_from_name(evaluator, module, parent, name): - try: - return fake.get_faked(module.obj, parent.obj, parent=parent, name=name) - except fake.FakeDoesNotExist: - pass - - try: - obj = getattr(parent.obj, name) - except AttributeError: - # Happens e.g. in properties of - # PyQt4.QtGui.QStyleOptionComboBox.currentText - # -> just set it to None - obj = None - return create(evaluator, obj, parent) - - -def builtin_from_name(evaluator, string): - bltn_obj = getattr(_builtins, string) - return create(evaluator, bltn_obj) - - -def _a_generator(foo): - """Used to have an object to return for generators.""" - yield 42 - yield foo - - -_SPECIAL_OBJECTS = { - 'FUNCTION_CLASS': type(load_module), - 'METHOD_CLASS': type(CompiledObject.is_class), - 'MODULE_CLASS': type(os), - 'GENERATOR_OBJECT': _a_generator(1.0), - 'BUILTINS': _builtins, -} - - -def get_special_object(evaluator, identifier): - obj = _SPECIAL_OBJECTS[identifier] - return create(evaluator, obj, parent=create(evaluator, _builtins)) - - -def compiled_objects_cache(attribute_name): - def decorator(func): - """ - This decorator caches just the ids, oopposed to caching the object itself. - Caching the id has the advantage that an object doesn't need to be - hashable. - """ - def wrapper(evaluator, obj, parent=None, module=None): - cache = getattr(evaluator, attribute_name) - # Do a very cheap form of caching here. - key = id(obj), id(parent) - try: - return cache[key][0] - except KeyError: - # TODO this whole decorator looks way too ugly and this if - # doesn't make it better. Find a more generic solution. - if parent or module: - result = func(evaluator, obj, parent, module) - else: - result = func(evaluator, obj) - # Need to cache all of them, otherwise the id could be overwritten. - cache[key] = result, obj, parent, module - return result - return wrapper - - return decorator - - -@compiled_objects_cache('compiled_cache') -def create(evaluator, obj, parent=None, module=None): - """ - A very weird interface class to this module. The more options provided the - more acurate loading compiled objects is. - """ - if inspect.ismodule(obj): - if parent is not None: - # Modules don't have parents, be careful with caching: recurse. - return create(evaluator, obj) - else: - if parent is None and obj != _builtins: - return create(evaluator, obj, create(evaluator, _builtins)) - - try: - return fake.get_faked(module and module.obj, obj, parent=parent) - except fake.FakeDoesNotExist: - pass - - return CompiledObject(evaluator, obj, parent) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/__init__.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/__init__.cpython-35.pyc deleted file mode 100644 index f55a9d33665417b88df4c1aef257c55e6212bc97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17132 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 De=PvF diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index fab7cedee8d576ba9eb49b6c73ff487f5b819513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15795 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/fake.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/fake.cpython-35.pyc deleted file mode 100644 index 0b2418d6231c57ef6a644e2e0ba83a9d7eff6e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4895 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 H)&lSUgU3i~ diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/mixed.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/mixed.cpython-35.pyc deleted file mode 100644 index 2b16d574bba4bd3f0d508923e18fcd7470ccece7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5122 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 XjXS`q#edG`&8^KXx7}!a?f3r&S7dxD diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/mixed.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/__pycache__/mixed.cpython-36.pyc deleted file mode 100644 index ff5bca91a00d3278ce7ee449b59845deeecf5198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4791 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 lJ{UiScP*-R$ Rename the python2 version (`look at fake/builtins.pym`). - open_func = search_scope(module, 'open') - open_func.children[1] = FakeName('open_python3') - open_func = search_scope(module, 'open_python2') - open_func.children[1] = FakeName('open') - return module - - -def search_scope(scope, obj_name): - for s in scope.subscopes: - if str(s.name) == obj_name: - return s - - -def get_module(obj): - if inspect.ismodule(obj): - return obj - try: - obj = obj.__objclass__ - except AttributeError: - pass - - try: - imp_plz = obj.__module__ - except AttributeError: - # Unfortunately in some cases like `int` there's no __module__ - return builtins - else: - if imp_plz is None: - # Happens for example in `(_ for _ in []).send.__module__`. - return builtins - else: - try: - return __import__(imp_plz) - except ImportError: - # __module__ can be something arbitrary that doesn't exist. - return builtins - - -def _faked(module, obj, name): - # Crazy underscore actions to try to escape all the internal madness. - if module is None: - module = get_module(obj) - - faked_mod = _load_faked_module(module) - if faked_mod is None: - return None - - # Having the module as a `parser.representation.module`, we need to scan - # for methods. - if name is None: - if inspect.isbuiltin(obj): - return search_scope(faked_mod, obj.__name__) - elif not inspect.isclass(obj): - # object is a method or descriptor - try: - objclass = obj.__objclass__ - except AttributeError: - return None - else: - cls = search_scope(faked_mod, objclass.__name__) - if cls is None: - return None - return search_scope(cls, obj.__name__) - else: - if obj == module: - return search_scope(faked_mod, name) - else: - try: - cls_name = obj.__name__ - except AttributeError: - return None - cls = search_scope(faked_mod, cls_name) - if cls is None: - return None - return search_scope(cls, name) - - -def memoize_faked(obj): - """ - A typical memoize function that ignores issues with non hashable results. - """ - cache = obj.cache = {} - - def memoizer(*args, **kwargs): - key = (obj, args, frozenset(kwargs.items())) - try: - result = cache[key] - except TypeError: - return obj(*args, **kwargs) - except KeyError: - result = obj(*args, **kwargs) - if result is not None: - cache[key] = obj(*args, **kwargs) - return result - else: - return result - return memoizer - - -@memoize_faked -def _get_faked(module, obj, name=None): - obj = type(obj) if is_class_instance(obj) else obj - result = _faked(module, obj, name) - if result is None or isinstance(result, pt.Class): - # We're not interested in classes. What we want is functions. - raise FakeDoesNotExist - else: - # Set the docstr which was previously not set (faked modules don't - # contain it). - doc = '"""%s"""' % obj.__doc__ # TODO need escapes. - suite = result.children[-1] - string = pt.String(pt.zero_position_modifier, doc, (0, 0), '') - new_line = pt.Newline('\n', (0, 0), '') - docstr_node = pt.Node('simple_stmt', [string, new_line]) - suite.children.insert(2, docstr_node) - return result - - -def get_faked(module, obj, name=None, parent=None): - faked = _get_faked(module, obj, name) - faked.parent = parent - return faked - - -def is_class_instance(obj): - """Like inspect.* methods.""" - try: - cls = obj.__class__ - except AttributeError: - return False - else: - return cls != type and not issubclass(cls, NOT_CLASS_TYPES) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_functools.pym b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_functools.pym deleted file mode 100644 index 909ef03..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_functools.pym +++ /dev/null @@ -1,9 +0,0 @@ -class partial(): - def __init__(self, func, *args, **keywords): - self.__func = func - self.__args = args - self.__keywords = keywords - - def __call__(self, *args, **kwargs): - # TODO should be **dict(self.__keywords, **kwargs) - return self.__func(*(self.__args + args), **self.__keywords) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_sqlite3.pym b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_sqlite3.pym deleted file mode 100644 index 2151e65..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_sqlite3.pym +++ /dev/null @@ -1,26 +0,0 @@ -def connect(database, timeout=None, isolation_level=None, detect_types=None, factory=None): - return Connection() - - -class Connection(): - def cursor(self): - return Cursor() - - -class Cursor(): - def cursor(self): - return Cursor() - - def fetchone(self): - return Row() - - def fetchmany(self, size=cursor.arraysize): - return [self.fetchone()] - - def fetchall(self): - return [self.fetchone()] - - -class Row(): - def keys(self): - return [''] diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_sre.pym b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_sre.pym deleted file mode 100644 index 217be56..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_sre.pym +++ /dev/null @@ -1,99 +0,0 @@ -def compile(): - class SRE_Match(): - endpos = int() - lastgroup = int() - lastindex = int() - pos = int() - string = str() - regs = ((int(), int()),) - - def __init__(self, pattern): - self.re = pattern - - def start(self): - return int() - - def end(self): - return int() - - def span(self): - return int(), int() - - def expand(self): - return str() - - def group(self, nr): - return str() - - def groupdict(self): - return {str(): str()} - - def groups(self): - return (str(),) - - class SRE_Pattern(): - flags = int() - groupindex = {} - groups = int() - pattern = str() - - def findall(self, string, pos=None, endpos=None): - """ - findall(string[, pos[, endpos]]) --> list. - Return a list of all non-overlapping matches of pattern in string. - """ - return [str()] - - def finditer(self, string, pos=None, endpos=None): - """ - finditer(string[, pos[, endpos]]) --> iterator. - Return an iterator over all non-overlapping matches for the - RE pattern in string. For each match, the iterator returns a - match object. - """ - yield SRE_Match(self) - - def match(self, string, pos=None, endpos=None): - """ - match(string[, pos[, endpos]]) --> match object or None. - Matches zero or more characters at the beginning of the string - pattern - """ - return SRE_Match(self) - - def scanner(self, string, pos=None, endpos=None): - pass - - def search(self, string, pos=None, endpos=None): - """ - search(string[, pos[, endpos]]) --> match object or None. - Scan through string looking for a match, and return a corresponding - MatchObject instance. Return None if no position in the string matches. - """ - return SRE_Match(self) - - def split(self, string, maxsplit=0]): - """ - split(string[, maxsplit = 0]) --> list. - Split string by the occurrences of pattern. - """ - return [str()] - - def sub(self, repl, string, count=0): - """ - sub(repl, string[, count = 0]) --> newstring - Return the string obtained by replacing the leftmost non-overlapping - occurrences of pattern in string by the replacement repl. - """ - return str() - - def subn(self, repl, string, count=0): - """ - subn(repl, string[, count = 0]) --> (newstring, number of subs) - Return the tuple (new_string, number_of_subs_made) found by replacing - the leftmost non-overlapping occurrences of pattern with the - replacement repl. - """ - return (str(), int()) - - return SRE_Pattern() diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_weakref.pym b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_weakref.pym deleted file mode 100644 index 8d21a2c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/_weakref.pym +++ /dev/null @@ -1,8 +0,0 @@ -def proxy(object, callback=None): - return object - -class weakref(): - def __init__(self, object, callback=None): - self.__object = object - def __call__(self): - return self.__object diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/builtins.pym b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/builtins.pym deleted file mode 100644 index 1d5314b..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/builtins.pym +++ /dev/null @@ -1,262 +0,0 @@ -""" -Pure Python implementation of some builtins. -This code is not going to be executed anywhere. -These implementations are not always correct, but should work as good as -possible for the auto completion. -""" - - -def next(iterator, default=None): - if random.choice([0, 1]): - if hasattr("next"): - return iterator.next() - else: - return iterator.__next__() - else: - if default is not None: - return default - - -def iter(collection, sentinel=None): - if sentinel: - yield collection() - else: - for c in collection: - yield c - - -def range(start, stop=None, step=1): - return [0] - - -class file(): - def __iter__(self): - yield '' - def next(self): - return '' - - -class xrange(): - # Attention: this function doesn't exist in Py3k (there it is range). - def __iter__(self): - yield 1 - - def count(self): - return 1 - - def index(self): - return 1 - - -def open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True): - import io - return io.TextIOWrapper(file, mode, buffering, encoding, errors, newline, closefd) - - -def open_python2(name, mode=None, buffering=None): - return file(name, mode, buffering) - - -#-------------------------------------------------------- -# descriptors -#-------------------------------------------------------- -class property(): - def __init__(self, fget, fset=None, fdel=None, doc=None): - self.fget = fget - self.fset = fset - self.fdel = fdel - self.__doc__ = doc - - def __get__(self, obj, cls): - return self.fget(obj) - - def __set__(self, obj, value): - self.fset(obj, value) - - def __delete__(self, obj): - self.fdel(obj) - - def setter(self, func): - self.fset = func - return self - - def getter(self, func): - self.fget = func - return self - - def deleter(self, func): - self.fdel = func - return self - - -class staticmethod(): - def __init__(self, func): - self.__func = func - - def __get__(self, obj, cls): - return self.__func - - -class classmethod(): - def __init__(self, func): - self.__func = func - - def __get__(self, obj, cls): - def _method(*args, **kwargs): - return self.__func(cls, *args, **kwargs) - return _method - - -#-------------------------------------------------------- -# array stuff -#-------------------------------------------------------- -class list(): - def __init__(self, iterable=[]): - self.__iterable = [] - for i in iterable: - self.__iterable += [i] - - def __iter__(self): - for i in self.__iterable: - yield i - - def __getitem__(self, y): - return self.__iterable[y] - - def pop(self): - return self.__iterable[int()] - - -class tuple(): - def __init__(self, iterable=[]): - self.__iterable = [] - for i in iterable: - self.__iterable += [i] - - def __iter__(self): - for i in self.__iterable: - yield i - - def __getitem__(self, y): - return self.__iterable[y] - - def index(self): - return 1 - - def count(self): - return 1 - - -class set(): - def __init__(self, iterable=[]): - self.__iterable = iterable - - def __iter__(self): - for i in self.__iterable: - yield i - - def pop(self): - return list(self.__iterable)[-1] - - def copy(self): - return self - - def difference(self, other): - return self - other - - def intersection(self, other): - return self & other - - def symmetric_difference(self, other): - return self ^ other - - def union(self, other): - return self | other - - -class frozenset(): - def __init__(self, iterable=[]): - self.__iterable = iterable - - def __iter__(self): - for i in self.__iterable: - yield i - - def copy(self): - return self - - -class dict(): - def __init__(self, **elements): - self.__elements = elements - - def clear(self): - # has a strange docstr - pass - - def get(self, k, d=None): - # TODO implement - try: - #return self.__elements[k] - pass - except KeyError: - return d - - def values(self): - return self.__elements.values() - - def setdefault(self, k, d): - # TODO maybe also return the content - return d - - -class enumerate(): - def __init__(self, sequence, start=0): - self.__sequence = sequence - - def __iter__(self): - for i in self.__sequence: - yield 1, i - - def __next__(self): - return next(self.__iter__()) - - def next(self): - return next(self.__iter__()) - - -class reversed(): - def __init__(self, sequence): - self.__sequence = sequence - - def __iter__(self): - for i in self.__sequence: - yield i - - def __next__(self): - return next(self.__iter__()) - - def next(self): - return next(self.__iter__()) - - -def sorted(iterable, cmp=None, key=None, reverse=False): - return iterable - - -#-------------------------------------------------------- -# basic types -#-------------------------------------------------------- -class int(): - def __init__(self, x, base=None): - pass - - -class str(): - def __init__(self, obj): - pass - - -class type(): - def mro(): - return [object] diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/datetime.pym b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/datetime.pym deleted file mode 100644 index 823ac5b..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/datetime.pym +++ /dev/null @@ -1,4 +0,0 @@ -class datetime(): - @staticmethod - def now(): - return datetime() diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/io.pym b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/io.pym deleted file mode 100644 index 87b02ee..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/io.pym +++ /dev/null @@ -1,6 +0,0 @@ -class TextIOWrapper(): - def __next__(self): - return str() - - def __iter__(self): - yield str() diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/posix.pym b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/posix.pym deleted file mode 100644 index 4417f7c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/fake/posix.pym +++ /dev/null @@ -1,5 +0,0 @@ -def getcwd(): - return '' - -def getcwdu(): - return '' diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/mixed.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/mixed.py deleted file mode 100644 index 69119f1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/compiled/mixed.py +++ /dev/null @@ -1,158 +0,0 @@ -""" -Used only for REPL Completion. -""" - -import inspect -import os - -from jedi import common -from jedi.parser.fast import FastParser -from jedi.evaluate import compiled -from jedi.cache import underscore_memoization - - -class MixedObject(object): - """ - A ``MixedObject`` is used in two ways: - - 1. It uses the default logic of ``parser.tree`` objects, - 2. except for getattr calls. The names dicts are generated in a fashion - like ``CompiledObject``. - - This combined logic makes it possible to provide more powerful REPL - completion. It allows side effects that are not noticable with the default - parser structure to still be completeable. - - The biggest difference from CompiledObject to MixedObject is that we are - generally dealing with Python code and not with C code. This will generate - fewer special cases, because we in Python you don't have the same freedoms - to modify the runtime. - """ - def __init__(self, evaluator, obj, node_name): - self._evaluator = evaluator - self.obj = obj - self.node_name = node_name - self.definition = node_name.get_definition() - - @property - def names_dict(self): - return LazyMixedNamesDict(self._evaluator, self) - - def names_dicts(self, search_global): - # TODO is this needed? - assert search_global is False - return [self.names_dict] - - def api_type(self): - mappings = { - 'expr_stmt': 'statement', - 'classdef': 'class', - 'funcdef': 'function', - 'file_input': 'module', - } - return mappings[self.definition.type] - - def __repr__(self): - return '<%s: %s>' % (type(self).__name__, repr(self.obj)) - - def __getattr__(self, name): - return getattr(self.definition, name) - - -class MixedName(compiled.CompiledName): - """ - The ``CompiledName._compiled_object`` is our MixedObject. - """ - @property - @underscore_memoization - def parent(self): - return create(self._evaluator, getattr(self._compiled_obj.obj, self.name)) - - @parent.setter - def parent(self, value): - pass # Just ignore this, Name tries to overwrite the parent attribute. - - @property - def start_pos(self): - if isinstance(self.parent, MixedObject): - return self.parent.node_name.start_pos - - # This means a start_pos that doesn't exist (compiled objects). - return (0, 0) - - -class LazyMixedNamesDict(compiled.LazyNamesDict): - name_class = MixedName - - -def parse(grammar, path): - with open(path) as f: - source = f.read() - source = common.source_to_unicode(source) - return FastParser(grammar, source, path) - - -def _load_module(evaluator, path, python_object): - module = parse(evaluator.grammar, path).module - python_module = inspect.getmodule(python_object) - - evaluator.modules[python_module.__name__] = module - return module - - -def find_syntax_node_name(evaluator, python_object): - try: - path = inspect.getsourcefile(python_object) - except TypeError: - # The type might not be known (e.g. class_with_dict.__weakref__) - return None - if path is None or not os.path.exists(path): - # The path might not exist or be e.g. . - return None - - module = _load_module(evaluator, path, python_object) - - if inspect.ismodule(python_object): - # We don't need to check names for modules, because there's not really - # a way to write a module in a module in Python (and also __name__ can - # be something like ``email.utils``). - return module - - name_str = python_object.__name__ - if name_str == '': - return None # It's too hard to find lambdas. - - names = module.used_names[name_str] - names = [n for n in names if n.is_definition()] - - try: - code = python_object.__code__ - # By using the line number of a code object we make the lookup in a - # file pretty easy. There's still a possibility of people defining - # stuff like ``a = 3; foo(a); a = 4`` on the same line, but if people - # do so we just don't care. - line_nr = code.co_firstlineno - except AttributeError: - pass - else: - line_names = [name for name in names if name.start_pos[0] == line_nr] - # There's a chance that the object is not available anymore, because - # the code has changed in the background. - if line_names: - return line_names[-1] - - # It's really hard to actually get the right definition, here as a last - # resort we just return the last one. This chance might lead to odd - # completions at some points but will lead to mostly correct type - # inference, because people tend to define a public name in a module only - # once. - return names[-1] - - -@compiled.compiled_objects_cache('mixed_cache') -def create(evaluator, obj): - name = find_syntax_node_name(evaluator, obj) - if name is None: - return compiled.create(evaluator, obj) - else: - return MixedObject(evaluator, obj, name) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/docstrings.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/docstrings.py deleted file mode 100644 index d2ab34e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/docstrings.py +++ /dev/null @@ -1,204 +0,0 @@ -""" -Docstrings are another source of information for functions and classes. -:mod:`jedi.evaluate.dynamic` tries to find all executions of functions, while -the docstring parsing is much easier. There are two different types of -docstrings that |jedi| understands: - -- `Sphinx `_ -- `Epydoc `_ - -For example, the sphinx annotation ``:type foo: str`` clearly states that the -type of ``foo`` is ``str``. - -As an addition to parameter searching, this module also provides return -annotations. -""" - -from ast import literal_eval -import re -from itertools import chain -from textwrap import dedent - -from jedi.evaluate.cache import memoize_default -from jedi.parser import ParserWithRecovery, load_grammar -from jedi.parser.tree import Class -from jedi.common import indent_block -from jedi.evaluate.iterable import Array, FakeSequence, AlreadyEvaluated - - -DOCSTRING_PARAM_PATTERNS = [ - r'\s*:type\s+%s:\s*([^\n]+)', # Sphinx - r'\s*:param\s+(\w+)\s+%s:[^\n]+', # Sphinx param with type - r'\s*@type\s+%s:\s*([^\n]+)', # Epydoc -] - -DOCSTRING_RETURN_PATTERNS = [ - re.compile(r'\s*:rtype:\s*([^\n]+)', re.M), # Sphinx - re.compile(r'\s*@rtype:\s*([^\n]+)', re.M), # Epydoc -] - -REST_ROLE_PATTERN = re.compile(r':[^`]+:`([^`]+)`') - - -try: - from numpydoc.docscrape import NumpyDocString -except ImportError: - def _search_param_in_numpydocstr(docstr, param_str): - return [] -else: - def _search_param_in_numpydocstr(docstr, param_str): - """Search `docstr` (in numpydoc format) for type(-s) of `param_str`.""" - params = NumpyDocString(docstr)._parsed_data['Parameters'] - for p_name, p_type, p_descr in params: - if p_name == param_str: - m = re.match('([^,]+(,[^,]+)*?)(,[ ]*optional)?$', p_type) - if m: - p_type = m.group(1) - - if p_type.startswith('{'): - types = set(type(x).__name__ for x in literal_eval(p_type)) - return list(types) - else: - return [p_type] - return [] - - -def _search_param_in_docstr(docstr, param_str): - """ - Search `docstr` for type(-s) of `param_str`. - - >>> _search_param_in_docstr(':type param: int', 'param') - ['int'] - >>> _search_param_in_docstr('@type param: int', 'param') - ['int'] - >>> _search_param_in_docstr( - ... ':type param: :class:`threading.Thread`', 'param') - ['threading.Thread'] - >>> bool(_search_param_in_docstr('no document', 'param')) - False - >>> _search_param_in_docstr(':param int param: some description', 'param') - ['int'] - - """ - # look at #40 to see definitions of those params - patterns = [re.compile(p % re.escape(param_str)) - for p in DOCSTRING_PARAM_PATTERNS] - for pattern in patterns: - match = pattern.search(docstr) - if match: - return [_strip_rst_role(match.group(1))] - - return (_search_param_in_numpydocstr(docstr, param_str) or - []) - - -def _strip_rst_role(type_str): - """ - Strip off the part looks like a ReST role in `type_str`. - - >>> _strip_rst_role(':class:`ClassName`') # strip off :class: - 'ClassName' - >>> _strip_rst_role(':py:obj:`module.Object`') # works with domain - 'module.Object' - >>> _strip_rst_role('ClassName') # do nothing when not ReST role - 'ClassName' - - See also: - http://sphinx-doc.org/domains.html#cross-referencing-python-objects - - """ - match = REST_ROLE_PATTERN.match(type_str) - if match: - return match.group(1) - else: - return type_str - - -def _evaluate_for_statement_string(evaluator, string, module): - code = dedent(""" - def pseudo_docstring_stuff(): - # Create a pseudo function for docstring statements. - %s - """) - if string is None: - return [] - - for element in re.findall('((?:\w+\.)*\w+)\.', string): - # Try to import module part in dotted name. - # (e.g., 'threading' in 'threading.Thread'). - string = 'import %s\n' % element + string - - # Take the default grammar here, if we load the Python 2.7 grammar here, it - # will be impossible to use `...` (Ellipsis) as a token. Docstring types - # don't need to conform with the current grammar. - p = ParserWithRecovery(load_grammar(), code % indent_block(string)) - try: - pseudo_cls = p.module.subscopes[0] - # First pick suite, then simple_stmt (-2 for DEDENT) and then the node, - # which is also not the last item, because there's a newline. - stmt = pseudo_cls.children[-1].children[-2].children[-2] - except (AttributeError, IndexError): - return [] - - # Use the module of the param. - # TODO this module is not the module of the param in case of a function - # call. In that case it's the module of the function call. - # stuffed with content from a function call. - pseudo_cls.parent = module - return list(_execute_types_in_stmt(evaluator, stmt)) - - -def _execute_types_in_stmt(evaluator, stmt): - """ - Executing all types or general elements that we find in a statement. This - doesn't include tuple, list and dict literals, because the stuff they - contain is executed. (Used as type information). - """ - definitions = evaluator.eval_element(stmt) - return chain.from_iterable(_execute_array_values(evaluator, d) for d in definitions) - - -def _execute_array_values(evaluator, array): - """ - Tuples indicate that there's not just one return value, but the listed - ones. `(str, int)` means that it returns a tuple with both types. - """ - if isinstance(array, Array): - values = [] - for types in array.py__iter__(): - objects = set(chain.from_iterable(_execute_array_values(evaluator, typ) for typ in types)) - values.append(AlreadyEvaluated(objects)) - return [FakeSequence(evaluator, values, array.type)] - else: - return evaluator.execute(array) - - -@memoize_default(None, evaluator_is_first_arg=True) -def follow_param(evaluator, param): - def eval_docstring(docstring): - return set( - [p for param_str in _search_param_in_docstr(docstring, str(param.name)) - for p in _evaluate_for_statement_string(evaluator, param_str, module)] - ) - func = param.parent_function - module = param.get_parent_until() - - types = eval_docstring(func.raw_doc) - if func.name.value == '__init__': - cls = func.get_parent_until(Class) - if cls.type == 'classdef': - types |= eval_docstring(cls.raw_doc) - - return types - - -@memoize_default(None, evaluator_is_first_arg=True) -def find_return_types(evaluator, func): - def search_return_in_docstr(code): - for p in DOCSTRING_RETURN_PATTERNS: - match = p.search(code) - if match: - return _strip_rst_role(match.group(1)) - - type_str = search_return_in_docstr(func.raw_doc) - return _evaluate_for_statement_string(evaluator, type_str, func.get_parent_until()) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/dynamic.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/dynamic.py deleted file mode 100644 index d0570b5..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/dynamic.py +++ /dev/null @@ -1,149 +0,0 @@ -""" -One of the really important features of |jedi| is to have an option to -understand code like this:: - - def foo(bar): - bar. # completion here - foo(1) - -There's no doubt wheter bar is an ``int`` or not, but if there's also a call -like ``foo('str')``, what would happen? Well, we'll just show both. Because -that's what a human would expect. - -It works as follows: - -- |Jedi| sees a param -- search for function calls named ``foo`` -- execute these calls and check the input. This work with a ``ParamListener``. -""" -from itertools import chain - -from jedi._compatibility import unicode -from jedi.parser import tree -from jedi import settings -from jedi import debug -from jedi.evaluate.cache import memoize_default -from jedi.evaluate import imports - - -MAX_PARAM_SEARCHES = 20 - - -class ParamListener(object): - """ - This listener is used to get the params for a function. - """ - def __init__(self): - self.param_possibilities = [] - - def execute(self, params): - self.param_possibilities += params - - -@debug.increase_indent -def search_params(evaluator, param): - """ - A dynamic search for param values. If you try to complete a type: - - >>> def func(foo): - ... foo - >>> func(1) - >>> func("") - - It is not known what the type ``foo`` without analysing the whole code. You - have to look for all calls to ``func`` to find out what ``foo`` possibly - is. - """ - if not settings.dynamic_params: - return set() - - evaluator.dynamic_params_depth += 1 - try: - func = param.get_parent_until(tree.Function) - debug.dbg('Dynamic param search for %s in %s.', param, str(func.name), color='MAGENTA') - # Compare the param names. - names = [n for n in search_function_call(evaluator, func) - if n.value == param.name.value] - # Evaluate the ExecutedParams to types. - result = set(chain.from_iterable(n.parent.eval(evaluator) for n in names)) - debug.dbg('Dynamic param result %s', result, color='MAGENTA') - return result - finally: - evaluator.dynamic_params_depth -= 1 - - -@memoize_default([], evaluator_is_first_arg=True) -def search_function_call(evaluator, func): - """ - Returns a list of param names. - """ - from jedi.evaluate import representation as er - - def get_possible_nodes(module, func_name): - try: - names = module.used_names[func_name] - except KeyError: - return - - for name in names: - bracket = name.get_next_leaf() - trailer = bracket.parent - if trailer.type == 'trailer' and bracket == '(': - yield name, trailer - - def undecorate(typ): - # We have to remove decorators, because they are not the - # "original" functions, this way we can easily compare. - # At the same time we also have to remove InstanceElements. - if typ.isinstance(er.Function, er.Instance) \ - and typ.decorates is not None: - return typ.decorates - elif isinstance(typ, er.InstanceElement): - return typ.var - else: - return typ - - current_module = func.get_parent_until() - func_name = unicode(func.name) - compare = func - if func_name == '__init__': - cls = func.get_parent_scope() - if isinstance(cls, tree.Class): - func_name = unicode(cls.name) - compare = cls - - # add the listener - listener = ParamListener() - func.listeners.add(listener) - - try: - result = [] - i = 0 - for mod in imports.get_modules_containing_name(evaluator, [current_module], func_name): - for name, trailer in get_possible_nodes(mod, func_name): - i += 1 - - # This is a simple way to stop Jedi's dynamic param recursion - # from going wild: The deeper Jedi's in the recursin, the less - # code should be evaluated. - if i * evaluator.dynamic_params_depth > MAX_PARAM_SEARCHES: - return listener.param_possibilities - - for typ in evaluator.goto_definitions(name): - undecorated = undecorate(typ) - if evaluator.wrap(compare) == undecorated: - # Only if we have the correct function we execute - # it, otherwise just ignore it. - evaluator.eval_trailer([typ], trailer) - - result = listener.param_possibilities - - # If there are results after processing a module, we're probably - # good to process. - if result: - return result - finally: - # cleanup: remove the listener; important: should not stick. - func.listeners.remove(listener) - - return set() diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/finder.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/finder.py deleted file mode 100644 index 2095959..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/finder.py +++ /dev/null @@ -1,632 +0,0 @@ -""" -Searching for names with given scope and name. This is very central in Jedi and -Python. The name resolution is quite complicated with descripter, -``__getattribute__``, ``__getattr__``, ``global``, etc. - -If you want to understand name resolution, please read the first few chapters -in http://blog.ionelmc.ro/2015/02/09/understanding-python-metaclasses/. - -Flow checks -+++++++++++ - -Flow checks are not really mature. There's only a check for ``isinstance``. It -would check whether a flow has the form of ``if isinstance(a, type_or_tuple)``. -Unfortunately every other thing is being ignored (e.g. a == '' would be easy to -check for -> a is a string). There's big potential in these checks. -""" -from itertools import chain - -from jedi._compatibility import unicode -from jedi.parser import tree -from jedi import debug -from jedi import common -from jedi.common import unite -from jedi import settings -from jedi.evaluate import representation as er -from jedi.evaluate import dynamic -from jedi.evaluate import compiled -from jedi.evaluate import docstrings -from jedi.evaluate import pep0484 -from jedi.evaluate import iterable -from jedi.evaluate import imports -from jedi.evaluate import analysis -from jedi.evaluate import flow_analysis -from jedi.evaluate import param -from jedi.evaluate import helpers -from jedi.evaluate.cache import memoize_default - - -def filter_after_position(names, position): - """ - Removes all names after a certain position. If position is None, just - returns the names list. - """ - if position is None: - return names - - names_new = [] - for n in names: - # Filter positions and also allow list comprehensions and lambdas. - if n.start_pos[0] is not None and n.start_pos < position \ - or isinstance(n.get_definition(), (tree.CompFor, tree.Lambda)): - names_new.append(n) - return names_new - - -def filter_definition_names(names, origin, position=None): - """ - Filter names that are actual definitions in a scope. Names that are just - used will be ignored. - """ - if not names: - return [] - - # Just calculate the scope from the first - stmt = names[0].get_definition() - scope = stmt.get_parent_scope() - - if not (isinstance(scope, er.FunctionExecution) and - isinstance(scope.base, er.LambdaWrapper)): - names = filter_after_position(names, position) - names = [name for name in names if name.is_definition()] - - # Private name mangling (compile.c) disallows access on names - # preceeded by two underscores `__` if used outside of the class. Names - # that also end with two underscores (e.g. __id__) are not affected. - for name in list(names): - if name.value.startswith('__') and not name.value.endswith('__'): - if filter_private_variable(scope, origin): - names.remove(name) - return names - - -class NameFinder(object): - def __init__(self, evaluator, scope, name_str, position=None): - self._evaluator = evaluator - # Make sure that it's not just a syntax tree node. - self.scope = evaluator.wrap(scope) - self.name_str = name_str - self.position = position - self._found_predefined_if_name = None - - @debug.increase_indent - def find(self, scopes, attribute_lookup): - """ - :params bool attribute_lookup: Tell to logic if we're accessing the - attribute or the contents of e.g. a function. - """ - # TODO rename scopes to names_dicts - - names = self.filter_name(scopes) - if self._found_predefined_if_name is not None: - return self._found_predefined_if_name - - types = self._names_to_types(names, attribute_lookup) - - if not names and not types \ - and not (isinstance(self.name_str, tree.Name) and - isinstance(self.name_str.parent.parent, tree.Param)): - if not isinstance(self.name_str, (str, unicode)): # TODO Remove? - if attribute_lookup: - analysis.add_attribute_error(self._evaluator, - self.scope, self.name_str) - else: - message = ("NameError: name '%s' is not defined." - % self.name_str) - analysis.add(self._evaluator, 'name-error', self.name_str, - message) - - debug.dbg('finder._names_to_types: %s -> %s', names, types) - return types - - def scopes(self, search_global=False): - if search_global: - return global_names_dict_generator(self._evaluator, self.scope, self.position) - else: - return ((n, None) for n in self.scope.names_dicts(search_global)) - - def names_dict_lookup(self, names_dict, position): - def get_param(scope, el): - if isinstance(el.get_parent_until(tree.Param), tree.Param): - return scope.param_by_name(str(el)) - return el - - search_str = str(self.name_str) - try: - names = names_dict[search_str] - if not names: # We want names, otherwise stop. - return [] - except KeyError: - return [] - - names = filter_definition_names(names, self.name_str, position) - - name_scope = None - # Only the names defined in the last position are valid definitions. - last_names = [] - for name in reversed(sorted(names, key=lambda name: name.start_pos)): - stmt = name.get_definition() - name_scope = self._evaluator.wrap(stmt.get_parent_scope()) - - if isinstance(self.scope, er.Instance) and not isinstance(name_scope, er.Instance): - # Instances should not be checked for positioning, because we - # don't know in which order the functions are called. - last_names.append(name) - continue - - if isinstance(name_scope, compiled.CompiledObject): - # Let's test this. TODO need comment. shouldn't this be - # filtered before? - last_names.append(name) - continue - - if isinstance(stmt, er.ModuleWrapper): - # In case of REPL completion, we can infer modules names that - # don't really have a definition (because they are really just - # namespaces). In this case we can just add it. - last_names.append(name) - continue - - if isinstance(name, compiled.CompiledName) \ - or isinstance(name, er.InstanceName) and isinstance(name._origin_name, compiled.CompiledName): - last_names.append(name) - continue - - if isinstance(self.name_str, tree.Name): - origin_scope = self.name_str.get_parent_until(tree.Scope, reverse=True) - scope = self.name_str - check = None - while True: - scope = scope.parent - if scope.type in ("if_stmt", "for_stmt", "comp_for"): - try: - name_dict = self._evaluator.predefined_if_name_dict_dict[scope] - types = set(name_dict[str(self.name_str)]) - except KeyError: - continue - else: - if self.name_str.start_pos < scope.children[1].end_pos: - # It doesn't make any sense to check if - # statements in the if statement itself, just - # deliver types. - self._found_predefined_if_name = types - else: - check = flow_analysis.break_check(self._evaluator, self.scope, - origin_scope) - if check is flow_analysis.UNREACHABLE: - self._found_predefined_if_name = set() - else: - self._found_predefined_if_name = types - break - if isinstance(scope, tree.IsScope) or scope is None: - break - else: - origin_scope = None - - if isinstance(stmt.parent, compiled.CompiledObject): - # TODO seriously? this is stupid. - continue - check = flow_analysis.break_check(self._evaluator, name_scope, - stmt, origin_scope) - if check is not flow_analysis.UNREACHABLE: - last_names.append(name) - - if check is flow_analysis.REACHABLE: - break - - if isinstance(name_scope, er.FunctionExecution): - # Replace params - return [get_param(name_scope, n) for n in last_names] - return last_names - - def filter_name(self, names_dicts): - """ - Searches names that are defined in a scope (the different - `names_dicts`), until a name fits. - """ - names = [] - for names_dict, position in names_dicts: - names = self.names_dict_lookup(names_dict, position) - if names: - break - - debug.dbg('finder.filter_name "%s" in (%s): %s@%s', self.name_str, - self.scope, names, self.position) - return list(self._clean_names(names)) - - def _clean_names(self, names): - """ - ``NameFinder.filter_name`` should only output names with correct - wrapper parents. We don't want to see AST classes out in the - evaluation, so remove them already here! - """ - for n in names: - definition = n.parent - if isinstance(definition, (compiled.CompiledObject, - iterable.BuiltinMethod)): - # TODO this if should really be removed by changing the type of - # those classes. - yield n - elif definition.type in ('funcdef', 'classdef', 'file_input'): - yield self._evaluator.wrap(definition).name - else: - yield n - - def _check_getattr(self, inst): - """Checks for both __getattr__ and __getattribute__ methods""" - result = set() - # str is important, because it shouldn't be `Name`! - name = compiled.create(self._evaluator, str(self.name_str)) - with common.ignored(KeyError): - result = inst.execute_subscope_by_name('__getattr__', name) - if not result: - # This is a little bit special. `__getattribute__` is in Python - # executed before `__getattr__`. But: I know no use case, where - # this could be practical and where jedi would return wrong types. - # If you ever find something, let me know! - # We are inversing this, because a hand-crafted `__getattribute__` - # could still call another hand-crafted `__getattr__`, but not the - # other way around. - with common.ignored(KeyError): - result = inst.execute_subscope_by_name('__getattribute__', name) - return result - - def _names_to_types(self, names, attribute_lookup): - types = set() - - # Add isinstance and other if/assert knowledge. - if isinstance(self.name_str, tree.Name): - # Ignore FunctionExecution parents for now. - flow_scope = self.name_str - until = flow_scope.get_parent_until(er.FunctionExecution) - while not isinstance(until, er.FunctionExecution): - flow_scope = flow_scope.get_parent_scope(include_flows=True) - if flow_scope is None: - break - # TODO check if result is in scope -> no evaluation necessary - n = check_flow_information(self._evaluator, flow_scope, - self.name_str, self.position) - if n: - return n - - for name in names: - new_types = _name_to_types(self._evaluator, name, self.scope) - if isinstance(self.scope, (er.Class, er.Instance)) and attribute_lookup: - types |= set(self._resolve_descriptors(name, new_types)) - else: - types |= set(new_types) - if not names and isinstance(self.scope, er.Instance): - # handling __getattr__ / __getattribute__ - return self._check_getattr(self.scope) - - return types - - def _resolve_descriptors(self, name, types): - # The name must not be in the dictionary, but part of the class - # definition. __get__ is only called if the descriptor is defined in - # the class dictionary. - name_scope = name.get_definition().get_parent_scope() - if not isinstance(name_scope, (er.Instance, tree.Class)): - return types - - result = set() - for r in types: - try: - desc_return = r.get_descriptor_returns - except AttributeError: - result.add(r) - else: - result |= desc_return(self.scope) - return result - - -def _get_global_stmt_scopes(evaluator, global_stmt, name): - global_stmt_scope = global_stmt.get_parent_scope() - module = global_stmt_scope.get_parent_until() - for used_name in module.used_names[str(name)]: - if used_name.parent.type == 'global_stmt': - yield evaluator.wrap(used_name.get_parent_scope()) - - -@memoize_default(set(), evaluator_is_first_arg=True) -def _name_to_types(evaluator, name, scope): - types = [] - typ = name.get_definition() - if typ.isinstance(tree.ForStmt): - types = pep0484.find_type_from_comment_hint_for(evaluator, typ, name) - if types: - return types - if typ.isinstance(tree.WithStmt): - types = pep0484.find_type_from_comment_hint_with(evaluator, typ, name) - if types: - return types - if typ.isinstance(tree.ForStmt, tree.CompFor): - container_types = evaluator.eval_element(typ.children[3]) - for_types = iterable.py__iter__types(evaluator, container_types, typ.children[3]) - types = check_tuple_assignments(evaluator, for_types, name) - elif isinstance(typ, tree.Param): - types = _eval_param(evaluator, typ, scope) - elif typ.isinstance(tree.ExprStmt): - types = _remove_statements(evaluator, typ, name) - elif typ.isinstance(tree.WithStmt): - types = evaluator.eval_element(typ.node_from_name(name)) - elif isinstance(typ, tree.Import): - types = imports.ImportWrapper(evaluator, name).follow() - elif typ.type == 'global_stmt': - for s in _get_global_stmt_scopes(evaluator, typ, name): - finder = NameFinder(evaluator, s, str(name)) - names_dicts = finder.scopes(search_global=True) - # For global_stmt lookups, we only need the first possible scope, - # which means the function itself. - names_dicts = [next(names_dicts)] - types += finder.find(names_dicts, attribute_lookup=False) - elif isinstance(typ, tree.TryStmt): - # TODO an exception can also be a tuple. Check for those. - # TODO check for types that are not classes and add it to - # the static analysis report. - exceptions = evaluator.eval_element(name.get_previous_sibling().get_previous_sibling()) - types = set(chain.from_iterable(evaluator.execute(t) for t in exceptions)) - else: - if typ.isinstance(er.Function): - typ = typ.get_decorated_func() - types = set([typ]) - return types - - -def _remove_statements(evaluator, stmt, name): - """ - This is the part where statements are being stripped. - - Due to lazy evaluation, statements like a = func; b = a; b() have to be - evaluated. - """ - types = set() - # Remove the statement docstr stuff for now, that has to be - # implemented with the evaluator class. - #if stmt.docstr: - #res_new.append(stmt) - - check_instance = None - if isinstance(stmt, er.InstanceElement) and stmt.is_class_var: - check_instance = stmt.instance - stmt = stmt.var - - pep0484types = \ - pep0484.find_type_from_comment_hint_assign(evaluator, stmt, name) - if pep0484types: - return pep0484types - types |= evaluator.eval_statement(stmt, seek_name=name) - - if check_instance is not None: - # class renames - types = set([er.get_instance_el(evaluator, check_instance, a, True) - if isinstance(a, (er.Function, tree.Function)) - else a for a in types]) - return types - - -def _eval_param(evaluator, param, scope): - res_new = set() - func = param.get_parent_scope() - - cls = func.parent.get_parent_until((tree.Class, tree.Function)) - - from jedi.evaluate.param import ExecutedParam, Arguments - if isinstance(cls, tree.Class) and param.position_nr == 0 \ - and not isinstance(param, ExecutedParam): - # This is where we add self - if it has never been - # instantiated. - if isinstance(scope, er.InstanceElement): - res_new.add(scope.instance) - else: - inst = er.Instance(evaluator, evaluator.wrap(cls), - Arguments(evaluator, ()), is_generated=True) - res_new.add(inst) - return res_new - - # Instances are typically faked, if the instance is not called from - # outside. Here we check it for __init__ functions and return. - if isinstance(func, er.InstanceElement) \ - and func.instance.is_generated and str(func.name) == '__init__': - param = func.var.params[param.position_nr] - - # Add pep0484 and docstring knowledge. - pep0484_hints = pep0484.follow_param(evaluator, param) - doc_params = docstrings.follow_param(evaluator, param) - if pep0484_hints or doc_params: - return list(set(pep0484_hints) | set(doc_params)) - - if isinstance(param, ExecutedParam): - return res_new | param.eval(evaluator) - else: - # Param owns no information itself. - res_new |= dynamic.search_params(evaluator, param) - if not res_new: - if param.stars: - t = 'tuple' if param.stars == 1 else 'dict' - typ = list(evaluator.find_types(evaluator.BUILTINS, t))[0] - res_new = evaluator.execute(typ) - if param.default: - res_new |= evaluator.eval_element(param.default) - return res_new - - -def check_flow_information(evaluator, flow, search_name, pos): - """ Try to find out the type of a variable just with the information that - is given by the flows: e.g. It is also responsible for assert checks.:: - - if isinstance(k, str): - k. # <- completion here - - ensures that `k` is a string. - """ - if not settings.dynamic_flow_information: - return None - - result = set() - if flow.is_scope(): - # Check for asserts. - try: - names = reversed(flow.names_dict[search_name.value]) - except (KeyError, AttributeError): - names = [] - - for name in names: - ass = name.get_parent_until(tree.AssertStmt) - if isinstance(ass, tree.AssertStmt) and pos is not None and ass.start_pos < pos: - result = _check_isinstance_type(evaluator, ass.assertion(), search_name) - if result: - break - - if isinstance(flow, (tree.IfStmt, tree.WhileStmt)): - potential_ifs = [c for c in flow.children[1::4] if c != ':'] - for if_test in reversed(potential_ifs): - if search_name.start_pos > if_test.end_pos: - return _check_isinstance_type(evaluator, if_test, search_name) - return result - - -def _check_isinstance_type(evaluator, element, search_name): - try: - assert element.type in ('power', 'atom_expr') - # this might be removed if we analyze and, etc - assert len(element.children) == 2 - first, trailer = element.children - assert isinstance(first, tree.Name) and first.value == 'isinstance' - assert trailer.type == 'trailer' and trailer.children[0] == '(' - assert len(trailer.children) == 3 - - # arglist stuff - arglist = trailer.children[1] - args = param.Arguments(evaluator, arglist, trailer) - lst = list(args.unpack()) - # Disallow keyword arguments - assert len(lst) == 2 and lst[0][0] is None and lst[1][0] is None - name = lst[0][1][0] # first argument, values, first value - # Do a simple get_code comparison. They should just have the same code, - # and everything will be all right. - classes = lst[1][1][0] - call = helpers.call_of_leaf(search_name) - assert name.get_code(normalized=True) == call.get_code(normalized=True) - except AssertionError: - return set() - - result = set() - for cls_or_tup in evaluator.eval_element(classes): - if isinstance(cls_or_tup, iterable.Array) and cls_or_tup.type == 'tuple': - for typ in unite(cls_or_tup.py__iter__()): - result |= evaluator.execute(typ) - else: - result |= evaluator.execute(cls_or_tup) - return result - - -def global_names_dict_generator(evaluator, scope, position): - """ - For global name lookups. Yields tuples of (names_dict, position). If the - position is None, the position does not matter anymore in that scope. - - This function is used to include names from outer scopes. For example, when - the current scope is function: - - >>> from jedi._compatibility import u, no_unicode_pprint - >>> from jedi.parser import ParserWithRecovery, load_grammar - >>> parser = ParserWithRecovery(load_grammar(), u(''' - ... x = ['a', 'b', 'c'] - ... def func(): - ... y = None - ... ''')) - >>> scope = parser.module.subscopes[0] - >>> scope - - - `global_names_dict_generator` is a generator. First it yields names from - most inner scope. - - >>> from jedi.evaluate import Evaluator - >>> evaluator = Evaluator(load_grammar()) - >>> scope = evaluator.wrap(scope) - >>> pairs = list(global_names_dict_generator(evaluator, scope, (4, 0))) - >>> no_unicode_pprint(pairs[0]) - ({'func': [], 'y': []}, (4, 0)) - - Then it yields the names from one level "lower". In this example, this - is the most outer scope. As you can see, the position in the tuple is now - None, because typically the whole module is loaded before the function is - called. - - >>> no_unicode_pprint(pairs[1]) - ({'func': [], 'x': []}, None) - - After that we have a few underscore names that are part of the module. - - >>> sorted(pairs[2][0].keys()) - ['__doc__', '__file__', '__name__', '__package__'] - >>> pairs[3] # global names -> there are none in our example. - ({}, None) - >>> pairs[4] # package modules -> Also none. - ({}, None) - - Finally, it yields names from builtin, if `include_builtin` is - true (default). - - >>> pairs[5][0].values() #doctest: +ELLIPSIS - [[], ...] - """ - in_func = False - while scope is not None: - if not (scope.type == 'classdef' and in_func): - # Names in methods cannot be resolved within the class. - - for names_dict in scope.names_dicts(True): - yield names_dict, position - if hasattr(scope, 'resets_positions'): - # TODO This is so ugly, seriously. However there's - # currently no good way of influencing - # global_names_dict_generator when it comes to certain - # objects. - position = None - if scope.type == 'funcdef': - # The position should be reset if the current scope is a function. - in_func = True - position = None - scope = evaluator.wrap(scope.get_parent_scope()) - - # Add builtins to the global scope. - for names_dict in evaluator.BUILTINS.names_dicts(True): - yield names_dict, None - - -def check_tuple_assignments(evaluator, types, name): - """ - Checks if tuples are assigned. - """ - for index, node in name.assignment_indexes(): - iterated = iterable.py__iter__(evaluator, types, node) - for _ in range(index + 1): - try: - types = next(iterated) - except StopIteration: - # We could do this with the default param in next. But this - # would allow this loop to run for a very long time if the - # index number is high. Therefore break if the loop is - # finished. - types = set() - break - return types - - -def filter_private_variable(scope, origin_node): - """Check if a variable is defined inside the same class or outside.""" - instance = scope.get_parent_scope() - coming_from = origin_node - while coming_from is not None \ - and not isinstance(coming_from, (tree.Class, compiled.CompiledObject)): - coming_from = coming_from.get_parent_scope() - - # CompiledObjects don't have double underscore attributes, but Jedi abuses - # those for fakes (builtins.pym -> list). - if isinstance(instance, compiled.CompiledObject): - return instance != coming_from - else: - return isinstance(instance, er.Instance) and instance.base.base != coming_from diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/flow_analysis.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/flow_analysis.py deleted file mode 100644 index e188264..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/flow_analysis.py +++ /dev/null @@ -1,91 +0,0 @@ -from jedi.parser import tree - - -class Status(object): - lookup_table = {} - - def __init__(self, value, name): - self._value = value - self._name = name - Status.lookup_table[value] = self - - def invert(self): - if self is REACHABLE: - return UNREACHABLE - elif self is UNREACHABLE: - return REACHABLE - else: - return UNSURE - - def __and__(self, other): - if UNSURE in (self, other): - return UNSURE - else: - return REACHABLE if self._value and other._value else UNREACHABLE - - def __repr__(self): - return '<%s: %s>' % (type(self).__name__, self._name) - - -REACHABLE = Status(True, 'reachable') -UNREACHABLE = Status(False, 'unreachable') -UNSURE = Status(None, 'unsure') - - -def break_check(evaluator, base_scope, stmt, origin_scope=None): - element_scope = evaluator.wrap(stmt.get_parent_scope(include_flows=True)) - # Direct parents get resolved, we filter scopes that are separate branches. - # This makes sense for autocompletion and static analysis. For actual - # Python it doesn't matter, because we're talking about potentially - # unreachable code. - # e.g. `if 0:` would cause all name lookup within the flow make - # unaccessible. This is not a "problem" in Python, because the code is - # never called. In Jedi though, we still want to infer types. - while origin_scope is not None: - if element_scope == origin_scope: - return REACHABLE - origin_scope = origin_scope.parent - x = _break_check(evaluator, stmt, base_scope, element_scope) - return x - - -def _break_check(evaluator, stmt, base_scope, element_scope): - element_scope = evaluator.wrap(element_scope) - base_scope = evaluator.wrap(base_scope) - - reachable = REACHABLE - if isinstance(element_scope, tree.IfStmt): - if element_scope.node_after_else(stmt): - for check_node in element_scope.check_nodes(): - reachable = _check_if(evaluator, check_node) - if reachable in (REACHABLE, UNSURE): - break - reachable = reachable.invert() - else: - node = element_scope.node_in_which_check_node(stmt) - if node is not None: - reachable = _check_if(evaluator, node) - elif isinstance(element_scope, (tree.TryStmt, tree.WhileStmt)): - return UNSURE - - # Only reachable branches need to be examined further. - if reachable in (UNREACHABLE, UNSURE): - return reachable - - if element_scope.type == 'file_input': - # The definition is in another module and therefore just return what we - # have generated. - return reachable - if base_scope != element_scope and base_scope != element_scope.parent: - return reachable & _break_check(evaluator, stmt, base_scope, element_scope.parent) - else: - return reachable - - -def _check_if(evaluator, node): - types = evaluator.eval_element(node) - values = set(x.py__bool__() for x in types) - if len(values) == 1: - return Status.lookup_table[values.pop()] - else: - return UNSURE diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/helpers.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/helpers.py deleted file mode 100644 index 27293ed..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/helpers.py +++ /dev/null @@ -1,200 +0,0 @@ -import copy -from itertools import chain - -from jedi.parser import tree - - -def deep_ast_copy(obj, parent=None, new_elements=None): - """ - Much, much faster than copy.deepcopy, but just for Parser elements (Doesn't - copy parents). - """ - - if new_elements is None: - new_elements = {} - - def copy_node(obj): - # If it's already in the cache, just return it. - try: - return new_elements[obj] - except KeyError: - # Actually copy and set attributes. - new_obj = copy.copy(obj) - new_elements[obj] = new_obj - - # Copy children - new_children = [] - for child in obj.children: - typ = child.type - if typ in ('newline', 'operator', 'keyword', 'number', 'string', - 'indent', 'dedent', 'endmarker', 'error_leaf'): - # At the moment we're not actually copying those primitive - # elements, because there's really no need to. The parents are - # obviously wrong, but that's not an issue. - new_child = child - elif typ == 'name': - new_elements[child] = new_child = copy.copy(child) - new_child.parent = new_obj - else: # Is a BaseNode. - new_child = copy_node(child) - new_child.parent = new_obj - new_children.append(new_child) - new_obj.children = new_children - - # Copy the names_dict (if there is one). - try: - names_dict = obj.names_dict - except AttributeError: - pass - else: - try: - new_obj.names_dict = new_names_dict = {} - except AttributeError: # Impossible to set CompFor.names_dict - pass - else: - for string, names in names_dict.items(): - new_names_dict[string] = [new_elements[n] for n in names] - return new_obj - - if isinstance(obj, tree.BaseNode): - new_obj = copy_node(obj) - else: - # Special case of a Name object. - new_elements[obj] = new_obj = copy.copy(obj) - - if parent is not None: - new_obj.parent = parent - return new_obj - - -def call_of_leaf(leaf, cut_own_trailer=False): - """ - Creates a "call" node that consist of all ``trailer`` and ``power`` - objects. E.g. if you call it with ``append``:: - - list([]).append(3) or None - - You would get a node with the content ``list([]).append`` back. - - This generates a copy of the original ast node. - - If you're using the leaf, e.g. the bracket `)` it will return ``list([])``. - - # TODO remove cut_own_trailer option, since its always used with it. Just - # ignore it, It's not what we want anyway. Or document it better? - """ - trailer = leaf.parent - # The leaf may not be the last or first child, because there exist three - # different trailers: `( x )`, `[ x ]` and `.x`. In the first two examples - # we should not match anything more than x. - if trailer.type != 'trailer' or leaf not in (trailer.children[0], trailer.children[-1]): - if trailer.type == 'atom': - return trailer - return leaf - - power = trailer.parent - index = power.children.index(trailer) - power = deep_ast_copy(power) - if cut_own_trailer: - cut = index - else: - cut = index + 1 - power.children[cut:] = [] - - if power.type == 'error_node': - start = index - while True: - start -= 1 - if power.children[start].type != 'trailer': - break - transformed = tree.Node('power', power.children[start:]) - transformed.parent = power.parent - return transformed - - return power - - -def get_names_of_node(node): - try: - children = node.children - except AttributeError: - if node.type == 'name': - return [node] - else: - return [] - else: - return list(chain.from_iterable(get_names_of_node(c) for c in children)) - - -def get_module_names(module, all_scopes): - """ - Returns a dictionary with name parts as keys and their call paths as - values. - """ - if all_scopes: - dct = module.used_names - else: - dct = module.names_dict - return chain.from_iterable(dct.values()) - - -class FakeImport(tree.ImportName): - def __init__(self, name, parent, level=0): - super(FakeImport, self).__init__([]) - self.parent = parent - self._level = level - self.name = name - - def get_defined_names(self): - return [self.name] - - def aliases(self): - return {} - - @property - def level(self): - return self._level - - @property - def start_pos(self): - return 0, 0 - - def paths(self): - return [[self.name]] - - def is_definition(self): - return True - - -class FakeName(tree.Name): - def __init__(self, name_str, parent=None, start_pos=(0, 0), is_definition=None): - """ - In case is_definition is defined (not None), that bool value will be - returned. - """ - super(FakeName, self).__init__(tree.zero_position_modifier, name_str, start_pos) - self.parent = parent - self._is_definition = is_definition - - def get_definition(self): - return self.parent - - def is_definition(self): - if self._is_definition is None: - return super(FakeName, self).is_definition() - else: - return self._is_definition - - -class LazyName(FakeName): - def __init__(self, name, parent_callback, is_definition=None): - super(LazyName, self).__init__(name, is_definition=is_definition) - self._parent_callback = parent_callback - - @property - def parent(self): - return self._parent_callback() - - @parent.setter - def parent(self, value): - pass # Do nothing, super classes can try to set the parent. diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/imports.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/imports.py deleted file mode 100644 index d65d897..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/imports.py +++ /dev/null @@ -1,517 +0,0 @@ -""" -:mod:`jedi.evaluate.imports` is here to resolve import statements and return -the modules/classes/functions/whatever, which they stand for. However there's -not any actual importing done. This module is about finding modules in the -filesystem. This can be quite tricky sometimes, because Python imports are not -always that simple. - -This module uses imp for python up to 3.2 and importlib for python 3.3 on; the -correct implementation is delegated to _compatibility. - -This module also supports import autocompletion, which means to complete -statements like ``from datetim`` (curser at the end would return ``datetime``). -""" -import imp -import os -import pkgutil -import sys -from itertools import chain - -from jedi._compatibility import find_module, unicode -from jedi import common -from jedi import debug -from jedi.parser import fast -from jedi.parser import tree -from jedi.parser.utils import save_parser, load_parser, parser_cache -from jedi.evaluate import sys_path -from jedi.evaluate import helpers -from jedi import settings -from jedi.common import source_to_unicode -from jedi.evaluate import compiled -from jedi.evaluate import analysis -from jedi.evaluate.cache import memoize_default, NO_DEFAULT - - -def completion_names(evaluator, imp, pos): - name = imp.name_for_position(pos) - module = evaluator.wrap(imp.get_parent_until()) - if name is None: - level = 0 - for node in imp.children: - if node.end_pos <= pos: - if node in ('.', '...'): - level += len(node.value) - import_path = [] - else: - # Completion on an existing name. - - # The import path needs to be reduced by one, because we're completing. - import_path = imp.path_for_name(name)[:-1] - level = imp.level - - importer = Importer(evaluator, tuple(import_path), module, level) - if isinstance(imp, tree.ImportFrom): - c = imp.children - only_modules = c[c.index('import')].start_pos >= pos - else: - only_modules = True - return importer.completion_names(evaluator, only_modules) - - -class ImportWrapper(tree.Base): - def __init__(self, evaluator, name): - self._evaluator = evaluator - self._name = name - - self._import = name.get_parent_until(tree.Import) - self.import_path = self._import.path_for_name(name) - - @memoize_default() - def follow(self, is_goto=False): - module = self._evaluator.wrap(self._import.get_parent_until()) - import_path = self._import.path_for_name(self._name) - from_import_name = None - try: - from_names = self._import.get_from_names() - except AttributeError: - # Is an import_name - pass - else: - if len(from_names) + 1 == len(import_path): - # We have to fetch the from_names part first and then check - # if from_names exists in the modules. - from_import_name = import_path[-1] - import_path = from_names - - importer = Importer(self._evaluator, tuple(import_path), - module, self._import.level) - - types = importer.follow() - - #if self._import.is_nested() and not self.nested_resolve: - # scopes = [NestedImportModule(module, self._import)] - - if from_import_name is not None: - types = set(chain.from_iterable( - self._evaluator.find_types(t, unicode(from_import_name), - is_goto=is_goto) - for t in types)) - - if not types: - path = import_path + [from_import_name] - importer = Importer(self._evaluator, tuple(path), - module, self._import.level) - types = importer.follow() - # goto only accepts `Name` - if is_goto: - types = set(s.name for s in types) - else: - # goto only accepts `Name` - if is_goto: - types = set(s.name for s in types) - - debug.dbg('after import: %s', types) - return types - - -class NestedImportModule(tree.Module): - """ - TODO while there's no use case for nested import module right now, we might - be able to use them for static analysis checks later on. - """ - def __init__(self, module, nested_import): - self._module = module - self._nested_import = nested_import - - def _get_nested_import_name(self): - """ - Generates an Import statement, that can be used to fake nested imports. - """ - i = self._nested_import - # This is not an existing Import statement. Therefore, set position to - # 0 (0 is not a valid line number). - zero = (0, 0) - names = [unicode(name) for name in i.namespace_names[1:]] - name = helpers.FakeName(names, self._nested_import) - new = tree.Import(i._sub_module, zero, zero, name) - new.parent = self._module - debug.dbg('Generated a nested import: %s', new) - return helpers.FakeName(str(i.namespace_names[1]), new) - - def __getattr__(self, name): - return getattr(self._module, name) - - def __repr__(self): - return "<%s: %s of %s>" % (self.__class__.__name__, self._module, - self._nested_import) - - -def _add_error(evaluator, name, message=None): - if hasattr(name, 'parent'): - # Should be a name, not a string! - analysis.add(evaluator, 'import-error', name, message) - - -def get_init_path(directory_path): - """ - The __init__ file can be searched in a directory. If found return it, else - None. - """ - for suffix, _, _ in imp.get_suffixes(): - path = os.path.join(directory_path, '__init__' + suffix) - if os.path.exists(path): - return path - return None - - -class Importer(object): - def __init__(self, evaluator, import_path, module, level=0): - """ - An implementation similar to ``__import__``. Use `follow` - to actually follow the imports. - - *level* specifies whether to use absolute or relative imports. 0 (the - default) means only perform absolute imports. Positive values for level - indicate the number of parent directories to search relative to the - directory of the module calling ``__import__()`` (see PEP 328 for the - details). - - :param import_path: List of namespaces (strings or Names). - """ - debug.speed('import %s' % (import_path,)) - self._evaluator = evaluator - self.level = level - self.module = module - try: - self.file_path = module.py__file__() - except AttributeError: - # Can be None for certain compiled modules like 'builtins'. - self.file_path = None - - if level: - base = module.py__package__().split('.') - if base == ['']: - base = [] - if level > len(base): - path = module.py__file__() - if path is not None: - import_path = list(import_path) - for i in range(level): - path = os.path.dirname(path) - dir_name = os.path.basename(path) - # This is not the proper way to do relative imports. However, since - # Jedi cannot be sure about the entry point, we just calculate an - # absolute path here. - if dir_name: - import_path.insert(0, dir_name) - else: - _add_error(self._evaluator, import_path[-1]) - import_path = [] - # TODO add import error. - debug.warning('Attempted relative import beyond top-level package.') - else: - # Here we basically rewrite the level to 0. - import_path = tuple(base) + tuple(import_path) - self.import_path = import_path - - @property - def str_import_path(self): - """Returns the import path as pure strings instead of `Name`.""" - return tuple(str(name) for name in self.import_path) - - @memoize_default() - def sys_path_with_modifications(self): - in_path = [] - sys_path_mod = list(sys_path.sys_path_with_modifications(self._evaluator, self.module)) - if self.file_path is not None: - # If you edit e.g. gunicorn, there will be imports like this: - # `from gunicorn import something`. But gunicorn is not in the - # sys.path. Therefore look if gunicorn is a parent directory, #56. - if self.import_path: # TODO is this check really needed? - for path in sys_path.traverse_parents(self.file_path): - if os.path.basename(path) == self.str_import_path[0]: - in_path.append(os.path.dirname(path)) - - # Since we know nothing about the call location of the sys.path, - # it's a possibility that the current directory is the origin of - # the Python execution. - sys_path_mod.insert(0, os.path.dirname(self.file_path)) - - return in_path + sys_path_mod - - @memoize_default(NO_DEFAULT) - def follow(self): - if not self.import_path: - return set() - return self._do_import(self.import_path, self.sys_path_with_modifications()) - - def _do_import(self, import_path, sys_path): - """ - This method is very similar to importlib's `_gcd_import`. - """ - import_parts = [str(i) for i in import_path] - - # Handle "magic" Flask extension imports: - # ``flask.ext.foo`` is really ``flask_foo`` or ``flaskext.foo``. - if len(import_path) > 2 and import_parts[:2] == ['flask', 'ext']: - # New style. - ipath = ('flask_' + str(import_parts[2]),) + import_path[3:] - modules = self._do_import(ipath, sys_path) - if modules: - return modules - else: - # Old style - return self._do_import(('flaskext',) + import_path[2:], sys_path) - - module_name = '.'.join(import_parts) - try: - return set([self._evaluator.modules[module_name]]) - except KeyError: - pass - - if len(import_path) > 1: - # This is a recursive way of importing that works great with - # the module cache. - bases = self._do_import(import_path[:-1], sys_path) - if not bases: - return set() - # We can take the first element, because only the os special - # case yields multiple modules, which is not important for - # further imports. - parent_module = list(bases)[0] - - # This is a huge exception, we follow a nested import - # ``os.path``, because it's a very important one in Python - # that is being achieved by messing with ``sys.modules`` in - # ``os``. - if [str(i) for i in import_path] == ['os', 'path']: - return self._evaluator.find_types(parent_module, 'path') - - try: - paths = parent_module.py__path__() - except AttributeError: - # The module is not a package. - _add_error(self._evaluator, import_path[-1]) - return set() - else: - debug.dbg('search_module %s in paths %s', module_name, paths) - for path in paths: - # At the moment we are only using one path. So this is - # not important to be correct. - try: - module_file, module_path, is_pkg = \ - find_module(import_parts[-1], [path]) - break - except ImportError: - module_path = None - if module_path is None: - _add_error(self._evaluator, import_path[-1]) - return set() - else: - parent_module = None - try: - debug.dbg('search_module %s in %s', import_parts[-1], self.file_path) - # Override the sys.path. It works only good that way. - # Injecting the path directly into `find_module` did not work. - sys.path, temp = sys_path, sys.path - try: - module_file, module_path, is_pkg = \ - find_module(import_parts[-1]) - finally: - sys.path = temp - except ImportError: - # The module is not a package. - _add_error(self._evaluator, import_path[-1]) - return set() - - source = None - if is_pkg: - # In this case, we don't have a file yet. Search for the - # __init__ file. - if module_path.endswith(('.zip', '.egg')): - source = module_file.loader.get_source(module_name) - else: - module_path = get_init_path(module_path) - elif module_file: - source = module_file.read() - module_file.close() - - if module_file is None and not module_path.endswith(('.py', '.zip', '.egg')): - module = compiled.load_module(self._evaluator, module_path) - else: - module = _load_module(self._evaluator, module_path, source, sys_path, parent_module) - - if module is None: - # The file might raise an ImportError e.g. and therefore not be - # importable. - return set() - - self._evaluator.modules[module_name] = module - return set([module]) - - def _generate_name(self, name): - # Create a pseudo import to be able to follow them. - name = helpers.FakeName(name) - imp = helpers.FakeImport(name, parent=self.module) - name.parent = imp - return name - - def _get_module_names(self, search_path=None): - """ - Get the names of all modules in the search_path. This means file names - and not names defined in the files. - """ - - names = [] - # add builtin module names - if search_path is None: - names += [self._generate_name(name) for name in sys.builtin_module_names] - - if search_path is None: - search_path = self.sys_path_with_modifications() - for module_loader, name, is_pkg in pkgutil.iter_modules(search_path): - names.append(self._generate_name(name)) - return names - - def completion_names(self, evaluator, only_modules=False): - """ - :param only_modules: Indicates wheter it's possible to import a - definition that is not defined in a module. - """ - from jedi.evaluate import finder - names = [] - if self.import_path: - # flask - if self.str_import_path == ('flask', 'ext'): - # List Flask extensions like ``flask_foo`` - for mod in self._get_module_names(): - modname = str(mod) - if modname.startswith('flask_'): - extname = modname[len('flask_'):] - names.append(self._generate_name(extname)) - # Now the old style: ``flaskext.foo`` - for dir in self.sys_path_with_modifications(): - flaskext = os.path.join(dir, 'flaskext') - if os.path.isdir(flaskext): - names += self._get_module_names([flaskext]) - - for scope in self.follow(): - # Non-modules are not completable. - if not scope.type == 'file_input': # not a module - continue - - # namespace packages - if isinstance(scope, tree.Module) and scope.path.endswith('__init__.py'): - paths = scope.py__path__() - names += self._get_module_names(paths) - - if only_modules: - # In the case of an import like `from x.` we don't need to - # add all the variables. - if ('os',) == self.str_import_path and not self.level: - # os.path is a hardcoded exception, because it's a - # ``sys.modules`` modification. - names.append(self._generate_name('path')) - - continue - - for names_dict in scope.names_dicts(search_global=False): - _names = list(chain.from_iterable(names_dict.values())) - if not _names: - continue - _names = finder.filter_definition_names(_names, scope) - names += _names - else: - # Empty import path=completion after import - if not self.level: - names += self._get_module_names() - - if self.file_path is not None: - path = os.path.abspath(self.file_path) - for i in range(self.level - 1): - path = os.path.dirname(path) - names += self._get_module_names([path]) - - return names - - -def _load_module(evaluator, path=None, source=None, sys_path=None, parent_module=None): - def load(source): - dotted_path = path and compiled.dotted_from_fs_path(path, sys_path) - if path is not None and path.endswith(('.py', '.zip', '.egg')) \ - and dotted_path not in settings.auto_import_modules: - if source is None: - with open(path, 'rb') as f: - source = f.read() - else: - return compiled.load_module(evaluator, path) - p = path - p = fast.FastParser(evaluator.grammar, common.source_to_unicode(source), p) - save_parser(path, p) - from jedi.evaluate.representation import ModuleWrapper - return ModuleWrapper(evaluator, p.module, parent_module) - - if sys_path is None: - sys_path = evaluator.sys_path - - cached = load_parser(path) - module = load(source) if cached is None else cached.module - module = evaluator.wrap(module) - return module - - -def add_module(evaluator, module_name, module): - if '.' not in module_name: - # We cannot add paths with dots, because that would collide with - # the sepatator dots for nested packages. Therefore we return - # `__main__` in ModuleWrapper.py__name__(), which is similar to - # Python behavior. - evaluator.modules[module_name] = module - - -def get_modules_containing_name(evaluator, mods, name): - """ - Search a name in the directories of modules. - """ - def check_python_file(path): - try: - return parser_cache[path].parser.module - except KeyError: - try: - return check_fs(path) - except IOError: - return None - - def check_fs(path): - with open(path, 'rb') as f: - source = source_to_unicode(f.read()) - if name in source: - module_name = os.path.basename(path)[:-3] # Remove `.py`. - module = _load_module(evaluator, path, source) - add_module(evaluator, module_name, module) - return module - - # skip non python modules - mods = set(m for m in mods if not isinstance(m, compiled.CompiledObject)) - mod_paths = set() - for m in mods: - mod_paths.add(m.path) - yield m - - if settings.dynamic_params_for_other_modules: - paths = set(settings.additional_dynamic_modules) - for p in mod_paths: - if p is not None: - # We need abspath, because the seetings paths might not already - # have been converted to absolute paths. - d = os.path.dirname(os.path.abspath(p)) - for entry in os.listdir(d): - if entry not in mod_paths: - if entry.endswith('.py'): - paths.add(d + os.path.sep + entry) - - for p in sorted(paths): - # make testing easier, sort it - same results on every interpreter - c = check_python_file(p) - if c is not None and c not in mods and not isinstance(c, compiled.CompiledObject): - yield c diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/iterable.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/iterable.py deleted file mode 100644 index 79a1a0e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/iterable.py +++ /dev/null @@ -1,863 +0,0 @@ -""" -Contains all classes and functions to deal with lists, dicts, generators and -iterators in general. - -Array modifications -******************* - -If the content of an array (``set``/``list``) is requested somewhere, the -current module will be checked for appearances of ``arr.append``, -``arr.insert``, etc. If the ``arr`` name points to an actual array, the -content will be added - -This can be really cpu intensive, as you can imagine. Because |jedi| has to -follow **every** ``append`` and check wheter it's the right array. However this -works pretty good, because in *slow* cases, the recursion detector and other -settings will stop this process. - -It is important to note that: - -1. Array modfications work only in the current module. -2. Jedi only checks Array additions; ``list.pop``, etc are ignored. -""" -from jedi.common import unite, safe_property -from jedi import debug -from jedi import settings -from jedi._compatibility import use_metaclass, unicode, zip_longest -from jedi.parser import tree -from jedi.evaluate import compiled -from jedi.evaluate import helpers -from jedi.evaluate.cache import CachedMetaClass, memoize_default -from jedi.evaluate import analysis -from jedi.evaluate import pep0484 -from jedi import common - - -class IterableWrapper(tree.Base): - def is_class(self): - return False - - @memoize_default() - def _get_names_dict(self, names_dict): - builtin_methods = {} - for cls in reversed(type(self).mro()): - try: - builtin_methods.update(cls.builtin_methods) - except AttributeError: - pass - - if not builtin_methods: - return names_dict - - dct = {} - for names in names_dict.values(): - for name in names: - name_str = name.value - try: - method = builtin_methods[name_str, self.type] - except KeyError: - dct[name_str] = [name] - else: - parent = BuiltinMethod(self, method, name.parent) - dct[name_str] = [helpers.FakeName(name_str, parent, is_definition=True)] - return dct - - -class BuiltinMethod(IterableWrapper): - """``Generator.__next__`` ``dict.values`` methods and so on.""" - def __init__(self, builtin, method, builtin_func): - self._builtin = builtin - self._method = method - self._builtin_func = builtin_func - - def py__call__(self, params): - return self._method(self._builtin) - - def __getattr__(self, name): - return getattr(self._builtin_func, name) - - -def has_builtin_methods(cls): - cls.builtin_methods = {} - for func in cls.__dict__.values(): - try: - cls.builtin_methods.update(func.registered_builtin_methods) - except AttributeError: - pass - return cls - - -def register_builtin_method(method_name, type=None): - def wrapper(func): - dct = func.__dict__.setdefault('registered_builtin_methods', {}) - dct[method_name, type] = func - return func - return wrapper - - -@has_builtin_methods -class GeneratorMixin(object): - type = None - - @register_builtin_method('send') - @register_builtin_method('next') - @register_builtin_method('__next__') - def py__next__(self): - # TODO add TypeError if params are given. - return unite(self.py__iter__()) - - @memoize_default() - def names_dicts(self, search_global=False): # is always False - gen_obj = compiled.get_special_object(self._evaluator, 'GENERATOR_OBJECT') - yield self._get_names_dict(gen_obj.names_dict) - - def py__bool__(self): - return True - - def py__class__(self): - gen_obj = compiled.get_special_object(self._evaluator, 'GENERATOR_OBJECT') - return gen_obj.py__class__() - - -class Generator(use_metaclass(CachedMetaClass, IterableWrapper, GeneratorMixin)): - """Handling of `yield` functions.""" - - def __init__(self, evaluator, func, var_args): - super(Generator, self).__init__() - self._evaluator = evaluator - self.func = func - self.var_args = var_args - - def py__iter__(self): - from jedi.evaluate.representation import FunctionExecution - f = FunctionExecution(self._evaluator, self.func, self.var_args) - return f.get_yield_types() - - def __getattr__(self, name): - if name not in ['start_pos', 'end_pos', 'parent', 'get_imports', - 'doc', 'docstr', 'get_parent_until', - 'get_code', 'subscopes']: - raise AttributeError("Accessing %s of %s is not allowed." - % (self, name)) - return getattr(self.func, name) - - def __repr__(self): - return "<%s of %s>" % (type(self).__name__, self.func) - - -class Comprehension(IterableWrapper): - @staticmethod - def from_atom(evaluator, atom): - bracket = atom.children[0] - if bracket == '{': - if atom.children[1].children[1] == ':': - cls = DictComprehension - else: - cls = SetComprehension - elif bracket == '(': - cls = GeneratorComprehension - elif bracket == '[': - cls = ListComprehension - return cls(evaluator, atom) - - def __init__(self, evaluator, atom): - self._evaluator = evaluator - self._atom = atom - - def _get_comprehension(self): - # The atom contains a testlist_comp - return self._atom.children[1] - - def _get_comp_for(self): - # The atom contains a testlist_comp - return self._get_comprehension().children[1] - - @memoize_default() - def _eval_node(self, index=0): - """ - The first part `x + 1` of the list comprehension: - - [x + 1 for x in foo] - """ - comp_for = self._get_comp_for() - # For nested comprehensions we need to search the last one. - from jedi.evaluate.representation import InstanceElement - node = self._get_comprehension().children[index] - if isinstance(node, InstanceElement): - # This seems to be a strange case that I haven't found a way to - # write tests against. However since it's my new goal to get rid of - # InstanceElement anyway, I don't care. - node = node.var - last_comp = list(comp_for.get_comp_fors())[-1] - return helpers.deep_ast_copy(node, parent=last_comp) - - def _nested(self, comp_fors): - evaluator = self._evaluator - comp_for = comp_fors[0] - input_node = comp_for.children[3] - input_types = evaluator.eval_element(input_node) - - iterated = py__iter__(evaluator, input_types, input_node) - exprlist = comp_for.children[1] - for i, types in enumerate(iterated): - evaluator.predefined_if_name_dict_dict[comp_for] = \ - unpack_tuple_to_dict(evaluator, types, exprlist) - try: - for result in self._nested(comp_fors[1:]): - yield result - except IndexError: - iterated = evaluator.eval_element(self._eval_node()) - if self.type == 'dict': - yield iterated, evaluator.eval_element(self._eval_node(2)) - else: - yield iterated - finally: - del evaluator.predefined_if_name_dict_dict[comp_for] - - @memoize_default(default=[]) - @common.to_list - def _iterate(self): - comp_fors = tuple(self._get_comp_for().get_comp_fors()) - for result in self._nested(comp_fors): - yield result - - def py__iter__(self): - return self._iterate() - - def __repr__(self): - return "<%s of %s>" % (type(self).__name__, self._atom) - - -@has_builtin_methods -class ArrayMixin(object): - @memoize_default() - def names_dicts(self, search_global=False): # Always False. - # `array.type` is a string with the type, e.g. 'list'. - scope = compiled.builtin_from_name(self._evaluator, self.type) - # builtins only have one class -> [0] - scopes = self._evaluator.execute_evaluated(scope, self) - names_dicts = list(scopes)[0].names_dicts(search_global) - #yield names_dicts[0] - yield self._get_names_dict(names_dicts[1]) - - def py__bool__(self): - return None # We don't know the length, because of appends. - - def py__class__(self): - return compiled.builtin_from_name(self._evaluator, self.type) - - @safe_property - def parent(self): - return self._evaluator.BUILTINS - - @property - def name(self): - return FakeSequence(self._evaluator, [], self.type).name - - @memoize_default() - def dict_values(self): - return unite(self._evaluator.eval_element(v) for k, v in self._items()) - - @register_builtin_method('values', type='dict') - def _imitate_values(self): - items = self.dict_values() - return create_evaluated_sequence_set(self._evaluator, items, sequence_type='list') - #return set([FakeSequence(self._evaluator, [AlreadyEvaluated(items)], 'tuple')]) - - @register_builtin_method('items', type='dict') - def _imitate_items(self): - items = [set([FakeSequence(self._evaluator, (k, v), 'tuple')]) - for k, v in self._items()] - - return create_evaluated_sequence_set(self._evaluator, *items, sequence_type='list') - - -class ListComprehension(Comprehension, ArrayMixin): - type = 'list' - - def py__getitem__(self, index): - all_types = list(self.py__iter__()) - result = all_types[index] - if isinstance(index, slice): - return create_evaluated_sequence_set( - self._evaluator, - unite(result), - sequence_type='list' - ) - return result - - -class SetComprehension(Comprehension, ArrayMixin): - type = 'set' - - -@has_builtin_methods -class DictComprehension(Comprehension, ArrayMixin): - type = 'dict' - - def _get_comp_for(self): - return self._get_comprehension().children[3] - - def py__iter__(self): - for keys, values in self._iterate(): - yield keys - - def py__getitem__(self, index): - for keys, values in self._iterate(): - for k in keys: - if isinstance(k, compiled.CompiledObject): - if k.obj == index: - return values - return self.dict_values() - - def dict_values(self): - return unite(values for keys, values in self._iterate()) - - @register_builtin_method('items', type='dict') - def _imitate_items(self): - items = set(FakeSequence(self._evaluator, - (AlreadyEvaluated(keys), AlreadyEvaluated(values)), 'tuple') - for keys, values in self._iterate()) - - return create_evaluated_sequence_set(self._evaluator, items, sequence_type='list') - - -class GeneratorComprehension(Comprehension, GeneratorMixin): - pass - - -class Array(IterableWrapper, ArrayMixin): - mapping = {'(': 'tuple', - '[': 'list', - '{': 'dict'} - - def __init__(self, evaluator, atom): - self._evaluator = evaluator - self.atom = atom - self.type = Array.mapping[atom.children[0]] - """The builtin name of the array (list, set, tuple or dict).""" - - c = self.atom.children - array_node = c[1] - if self.type == 'dict' and array_node != '}' \ - and (not hasattr(array_node, 'children') - or ':' not in array_node.children): - self.type = 'set' - - @property - def name(self): - return helpers.FakeName(self.type, parent=self) - - def py__getitem__(self, index): - """Here the index is an int/str. Raises IndexError/KeyError.""" - if self.type == 'dict': - for key, value in self._items(): - for k in self._evaluator.eval_element(key): - if isinstance(k, compiled.CompiledObject) \ - and index == k.obj: - return self._evaluator.eval_element(value) - raise KeyError('No key found in dictionary %s.' % self) - - # Can raise an IndexError - if isinstance(index, slice): - return set([self]) - else: - return self._evaluator.eval_element(self._items()[index]) - - def __getattr__(self, name): - if name not in ['start_pos', 'get_only_subelement', 'parent', - 'get_parent_until', 'items']: - raise AttributeError('Strange access on %s: %s.' % (self, name)) - return getattr(self.atom, name) - - # @memoize_default() - def py__iter__(self): - """ - While values returns the possible values for any array field, this - function returns the value for a certain index. - """ - if self.type == 'dict': - # Get keys. - types = set() - for k, _ in self._items(): - types |= self._evaluator.eval_element(k) - # We don't know which dict index comes first, therefore always - # yield all the types. - for _ in types: - yield types - else: - for value in self._items(): - yield self._evaluator.eval_element(value) - - additions = check_array_additions(self._evaluator, self) - if additions: - yield additions - - def _values(self): - """Returns a list of a list of node.""" - if self.type == 'dict': - return unite(v for k, v in self._items()) - else: - return self._items() - - def _items(self): - c = self.atom.children - array_node = c[1] - if array_node in (']', '}', ')'): - return [] # Direct closing bracket, doesn't contain items. - - if tree.is_node(array_node, 'testlist_comp'): - return array_node.children[::2] - elif tree.is_node(array_node, 'dictorsetmaker'): - kv = [] - iterator = iter(array_node.children) - for key in iterator: - op = next(iterator, None) - if op is None or op == ',': - kv.append(key) # A set. - else: - assert op == ':' # A dict. - kv.append((key, next(iterator))) - next(iterator, None) # Possible comma. - return kv - else: - return [array_node] - - def __repr__(self): - return "<%s of %s>" % (type(self).__name__, self.atom) - - -class _FakeArray(Array): - def __init__(self, evaluator, container, type): - self.type = type - self._evaluator = evaluator - self.atom = container - - -class ImplicitTuple(_FakeArray): - def __init__(self, evaluator, testlist): - super(ImplicitTuple, self).__init__(evaluator, testlist, 'tuple') - self._testlist = testlist - - def _items(self): - return self._testlist.children[::2] - - -class FakeSequence(_FakeArray): - def __init__(self, evaluator, sequence_values, type): - """ - type should be one of "tuple", "list" - """ - super(FakeSequence, self).__init__(evaluator, sequence_values, type) - self._sequence_values = sequence_values - - def _items(self): - return self._sequence_values - - -def create_evaluated_sequence_set(evaluator, *types_order, **kwargs): - """ - ``sequence_type`` is a named argument, that doesn't work in Python2. For backwards - compatibility reasons, we're now using kwargs. - """ - sequence_type = kwargs.pop('sequence_type') - assert not kwargs - - sets = tuple(AlreadyEvaluated(types) for types in types_order) - return set([FakeSequence(evaluator, sets, sequence_type)]) - - -class AlreadyEvaluated(frozenset): - """A simple container to add already evaluated objects to an array.""" - def get_code(self, normalized=False): - # For debugging purposes. - return str(self) - - -class MergedNodes(frozenset): - pass - - -class FakeDict(_FakeArray): - def __init__(self, evaluator, dct): - super(FakeDict, self).__init__(evaluator, dct, 'dict') - self._dct = dct - - def py__iter__(self): - yield set(compiled.create(self._evaluator, key) for key in self._dct) - - def py__getitem__(self, index): - return unite(self._evaluator.eval_element(v) for v in self._dct[index]) - - def _items(self): - for key, values in self._dct.items(): - # TODO this is not proper. The values could be multiple values?! - yield key, values[0] - - -class MergedArray(_FakeArray): - def __init__(self, evaluator, arrays): - super(MergedArray, self).__init__(evaluator, arrays, arrays[-1].type) - self._arrays = arrays - - def py__iter__(self): - for array in self._arrays: - for types in array.py__iter__(): - yield types - - def py__getitem__(self, index): - return unite(self.py__iter__()) - - def _items(self): - for array in self._arrays: - for a in array._items(): - yield a - - def __len__(self): - return sum(len(a) for a in self._arrays) - - -def unpack_tuple_to_dict(evaluator, types, exprlist): - """ - Unpacking tuple assignments in for statements and expr_stmts. - """ - if exprlist.type == 'name': - return {exprlist.value: types} - elif exprlist.type == 'atom' and exprlist.children[0] in '([': - return unpack_tuple_to_dict(evaluator, types, exprlist.children[1]) - elif exprlist.type in ('testlist', 'testlist_comp', 'exprlist', - 'testlist_star_expr'): - dct = {} - parts = iter(exprlist.children[::2]) - n = 0 - for iter_types in py__iter__(evaluator, types, exprlist): - n += 1 - try: - part = next(parts) - except StopIteration: - analysis.add(evaluator, 'value-error-too-many-values', part, - message="ValueError: too many values to unpack (expected %s)" % n) - else: - dct.update(unpack_tuple_to_dict(evaluator, iter_types, part)) - has_parts = next(parts, None) - if types and has_parts is not None: - analysis.add(evaluator, 'value-error-too-few-values', has_parts, - message="ValueError: need more than %s values to unpack" % n) - return dct - elif exprlist.type == 'power' or exprlist.type == 'atom_expr': - # Something like ``arr[x], var = ...``. - # This is something that is not yet supported, would also be difficult - # to write into a dict. - return {} - elif exprlist.type == 'star_expr': # `a, *b, c = x` type unpackings - # Currently we're not supporting them. - return {} - raise NotImplementedError - - -def py__iter__(evaluator, types, node=None): - debug.dbg('py__iter__') - type_iters = [] - for typ in types: - try: - iter_method = typ.py__iter__ - except AttributeError: - if node is not None: - analysis.add(evaluator, 'type-error-not-iterable', node, - message="TypeError: '%s' object is not iterable" % typ) - else: - type_iters.append(iter_method()) - #for result in iter_method(): - #yield result - - for t in zip_longest(*type_iters, fillvalue=set()): - yield unite(t) - - -def py__iter__types(evaluator, types, node=None): - """ - Calls `py__iter__`, but ignores the ordering in the end and just returns - all types that it contains. - """ - return unite(py__iter__(evaluator, types, node)) - - -def py__getitem__(evaluator, types, trailer): - from jedi.evaluate.representation import Class - result = set() - - trailer_op, node, trailer_cl = trailer.children - assert trailer_op == "[" - assert trailer_cl == "]" - - # special case: PEP0484 typing module, see - # https://github.com/davidhalter/jedi/issues/663 - for typ in list(types): - if isinstance(typ, Class): - typing_module_types = \ - pep0484.get_types_for_typing_module(evaluator, typ, node) - if typing_module_types is not None: - types.remove(typ) - result |= typing_module_types - - if not types: - # all consumed by special cases - return result - - for index in create_index_types(evaluator, node): - if isinstance(index, (compiled.CompiledObject, Slice)): - index = index.obj - - if type(index) not in (float, int, str, unicode, slice): - # If the index is not clearly defined, we have to get all the - # possiblities. - for typ in list(types): - if isinstance(typ, Array) and typ.type == 'dict': - types.remove(typ) - result |= typ.dict_values() - return result | py__iter__types(evaluator, types) - - for typ in types: - # The actual getitem call. - try: - getitem = typ.py__getitem__ - except AttributeError: - analysis.add(evaluator, 'type-error-not-subscriptable', trailer_op, - message="TypeError: '%s' object is not subscriptable" % typ) - else: - try: - result |= getitem(index) - except IndexError: - result |= py__iter__types(evaluator, set([typ])) - except KeyError: - # Must be a dict. Lists don't raise KeyErrors. - result |= typ.dict_values() - return result - - -def check_array_additions(evaluator, array): - """ Just a mapper function for the internal _check_array_additions """ - if array.type not in ('list', 'set'): - # TODO also check for dict updates - return set() - - is_list = array.type == 'list' - try: - current_module = array.atom.get_parent_until() - except AttributeError: - # If there's no get_parent_until, it's a FakeSequence or another Fake - # type. Those fake types are used inside Jedi's engine. No values may - # be added to those after their creation. - return set() - return _check_array_additions(evaluator, array, current_module, is_list) - - -@memoize_default(default=set(), evaluator_is_first_arg=True) -@debug.increase_indent -def _check_array_additions(evaluator, compare_array, module, is_list): - """ - Checks if a `Array` has "add" (append, insert, extend) statements: - - >>> a = [""] - >>> a.append(1) - """ - debug.dbg('Dynamic array search for %s' % compare_array, color='MAGENTA') - if not settings.dynamic_array_additions or isinstance(module, compiled.CompiledObject): - debug.dbg('Dynamic array search aborted.', color='MAGENTA') - return set() - - def check_additions(arglist, add_name): - params = list(param.Arguments(evaluator, arglist).unpack()) - result = set() - if add_name in ['insert']: - params = params[1:] - if add_name in ['append', 'add', 'insert']: - for key, nodes in params: - result |= unite(evaluator.eval_element(node) for node in nodes) - elif add_name in ['extend', 'update']: - for key, nodes in params: - for node in nodes: - types = evaluator.eval_element(node) - result |= py__iter__types(evaluator, types, node) - return result - - from jedi.evaluate import representation as er, param - - def get_execution_parent(element): - """ Used to get an Instance/FunctionExecution parent """ - if isinstance(element, Array): - node = element.atom - else: - # Is an Instance with an - # Arguments([AlreadyEvaluated([_ArrayInstance])]) inside - # Yeah... I know... It's complicated ;-) - node = list(element.var_args.argument_node[0])[0].var_args.trailer - if isinstance(node, er.InstanceElement) or node is None: - return node - return node.get_parent_until(er.FunctionExecution) - - temp_param_add, settings.dynamic_params_for_other_modules = \ - settings.dynamic_params_for_other_modules, False - - search_names = ['append', 'extend', 'insert'] if is_list else ['add', 'update'] - comp_arr_parent = get_execution_parent(compare_array) - - added_types = set() - for add_name in search_names: - try: - possible_names = module.used_names[add_name] - except KeyError: - continue - else: - for name in possible_names: - # Check if the original scope is an execution. If it is, one - # can search for the same statement, that is in the module - # dict. Executions are somewhat special in jedi, since they - # literally copy the contents of a function. - if isinstance(comp_arr_parent, er.FunctionExecution): - if comp_arr_parent.start_pos < name.start_pos < comp_arr_parent.end_pos: - name = comp_arr_parent.name_for_position(name.start_pos) - else: - # Don't check definitions that are not defined in the - # same function. This is not "proper" anyway. It also - # improves Jedi's speed for array lookups, since we - # don't have to check the whole source tree anymore. - continue - trailer = name.parent - power = trailer.parent - trailer_pos = power.children.index(trailer) - try: - execution_trailer = power.children[trailer_pos + 1] - except IndexError: - continue - else: - if execution_trailer.type != 'trailer' \ - or execution_trailer.children[0] != '(' \ - or execution_trailer.children[1] == ')': - continue - power = helpers.call_of_leaf(name, cut_own_trailer=True) - # InstanceElements are special, because they don't get copied, - # but have this wrapper around them. - if isinstance(comp_arr_parent, er.InstanceElement): - power = er.get_instance_el(evaluator, comp_arr_parent.instance, power) - - if evaluator.recursion_detector.push_stmt(power): - # Check for recursion. Possible by using 'extend' in - # combination with function calls. - continue - try: - if compare_array in evaluator.eval_element(power): - # The arrays match. Now add the results - added_types |= check_additions(execution_trailer.children[1], add_name) - finally: - evaluator.recursion_detector.pop_stmt() - # reset settings - settings.dynamic_params_for_other_modules = temp_param_add - debug.dbg('Dynamic array result %s' % added_types, color='MAGENTA') - return added_types - - -def check_array_instances(evaluator, instance): - """Used for set() and list() instances.""" - if not settings.dynamic_array_additions: - return instance.var_args - - ai = _ArrayInstance(evaluator, instance) - from jedi.evaluate import param - return param.Arguments(evaluator, [AlreadyEvaluated([ai])]) - - -class _ArrayInstance(IterableWrapper): - """ - Used for the usage of set() and list(). - This is definitely a hack, but a good one :-) - It makes it possible to use set/list conversions. - - In contrast to Array, ListComprehension and all other iterable types, this - is something that is only used inside `evaluate/compiled/fake/builtins.py` - and therefore doesn't need `names_dicts`, `py__bool__` and so on, because - we don't use these operations in `builtins.py`. - """ - def __init__(self, evaluator, instance): - self._evaluator = evaluator - self.instance = instance - self.var_args = instance.var_args - - def py__iter__(self): - try: - _, first_nodes = next(self.var_args.unpack()) - except StopIteration: - types = set() - else: - types = unite(self._evaluator.eval_element(node) for node in first_nodes) - for types in py__iter__(self._evaluator, types, first_nodes[0]): - yield types - - module = self.var_args.get_parent_until() - if module is None: - return - is_list = str(self.instance.name) == 'list' - additions = _check_array_additions(self._evaluator, self.instance, module, is_list) - if additions: - yield additions - - -class Slice(object): - def __init__(self, evaluator, start, stop, step): - self._evaluator = evaluator - # all of them are either a Precedence or None. - self._start = start - self._stop = stop - self._step = step - - @property - def obj(self): - """ - Imitate CompiledObject.obj behavior and return a ``builtin.slice()`` - object. - """ - def get(element): - if element is None: - return None - - result = self._evaluator.eval_element(element) - if len(result) != 1: - # For simplicity, we want slices to be clear defined with just - # one type. Otherwise we will return an empty slice object. - raise IndexError - try: - return list(result)[0].obj - except AttributeError: - return None - - try: - return slice(get(self._start), get(self._stop), get(self._step)) - except IndexError: - return slice(None, None, None) - - -def create_index_types(evaluator, index): - """ - Handles slices in subscript nodes. - """ - if index == ':': - # Like array[:] - return set([Slice(evaluator, None, None, None)]) - elif tree.is_node(index, 'subscript'): # subscript is a slice operation. - # Like array[:3] - result = [] - for el in index.children: - if el == ':': - if not result: - result.append(None) - elif tree.is_node(el, 'sliceop'): - if len(el.children) == 2: - result.append(el.children[1]) - else: - result.append(el) - result += [None] * (3 - len(result)) - - return set([Slice(evaluator, *result)]) - - # No slices - return evaluator.eval_element(index) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/jedi_typing.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/jedi_typing.py deleted file mode 100644 index f48a567..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/jedi_typing.py +++ /dev/null @@ -1,100 +0,0 @@ -""" -This module is not intended to be used in jedi, rather it will be fed to the -jedi-parser to replace classes in the typing module -""" - -try: - from collections import abc -except ImportError: - # python 2 - import collections as abc - - -def factory(typing_name, indextypes): - class Iterable(abc.Iterable): - def __iter__(self): - while True: - yield indextypes[0]() - - class Iterator(Iterable, abc.Iterator): - def next(self): - """ needed for python 2 """ - return self.__next__() - - def __next__(self): - return indextypes[0]() - - class Sequence(abc.Sequence): - def __getitem__(self, index): - return indextypes[0]() - - class MutableSequence(Sequence, abc.MutableSequence): - pass - - class List(MutableSequence, list): - pass - - class Tuple(Sequence, tuple): - def __getitem__(self, index): - if indextypes[1] == Ellipsis: - # https://www.python.org/dev/peps/pep-0484/#the-typing-module - # Tuple[int, ...] means a tuple of ints of indetermined length - return indextypes[0]() - else: - return indextypes[index]() - - class AbstractSet(Iterable, abc.Set): - pass - - class MutableSet(AbstractSet, abc.MutableSet): - pass - - class KeysView(Iterable, abc.KeysView): - pass - - class ValuesView(abc.ValuesView): - def __iter__(self): - while True: - yield indextypes[1]() - - class ItemsView(abc.ItemsView): - def __iter__(self): - while True: - yield (indextypes[0](), indextypes[1]()) - - class Mapping(Iterable, abc.Mapping): - def __getitem__(self, item): - return indextypes[1]() - - def keys(self): - return KeysView() - - def values(self): - return ValuesView() - - def items(self): - return ItemsView() - - class MutableMapping(Mapping, abc.MutableMapping): - pass - - class Dict(MutableMapping, dict): - pass - - dct = { - "Sequence": Sequence, - "MutableSequence": MutableSequence, - "List": List, - "Iterable": Iterable, - "Iterator": Iterator, - "AbstractSet": AbstractSet, - "MutableSet": MutableSet, - "Mapping": Mapping, - "MutableMapping": MutableMapping, - "Tuple": Tuple, - "KeysView": KeysView, - "ItemsView": ItemsView, - "ValuesView": ValuesView, - "Dict": Dict, - } - return dct[typing_name] diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/param.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/param.py deleted file mode 100644 index 997e079..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/param.py +++ /dev/null @@ -1,438 +0,0 @@ -from collections import defaultdict -from itertools import chain - -from jedi._compatibility import unicode, zip_longest -from jedi import debug -from jedi import common -from jedi.parser import tree -from jedi.evaluate import iterable -from jedi.evaluate import analysis -from jedi.evaluate import precedence -from jedi.evaluate.helpers import FakeName -from jedi.cache import underscore_memoization - - -def try_iter_content(types, depth=0): - """Helper method for static analysis.""" - if depth > 10: - # It's possible that a loop has references on itself (especially with - # CompiledObject). Therefore don't loop infinitely. - return - - for typ in types: - try: - f = typ.py__iter__ - except AttributeError: - pass - else: - for iter_types in f(): - try_iter_content(iter_types, depth + 1) - - -class Arguments(tree.Base): - def __init__(self, evaluator, argument_node, trailer=None): - """ - The argument_node is either a parser node or a list of evaluated - objects. Those evaluated objects may be lists of evaluated objects - themselves (one list for the first argument, one for the second, etc). - - :param argument_node: May be an argument_node or a list of nodes. - """ - self.argument_node = argument_node - self._evaluator = evaluator - self.trailer = trailer # Can be None, e.g. in a class definition. - - def _split(self): - if isinstance(self.argument_node, (tuple, list)): - for el in self.argument_node: - yield 0, el - else: - if not (tree.is_node(self.argument_node, 'arglist') or ( - # in python 3.5 **arg is an argument, not arglist - (tree.is_node(self.argument_node, 'argument') and - self.argument_node.children[0] in ('*', '**')))): - yield 0, self.argument_node - return - - iterator = iter(self.argument_node.children) - for child in iterator: - if child == ',': - continue - elif child in ('*', '**'): - yield len(child.value), next(iterator) - elif tree.is_node(child, 'argument') and \ - child.children[0] in ('*', '**'): - assert len(child.children) == 2 - yield len(child.children[0].value), child.children[1] - else: - yield 0, child - - def get_parent_until(self, *args, **kwargs): - if self.trailer is None: - try: - element = self.argument_node[0] - from jedi.evaluate.iterable import AlreadyEvaluated - if isinstance(element, AlreadyEvaluated): - element = list(self._evaluator.eval_element(element))[0] - except IndexError: - return None - else: - return element.get_parent_until(*args, **kwargs) - else: - return self.trailer.get_parent_until(*args, **kwargs) - - def as_tuple(self): - for stars, argument in self._split(): - if tree.is_node(argument, 'argument'): - argument, default = argument.children[::2] - else: - default = None - yield argument, default, stars - - def unpack(self, func=None): - named_args = [] - for stars, el in self._split(): - if stars == 1: - arrays = self._evaluator.eval_element(el) - iterators = [_iterate_star_args(self._evaluator, a, el, func) - for a in arrays] - iterators = list(iterators) - for values in list(zip_longest(*iterators)): - yield None, [v for v in values if v is not None] - elif stars == 2: - arrays = self._evaluator.eval_element(el) - dicts = [_star_star_dict(self._evaluator, a, el, func) - for a in arrays] - for dct in dicts: - for key, values in dct.items(): - yield key, values - else: - if tree.is_node(el, 'argument'): - c = el.children - if len(c) == 3: # Keyword argument. - named_args.append((c[0].value, (c[2],))) - else: # Generator comprehension. - # Include the brackets with the parent. - comp = iterable.GeneratorComprehension( - self._evaluator, self.argument_node.parent) - yield None, (iterable.AlreadyEvaluated([comp]),) - elif isinstance(el, (list, tuple)): - yield None, el - else: - yield None, (el,) - - # Reordering var_args is necessary, because star args sometimes appear - # after named argument, but in the actual order it's prepended. - for key_arg in named_args: - yield key_arg - - def _reorder_var_args(var_args): - named_index = None - new_args = [] - for i, stmt in enumerate(var_args): - if isinstance(stmt, tree.ExprStmt): - if named_index is None and stmt.assignment_details: - named_index = i - - if named_index is not None: - expression_list = stmt.expression_list() - if expression_list and expression_list[0] == '*': - new_args.insert(named_index, stmt) - named_index += 1 - continue - - new_args.append(stmt) - return new_args - - def eval_argument_clinic(self, arguments): - """Uses a list with argument clinic information (see PEP 436).""" - iterator = self.unpack() - for i, (name, optional, allow_kwargs) in enumerate(arguments): - key, va_values = next(iterator, (None, [])) - if key is not None: - raise NotImplementedError - if not va_values and not optional: - debug.warning('TypeError: %s expected at least %s arguments, got %s', - name, len(arguments), i) - raise ValueError - values = set(chain.from_iterable(self._evaluator.eval_element(el) - for el in va_values)) - if not values and not optional: - # For the stdlib we always want values. If we don't get them, - # that's ok, maybe something is too hard to resolve, however, - # we will not proceed with the evaluation of that function. - debug.warning('argument_clinic "%s" not resolvable.', name) - raise ValueError - yield values - - def scope(self): - # Returns the scope in which the arguments are used. - return (self.trailer or self.argument_node).get_parent_until(tree.IsScope) - - def eval_args(self): - # TODO this method doesn't work with named args and a lot of other - # things. Use unpack. - return [self._evaluator.eval_element(el) for stars, el in self._split()] - - def __repr__(self): - return '<%s: %s>' % (type(self).__name__, self.argument_node) - - def get_calling_var_args(self): - if tree.is_node(self.argument_node, 'arglist', 'argument') \ - or self.argument_node == () and self.trailer is not None: - return _get_calling_var_args(self._evaluator, self) - else: - return None - - def eval_all(self, func=None): - """ - Evaluates all arguments as a support for static analysis - (normally Jedi). - """ - for key, element_values in self.unpack(): - for element in element_values: - types = self._evaluator.eval_element(element) - try_iter_content(types) - - -class ExecutedParam(tree.Param): - """Fake a param and give it values.""" - def __init__(self, original_param, var_args, values): - self._original_param = original_param - self.var_args = var_args - self._values = values - - def eval(self, evaluator): - types = set() - for v in self._values: - types |= evaluator.eval_element(v) - return types - - @property - def position_nr(self): - # Need to use the original logic here, because it uses the parent. - return self._original_param.position_nr - - @property - @underscore_memoization - def name(self): - return FakeName(str(self._original_param.name), self, self.start_pos) - - def __getattr__(self, name): - return getattr(self._original_param, name) - - -def _get_calling_var_args(evaluator, var_args): - old_var_args = None - while var_args != old_var_args: - old_var_args = var_args - for name, default, stars in reversed(list(var_args.as_tuple())): - if not stars or not isinstance(name, tree.Name): - continue - - names = evaluator.goto(name) - if len(names) != 1: - break - param = names[0].get_definition() - if not isinstance(param, ExecutedParam): - if isinstance(param, tree.Param): - # There is no calling var_args in this case - there's just - # a param without any input. - return None - break - # We never want var_args to be a tuple. This should be enough for - # now, we can change it later, if we need to. - if isinstance(param.var_args, Arguments): - var_args = param.var_args - return var_args.argument_node or var_args.trailer - - -def get_params(evaluator, func, var_args): - param_names = [] - param_dict = {} - for param in func.params: - param_dict[str(param.name)] = param - unpacked_va = list(var_args.unpack(func)) - from jedi.evaluate.representation import InstanceElement - if isinstance(func, InstanceElement): - # Include self at this place. - unpacked_va.insert(0, (None, [iterable.AlreadyEvaluated([func.instance])])) - var_arg_iterator = common.PushBackIterator(iter(unpacked_va)) - - non_matching_keys = defaultdict(lambda: []) - keys_used = {} - keys_only = False - had_multiple_value_error = False - for param in func.params: - # The value and key can both be null. There, the defaults apply. - # args / kwargs will just be empty arrays / dicts, respectively. - # Wrong value count is just ignored. If you try to test cases that are - # not allowed in Python, Jedi will maybe not show any completions. - default = [] if param.default is None else [param.default] - key, va_values = next(var_arg_iterator, (None, default)) - while key is not None: - keys_only = True - k = unicode(key) - try: - key_param = param_dict[unicode(key)] - except KeyError: - non_matching_keys[key] = va_values - else: - param_names.append(ExecutedParam(key_param, var_args, va_values).name) - - if k in keys_used: - had_multiple_value_error = True - m = ("TypeError: %s() got multiple values for keyword argument '%s'." - % (func.name, k)) - calling_va = _get_calling_var_args(evaluator, var_args) - if calling_va is not None: - analysis.add(evaluator, 'type-error-multiple-values', - calling_va, message=m) - else: - try: - keys_used[k] = param_names[-1] - except IndexError: - # TODO this is wrong stupid and whatever. - pass - key, va_values = next(var_arg_iterator, (None, ())) - - values = [] - if param.stars == 1: - # *args param - lst_values = [iterable.MergedNodes(va_values)] if va_values else [] - for key, va_values in var_arg_iterator: - # Iterate until a key argument is found. - if key: - var_arg_iterator.push_back((key, va_values)) - break - if va_values: - lst_values.append(iterable.MergedNodes(va_values)) - seq = iterable.FakeSequence(evaluator, lst_values, 'tuple') - values = [iterable.AlreadyEvaluated([seq])] - elif param.stars == 2: - # **kwargs param - dct = iterable.FakeDict(evaluator, dict(non_matching_keys)) - values = [iterable.AlreadyEvaluated([dct])] - non_matching_keys = {} - else: - # normal param - if va_values: - values = va_values - else: - # No value: Return an empty container - values = [] - if not keys_only: - calling_va = var_args.get_calling_var_args() - if calling_va is not None: - m = _error_argument_count(func, len(unpacked_va)) - analysis.add(evaluator, 'type-error-too-few-arguments', - calling_va, message=m) - - # Now add to result if it's not one of the previously covered cases. - if (not keys_only or param.stars == 2): - param_names.append(ExecutedParam(param, var_args, values).name) - keys_used[unicode(param.name)] = param_names[-1] - - if keys_only: - # All arguments should be handed over to the next function. It's not - # about the values inside, it's about the names. Jedi needs to now that - # there's nothing to find for certain names. - for k in set(param_dict) - set(keys_used): - param = param_dict[k] - values = [] if param.default is None else [param.default] - param_names.append(ExecutedParam(param, var_args, values).name) - - if not (non_matching_keys or had_multiple_value_error - or param.stars or param.default): - # add a warning only if there's not another one. - calling_va = _get_calling_var_args(evaluator, var_args) - if calling_va is not None: - m = _error_argument_count(func, len(unpacked_va)) - analysis.add(evaluator, 'type-error-too-few-arguments', - calling_va, message=m) - - for key, va_values in non_matching_keys.items(): - m = "TypeError: %s() got an unexpected keyword argument '%s'." \ - % (func.name, key) - for value in va_values: - analysis.add(evaluator, 'type-error-keyword-argument', value.parent, message=m) - - remaining_params = list(var_arg_iterator) - if remaining_params: - m = _error_argument_count(func, len(unpacked_va)) - # Just report an error for the first param that is not needed (like - # cPython). - first_key, first_values = remaining_params[0] - for v in first_values: - if first_key is not None: - # Is a keyword argument, return the whole thing instead of just - # the value node. - v = v.parent - try: - non_kw_param = keys_used[first_key] - except KeyError: - pass - else: - origin_args = non_kw_param.parent.var_args.argument_node - # TODO calculate the var_args tree and check if it's in - # the tree (if not continue). - # print('\t\tnonkw', non_kw_param.parent.var_args.argument_node, ) - if origin_args not in [f.parent.parent for f in first_values]: - continue - analysis.add(evaluator, 'type-error-too-many-arguments', - v, message=m) - return param_names - - -def _iterate_star_args(evaluator, array, input_node, func=None): - from jedi.evaluate.representation import Instance - if isinstance(array, iterable.Array): - # TODO ._items is not the call we want here. Replace in the future. - for node in array._items(): - yield node - elif isinstance(array, iterable.Generator): - for types in array.py__iter__(): - yield iterable.AlreadyEvaluated(types) - elif isinstance(array, Instance) and array.name.get_code() == 'tuple': - debug.warning('Ignored a tuple *args input %s' % array) - else: - if func is not None: - m = "TypeError: %s() argument after * must be a sequence, not %s" \ - % (func.name.value, array) - analysis.add(evaluator, 'type-error-star', input_node, message=m) - - -def _star_star_dict(evaluator, array, input_node, func): - dct = defaultdict(lambda: []) - from jedi.evaluate.representation import Instance - if isinstance(array, Instance) and array.name.get_code() == 'dict': - # For now ignore this case. In the future add proper iterators and just - # make one call without crazy isinstance checks. - return {} - - if isinstance(array, iterable.FakeDict): - return array._dct - elif isinstance(array, iterable.Array) and array.type == 'dict': - # TODO bad call to non-public API - for key_node, value in array._items(): - for key in evaluator.eval_element(key_node): - if precedence.is_string(key): - dct[key.obj].append(value) - - else: - if func is not None: - m = "TypeError: %s argument after ** must be a mapping, not %s" \ - % (func.name.value, array) - analysis.add(evaluator, 'type-error-star-star', input_node, message=m) - return dict(dct) - - -def _error_argument_count(func, actual_count): - default_arguments = sum(1 for p in func.params if p.default or p.stars) - - if default_arguments == 0: - before = 'exactly ' - else: - before = 'from %s to ' % (len(func.params) - default_arguments) - return ('TypeError: %s() takes %s%s arguments (%s given).' - % (func.name, before, len(func.params), actual_count)) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/pep0484.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/pep0484.py deleted file mode 100644 index 2387fe6..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/pep0484.py +++ /dev/null @@ -1,195 +0,0 @@ -""" -PEP 0484 ( https://www.python.org/dev/peps/pep-0484/ ) describes type hints -through function annotations. There is a strong suggestion in this document -that only the type of type hinting defined in PEP0484 should be allowed -as annotations in future python versions. - -The (initial / probably incomplete) implementation todo list for pep-0484: -v Function parameter annotations with builtin/custom type classes -v Function returntype annotations with builtin/custom type classes -v Function parameter annotations with strings (forward reference) -v Function return type annotations with strings (forward reference) -v Local variable type hints -v Assigned types: `Url = str\ndef get(url:Url) -> str:` -v Type hints in `with` statements -x Stub files support -x support `@no_type_check` and `@no_type_check_decorator` -x support for typing.cast() operator -x support for type hint comments for functions, `# type: (int, str) -> int`. - See comment from Guido https://github.com/davidhalter/jedi/issues/662 -""" - -import itertools - -import os -from jedi.parser import \ - Parser, load_grammar, ParseError, ParserWithRecovery, tree -from jedi.evaluate.cache import memoize_default -from jedi.common import unite -from jedi.evaluate import compiled -from jedi import debug -from jedi import _compatibility -import re - - -def _evaluate_for_annotation(evaluator, annotation, index=None): - """ - Evaluates a string-node, looking for an annotation - If index is not None, the annotation is expected to be a tuple - and we're interested in that index - """ - if annotation is not None: - definitions = evaluator.eval_element( - _fix_forward_reference(evaluator, annotation)) - if index is not None: - definitions = list(itertools.chain.from_iterable( - definition.py__getitem__(index) for definition in definitions - if definition.type == 'tuple' and - len(list(definition.py__iter__())) >= index)) - return list(itertools.chain.from_iterable( - evaluator.execute(d) for d in definitions)) - else: - return [] - - -def _fix_forward_reference(evaluator, node): - evaled_nodes = evaluator.eval_element(node) - if len(evaled_nodes) != 1: - debug.warning("Eval'ed typing index %s should lead to 1 object, " - " not %s" % (node, evaled_nodes)) - return node - evaled_node = list(evaled_nodes)[0] - if isinstance(evaled_node, compiled.CompiledObject) and \ - isinstance(evaled_node.obj, str): - try: - p = Parser(load_grammar(), _compatibility.unicode(evaled_node.obj), - start_symbol='eval_input') - newnode = p.get_parsed_node() - except ParseError: - debug.warning('Annotation not parsed: %s' % evaled_node.obj) - return node - else: - module = node.get_parent_until() - p.position_modifier.line = module.end_pos[0] - newnode.parent = module - return newnode - else: - return node - - -@memoize_default(None, evaluator_is_first_arg=True) -def follow_param(evaluator, param): - annotation = param.annotation() - return _evaluate_for_annotation(evaluator, annotation) - - -@memoize_default(None, evaluator_is_first_arg=True) -def find_return_types(evaluator, func): - annotation = func.py__annotations__().get("return", None) - return _evaluate_for_annotation(evaluator, annotation) - - -_typing_module = None - - -def _get_typing_replacement_module(): - """ - The idea is to return our jedi replacement for the PEP-0484 typing module - as discussed at https://github.com/davidhalter/jedi/issues/663 - """ - global _typing_module - if _typing_module is None: - typing_path = \ - os.path.abspath(os.path.join(__file__, "../jedi_typing.py")) - with open(typing_path) as f: - code = _compatibility.unicode(f.read()) - p = ParserWithRecovery(load_grammar(), code) - _typing_module = p.module - return _typing_module - - -def get_types_for_typing_module(evaluator, typ, node): - from jedi.evaluate.iterable import FakeSequence - if not typ.base.get_parent_until().name.value == "typing": - return None - # we assume that any class using [] in a module called - # "typing" with a name for which we have a replacement - # should be replaced by that class. This is not 100% - # airtight but I don't have a better idea to check that it's - # actually the PEP-0484 typing module and not some other - if tree.is_node(node, "subscriptlist"): - nodes = node.children[::2] # skip the commas - else: - nodes = [node] - del node - - nodes = [_fix_forward_reference(evaluator, node) for node in nodes] - - # hacked in Union and Optional, since it's hard to do nicely in parsed code - if typ.name.value == "Union": - return unite(evaluator.eval_element(node) for node in nodes) - if typ.name.value == "Optional": - return evaluator.eval_element(nodes[0]) - - typing = _get_typing_replacement_module() - factories = evaluator.find_types(typing, "factory") - assert len(factories) == 1 - factory = list(factories)[0] - assert factory - function_body_nodes = factory.children[4].children - valid_classnames = set(child.name.value - for child in function_body_nodes - if isinstance(child, tree.Class)) - if typ.name.value not in valid_classnames: - return None - compiled_classname = compiled.create(evaluator, typ.name.value) - - args = FakeSequence(evaluator, nodes, "tuple") - - result = evaluator.execute_evaluated(factory, compiled_classname, args) - return result - - -def find_type_from_comment_hint_for(evaluator, node, name): - return \ - _find_type_from_comment_hint(evaluator, node, node.children[1], name) - - -def find_type_from_comment_hint_with(evaluator, node, name): - assert len(node.children[1].children) == 3, \ - "Can only be here when children[1] is 'foo() as f'" - return _find_type_from_comment_hint( - evaluator, node, node.children[1].children[2], name) - - -def find_type_from_comment_hint_assign(evaluator, node, name): - return \ - _find_type_from_comment_hint(evaluator, node, node.children[0], name) - - -def _find_type_from_comment_hint(evaluator, node, varlist, name): - index = None - if varlist.type in ("testlist_star_expr", "exprlist"): - # something like "a, b = 1, 2" - index = 0 - for child in varlist.children: - if child == name: - break - if child.type == "operator": - continue - index += 1 - else: - return [] - - comment = node.get_following_comment_same_line() - if comment is None: - return [] - match = re.match(r"^#\s*type:\s*([^#]*)", comment) - if not match: - return [] - annotation = tree.String( - tree.zero_position_modifier, - repr(str(match.group(1).strip())), - node.start_pos) - annotation.parent = node.parent - return _evaluate_for_annotation(evaluator, annotation, index) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/precedence.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/precedence.py deleted file mode 100644 index 5225aa6..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/precedence.py +++ /dev/null @@ -1,178 +0,0 @@ -""" -Handles operator precedence. -""" -import operator - -from jedi._compatibility import unicode -from jedi.parser import tree -from jedi import debug -from jedi.evaluate.compiled import CompiledObject, create, builtin_from_name -from jedi.evaluate import analysis - -# Maps Python syntax to the operator module. -COMPARISON_OPERATORS = { - '==': operator.eq, - '!=': operator.ne, - 'is': operator.is_, - 'is not': operator.is_not, - '<': operator.lt, - '<=': operator.le, - '>': operator.gt, - '>=': operator.ge, -} - - -def literals_to_types(evaluator, result): - # Changes literals ('a', 1, 1.0, etc) to its type instances (str(), - # int(), float(), etc). - new_result = set() - for typ in result: - if is_literal(typ): - # Literals are only valid as long as the operations are - # correct. Otherwise add a value-free instance. - cls = builtin_from_name(evaluator, typ.name.value) - new_result |= evaluator.execute(cls) - else: - new_result.add(typ) - return new_result - - -def calculate_children(evaluator, children): - """ - Calculate a list of children with operators. - """ - iterator = iter(children) - types = evaluator.eval_element(next(iterator)) - for operator in iterator: - right = next(iterator) - if tree.is_node(operator, 'comp_op'): # not in / is not - operator = ' '.join(str(c.value) for c in operator.children) - - # handle lazy evaluation of and/or here. - if operator in ('and', 'or'): - left_bools = set([left.py__bool__() for left in types]) - if left_bools == set([True]): - if operator == 'and': - types = evaluator.eval_element(right) - elif left_bools == set([False]): - if operator != 'and': - types = evaluator.eval_element(right) - # Otherwise continue, because of uncertainty. - else: - types = calculate(evaluator, types, operator, - evaluator.eval_element(right)) - debug.dbg('calculate_children types %s', types) - return types - - -def calculate(evaluator, left_result, operator, right_result): - result = set() - if not left_result or not right_result: - # illegal slices e.g. cause left/right_result to be None - result = (left_result or set()) | (right_result or set()) - result = literals_to_types(evaluator, result) - else: - # I don't think there's a reasonable chance that a string - # operation is still correct, once we pass something like six - # objects. - if len(left_result) * len(right_result) > 6: - result = literals_to_types(evaluator, left_result | right_result) - else: - for left in left_result: - for right in right_result: - result |= _element_calculate(evaluator, left, operator, right) - return result - - -def factor_calculate(evaluator, types, operator): - """ - Calculates `+`, `-`, `~` and `not` prefixes. - """ - for typ in types: - if operator == '-': - if _is_number(typ): - yield create(evaluator, -typ.obj) - elif operator == 'not': - value = typ.py__bool__() - if value is None: # Uncertainty. - return - yield create(evaluator, not value) - else: - yield typ - - -def _is_number(obj): - return isinstance(obj, CompiledObject) \ - and isinstance(obj.obj, (int, float)) - - -def is_string(obj): - return isinstance(obj, CompiledObject) \ - and isinstance(obj.obj, (str, unicode)) - - -def is_literal(obj): - return _is_number(obj) or is_string(obj) - - -def _is_tuple(obj): - from jedi.evaluate import iterable - return isinstance(obj, iterable.Array) and obj.type == 'tuple' - - -def _is_list(obj): - from jedi.evaluate import iterable - return isinstance(obj, iterable.Array) and obj.type == 'list' - - -def _element_calculate(evaluator, left, operator, right): - from jedi.evaluate import iterable, representation as er - l_is_num = _is_number(left) - r_is_num = _is_number(right) - if operator == '*': - # for iterables, ignore * operations - if isinstance(left, iterable.Array) or is_string(left): - return set([left]) - elif isinstance(right, iterable.Array) or is_string(right): - return set([right]) - elif operator == '+': - if l_is_num and r_is_num or is_string(left) and is_string(right): - return set([create(evaluator, left.obj + right.obj)]) - elif _is_tuple(left) and _is_tuple(right) or _is_list(left) and _is_list(right): - return set([iterable.MergedArray(evaluator, (left, right))]) - elif operator == '-': - if l_is_num and r_is_num: - return set([create(evaluator, left.obj - right.obj)]) - elif operator == '%': - # With strings and numbers the left type typically remains. Except for - # `int() % float()`. - return set([left]) - elif operator in COMPARISON_OPERATORS: - operation = COMPARISON_OPERATORS[operator] - if isinstance(left, CompiledObject) and isinstance(right, CompiledObject): - # Possible, because the return is not an option. Just compare. - left = left.obj - right = right.obj - - try: - result = operation(left, right) - except TypeError: - # Could be True or False. - return set([create(evaluator, True), create(evaluator, False)]) - else: - return set([create(evaluator, result)]) - elif operator == 'in': - return set() - - def check(obj): - """Checks if a Jedi object is either a float or an int.""" - return isinstance(obj, er.Instance) and obj.name.get_code() in ('int', 'float') - - # Static analysis, one is a number, the other one is not. - if operator in ('+', '-') and l_is_num != r_is_num \ - and not (check(left) or check(right)): - message = "TypeError: unsupported operand type(s) for +: %s and %s" - analysis.add(evaluator, 'type-error-operation', operator, - message % (left, right)) - - return set([left, right]) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/recursion.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/recursion.py deleted file mode 100644 index 9b95fad..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/recursion.py +++ /dev/null @@ -1,157 +0,0 @@ -""" -Recursions are the recipe of |jedi| to conquer Python code. However, someone -must stop recursions going mad. Some settings are here to make |jedi| stop at -the right time. You can read more about them :ref:`here `. - -Next to :mod:`jedi.evaluate.cache` this module also makes |jedi| not -thread-safe. Why? ``execution_recursion_decorator`` uses class variables to -count the function calls. -""" -from jedi import debug -from jedi import settings -from jedi.evaluate import iterable - - -def recursion_decorator(func): - def run(evaluator, stmt, *args, **kwargs): - rec_detect = evaluator.recursion_detector - if rec_detect.push_stmt(stmt): - return set() - else: - result = func(evaluator, stmt, *args, **kwargs) - rec_detect.pop_stmt() - return result - return run - - -class RecursionDetector(object): - """ - A decorator to detect recursions in statements. In a recursion a statement - at the same place, in the same module may not be executed two times. - """ - def __init__(self, evaluator): - self.top = None - self.current = None - self._evaluator = evaluator - - def push_stmt(self, stmt): - self.current = _RecursionNode(self._evaluator, stmt, self.current) - check = self._check_recursion() - if check: - debug.warning('catched stmt recursion: %s against %s @%s', stmt, - check.stmt, stmt.start_pos) - self.pop_stmt() - return True - return False - - def pop_stmt(self): - if self.current is not None: - # I don't know how current can be None, but sometimes it happens - # with Python3. - self.current = self.current.parent - - def _check_recursion(self): - test = self.current - while True: - test = test.parent - if self.current == test: - return test - if not test: - return False - - def node_statements(self): - result = [] - n = self.current - while n: - result.insert(0, n.stmt) - n = n.parent - return result - - -class _RecursionNode(object): - """ A node of the RecursionDecorator. """ - def __init__(self, evaluator, stmt, parent): - self._evaluator = evaluator - self.script = stmt.get_parent_until() - self.position = stmt.start_pos - self.parent = parent - self.stmt = stmt - - # Don't check param instances, they are not causing recursions - # The same's true for the builtins, because the builtins are really - # simple. - self.is_ignored = self.script == self._evaluator.BUILTINS - - def __eq__(self, other): - if not other: - return None - - return self.script == other.script \ - and self.position == other.position \ - and not self.is_ignored and not other.is_ignored - - -def execution_recursion_decorator(func): - def run(execution, **kwargs): - detector = execution._evaluator.execution_recursion_detector - if detector.push_execution(execution): - result = set() - else: - result = func(execution, **kwargs) - detector.pop_execution() - return result - - return run - - -class ExecutionRecursionDetector(object): - """ - Catches recursions of executions. - """ - def __init__(self, evaluator): - self.recursion_level = 0 - self.parent_execution_funcs = [] - self.execution_funcs = set() - self.execution_count = 0 - self._evaluator = evaluator - - def __call__(self, execution): - debug.dbg('Execution recursions: %s', execution, self.recursion_level, - self.execution_count, len(self.execution_funcs)) - if self.check_recursion(execution): - result = set() - else: - result = self.func(execution) - self.pop_execution() - return result - - def pop_execution(self): - self.parent_execution_funcs.pop() - self.recursion_level -= 1 - - def push_execution(self, execution): - in_par_execution_funcs = execution.base in self.parent_execution_funcs - in_execution_funcs = execution.base in self.execution_funcs - self.recursion_level += 1 - self.execution_count += 1 - self.execution_funcs.add(execution.base) - self.parent_execution_funcs.append(execution.base) - - if self.execution_count > settings.max_executions: - return True - - if isinstance(execution.base, (iterable.Array, iterable.Generator)): - return False - module = execution.get_parent_until() - if module == self._evaluator.BUILTINS: - return False - - if in_par_execution_funcs: - if self.recursion_level > settings.max_function_recursion_level: - return True - if in_execution_funcs and \ - len(self.execution_funcs) > settings.max_until_execution_unique: - return True - if self.execution_count > settings.max_executions_without_builtins: - return True - return False diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/representation.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/representation.py deleted file mode 100644 index 8f3d642..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/representation.py +++ /dev/null @@ -1,974 +0,0 @@ -""" -Like described in the :mod:`jedi.parser.tree` module, -there's a need for an ast like module to represent the states of parsed -modules. - -But now there are also structures in Python that need a little bit more than -that. An ``Instance`` for example is only a ``Class`` before it is -instantiated. This class represents these cases. - -So, why is there also a ``Class`` class here? Well, there are decorators and -they change classes in Python 3. - -Representation modules also define "magic methods". Those methods look like -``py__foo__`` and are typically mappable to the Python equivalents ``__call__`` -and others. Here's a list: - -====================================== ======================================== -**Method** **Description** --------------------------------------- ---------------------------------------- -py__call__(params: Array) On callable objects, returns types. -py__bool__() Returns True/False/None; None means that - there's no certainty. -py__bases__() Returns a list of base classes. -py__mro__() Returns a list of classes (the mro). -py__iter__() Returns a generator of a set of types. -py__class__() Returns the class of an instance. -py__getitem__(index: int/str) Returns a a set of types of the index. - Can raise an IndexError/KeyError. -py__file__() Only on modules. -py__package__() Only on modules. For the import system. -py__path__() Only on modules. For the import system. -====================================== ======================================== - -__ -""" -import os -import pkgutil -import imp -import re -from itertools import chain - -from jedi._compatibility import use_metaclass, unicode, Python3Method, is_py3 -from jedi.parser import tree -from jedi import debug -from jedi import common -from jedi.cache import underscore_memoization, cache_star_import -from jedi.evaluate.cache import memoize_default, CachedMetaClass, NO_DEFAULT -from jedi.evaluate import compiled -from jedi.evaluate.compiled import mixed -from jedi.evaluate import recursion -from jedi.evaluate import iterable -from jedi.evaluate import docstrings -from jedi.evaluate import pep0484 -from jedi.evaluate import helpers -from jedi.evaluate import param -from jedi.evaluate import flow_analysis -from jedi.evaluate import imports - - -class Executed(tree.Base): - """ - An instance is also an executable - because __init__ is called - :param var_args: The param input array, consist of a parser node or a list. - """ - def __init__(self, evaluator, base, var_args=()): - self._evaluator = evaluator - self.base = base - self.var_args = var_args - - def is_scope(self): - return True - - def get_parent_until(self, *args, **kwargs): - return tree.Base.get_parent_until(self, *args, **kwargs) - - @common.safe_property - def parent(self): - return self.base.parent - - -class Instance(use_metaclass(CachedMetaClass, Executed)): - """ - This class is used to evaluate instances. - """ - def __init__(self, evaluator, base, var_args, is_generated=False): - super(Instance, self).__init__(evaluator, base, var_args) - self.decorates = None - # Generated instances are classes that are just generated by self - # (No var_args) used. - self.is_generated = is_generated - - if base.name.get_code() in ['list', 'set'] \ - and evaluator.BUILTINS == base.get_parent_until(): - # compare the module path with the builtin name. - self.var_args = iterable.check_array_instances(evaluator, self) - elif not is_generated: - # Need to execute the __init__ function, because the dynamic param - # searching needs it. - try: - method = self.get_subscope_by_name('__init__') - except KeyError: - pass - else: - evaluator.execute(method, self.var_args) - - def is_class(self): - return False - - @property - def py__call__(self): - def actual(params): - return self._evaluator.execute(method, params) - - try: - method = self.get_subscope_by_name('__call__') - except KeyError: - # Means the Instance is not callable. - raise AttributeError - - return actual - - def py__class__(self): - return self.base - - def py__bool__(self): - # Signalize that we don't know about the bool type. - return None - - @memoize_default() - def _get_method_execution(self, func): - func = get_instance_el(self._evaluator, self, func, True) - return FunctionExecution(self._evaluator, func, self.var_args) - - def _get_func_self_name(self, func): - """ - Returns the name of the first param in a class method (which is - normally self. - """ - try: - return str(func.params[0].name) - except IndexError: - return None - - def _self_names_dict(self, add_mro=True): - names = {} - # This loop adds the names of the self object, copies them and removes - # the self. - for sub in self.base.subscopes: - if isinstance(sub, tree.Class): - continue - # Get the self name, if there's one. - self_name = self._get_func_self_name(sub) - if self_name is None: - continue - - if sub.name.value == '__init__' and not self.is_generated: - # ``__init__`` is special because the params need are injected - # this way. Therefore an execution is necessary. - if not sub.get_decorators(): - # __init__ decorators should generally just be ignored, - # because to follow them and their self variables is too - # complicated. - sub = self._get_method_execution(sub) - for name_list in sub.names_dict.values(): - for name in name_list: - if name.value == self_name and name.get_previous_sibling() is None: - trailer = name.get_next_sibling() - if tree.is_node(trailer, 'trailer') \ - and len(trailer.children) == 2 \ - and trailer.children[0] == '.': - name = trailer.children[1] # After dot. - if name.is_definition(): - arr = names.setdefault(name.value, []) - arr.append(get_instance_el(self._evaluator, self, name)) - return names - - def get_subscope_by_name(self, name): - sub = self.base.get_subscope_by_name(name) - return get_instance_el(self._evaluator, self, sub, True) - - def execute_subscope_by_name(self, name, *args): - method = self.get_subscope_by_name(name) - return self._evaluator.execute_evaluated(method, *args) - - def get_descriptor_returns(self, obj): - """ Throws a KeyError if there's no method. """ - # Arguments in __get__ descriptors are obj, class. - # `method` is the new parent of the array, don't know if that's good. - none_obj = compiled.create(self._evaluator, None) - args = [obj, obj.base] if isinstance(obj, Instance) else [none_obj, obj] - try: - return self.execute_subscope_by_name('__get__', *args) - except KeyError: - return set([self]) - - @memoize_default() - def names_dicts(self, search_global): - yield self._self_names_dict() - - for s in self.base.py__mro__()[1:]: - if not isinstance(s, compiled.CompiledObject): - # Compiled objects don't have `self.` names. - for inst in self._evaluator.execute(s): - yield inst._self_names_dict(add_mro=False) - - for names_dict in self.base.names_dicts(search_global=False, is_instance=True): - yield LazyInstanceDict(self._evaluator, self, names_dict) - - def py__getitem__(self, index): - try: - method = self.get_subscope_by_name('__getitem__') - except KeyError: - debug.warning('No __getitem__, cannot access the array.') - return set() - else: - index_obj = compiled.create(self._evaluator, index) - return self._evaluator.execute_evaluated(method, index_obj) - - def py__iter__(self): - try: - method = self.get_subscope_by_name('__iter__') - except KeyError: - debug.warning('No __iter__ on %s.' % self) - return - else: - iters = self._evaluator.execute(method) - for generator in iters: - if isinstance(generator, Instance): - # `__next__` logic. - name = '__next__' if is_py3 else 'next' - try: - yield generator.execute_subscope_by_name(name) - except KeyError: - debug.warning('Instance has no __next__ function in %s.', generator) - else: - for typ in generator.py__iter__(): - yield typ - - @property - @underscore_memoization - def name(self): - name = self.base.name - return helpers.FakeName(unicode(name), self, name.start_pos) - - def __getattr__(self, name): - if name not in ['start_pos', 'end_pos', 'get_imports', 'type', - 'doc', 'raw_doc']: - raise AttributeError("Instance %s: Don't touch this (%s)!" - % (self, name)) - return getattr(self.base, name) - - def __repr__(self): - dec = '' - if self.decorates is not None: - dec = " decorates " + repr(self.decorates) - return "<%s of %s(%s)%s>" % (type(self).__name__, self.base, - self.var_args, dec) - - -class LazyInstanceDict(object): - def __init__(self, evaluator, instance, dct): - self._evaluator = evaluator - self._instance = instance - self._dct = dct - - def __getitem__(self, name): - return [get_instance_el(self._evaluator, self._instance, var, True) - for var in self._dct[name]] - - def values(self): - return [self[key] for key in self._dct] - - -class InstanceName(tree.Name): - def __init__(self, origin_name, parent): - super(InstanceName, self).__init__(tree.zero_position_modifier, - origin_name.value, - origin_name.start_pos) - self._origin_name = origin_name - self.parent = parent - - def is_definition(self): - return self._origin_name.is_definition() - - -def get_instance_el(evaluator, instance, var, is_class_var=False): - """ - Returns an InstanceElement if it makes sense, otherwise leaves the object - untouched. - - Basically having an InstanceElement is context information. That is needed - in quite a lot of cases, which includes Nodes like ``power``, that need to - know where a self name comes from for example. - """ - if isinstance(var, tree.Name): - parent = get_instance_el(evaluator, instance, var.parent, is_class_var) - return InstanceName(var, parent) - elif var.type != 'funcdef' \ - and isinstance(var, (Instance, compiled.CompiledObject, tree.Leaf, - tree.Module, FunctionExecution)): - return var - - var = evaluator.wrap(var) - return InstanceElement(evaluator, instance, var, is_class_var) - - -class InstanceElement(use_metaclass(CachedMetaClass, tree.Base)): - """ - InstanceElement is a wrapper for any object, that is used as an instance - variable (e.g. self.variable or class methods). - """ - def __init__(self, evaluator, instance, var, is_class_var): - self._evaluator = evaluator - self.instance = instance - self.var = var - self.is_class_var = is_class_var - - @common.safe_property - @memoize_default() - def parent(self): - par = self.var.parent - if isinstance(par, Class) and par == self.instance.base \ - or isinstance(par, tree.Class) \ - and par == self.instance.base.base: - par = self.instance - else: - par = get_instance_el(self._evaluator, self.instance, par, - self.is_class_var) - return par - - def get_parent_until(self, *args, **kwargs): - return tree.BaseNode.get_parent_until(self, *args, **kwargs) - - def get_definition(self): - return self.get_parent_until((tree.ExprStmt, tree.IsScope, tree.Import)) - - def get_decorated_func(self): - """ Needed because the InstanceElement should not be stripped """ - func = self.var.get_decorated_func() - func = get_instance_el(self._evaluator, self.instance, func) - return func - - def get_rhs(self): - return get_instance_el(self._evaluator, self.instance, - self.var.get_rhs(), self.is_class_var) - - def is_definition(self): - return self.var.is_definition() - - @property - def children(self): - # Copy and modify the array. - return [get_instance_el(self._evaluator, self.instance, command, self.is_class_var) - for command in self.var.children] - - @property - @memoize_default() - def name(self): - name = self.var.name - return helpers.FakeName(unicode(name), self, name.start_pos) - - def __iter__(self): - for el in self.var.__iter__(): - yield get_instance_el(self._evaluator, self.instance, el, - self.is_class_var) - - def __getitem__(self, index): - return get_instance_el(self._evaluator, self.instance, self.var[index], - self.is_class_var) - - def __getattr__(self, name): - return getattr(self.var, name) - - def isinstance(self, *cls): - return isinstance(self.var, cls) - - def is_scope(self): - """ - Since we inherit from Base, it would overwrite the action we want here. - """ - return self.var.is_scope() - - def py__call__(self, params): - if isinstance(self.var, compiled.CompiledObject): - # This check is a bit strange, but CompiledObject itself is a bit - # more complicated than we would it actually like to be. - return self.var.py__call__(params) - else: - return Function.py__call__(self, params) - - def __repr__(self): - return "<%s of %s>" % (type(self).__name__, self.var) - - -class Wrapper(tree.Base): - def is_scope(self): - return True - - def is_class(self): - return False - - def py__bool__(self): - """ - Since Wrapper is a super class for classes, functions and modules, - the return value will always be true. - """ - return True - - @property - @underscore_memoization - def name(self): - name = self.base.name - return helpers.FakeName(unicode(name), self, name.start_pos) - - -class Class(use_metaclass(CachedMetaClass, Wrapper)): - """ - This class is not only important to extend `tree.Class`, it is also a - important for descriptors (if the descriptor methods are evaluated or not). - """ - def __init__(self, evaluator, base): - self._evaluator = evaluator - self.base = base - - @memoize_default(default=()) - def py__mro__(self): - def add(cls): - if cls not in mro: - mro.append(cls) - - mro = [self] - # TODO Do a proper mro resolution. Currently we are just listing - # classes. However, it's a complicated algorithm. - for cls in self.py__bases__(): - # TODO detect for TypeError: duplicate base class str, - # e.g. `class X(str, str): pass` - try: - mro_method = cls.py__mro__ - except AttributeError: - # TODO add a TypeError like: - """ - >>> class Y(lambda: test): pass - Traceback (most recent call last): - File "", line 1, in - TypeError: function() argument 1 must be code, not str - >>> class Y(1): pass - Traceback (most recent call last): - File "", line 1, in - TypeError: int() takes at most 2 arguments (3 given) - """ - pass - else: - add(cls) - for cls_new in mro_method(): - add(cls_new) - return tuple(mro) - - @memoize_default(default=()) - def py__bases__(self): - arglist = self.base.get_super_arglist() - if arglist: - args = param.Arguments(self._evaluator, arglist) - return list(chain.from_iterable(args.eval_args())) - else: - return [compiled.create(self._evaluator, object)] - - def py__call__(self, params): - return set([Instance(self._evaluator, self, params)]) - - def py__class__(self): - return compiled.create(self._evaluator, type) - - @property - def params(self): - try: - return self.get_subscope_by_name('__init__').params - except KeyError: - return [] # object.__init__ - - def names_dicts(self, search_global, is_instance=False): - if search_global: - yield self.names_dict - else: - for scope in self.py__mro__(): - if isinstance(scope, compiled.CompiledObject): - yield scope.names_dicts(False, is_instance)[0] - else: - yield scope.names_dict - - def is_class(self): - return True - - def get_subscope_by_name(self, name): - for s in self.py__mro__(): - for sub in reversed(s.subscopes): - if sub.name.value == name: - return sub - raise KeyError("Couldn't find subscope.") - - def __getattr__(self, name): - if name not in ['start_pos', 'end_pos', 'parent', 'raw_doc', - 'doc', 'get_imports', 'get_parent_until', 'get_code', - 'subscopes', 'names_dict', 'type']: - raise AttributeError("Don't touch this: %s of %s !" % (name, self)) - return getattr(self.base, name) - - def __repr__(self): - return "" % (type(self).__name__, self.base) - - -class Function(use_metaclass(CachedMetaClass, Wrapper)): - """ - Needed because of decorators. Decorators are evaluated here. - """ - def __init__(self, evaluator, func, is_decorated=False): - """ This should not be called directly """ - self._evaluator = evaluator - self.base = self.base_func = func - self.is_decorated = is_decorated - # A property that is set by the decorator resolution. - self.decorates = None - - @memoize_default() - def get_decorated_func(self): - """ - Returns the function, that should to be executed in the end. - This is also the places where the decorators are processed. - """ - f = self.base_func - decorators = self.base_func.get_decorators() - - if not decorators or self.is_decorated: - return self - - # Only enter it, if has not already been processed. - if not self.is_decorated: - for dec in reversed(decorators): - debug.dbg('decorator: %s %s', dec, f) - dec_results = self._evaluator.eval_element(dec.children[1]) - trailer = dec.children[2:-1] - if trailer: - # Create a trailer and evaluate it. - trailer = tree.Node('trailer', trailer) - trailer.parent = dec - dec_results = self._evaluator.eval_trailer(dec_results, trailer) - - if not len(dec_results): - debug.warning('decorator not found: %s on %s', dec, self.base_func) - return self - decorator = dec_results.pop() - if dec_results: - debug.warning('multiple decorators found %s %s', - self.base_func, dec_results) - - # Create param array. - if isinstance(f, Function): - old_func = f # TODO this is just hacky. change. - elif f.type == 'funcdef': - old_func = Function(self._evaluator, f, is_decorated=True) - else: - old_func = f - - wrappers = self._evaluator.execute_evaluated(decorator, old_func) - if not len(wrappers): - debug.warning('no wrappers found %s', self.base_func) - return self - if len(wrappers) > 1: - # TODO resolve issue with multiple wrappers -> multiple types - debug.warning('multiple wrappers found %s %s', - self.base_func, wrappers) - f = list(wrappers)[0] - if isinstance(f, (Instance, Function)): - f.decorates = self - - debug.dbg('decorator end %s', f) - return f - - def names_dicts(self, search_global): - if search_global: - yield self.names_dict - else: - scope = self.py__class__() - for names_dict in scope.names_dicts(False): - yield names_dict - - @Python3Method - def py__call__(self, params): - if self.base.is_generator(): - return set([iterable.Generator(self._evaluator, self, params)]) - else: - return FunctionExecution(self._evaluator, self, params).get_return_types() - - @memoize_default() - def py__annotations__(self): - parser_func = self.base - return_annotation = parser_func.annotation() - if return_annotation: - dct = {'return': return_annotation} - else: - dct = {} - for function_param in parser_func.params: - param_annotation = function_param.annotation() - if param_annotation is not None: - dct[function_param.name.value] = param_annotation - return dct - - def py__class__(self): - # This differentiation is only necessary for Python2. Python3 does not - # use a different method class. - if isinstance(self.base.get_parent_scope(), tree.Class): - name = 'METHOD_CLASS' - else: - name = 'FUNCTION_CLASS' - return compiled.get_special_object(self._evaluator, name) - - def __getattr__(self, name): - return getattr(self.base_func, name) - - def __repr__(self): - dec = '' - if self.decorates is not None: - dec = " decorates " + repr(self.decorates) - return "" % (type(self).__name__, self.base_func, dec) - - -class LambdaWrapper(Function): - def get_decorated_func(self): - return self - - -class FunctionExecution(Executed): - """ - This class is used to evaluate functions and their returns. - - This is the most complicated class, because it contains the logic to - transfer parameters. It is even more complicated, because there may be - multiple calls to functions and recursion has to be avoided. But this is - responsibility of the decorators. - """ - type = 'funcdef' - - def __init__(self, evaluator, base, *args, **kwargs): - super(FunctionExecution, self).__init__(evaluator, base, *args, **kwargs) - self._copy_dict = {} - funcdef = base.base_func - if isinstance(funcdef, mixed.MixedObject): - # The extra information in mixed is not needed anymore. We can just - # unpack it and give it the tree object. - funcdef = funcdef.definition - - # Just overwrite the old version. We don't need it anymore. - funcdef = helpers.deep_ast_copy(funcdef, new_elements=self._copy_dict) - for child in funcdef.children: - if child.type not in ('operator', 'keyword'): - # Not all nodes are properly copied by deep_ast_copy. - child.parent = self - self.children = funcdef.children - self.names_dict = funcdef.names_dict - - @memoize_default(default=set()) - @recursion.execution_recursion_decorator - def get_return_types(self, check_yields=False): - func = self.base - - if func.isinstance(LambdaWrapper): - return self._evaluator.eval_element(self.children[-1]) - - if func.listeners: - # Feed the listeners, with the params. - for listener in func.listeners: - listener.execute(self._get_params()) - # If we do have listeners, that means that there's not a regular - # execution ongoing. In this case Jedi is interested in the - # inserted params, not in the actual execution of the function. - return set() - - if check_yields: - types = set() - returns = self.yields - else: - returns = self.returns - types = set(docstrings.find_return_types(self._evaluator, func)) - types |= set(pep0484.find_return_types(self._evaluator, func)) - - for r in returns: - check = flow_analysis.break_check(self._evaluator, self, r) - if check is flow_analysis.UNREACHABLE: - debug.dbg('Return unreachable: %s', r) - else: - if check_yields: - types |= iterable.unite(self._eval_yield(r)) - else: - types |= self._evaluator.eval_element(r.children[1]) - if check is flow_analysis.REACHABLE: - debug.dbg('Return reachable: %s', r) - break - return types - - def _eval_yield(self, yield_expr): - element = yield_expr.children[1] - if element.type == 'yield_arg': - # It must be a yield from. - yield_from_types = self._evaluator.eval_element(element.children[1]) - for result in iterable.py__iter__(self._evaluator, yield_from_types, element): - yield result - else: - yield self._evaluator.eval_element(element) - - @recursion.execution_recursion_decorator - def get_yield_types(self): - yields = self.yields - stopAt = tree.ForStmt, tree.WhileStmt, FunctionExecution, tree.IfStmt - for_parents = [(x, x.get_parent_until((stopAt))) for x in yields] - - # Calculate if the yields are placed within the same for loop. - yields_order = [] - last_for_stmt = None - for yield_, for_stmt in for_parents: - # For really simple for loops we can predict the order. Otherwise - # we just ignore it. - parent = for_stmt.parent - if parent.type == 'suite': - parent = parent.parent - if for_stmt.type == 'for_stmt' and parent == self \ - and for_stmt.defines_one_name(): # Simplicity for now. - if for_stmt == last_for_stmt: - yields_order[-1][1].append(yield_) - else: - yields_order.append((for_stmt, [yield_])) - elif for_stmt == self: - yields_order.append((None, [yield_])) - else: - yield self.get_return_types(check_yields=True) - return - last_for_stmt = for_stmt - - evaluator = self._evaluator - for for_stmt, yields in yields_order: - if for_stmt is None: - # No for_stmt, just normal yields. - for yield_ in yields: - for result in self._eval_yield(yield_): - yield result - else: - input_node = for_stmt.get_input_node() - for_types = evaluator.eval_element(input_node) - ordered = iterable.py__iter__(evaluator, for_types, input_node) - for index_types in ordered: - dct = {str(for_stmt.children[1]): index_types} - evaluator.predefined_if_name_dict_dict[for_stmt] = dct - for yield_in_same_for_stmt in yields: - for result in self._eval_yield(yield_in_same_for_stmt): - yield result - del evaluator.predefined_if_name_dict_dict[for_stmt] - - def names_dicts(self, search_global): - yield self.names_dict - - @memoize_default(default=NO_DEFAULT) - def _get_params(self): - """ - This returns the params for an TODO and is injected as a - 'hack' into the tree.Function class. - This needs to be here, because Instance can have __init__ functions, - which act the same way as normal functions. - """ - return param.get_params(self._evaluator, self.base, self.var_args) - - def param_by_name(self, name): - return [n for n in self._get_params() if str(n) == name][0] - - def name_for_position(self, position): - return tree.Function.name_for_position(self, position) - - def __getattr__(self, name): - if name not in ['start_pos', 'end_pos', 'imports', 'name', 'type']: - raise AttributeError('Tried to access %s: %s. Why?' % (name, self)) - return getattr(self.base, name) - - @common.safe_property - @memoize_default() - def returns(self): - return tree.Scope._search_in_scope(self, tree.ReturnStmt) - - @common.safe_property - @memoize_default() - def yields(self): - return tree.Scope._search_in_scope(self, tree.YieldExpr) - - @common.safe_property - @memoize_default() - def statements(self): - return tree.Scope._search_in_scope(self, tree.ExprStmt) - - @common.safe_property - @memoize_default() - def subscopes(self): - return tree.Scope._search_in_scope(self, tree.Scope) - - def __repr__(self): - return "<%s of %s>" % (type(self).__name__, self.base) - - -class GlobalName(helpers.FakeName): - def __init__(self, name): - """ - We need to mark global names somehow. Otherwise they are just normal - names that are not definitions. - """ - super(GlobalName, self).__init__(name.value, name.parent, - name.start_pos, is_definition=True) - - -class ModuleWrapper(use_metaclass(CachedMetaClass, tree.Module, Wrapper)): - def __init__(self, evaluator, module, parent_module=None): - self._evaluator = evaluator - self.base = self._module = module - self._parent_module = parent_module - - def names_dicts(self, search_global): - yield self.base.names_dict - yield self._module_attributes_dict() - - for star_module in self.star_imports(): - yield star_module.names_dict - - yield dict((str(n), [GlobalName(n)]) for n in self.base.global_names) - yield self._sub_modules_dict() - - # I'm not sure if the star import cache is really that effective anymore - # with all the other really fast import caches. Recheck. Also we would need - # to push the star imports into Evaluator.modules, if we reenable this. - #@cache_star_import - @memoize_default([]) - def star_imports(self): - modules = [] - for i in self.base.imports: - if i.is_star_import(): - name = i.star_import_name() - new = imports.ImportWrapper(self._evaluator, name).follow() - for module in new: - if isinstance(module, tree.Module): - modules += module.star_imports() - modules += new - return modules - - @memoize_default() - def _module_attributes_dict(self): - def parent_callback(): - # Create a string type object (without a defined string in it): - return list(self._evaluator.execute(compiled.create(self._evaluator, str)))[0] - - names = ['__file__', '__package__', '__doc__', '__name__'] - # All the additional module attributes are strings. - return dict((n, [helpers.LazyName(n, parent_callback, is_definition=True)]) - for n in names) - - @property - @memoize_default() - def name(self): - return helpers.FakeName(unicode(self.base.name), self, (1, 0)) - - def _get_init_directory(self): - """ - :return: The path to the directory of a package. None in case it's not - a package. - """ - for suffix, _, _ in imp.get_suffixes(): - ending = '__init__' + suffix - py__file__ = self.py__file__() - if py__file__ is not None and py__file__.endswith(ending): - # Remove the ending, including the separator. - return self.py__file__()[:-len(ending) - 1] - return None - - def py__name__(self): - for name, module in self._evaluator.modules.items(): - if module == self: - return name - - return '__main__' - - def py__file__(self): - """ - In contrast to Python's __file__ can be None. - """ - if self._module.path is None: - return None - - return os.path.abspath(self._module.path) - - def py__package__(self): - if self._get_init_directory() is None: - return re.sub(r'\.?[^\.]+$', '', self.py__name__()) - else: - return self.py__name__() - - def _py__path__(self): - if self._parent_module is None: - search_path = self._evaluator.sys_path - else: - search_path = self._parent_module.py__path__() - init_path = self.py__file__() - if os.path.basename(init_path) == '__init__.py': - with open(init_path, 'rb') as f: - content = common.source_to_unicode(f.read()) - # these are strings that need to be used for namespace packages, - # the first one is ``pkgutil``, the second ``pkg_resources``. - options = ('declare_namespace(__name__)', 'extend_path(__path__') - if options[0] in content or options[1] in content: - # It is a namespace, now try to find the rest of the - # modules on sys_path or whatever the search_path is. - paths = set() - for s in search_path: - other = os.path.join(s, unicode(self.name)) - if os.path.isdir(other): - paths.add(other) - return list(paths) - # Default to this. - return [self._get_init_directory()] - - @property - def py__path__(self): - """ - Not seen here, since it's a property. The callback actually uses a - variable, so use it like:: - - foo.py__path__(sys_path) - - In case of a package, this returns Python's __path__ attribute, which - is a list of paths (strings). - Raises an AttributeError if the module is not a package. - """ - path = self._get_init_directory() - - if path is None: - raise AttributeError('Only packages have __path__ attributes.') - else: - return self._py__path__ - - @memoize_default() - def _sub_modules_dict(self): - """ - Lists modules in the directory of this module (if this module is a - package). - """ - path = self._module.path - names = {} - if path is not None and path.endswith(os.path.sep + '__init__.py'): - mods = pkgutil.iter_modules([os.path.dirname(path)]) - for module_loader, name, is_pkg in mods: - fake_n = helpers.FakeName(name) - # It's obviously a relative import to the current module. - imp = helpers.FakeImport(fake_n, self, level=1) - fake_n.parent = imp - names[name] = [fake_n] - - # TODO add something like this in the future, its cleaner than the - # import hacks. - # ``os.path`` is a hardcoded exception, because it's a - # ``sys.modules`` modification. - #if str(self.name) == 'os': - # names.append(helpers.FakeName('path', parent=self)) - - return names - - def py__class__(self): - return compiled.get_special_object(self._evaluator, 'MODULE_CLASS') - - def __getattr__(self, name): - return getattr(self._module, name) - - def __repr__(self): - return "<%s: %s>" % (type(self).__name__, self._module) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/site.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/site.py deleted file mode 100644 index bf884fa..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/site.py +++ /dev/null @@ -1,110 +0,0 @@ -"""An adapted copy of relevant site-packages functionality from Python stdlib. - -This file contains some functions related to handling site-packages in Python -with jedi-specific modifications: - -- the functions operate on sys_path argument rather than global sys.path - -- in .pth files "import ..." lines that allow execution of arbitrary code are - skipped to prevent code injection into jedi interpreter - -""" - -# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012, 2013, 2014, 2015 Python Software Foundation; All Rights Reserved - -from __future__ import print_function - -import sys -import os - - -def makepath(*paths): - dir = os.path.join(*paths) - try: - dir = os.path.abspath(dir) - except OSError: - pass - return dir, os.path.normcase(dir) - - -def _init_pathinfo(sys_path): - """Return a set containing all existing directory entries from sys_path""" - d = set() - for dir in sys_path: - try: - if os.path.isdir(dir): - dir, dircase = makepath(dir) - d.add(dircase) - except TypeError: - continue - return d - - -def addpackage(sys_path, sitedir, name, known_paths): - """Process a .pth file within the site-packages directory: - For each line in the file, either combine it with sitedir to a path - and add that to known_paths, or execute it if it starts with 'import '. - """ - if known_paths is None: - known_paths = _init_pathinfo(sys_path) - reset = 1 - else: - reset = 0 - fullname = os.path.join(sitedir, name) - try: - f = open(fullname, "r") - except OSError: - return - with f: - for n, line in enumerate(f): - if line.startswith("#"): - continue - try: - if line.startswith(("import ", "import\t")): - # Change by immerrr: don't evaluate import lines to prevent - # code injection into jedi through pth files. - # - # exec(line) - continue - line = line.rstrip() - dir, dircase = makepath(sitedir, line) - if not dircase in known_paths and os.path.exists(dir): - sys_path.append(dir) - known_paths.add(dircase) - except Exception: - print("Error processing line {:d} of {}:\n".format(n+1, fullname), - file=sys.stderr) - import traceback - for record in traceback.format_exception(*sys.exc_info()): - for line in record.splitlines(): - print(' '+line, file=sys.stderr) - print("\nRemainder of file ignored", file=sys.stderr) - break - if reset: - known_paths = None - return known_paths - - -def addsitedir(sys_path, sitedir, known_paths=None): - """Add 'sitedir' argument to sys_path if missing and handle .pth files in - 'sitedir'""" - if known_paths is None: - known_paths = _init_pathinfo(sys_path) - reset = 1 - else: - reset = 0 - sitedir, sitedircase = makepath(sitedir) - if not sitedircase in known_paths: - sys_path.append(sitedir) # Add path component - known_paths.add(sitedircase) - try: - names = os.listdir(sitedir) - except OSError: - return - names = [name for name in names if name.endswith(".pth")] - for name in sorted(names): - addpackage(sys_path, sitedir, name, known_paths) - if reset: - known_paths = None - return known_paths diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/stdlib.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/stdlib.py deleted file mode 100644 index f0c4346..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/stdlib.py +++ /dev/null @@ -1,280 +0,0 @@ -""" -Implementations of standard library functions, because it's not possible to -understand them with Jedi. - -To add a new implementation, create a function and add it to the -``_implemented`` dict at the bottom of this module. - -Note that this module exists only to implement very specific functionality in -the standard library. The usual way to understand the standard library is the -compiled module that returns the types for C-builtins. -""" -import collections -import re - -from jedi._compatibility import unicode -from jedi.common import unite -from jedi.evaluate import compiled -from jedi.evaluate import representation as er -from jedi.evaluate import iterable -from jedi.parser import ParserWithRecovery -from jedi.parser import tree -from jedi import debug -from jedi.evaluate import precedence -from jedi.evaluate import param -from jedi.evaluate import analysis - - -class NotInStdLib(LookupError): - pass - - -def execute(evaluator, obj, arguments): - try: - obj_name = str(obj.name) - except AttributeError: - pass - else: - if obj.parent == evaluator.BUILTINS: - module_name = 'builtins' - elif isinstance(obj.parent, tree.Module): - module_name = str(obj.parent.name) - else: - module_name = '' - - # for now we just support builtin functions. - try: - func = _implemented[module_name][obj_name] - except KeyError: - pass - else: - return func(evaluator, obj, arguments) - raise NotInStdLib() - - -def _follow_param(evaluator, arguments, index): - try: - key, values = list(arguments.unpack())[index] - except IndexError: - return set() - else: - return unite(evaluator.eval_element(v) for v in values) - - -def argument_clinic(string, want_obj=False, want_scope=False, want_arguments=False): - """ - Works like Argument Clinic (PEP 436), to validate function params. - """ - clinic_args = [] - allow_kwargs = False - optional = False - while string: - # Optional arguments have to begin with a bracket. And should always be - # at the end of the arguments. This is therefore not a proper argument - # clinic implementation. `range()` for exmple allows an optional start - # value at the beginning. - match = re.match('(?:(?:(\[),? ?|, ?|)(\w+)|, ?/)\]*', string) - string = string[len(match.group(0)):] - if not match.group(2): # A slash -> allow named arguments - allow_kwargs = True - continue - optional = optional or bool(match.group(1)) - word = match.group(2) - clinic_args.append((word, optional, allow_kwargs)) - - def f(func): - def wrapper(evaluator, obj, arguments): - debug.dbg('builtin start %s' % obj, color='MAGENTA') - try: - lst = list(arguments.eval_argument_clinic(clinic_args)) - except ValueError: - return set() - else: - kwargs = {} - if want_scope: - kwargs['scope'] = arguments.scope() - if want_obj: - kwargs['obj'] = obj - if want_arguments: - kwargs['arguments'] = arguments - return func(evaluator, *lst, **kwargs) - finally: - debug.dbg('builtin end', color='MAGENTA') - - return wrapper - return f - - -@argument_clinic('object, name[, default], /') -def builtins_getattr(evaluator, objects, names, defaults=None): - # follow the first param - for obj in objects: - if not isinstance(obj, (er.Instance, er.Class, tree.Module, compiled.CompiledObject)): - debug.warning('getattr called without instance') - continue - - for name in names: - if precedence.is_string(name): - return evaluator.find_types(obj, name.obj) - else: - debug.warning('getattr called without str') - continue - return set() - - -@argument_clinic('object[, bases, dict], /') -def builtins_type(evaluator, objects, bases, dicts): - if bases or dicts: - # It's a type creation... maybe someday... - return set() - else: - return set([o.py__class__() for o in objects]) - - -class SuperInstance(er.Instance): - """To be used like the object ``super`` returns.""" - def __init__(self, evaluator, cls): - su = cls.py_mro()[1] - super().__init__(evaluator, su and su[0] or self) - - -@argument_clinic('[type[, obj]], /', want_scope=True) -def builtins_super(evaluator, types, objects, scope): - # TODO make this able to detect multiple inheritance super - accept = (tree.Function, er.FunctionExecution) - if scope.isinstance(*accept): - wanted = (tree.Class, er.Instance) - cls = scope.get_parent_until(accept + wanted, - include_current=False) - if isinstance(cls, wanted): - if isinstance(cls, tree.Class): - cls = er.Class(evaluator, cls) - elif isinstance(cls, er.Instance): - cls = cls.base - su = cls.py__bases__() - if su: - return evaluator.execute(su[0]) - return set() - - -@argument_clinic('sequence, /', want_obj=True, want_arguments=True) -def builtins_reversed(evaluator, sequences, obj, arguments): - # While we could do without this variable (just by using sequences), we - # want static analysis to work well. Therefore we need to generated the - # values again. - first_arg = next(arguments.as_tuple())[0] - ordered = list(iterable.py__iter__(evaluator, sequences, first_arg)) - - rev = [iterable.AlreadyEvaluated(o) for o in reversed(ordered)] - # Repack iterator values and then run it the normal way. This is - # necessary, because `reversed` is a function and autocompletion - # would fail in certain cases like `reversed(x).__iter__` if we - # just returned the result directly. - rev = iterable.AlreadyEvaluated( - [iterable.FakeSequence(evaluator, rev, 'list')] - ) - return set([er.Instance(evaluator, obj, param.Arguments(evaluator, [rev]))]) - - -@argument_clinic('obj, type, /', want_arguments=True) -def builtins_isinstance(evaluator, objects, types, arguments): - bool_results = set([]) - for o in objects: - try: - mro_func = o.py__class__().py__mro__ - except AttributeError: - # This is temporary. Everything should have a class attribute in - # Python?! Maybe we'll leave it here, because some numpy objects or - # whatever might not. - return set([compiled.create(True), compiled.create(False)]) - - mro = mro_func() - - for cls_or_tup in types: - if cls_or_tup.is_class(): - bool_results.add(cls_or_tup in mro) - elif str(cls_or_tup.name) == 'tuple' \ - and cls_or_tup.get_parent_scope() == evaluator.BUILTINS: - # Check for tuples. - classes = unite(cls_or_tup.py__iter__()) - bool_results.add(any(cls in mro for cls in classes)) - else: - _, nodes = list(arguments.unpack())[1] - for node in nodes: - message = 'TypeError: isinstance() arg 2 must be a ' \ - 'class, type, or tuple of classes and types, ' \ - 'not %s.' % cls_or_tup - analysis.add(evaluator, 'type-error-isinstance', node, message) - - return set(compiled.create(evaluator, x) for x in bool_results) - - -def collections_namedtuple(evaluator, obj, arguments): - """ - Implementation of the namedtuple function. - - This has to be done by processing the namedtuple class template and - evaluating the result. - - .. note:: |jedi| only supports namedtuples on Python >2.6. - - """ - # Namedtuples are not supported on Python 2.6 - if not hasattr(collections, '_class_template'): - return set() - - # Process arguments - # TODO here we only use one of the types, we should use all. - name = list(_follow_param(evaluator, arguments, 0))[0].obj - _fields = list(_follow_param(evaluator, arguments, 1))[0] - if isinstance(_fields, compiled.CompiledObject): - fields = _fields.obj.replace(',', ' ').split() - elif isinstance(_fields, iterable.Array): - try: - fields = [v.obj for v in unite(_fields.py__iter__())] - except AttributeError: - return set() - else: - return set() - - # Build source - source = collections._class_template.format( - typename=name, - field_names=fields, - num_fields=len(fields), - arg_list=', '.join(fields), - repr_fmt=', '.join(collections._repr_template.format(name=name) for name in fields), - field_defs='\n'.join(collections._field_template.format(index=index, name=name) - for index, name in enumerate(fields)) - ) - - # Parse source - generated_class = ParserWithRecovery(evaluator.grammar, unicode(source)).module.subscopes[0] - return set([er.Class(evaluator, generated_class)]) - - -@argument_clinic('first, /') -def _return_first_param(evaluator, firsts): - return firsts - - -_implemented = { - 'builtins': { - 'getattr': builtins_getattr, - 'type': builtins_type, - 'super': builtins_super, - 'reversed': builtins_reversed, - 'isinstance': builtins_isinstance, - }, - 'copy': { - 'copy': _return_first_param, - 'deepcopy': _return_first_param, - }, - 'json': { - 'load': lambda *args: set(), - 'loads': lambda *args: set(), - }, - 'collections': { - 'namedtuple': collections_namedtuple, - }, -} diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/sys_path.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/sys_path.py deleted file mode 100644 index f69b1a4..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/evaluate/sys_path.py +++ /dev/null @@ -1,284 +0,0 @@ -import glob -import os -import sys -from jedi.evaluate.site import addsitedir - -from jedi._compatibility import exec_function, unicode -from jedi.parser import tree -from jedi.parser import ParserWithRecovery -from jedi.evaluate.cache import memoize_default -from jedi import debug -from jedi import common -from jedi.parser.utils import load_parser, save_parser - - -def get_venv_path(venv): - """Get sys.path for specified virtual environment.""" - sys_path = _get_venv_path_dirs(venv) - with common.ignored(ValueError): - sys_path.remove('') - sys_path = _get_sys_path_with_egglinks(sys_path) - # As of now, get_venv_path_dirs does not scan built-in pythonpath and - # user-local site-packages, let's approximate them using path from Jedi - # interpreter. - return sys_path + sys.path - - - -def _get_sys_path_with_egglinks(sys_path): - """Find all paths including those referenced by egg-links. - - Egg-link-referenced directories are inserted into path immediately before - the directory on which their links were found. Such directories are not - taken into consideration by normal import mechanism, but they are traversed - when doing pkg_resources.require. - """ - result = [] - for p in sys_path: - # pkg_resources does not define a specific order for egg-link files - # using os.listdir to enumerate them, we're sorting them to have - # reproducible tests. - for egg_link in sorted(glob.glob(os.path.join(p, '*.egg-link'))): - with open(egg_link) as fd: - for line in fd: - line = line.strip() - if line: - result.append(os.path.join(p, line)) - # pkg_resources package only interprets the first - # non-empty line in egg-link files. - break - result.append(p) - return result - - -def _get_venv_path_dirs(venv): - """Get sys.path for venv without starting up the interpreter.""" - venv = os.path.abspath(venv) - sitedir = _get_venv_sitepackages(venv) - sys_path = [] - addsitedir(sys_path, sitedir) - return sys_path - - -def _get_venv_sitepackages(venv): - if os.name == 'nt': - p = os.path.join(venv, 'lib', 'site-packages') - else: - p = os.path.join(venv, 'lib', 'python%d.%d' % sys.version_info[:2], - 'site-packages') - return p - - -def _execute_code(module_path, code): - c = "import os; from os.path import *; result=%s" - variables = {'__file__': module_path} - try: - exec_function(c % code, variables) - except Exception: - debug.warning('sys.path manipulation detected, but failed to evaluate.') - else: - try: - res = variables['result'] - if isinstance(res, str): - return [os.path.abspath(res)] - except KeyError: - pass - return [] - - -def _paths_from_assignment(evaluator, expr_stmt): - """ - Extracts the assigned strings from an assignment that looks as follows:: - - >>> sys.path[0:0] = ['module/path', 'another/module/path'] - - This function is in general pretty tolerant (and therefore 'buggy'). - However, it's not a big issue usually to add more paths to Jedi's sys_path, - because it will only affect Jedi in very random situations and by adding - more paths than necessary, it usually benefits the general user. - """ - for assignee, operator in zip(expr_stmt.children[::2], expr_stmt.children[1::2]): - try: - assert operator in ['=', '+='] - assert tree.is_node(assignee, 'power', 'atom_expr') and \ - len(assignee.children) > 1 - c = assignee.children - assert c[0].type == 'name' and c[0].value == 'sys' - trailer = c[1] - assert trailer.children[0] == '.' and trailer.children[1].value == 'path' - # TODO Essentially we're not checking details on sys.path - # manipulation. Both assigment of the sys.path and changing/adding - # parts of the sys.path are the same: They get added to the current - # sys.path. - """ - execution = c[2] - assert execution.children[0] == '[' - subscript = execution.children[1] - assert subscript.type == 'subscript' - assert ':' in subscript.children - """ - except AssertionError: - continue - - from jedi.evaluate.iterable import py__iter__ - from jedi.evaluate.precedence import is_string - types = evaluator.eval_element(expr_stmt) - for types in py__iter__(evaluator, types, expr_stmt): - for typ in types: - if is_string(typ): - yield typ.obj - - -def _paths_from_list_modifications(module_path, trailer1, trailer2): - """ extract the path from either "sys.path.append" or "sys.path.insert" """ - # Guarantee that both are trailers, the first one a name and the second one - # a function execution with at least one param. - if not (tree.is_node(trailer1, 'trailer') and trailer1.children[0] == '.' - and tree.is_node(trailer2, 'trailer') and trailer2.children[0] == '(' - and len(trailer2.children) == 3): - return [] - - name = trailer1.children[1].value - if name not in ['insert', 'append']: - return [] - arg = trailer2.children[1] - if name == 'insert' and len(arg.children) in (3, 4): # Possible trailing comma. - arg = arg.children[2] - return _execute_code(module_path, arg.get_code()) - - -def _check_module(evaluator, module): - """ - Detect sys.path modifications within module. - """ - def get_sys_path_powers(names): - for name in names: - power = name.parent.parent - if tree.is_node(power, 'power', 'atom_expr'): - c = power.children - if isinstance(c[0], tree.Name) and c[0].value == 'sys' \ - and tree.is_node(c[1], 'trailer'): - n = c[1].children[1] - if isinstance(n, tree.Name) and n.value == 'path': - yield name, power - - sys_path = list(evaluator.sys_path) # copy - try: - possible_names = module.used_names['path'] - except KeyError: - # module.used_names is MergedNamesDict whose getitem never throws - # keyerror, this is superfluous. - pass - else: - for name, power in get_sys_path_powers(possible_names): - stmt = name.get_definition() - if len(power.children) >= 4: - sys_path.extend(_paths_from_list_modifications(module.path, *power.children[2:4])) - elif name.get_definition().type == 'expr_stmt': - sys_path.extend(_paths_from_assignment(evaluator, stmt)) - return sys_path - - -@memoize_default(evaluator_is_first_arg=True, default=[]) -def sys_path_with_modifications(evaluator, module): - if module.path is None: - # Support for modules without a path is bad, therefore return the - # normal path. - return list(evaluator.sys_path) - - curdir = os.path.abspath(os.curdir) - #TODO why do we need a chdir? - with common.ignored(OSError): - os.chdir(os.path.dirname(module.path)) - - buildout_script_paths = set() - - result = _check_module(evaluator, module) - result += _detect_django_path(module.path) - for buildout_script in _get_buildout_scripts(module.path): - for path in _get_paths_from_buildout_script(evaluator, buildout_script): - buildout_script_paths.add(path) - # cleanup, back to old directory - os.chdir(curdir) - return list(result) + list(buildout_script_paths) - - -def _get_paths_from_buildout_script(evaluator, buildout_script): - def load(buildout_script): - try: - with open(buildout_script, 'rb') as f: - source = common.source_to_unicode(f.read()) - except IOError: - debug.dbg('Error trying to read buildout_script: %s', buildout_script) - return - - p = ParserWithRecovery(evaluator.grammar, source, buildout_script) - save_parser(buildout_script, p) - return p.module - - cached = load_parser(buildout_script) - module = cached and cached.module or load(buildout_script) - if not module: - return - - for path in _check_module(evaluator, module): - yield path - - -def traverse_parents(path): - while True: - new = os.path.dirname(path) - if new == path: - return - path = new - yield path - - -def _get_parent_dir_with_file(path, filename): - for parent in traverse_parents(path): - if os.path.isfile(os.path.join(parent, filename)): - return parent - return None - - -def _detect_django_path(module_path): - """ Detects the path of the very well known Django library (if used) """ - result = [] - - for parent in traverse_parents(module_path): - with common.ignored(IOError): - with open(parent + os.path.sep + 'manage.py'): - debug.dbg('Found django path: %s', module_path) - result.append(parent) - return result - - -def _get_buildout_scripts(module_path): - """ - if there is a 'buildout.cfg' file in one of the parent directories of the - given module it will return a list of all files in the buildout bin - directory that look like python files. - - :param module_path: absolute path to the module. - :type module_path: str - """ - project_root = _get_parent_dir_with_file(module_path, 'buildout.cfg') - if not project_root: - return [] - bin_path = os.path.join(project_root, 'bin') - if not os.path.exists(bin_path): - return [] - extra_module_paths = [] - for filename in os.listdir(bin_path): - try: - filepath = os.path.join(bin_path, filename) - with open(filepath, 'r') as f: - firstline = f.readline() - if firstline.startswith('#!') and 'python' in firstline: - extra_module_paths.append(filepath) - except (UnicodeDecodeError, IOError) as e: - # Probably a binary file; permission error or race cond. because file got deleted - # ignore - debug.warning(unicode(e)) - continue - return extra_module_paths diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__init__.py deleted file mode 100644 index 22f3860..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__init__.py +++ /dev/null @@ -1,409 +0,0 @@ -""" -The ``Parser`` tries to convert the available Python code in an easy to read -format, something like an abstract syntax tree. The classes who represent this -tree, are sitting in the :mod:`jedi.parser.tree` module. - -The Python module ``tokenize`` is a very important part in the ``Parser``, -because it splits the code into different words (tokens). Sometimes it looks a -bit messy. Sorry for that! You might ask now: "Why didn't you use the ``ast`` -module for this? Well, ``ast`` does a very good job understanding proper Python -code, but fails to work as soon as there's a single line of broken code. - -There's one important optimization that needs to be known: Statements are not -being parsed completely. ``Statement`` is just a representation of the tokens -within the statement. This lowers memory usage and cpu time and reduces the -complexity of the ``Parser`` (there's another parser sitting inside -``Statement``, which produces ``Array`` and ``Call``). -""" -import os -import re - -from jedi.parser import tree as pt -from jedi.parser import tokenize -from jedi.parser.token import (DEDENT, INDENT, ENDMARKER, NEWLINE, NUMBER, - STRING) -from jedi.parser.pgen2.pgen import generate_grammar -from jedi.parser.pgen2.parse import PgenParser - -OPERATOR_KEYWORDS = 'and', 'for', 'if', 'else', 'in', 'is', 'lambda', 'not', 'or' -# Not used yet. In the future I intend to add something like KeywordStatement -STATEMENT_KEYWORDS = 'assert', 'del', 'global', 'nonlocal', 'raise', \ - 'return', 'yield', 'pass', 'continue', 'break' - - -_loaded_grammars = {} - - -class ParseError(Exception): - """ - Signals you that the code you fed the Parser was not correct Python code. - """ - - -def load_grammar(version='3.4'): - # For now we only support two different Python syntax versions: The latest - # Python 3 and Python 2. This may change. - if version in ('3.2', '3.3'): - version = '3.4' - elif version == '2.6': - version = '2.7' - - file = 'grammar' + version + '.txt' - - global _loaded_grammars - path = os.path.join(os.path.dirname(__file__), file) - try: - return _loaded_grammars[path] - except KeyError: - return _loaded_grammars.setdefault(path, generate_grammar(path)) - - -class ParserSyntaxError(object): - def __init__(self, message, position): - self.message = message - self.position = position - - -class Parser(object): - AST_MAPPING = { - 'expr_stmt': pt.ExprStmt, - 'classdef': pt.Class, - 'funcdef': pt.Function, - 'file_input': pt.Module, - 'import_name': pt.ImportName, - 'import_from': pt.ImportFrom, - 'break_stmt': pt.KeywordStatement, - 'continue_stmt': pt.KeywordStatement, - 'return_stmt': pt.ReturnStmt, - 'raise_stmt': pt.KeywordStatement, - 'yield_expr': pt.YieldExpr, - 'del_stmt': pt.KeywordStatement, - 'pass_stmt': pt.KeywordStatement, - 'global_stmt': pt.GlobalStmt, - 'nonlocal_stmt': pt.KeywordStatement, - 'print_stmt': pt.KeywordStatement, - 'assert_stmt': pt.AssertStmt, - 'if_stmt': pt.IfStmt, - 'with_stmt': pt.WithStmt, - 'for_stmt': pt.ForStmt, - 'while_stmt': pt.WhileStmt, - 'try_stmt': pt.TryStmt, - 'comp_for': pt.CompFor, - 'decorator': pt.Decorator, - 'lambdef': pt.Lambda, - 'old_lambdef': pt.Lambda, - 'lambdef_nocond': pt.Lambda, - } - - def __init__(self, grammar, source, start_symbol='file_input', - tokenizer=None, start_parsing=True): - # Todo Remove start_parsing (with False) - - self._used_names = {} - self._scope_names_stack = [{}] - self._last_failed_start_pos = (0, 0) - self._global_names = [] - - # For the fast parser. - self.position_modifier = pt.PositionModifier() - - self._added_newline = False - # The Python grammar needs a newline at the end of each statement. - if not source.endswith('\n') and start_symbol == 'file_input': - source += '\n' - self._added_newline = True - - self.source = source - self._start_symbol = start_symbol - self._grammar = grammar - - self._parsed = None - - if start_parsing: - if tokenizer is None: - tokenizer = tokenize.source_tokens(source, use_exact_op_types=True) - self.parse(tokenizer) - - def parse(self, tokenizer): - if self._parsed is not None: - return self._parsed - - start_number = self._grammar.symbol2number[self._start_symbol] - pgen_parser = PgenParser( - self._grammar, self.convert_node, self.convert_leaf, - self.error_recovery, start_number - ) - - try: - self._parsed = pgen_parser.parse(tokenizer) - finally: - self.stack = pgen_parser.stack - - if self._start_symbol == 'file_input' != self._parsed.type: - # If there's only one statement, we get back a non-module. That's - # not what we want, we want a module, so we add it here: - self._parsed = self.convert_node(self._grammar, - self._grammar.symbol2number['file_input'], - [self._parsed]) - - if self._added_newline: - self.remove_last_newline() - - def get_parsed_node(self): - # TODO rename to get_root_node - return self._parsed - - def error_recovery(self, grammar, stack, arcs, typ, value, start_pos, prefix, - add_token_callback): - raise ParseError - - def convert_node(self, grammar, type, children): - """ - Convert raw node information to a Node instance. - - This is passed to the parser driver which calls it whenever a reduction of a - grammar rule produces a new complete node, so that the tree is build - strictly bottom-up. - """ - symbol = grammar.number2symbol[type] - try: - new_node = Parser.AST_MAPPING[symbol](children) - except KeyError: - new_node = pt.Node(symbol, children) - - # We need to check raw_node always, because the same node can be - # returned by convert multiple times. - if symbol == 'global_stmt': - self._global_names += new_node.get_global_names() - elif isinstance(new_node, pt.Lambda): - new_node.names_dict = self._scope_names_stack.pop() - elif isinstance(new_node, (pt.ClassOrFunc, pt.Module)) \ - and symbol in ('funcdef', 'classdef', 'file_input'): - # scope_name_stack handling - scope_names = self._scope_names_stack.pop() - if isinstance(new_node, pt.ClassOrFunc): - n = new_node.name - scope_names[n.value].remove(n) - # Set the func name of the current node - arr = self._scope_names_stack[-1].setdefault(n.value, []) - arr.append(n) - new_node.names_dict = scope_names - elif isinstance(new_node, pt.CompFor): - # The name definitions of comprehenions shouldn't be part of the - # current scope. They are part of the comprehension scope. - for n in new_node.get_defined_names(): - self._scope_names_stack[-1][n.value].remove(n) - return new_node - - def convert_leaf(self, grammar, type, value, prefix, start_pos): - # print('leaf', repr(value), token.tok_name[type]) - if type == tokenize.NAME: - if value in grammar.keywords: - if value in ('def', 'class', 'lambda'): - self._scope_names_stack.append({}) - - return pt.Keyword(self.position_modifier, value, start_pos, prefix) - else: - name = pt.Name(self.position_modifier, value, start_pos, prefix) - # Keep a listing of all used names - arr = self._used_names.setdefault(name.value, []) - arr.append(name) - arr = self._scope_names_stack[-1].setdefault(name.value, []) - arr.append(name) - return name - elif type == STRING: - return pt.String(self.position_modifier, value, start_pos, prefix) - elif type == NUMBER: - return pt.Number(self.position_modifier, value, start_pos, prefix) - elif type == NEWLINE: - return pt.Newline(self.position_modifier, value, start_pos, prefix) - elif type == INDENT: - return pt.Indent(self.position_modifier, value, start_pos, prefix) - elif type == DEDENT: - return pt.Dedent(self.position_modifier, value, start_pos, prefix) - elif type == ENDMARKER: - return pt.EndMarker(self.position_modifier, value, start_pos, prefix) - else: - return pt.Operator(self.position_modifier, value, start_pos, prefix) - - def remove_last_newline(self): - """ - In all of this we need to work with _start_pos, because if we worked - with start_pos, we would need to check the position_modifier as well - (which is accounted for in the start_pos property). - """ - endmarker = self._parsed.children[-1] - # The newline is either in the endmarker as a prefix or the previous - # leaf as a newline token. - prefix = endmarker.prefix - if prefix.endswith('\n'): - endmarker.prefix = prefix = prefix[:-1] - last_end = 0 - if '\n' not in prefix: - # Basically if the last line doesn't end with a newline. we - # have to add the previous line's end_position. - try: - last_end = endmarker.get_previous_leaf().end_pos[1] - except IndexError: - pass - last_line = re.sub('.*\n', '', prefix) - endmarker._start_pos = endmarker._start_pos[0] - 1, last_end + len(last_line) - else: - try: - newline = endmarker.get_previous_leaf() - except IndexError: - return # This means that the parser is empty. - while True: - if newline.value == '': - # Must be a DEDENT, just continue. - try: - newline = newline.get_previous_leaf() - except IndexError: - # If there's a statement that fails to be parsed, there - # will be no previous leaf. So just ignore it. - break - elif newline.value != '\n': - # TODO REMOVE, error recovery was simplified. - # This may happen if error correction strikes and removes - # a whole statement including '\n'. - break - else: - newline.value = '' - if self._last_failed_start_pos > newline._start_pos: - # It may be the case that there was a syntax error in a - # function. In that case error correction removes the - # right newline. So we use the previously assigned - # _last_failed_start_pos variable to account for that. - endmarker._start_pos = self._last_failed_start_pos - else: - endmarker._start_pos = newline._start_pos - break - - -class ParserWithRecovery(Parser): - """ - This class is used to parse a Python file, it then divides them into a - class structure of different scopes. - - :param grammar: The grammar object of pgen2. Loaded by load_grammar. - :param source: The codebase for the parser. Must be unicode. - :param module_path: The path of the module in the file system, may be None. - :type module_path: str - """ - def __init__(self, grammar, source, module_path=None, tokenizer=None, - start_parsing=True): - self.syntax_errors = [] - - self._omit_dedent_list = [] - self._indent_counter = 0 - - # TODO do print absolute import detection here. - # try: - # del python_grammar_no_print_statement.keywords["print"] - # except KeyError: - # pass # Doesn't exist in the Python 3 grammar. - - # if self.options["print_function"]: - # python_grammar = pygram.python_grammar_no_print_statement - # else: - super(ParserWithRecovery, self).__init__( - grammar, source, - tokenizer=tokenizer, - start_parsing=start_parsing - ) - if start_parsing: - self.module = self._parsed - self.module.used_names = self._used_names - self.module.path = module_path - self.module.global_names = self._global_names - - def parse(self, tokenizer): - return super(ParserWithRecovery, self).parse(self._tokenize(self._tokenize(tokenizer))) - - def error_recovery(self, grammar, stack, arcs, typ, value, start_pos, prefix, - add_token_callback): - """ - This parser is written in a dynamic way, meaning that this parser - allows using different grammars (even non-Python). However, error - recovery is purely written for Python. - """ - def current_suite(stack): - # For now just discard everything that is not a suite or - # file_input, if we detect an error. - for index, (dfa, state, (type_, nodes)) in reversed(list(enumerate(stack))): - # `suite` can sometimes be only simple_stmt, not stmt. - symbol = grammar.number2symbol[type_] - if symbol == 'file_input': - break - elif symbol == 'suite' and len(nodes) > 1: - # suites without an indent in them get discarded. - break - elif symbol == 'simple_stmt' and len(nodes) > 1: - # simple_stmt can just be turned into a Node, if there are - # enough statements. Ignore the rest after that. - break - return index, symbol, nodes - - index, symbol, nodes = current_suite(stack) - if symbol == 'simple_stmt': - index -= 2 - (_, _, (type_, suite_nodes)) = stack[index] - symbol = grammar.number2symbol[type_] - suite_nodes.append(pt.Node(symbol, list(nodes))) - # Remove - nodes[:] = [] - nodes = suite_nodes - stack[index] - - # print('err', token.tok_name[typ], repr(value), start_pos, len(stack), index) - if self._stack_removal(grammar, stack, arcs, index + 1, value, start_pos): - add_token_callback(typ, value, start_pos, prefix) - else: - if typ == INDENT: - # For every deleted INDENT we have to delete a DEDENT as well. - # Otherwise the parser will get into trouble and DEDENT too early. - self._omit_dedent_list.append(self._indent_counter) - else: - error_leaf = pt.ErrorLeaf(self.position_modifier, typ, value, start_pos, prefix) - stack[-1][2][1].append(error_leaf) - - def _stack_removal(self, grammar, stack, arcs, start_index, value, start_pos): - failed_stack = [] - found = False - all_nodes = [] - for dfa, state, (typ, nodes) in stack[start_index:]: - if nodes: - found = True - if found: - symbol = grammar.number2symbol[typ] - failed_stack.append((symbol, nodes)) - all_nodes += nodes - if nodes and nodes[0] in ('def', 'class', 'lambda'): - self._scope_names_stack.pop() - if failed_stack: - stack[start_index - 1][2][1].append(pt.ErrorNode(all_nodes)) - - self._last_failed_start_pos = start_pos - - stack[start_index:] = [] - return failed_stack - - def _tokenize(self, tokenizer): - for typ, value, start_pos, prefix in tokenizer: - # print(tokenize.tok_name[typ], repr(value), start_pos, repr(prefix)) - if typ == DEDENT: - # We need to count indents, because if we just omit any DEDENT, - # we might omit them in the wrong place. - o = self._omit_dedent_list - if o and o[-1] == self._indent_counter: - o.pop() - continue - - self._indent_counter -= 1 - elif typ == INDENT: - self._indent_counter += 1 - - yield typ, value, start_pos, prefix - - def __repr__(self): - return "<%s: %s>" % (type(self).__name__, self.module) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/__init__.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/__init__.cpython-35.pyc deleted file mode 100644 index 76178be52901bb8ec7cf9f29a74ea46e3ffecefb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11730 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 LbBjx*rJw#Ecx&Gk diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 1d6a40d331332c37dc68c8b5291649481820ee92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10738 zcmb7K&2t>bb)T=Dot@nU79a_JS{liw#kFbBksV86F^VV>l4+3;L%^mukuw-<&jR~3 zv+9{8u&7`DyqD zo@U=1Sbj;TJ_~i*x4B;Gmj{mT3@UzQ;QH>M>Q@Ifzc#4*b?&$O3xh>}k?ZAtW3c2e zq5f%qS-j$(>S*EVcQkQPTzaC3OVOD_(_ax+#0%oZC%S(YJ)U?8JugM)&~qN|FN;s& z{geED0q>s@m+^i%x`6(R!r0K7&F~*hO>;MQBX4W#ekjvOZf$v)>_n-TC0;9uA4f9t zGW3U!!%jck?nmDJakiVp=oFFHiM=rPqA(rPco~JlZ6|UNW>>v58ARD`C*JY;ogTi& z$n7+fVJq{}ah!$wSSN~BJzBig57QKD?(NbfLm8z}Ov`psmj+$+LK%5!C(CF$tVtWX zK1js%t!^Ybt3%%TDh=K8&^+o#t1h3a*sE&88MCAp#hrr)r|hI&=;3%{uQM1XG7GUH zCdy{>A0gzbyB)Q{QHtYY@56p419oWF3IjN}=(O9Bq&@E?Ql#D$UMFp?dfo=1p)JxWI2ptG}^d12b~;$-i-_wvKtF_sYVE15S& zH|>Ph-`Wb(Y-`IcPN(MRq`&7qjQahnvu;l$SiCsuPLc?(n{0cdSVS_#p#`CID3f6% z3(C55uB+bmDD&E&IdcMz)x(BBR8SsIEH9&1XxbFtgDLu*IP#LVw=D_7j2cA(9+sf< z2+PS32o+eoi|ga!(xMDny~v z+9krMRkpTnN*RuEJle?C)~&GL-`Z-fy1#}N($<@LZV~(A>CAY%Y3KIswcBg!o4I{w zou8Gp_1pJuK6rQSL0(>8dwBQG`dV(UfA!v5Xs|anAKY1g2QxHwqBxR3Nw6cs!61}q zbMK>39Vs`lh1>+YWI0-0p{iZ4u@s&YBw-Vv}UcEH_2e&+VOlvK{tw zCr;vi(n75y!wx>TWt5F%oR`L(s4sGBh_7-7`Ues}it^GnR7R(ZDdrj(2y!T3&NagaSd-)&yW{HX{rf(qMg-5`K&h8Gp(z44TffB z9qJSP(3l!yCo4^i^V)`HX_?(~rO-9{%Szqy#K@e9afopn+WWAFuqu^x+RLj1zHmUh zIxt^d{StxK@^Zma2i9t~pEV8n3ic+i05mJ$my}4K?dDcD0YjBVM-mzd(d|y35Zws+ zNhl&QV@+_$yV01*oV#h1iKrcp`k5pv-8Azu6nqLblUww?{46atCxavu<~5pdHXRK} zPXlPCquaWpTSm=X(GAoVbooWJpI|~l|C=cM$q^F@k!8VUK+9Kl6 zkDfFI6N&hEqEECyn;3xLXMC=&H;ueZrUE)BcZLa!AdZ8RS!vX7%P-+0`5J+zP6do9 zc6kGxsRf|nJO>w^+05!}AQ)PD7$#pL@G^nlA#gM?*9d3ww*h_^Me(1`?C>0d9DAnRwJJwb|R$oAU5v75$gtCls3gtA)8I+Y-5&DlV z`e(%{Q4%)XqjRDx91!Kas0bI&3!*A&cwQ8Bv4H0#u_zjNenKpXWjtSC;+@WIg|Ftt zyb|pXWsqir40?&&6>wT!Zja&?Ra|DzPCOiCc~x0DRt@u)woC@T%W8}#@#{0?re3Q` z0jd|5m10q6jTq4Cz5^YqS}UX=xtdp%PF3yonPM$I9?DLfsd`l@V)at)v{j`-W>8ff zXmnL`VSFHMbXecX{o4dA>6$uP*q!zhLBqG1f0jl3FQh+v|p`Ero9;8CeJU@vU- z@)ckw%>r_%Fb-`p3n0&VJtzoBnl86tk!(enS*?s4ffY8&(p+XZNz2Qy?uR*W!4^bDL`QG^C~W5o z7zx>gBa%?SBHyDAN0bHBj%MR#1%jX6}HHY*1lxk-!5rg+
QpsKp)}FB6W}jl%JQR-9Pq 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 H`+oSp8W407 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/fast.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/fast.cpython-36.pyc deleted file mode 100644 index 1c9eab12387c3e635f05f32642981c60453192cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16372 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/token.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/token.cpython-35.pyc deleted file mode 100644 index 3f4c430356fc5d30227cd95c56d6c13783800f73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1299 zcmY*YJ9FDc5MF@qlW5tNVvmc=Tnc$Y$|4Fo(M(Km1X7U2F-S@P=m-3Oso;`81_&4+ zooM2uNs&JPB7f;prgEPuRrYXFM03F1{r0=P`*v}--E5MbKaA&F6@b5Ct6R5l?X1>aodgEjE3 zK?vY&z)yR?uEE)L_zmFTRSUcuz;3|VO@Uvk;BA7p1?)2c*%sVk8^AW9`|clj8mxoU zYJL>+YbktVcA6*Aa>4vCPLpiWQh7DZ{q+1kuSx$Eu2R~(Hkgb?=Ggs+GX}1XE#BxG zgU2V+iEHwzZP@nYDX*KBH9U5P4zC%mc``Mu+2<<2m()5oY|^5(a4)Fkob<^nY76%b z9ZamrnA}4@8X4pvbX2PJ8jjJospDd)Mjgv=j>rf4q>u0}HAcs#O}f-F z9f$PjBiqDtZKBiSaMGa%6PIjLTr@!K`t^ny1kWHFV2%hPrp1>;$Nvdv<^)2nhu8cU^+Uq%x9!46dt`&smx*Ur{AM|2Y66_;&(a>vs zMWAH6UD4QuOquFodskv*u8mr*B+HzpU8ainqoKl!C09CkvG3xVkWQyVFK-GNw{CIb z``;}W%Z&MchW7>d<{1mZj{j{Er?W+P8b;ybJS!oSiI1IE7Rg&S=k>AgP9B?MC##BV z9kc#?7PG7_RyKqo!mJ6ij>c;wX*^5)Z1y9s6d@;hiknB_oaMYM9Iq4^t|loji`{tb z`zSe`MfsnQ-4Qzp^Y26Lha_g&`|#}|$+XV37=lQ`3)1zM0e0L>nNNJ`@av>-to)k$3%;Uul?EQ@!+r0W4(?AX`| zQ1NrpJJ^d@Y42dKWe)aakGO?B;u}v(5-H!$Gk@c>7P|*;W~$|Io@$fqEDI z`M(eX6i5+@B~OxgEk|-(@=CGdDMeq3$}XZ6uNo*+rPU79LHPmlD!^(%1z2r`m9kgB zaZm-0mwa{y=vtrxU0YIM^`Hi$_&Kq8dPw?XYdpetArFTJencE|IKbQF(3&`S zhYSZJ$SvZyuv8nvzC~bC zAGG6_WKstyuk&PDbF4+rXXfO05^?iGi+uajNLQ5_e$j znfL|i5A6PAxNn)i;tp51?>YyAeHVAT#2!38IPY35&^YOV0d8x;j!;PKG6sQaKmSP2KftICY z!8Gjx70*Wlh38Y2I(NW#@tWXvyG<_M6g+BPW7zj!E#`}i`hEuQ3u2omGzi=NA4!}} z=izY}h4a&_1S1*$N?CcHyrnayj(m6g#2h(Ug;N!%KbyuhQ~Asq515BF9_kRhT9U@o z)X%0LSh*+}&QsVt3THHD3Qw$D5GE%nQ}}MI`Z`LEr&0bl%C7UBc=-R3_9ls`_C9<& zPcp6jK8&^F#Vm-Z#-;D@o);pd(=4Z%R;X^Lr%dg{NwA1$mw!z8eF$~=lBAXtNtIOj TBJzwyC#^E|fdX`0s!QJiO5ZRX diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/tokenize.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/tokenize.cpython-35.pyc deleted file mode 100644 index 54ed5b8b7cea531777b39bb109e330dc5c76c056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8000 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/tokenize.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/tokenize.cpython-36.pyc deleted file mode 100644 index 605cb4f0576cc8c043b95fd532614e87b1cab4d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7430 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/tree.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/__pycache__/tree.cpython-36.pyc deleted file mode 100644 index f0bb3622c6a473e210f66b5a707230a8f0b4f9ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52673 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/fast.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/fast.py deleted file mode 100644 index 9c471fd..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/fast.py +++ /dev/null @@ -1,621 +0,0 @@ -""" -Basically a parser that is faster, because it tries to parse only parts and if -anything changes, it only reparses the changed parts. But because it's not -finished (and still not working as I want), I won't document it any further. -""" -import re -from itertools import chain - -from jedi._compatibility import use_metaclass -from jedi import settings -from jedi.parser import ParserWithRecovery -from jedi.parser import tree -from jedi.parser.utils import underscore_memoization, parser_cache -from jedi import debug -from jedi.parser.tokenize import (source_tokens, NEWLINE, - ENDMARKER, INDENT, DEDENT) - -FLOWS = 'if', 'else', 'elif', 'while', 'with', 'try', 'except', 'finally', 'for' - - -class FastModule(tree.Module): - type = 'file_input' - - def __init__(self, module_path): - super(FastModule, self).__init__([]) - self.modules = [] - self.reset_caches() - self.names_dict = {} - self.path = module_path - - def reset_caches(self): - self.modules = [] - try: - del self._used_names # Remove the used names cache. - except AttributeError: - pass # It was never used. - - @property - @underscore_memoization - def used_names(self): - return MergedNamesDict([m.used_names for m in self.modules]) - - @property - def global_names(self): - return [name for m in self.modules for name in m.global_names] - - @property - def error_statements(self): - return [e for m in self.modules for e in m.error_statements] - - def __repr__(self): - return "" % (type(self).__name__, self.name, - self.start_pos[0], self.end_pos[0]) - - # To avoid issues with with the `parser.ParserWithRecovery`, we need - # setters that do nothing, because if pickle comes along and sets those - # values. - @global_names.setter - def global_names(self, value): - pass - - @error_statements.setter - def error_statements(self, value): - pass - - @used_names.setter - def used_names(self, value): - pass - - -class MergedNamesDict(object): - def __init__(self, dicts): - self.dicts = dicts - - def __iter__(self): - return iter(set(key for dct in self.dicts for key in dct)) - - def __getitem__(self, value): - return list(chain.from_iterable(dct.get(value, []) for dct in self.dicts)) - - def items(self): - dct = {} - for d in self.dicts: - for key, values in d.items(): - try: - dct_values = dct[key] - dct_values += values - except KeyError: - dct[key] = list(values) - return dct.items() - - def values(self): - lst = [] - for dct in self.dicts: - lst += dct.values() - return lst - - -class CachedFastParser(type): - """ This is a metaclass for caching `FastParser`. """ - def __call__(self, grammar, source, module_path=None): - if not settings.fast_parser: - return ParserWithRecovery(grammar, source, module_path) - - pi = parser_cache.get(module_path, None) - if pi is None or isinstance(pi.parser, ParserWithRecovery): - p = super(CachedFastParser, self).__call__(grammar, source, module_path) - else: - p = pi.parser # pi is a `cache.ParserCacheItem` - p.update(source) - return p - - -class ParserNode(object): - def __init__(self, fast_module, parser, source): - self._fast_module = fast_module - self.parent = None - self._node_children = [] - - self.source = source - self.hash = hash(source) - self.parser = parser - if source: - self._end_pos = parser.module.end_pos - else: - self._end_pos = 1, 0 - - try: - # With fast_parser we have either 1 subscope or only statements. - self._content_scope = parser.module.subscopes[0] - # A parsed node's content will be in the first indent, because - # everything that's parsed is within this subscope. - self._is_class_or_def = True - except IndexError: - self._content_scope = parser.module - self._is_class_or_def = False - else: - self._rewrite_last_newline() - - # We need to be able to reset the original children of a parser. - self._old_children = list(self._content_scope.children) - - def is_root_node(self): - return self.parent is None - - def _rewrite_last_newline(self): - """ - The ENDMARKER can contain a newline in the prefix. However this prefix - really belongs to the function - respectively to the next function or - parser node. If we don't rewrite that newline, we end up with a newline - in the wrong position, i.d. at the end of the file instead of in the - middle. - """ - c = self._content_scope.children - if tree.is_node(c[-1], 'suite'): # In a simple_stmt there's no DEDENT. - end_marker = self.parser.module.children[-1] - # Set the DEDENT prefix instead of the ENDMARKER. - c[-1].children[-1].prefix = end_marker.prefix - end_marker.prefix = '' - - def __repr__(self): - module = self.parser.module - try: - return '<%s: %s-%s>' % (type(self).__name__, module.start_pos, module.end_pos) - except IndexError: - # There's no module yet. - return '<%s: empty>' % type(self).__name__ - - @property - def end_pos(self): - return self._end_pos[0] + self.parser.position_modifier.line, self._end_pos[1] - - def reset_node(self): - """ - Removes changes that were applied in this class. - """ - self._node_children = [] - scope = self._content_scope - scope.children = list(self._old_children) - try: - # This works if it's a MergedNamesDict. - # We are correcting it, because the MergedNamesDicts are artificial - # and can change after closing a node. - scope.names_dict = scope.names_dict.dicts[0] - except AttributeError: - pass - - def close(self): - """ - Closes the current parser node. This means that after this no further - nodes should be added anymore. - """ - # We only need to replace the dict if multiple dictionaries are used: - if self._node_children: - dcts = [n.parser.module.names_dict for n in self._node_children] - # Need to insert the own node as well. - dcts.insert(0, self._content_scope.names_dict) - self._content_scope.names_dict = MergedNamesDict(dcts) - endmarker = self.parser.get_parsed_node().children[-1] - assert endmarker.type == 'endmarker' - last_parser = self._node_children[-1].parser - endmarker.start_pos = last_parser.get_parsed_node().end_pos - - @property - def _indent(self): - if self.is_root_node(): - return 0 - - return self.parser.module.children[0].start_pos[1] - - def add_node(self, node, start_line, indent): - """ - Adding a node means adding a node that was either just parsed or one - that can be reused. - """ - # Content that is not a subscope can never be part of the current node, - # because it's basically a sister node, that sits next to it and not - # within it. - if (self._indent >= indent or not self._is_class_or_def) and \ - not self.is_root_node(): - self.close() - return self.parent.add_node(node, start_line, indent) - - # Changing the line offsets is very important, because if they don't - # fit, all the start_pos values will be wrong. - m = node.parser.module - node.parser.position_modifier.line = start_line - 1 - self._fast_module.modules.append(m) - node.parent = self - - self._node_children.append(node) - - # Insert parser objects into current structure. We only need to set the - # parents and children in a good way. - scope = self._content_scope - for child in m.children: - child.parent = scope - scope.children.append(child) - - return node - - def all_sub_nodes(self): - """ - Returns all nodes including nested ones. - """ - for n in self._node_children: - yield n - for y in n.all_sub_nodes(): - yield y - - @underscore_memoization # Should only happen once! - def remove_last_newline(self): - self.parser.remove_last_newline() - - -class FastParser(use_metaclass(CachedFastParser)): - _FLOWS_NEED_SPACE = 'if', 'elif', 'while', 'with', 'except', 'for' - _FLOWS_NEED_COLON = 'else', 'try', 'except', 'finally' - _keyword_re = re.compile('^[ \t]*(def |class |@|(?:%s)|(?:%s)\s*:)' - % ('|'.join(_FLOWS_NEED_SPACE), - '|'.join(_FLOWS_NEED_COLON))) - - def __init__(self, grammar, source, module_path=None): - # set values like `tree.Module`. - self._grammar = grammar - self.module_path = module_path - self._reset_caches() - self.update(source) - - def _reset_caches(self): - self.module = FastModule(self.module_path) - self.root_node = self.current_node = ParserNode(self.module, self, '') - - def get_parsed_node(self): - return self.module - - def update(self, source): - # Variables for testing purposes: It is important that the number of - # parsers used can be minimized. With these variables we can test - # against that. - self.number_parsers_used = 0 - self.number_of_splits = 0 - self.number_of_misses = 0 - self.module.reset_caches() - self.source = source - try: - self._parse(source) - except: - # FastParser is cached, be careful with exceptions. - self._reset_caches() - raise - - def _split_parts(self, source): - """ - Split the source code into different parts. This makes it possible to - parse each part seperately and therefore cache parts of the file and - not everything. - """ - def gen_part(): - text = ''.join(current_lines) - del current_lines[:] - self.number_of_splits += 1 - return text - - def just_newlines(current_lines): - for line in current_lines: - line = line.lstrip('\t \n\r') - if line and line[0] != '#': - return False - return True - - # Split only new lines. Distinction between \r\n is the tokenizer's - # job. - # It seems like there's no problem with form feed characters here, - # because we're not counting lines. - self._lines = source.splitlines(True) - current_lines = [] - is_decorator = False - # Use -1, because that indent is always smaller than any other. - indent_list = [-1, 0] - new_indent = False - parentheses_level = 0 - flow_indent = None - previous_line = None - # All things within flows are simply being ignored. - for i, l in enumerate(self._lines): - # Handle backslash newline escaping. - if l.endswith('\\\n') or l.endswith('\\\r\n'): - if previous_line is not None: - previous_line += l - else: - previous_line = l - continue - if previous_line is not None: - l = previous_line + l - previous_line = None - - # check for dedents - s = l.lstrip('\t \n\r') - indent = len(l) - len(s) - if not s or s[0] == '#': - current_lines.append(l) # Just ignore comments and blank lines - continue - - if new_indent and not parentheses_level: - if indent > indent_list[-2]: - # Set the actual indent, not just the random old indent + 1. - indent_list[-1] = indent - new_indent = False - - while indent < indent_list[-1]: # -> dedent - indent_list.pop() - # This automatically resets the flow_indent if there was a - # dedent or a flow just on one line (with one simple_stmt). - new_indent = False - if flow_indent is None and current_lines and not parentheses_level: - yield gen_part() - flow_indent = None - - # Check lines for functions/classes and split the code there. - if flow_indent is None: - m = self._keyword_re.match(l) - if m: - # Strip whitespace and colon from flows as a check. - if m.group(1).strip(' \t\r\n:') in FLOWS: - if not parentheses_level: - flow_indent = indent - else: - if not is_decorator and not just_newlines(current_lines): - yield gen_part() - is_decorator = '@' == m.group(1) - if not is_decorator: - parentheses_level = 0 - # The new indent needs to be higher - indent_list.append(indent + 1) - new_indent = True - elif is_decorator: - is_decorator = False - - parentheses_level = \ - max(0, (l.count('(') + l.count('[') + l.count('{') - - l.count(')') - l.count(']') - l.count('}'))) - - current_lines.append(l) - - if previous_line is not None: - current_lines.append(previous_line) - if current_lines: - yield gen_part() - - def _parse(self, source): - """ :type source: str """ - added_newline = False - if not source or source[-1] != '\n': - # To be compatible with Pythons grammar, we need a newline at the - # end. The parser would handle it, but since the fast parser abuses - # the normal parser in various ways, we need to care for this - # ourselves. - source += '\n' - added_newline = True - - next_code_part_end_line = code_part_end_line = 1 - start = 0 - nodes = list(self.root_node.all_sub_nodes()) - # Now we can reset the node, because we have all the old nodes. - self.root_node.reset_node() - self.current_node = self.root_node - last_end_line = 1 - - for code_part in self._split_parts(source): - next_code_part_end_line += code_part.count('\n') - # If the last code part parsed isn't equal to the current end_pos, - # we know that the parser went further (`def` start in a - # docstring). So just parse the next part. - if code_part_end_line == last_end_line: - self._parse_part(code_part, source[start:], code_part_end_line, nodes) - else: - self.number_of_misses += 1 - # Means that some lines where not fully parsed. Parse it now. - # This is a very rare case. Should only happens with very - # strange code bits. - while last_end_line < next_code_part_end_line: - code_part_end_line = last_end_line - # We could calculate the src in a more complicated way to - # make caching here possible as well. However, this is - # complicated and error-prone. Since this is not very often - # called - just ignore it. - src = ''.join(self._lines[code_part_end_line - 1:]) - self._parse_part(code_part, src, code_part_end_line, nodes) - last_end_line = self.current_node.end_pos[0] - debug.dbg("While parsing %s, starting with line %s wasn't included in split.", - self.module_path, code_part_end_line) - #assert code_part_end_line > last_end_line - # This means that the parser parsed faster than the last given - # `code_part`. - debug.dbg('While parsing %s, line %s slowed down the fast parser.', - self.module_path, code_part_end_line) - - code_part_end_line = next_code_part_end_line - start += len(code_part) - - last_end_line = self.current_node.end_pos[0] - - if added_newline: - self.current_node.remove_last_newline() - - # Now that the for loop is finished, we still want to close all nodes. - node = self.current_node - while node is not None: - node.close() - node = node.parent - - debug.dbg('Parsed %s, with %s parsers in %s splits.' - % (self.module_path, self.number_parsers_used, - self.number_of_splits)) - - def _parse_part(self, source, parser_code, code_part_end_line, nodes): - """ - Side effect: Alters the list of nodes. - """ - h = hash(source) - for index, node in enumerate(nodes): - if node.hash == h and node.source == source: - node.reset_node() - nodes.remove(node) - parser_code = source - break - else: - tokenizer = FastTokenizer(parser_code) - self.number_parsers_used += 1 - p = ParserWithRecovery(self._grammar, parser_code, self.module_path, tokenizer=tokenizer) - - end = code_part_end_line - 1 + p.module.end_pos[0] - used_lines = self._lines[code_part_end_line - 1:end - 1] - code_part_actually_used = ''.join(used_lines) - - node = ParserNode(self.module, p, code_part_actually_used) - - indent = len(parser_code) - len(parser_code.lstrip('\t ')) - - self.current_node.add_node(node, code_part_end_line, indent) - self.current_node = node - - -class FastTokenizer(object): - """ - Breaks when certain conditions are met, i.e. a new function or class opens. - """ - def __init__(self, source): - self.source = source - self._gen = source_tokens(source, use_exact_op_types=True) - self._closed = False - - # fast parser options - self.current = self.previous = NEWLINE, '', (0, 0) - self._in_flow = False - self._is_decorator = False - self._first_stmt = True - self._parentheses_level = 0 - self._indent_counter = 0 - self._flow_indent_counter = 0 - self._returned_endmarker = False - self._expect_indent = False - - def __iter__(self): - return self - - def next(self): - """ Python 2 Compatibility """ - return self.__next__() - - def __next__(self): - if self._closed: - return self._finish_dedents() - - typ, value, start_pos, prefix = current = next(self._gen) - if typ == ENDMARKER: - self._closed = True - self._returned_endmarker = True - return current - - self.previous = self.current - self.current = current - - if typ == INDENT: - self._indent_counter += 1 - if not self._expect_indent and not self._first_stmt and not self._in_flow: - # This does not mean that there is an actual flow, it means - # that the INDENT is syntactically wrong. - self._flow_indent_counter = self._indent_counter - 1 - self._in_flow = True - self._expect_indent = False - elif typ == DEDENT: - self._indent_counter -= 1 - if self._in_flow: - if self._indent_counter == self._flow_indent_counter: - self._in_flow = False - else: - self._closed = True - return current - - previous_type = self.previous[0] - if value in ('def', 'class') and self._parentheses_level: - # Account for the fact that an open parentheses before a function - # will reset the parentheses counter, but new lines before will - # still be ignored. So check the prefix. - - # TODO what about flow parentheses counter resets in the tokenizer? - self._parentheses_level = 0 - # We need to simulate a newline before the indent, because the - # open parentheses ignored them. - if re.search('\n\s*', prefix): - previous_type = NEWLINE - - # Parentheses ignore the indentation rules. The other three stand for - # new lines. - if previous_type in (NEWLINE, INDENT, DEDENT) \ - and not self._parentheses_level and typ not in (INDENT, DEDENT): - if not self._in_flow: - if value in FLOWS: - self._flow_indent_counter = self._indent_counter - self._first_stmt = False - elif value in ('def', 'class', '@'): - # The values here are exactly the same check as in - # _split_parts, but this time with tokenize and therefore - # precise. - if not self._first_stmt and not self._is_decorator: - return self._close() - - self._is_decorator = '@' == value - if not self._is_decorator: - self._first_stmt = False - self._expect_indent = True - elif self._expect_indent: - return self._close() - else: - self._first_stmt = False - - if value in '([{' and value: - self._parentheses_level += 1 - elif value in ')]}' and value: - # Ignore closing parentheses, because they are all - # irrelevant for the indentation. - self._parentheses_level = max(self._parentheses_level - 1, 0) - return current - - def _close(self): - if self._first_stmt: - # Continue like nothing has happened, because we want to enter - # the first class/function. - if self.current[1] != '@': - self._first_stmt = False - return self.current - else: - self._closed = True - return self._finish_dedents() - - def _finish_dedents(self): - if self._indent_counter: - self._indent_counter -= 1 - return DEDENT, '', self.current[2], '' - elif not self._returned_endmarker: - self._returned_endmarker = True - return ENDMARKER, '', self.current[2], self._get_prefix() - else: - raise StopIteration - - def _get_prefix(self): - """ - We're using the current prefix for the endmarker to not loose any - information. However we care about "lost" lines. The prefix of the - current line (indent) will always be included in the current line. - """ - cur = self.current - while cur[0] == DEDENT: - cur = next(self._gen) - prefix = cur[3] - - # \Z for the end of the string. $ is bugged, because it has the - # same behavior with or without re.MULTILINE. - return re.sub(r'[^\n]+\Z', '', prefix) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar2.7.txt b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar2.7.txt deleted file mode 100644 index 515dea6..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar2.7.txt +++ /dev/null @@ -1,152 +0,0 @@ -# Grammar for 2to3. This grammar supports Python 2.x and 3.x. - -# Note: Changing the grammar specified in this file will most likely -# require corresponding changes in the parser module -# (../Modules/parsermodule.c). If you can't make the changes to -# that module yourself, please co-ordinate the required changes -# with someone who can; ask around on python-dev for help. Fred -# Drake will probably be listening there. - -# NOTE WELL: You should also follow all the steps listed in PEP 306, -# "How to Change Python's Grammar" - - -# Start symbols for the grammar: -# file_input is a module or sequence of commands read from an input file; -# single_input is a single interactive statement; -# eval_input is the input for the eval() and input() functions. -# NB: compound_stmt in single_input is followed by extra NEWLINE! -file_input: (NEWLINE | stmt)* ENDMARKER -single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE -eval_input: testlist NEWLINE* ENDMARKER - -decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE -decorators: decorator+ -decorated: decorators (classdef | funcdef) -funcdef: 'def' NAME parameters ['->' test] ':' suite -parameters: '(' [typedargslist] ')' -typedargslist: ((tfpdef ['=' test] ',')* - ('*' [tname] (',' tname ['=' test])* [',' '**' tname] | '**' tname) - | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) -tname: NAME [':' test] -tfpdef: tname | '(' tfplist ')' -tfplist: tfpdef (',' tfpdef)* [','] -varargslist: ((vfpdef ['=' test] ',')* - ('*' [vname] (',' vname ['=' test])* [',' '**' vname] | '**' vname) - | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) -vname: NAME -vfpdef: vname | '(' vfplist ')' -vfplist: vfpdef (',' vfpdef)* [','] - -stmt: simple_stmt | compound_stmt -simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE -small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | - import_stmt | global_stmt | exec_stmt | assert_stmt) -expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | - ('=' (yield_expr|testlist_star_expr))*) -testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] -augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | - '<<=' | '>>=' | '**=' | '//=') -# For normal assignments, additional restrictions enforced by the interpreter -print_stmt: 'print' ( [ test (',' test)* [','] ] | - '>>' test [ (',' test)+ [','] ] ) -del_stmt: 'del' exprlist -pass_stmt: 'pass' -flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt -break_stmt: 'break' -continue_stmt: 'continue' -return_stmt: 'return' [testlist] -yield_stmt: yield_expr -raise_stmt: 'raise' [test [',' test [',' test]]] -import_stmt: import_name | import_from -import_name: 'import' dotted_as_names -# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS -import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) - 'import' ('*' | '(' import_as_names ')' | import_as_names)) -import_as_name: NAME ['as' NAME] -dotted_as_name: dotted_name ['as' NAME] -import_as_names: import_as_name (',' import_as_name)* [','] -dotted_as_names: dotted_as_name (',' dotted_as_name)* -dotted_name: NAME ('.' NAME)* -global_stmt: 'global' NAME (',' NAME)* -exec_stmt: 'exec' expr ['in' test [',' test]] -assert_stmt: 'assert' test [',' test] - -compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated -if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] -while_stmt: 'while' test ':' suite ['else' ':' suite] -for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] -try_stmt: ('try' ':' suite - ((except_clause ':' suite)+ - ['else' ':' suite] - ['finally' ':' suite] | - 'finally' ':' suite)) -with_stmt: 'with' with_item (',' with_item)* ':' suite -with_item: test ['as' expr] -with_var: 'as' expr -# NB compile.c makes sure that the default except clause is last -except_clause: 'except' [test [(',' | 'as') test]] -# Edit by David Halter: The stmt is now optional. This reflects how Jedi allows -# classes and functions to be empty, which is beneficial for autocompletion. -suite: simple_stmt | NEWLINE INDENT stmt* DEDENT - -# Backward compatibility cruft to support: -# [ x for x in lambda: True, lambda: False if x() ] -# even while also allowing: -# lambda x: 5 if x else 2 -# (But not a mix of the two) -testlist_safe: old_test [(',' old_test)+ [',']] -old_test: or_test | old_lambdef -old_lambdef: 'lambda' [varargslist] ':' old_test - -test: or_test ['if' or_test 'else' test] | lambdef -or_test: and_test ('or' and_test)* -and_test: not_test ('and' not_test)* -not_test: 'not' not_test | comparison -comparison: expr (comp_op expr)* -comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' -star_expr: '*' expr -expr: xor_expr ('|' xor_expr)* -xor_expr: and_expr ('^' and_expr)* -and_expr: shift_expr ('&' shift_expr)* -shift_expr: arith_expr (('<<'|'>>') arith_expr)* -arith_expr: term (('+'|'-') term)* -term: factor (('*'|'/'|'%'|'//') factor)* -factor: ('+'|'-'|'~') factor | power -power: atom trailer* ['**' factor] -atom: ('(' [yield_expr|testlist_comp] ')' | - '[' [testlist_comp] ']' | - '{' [dictorsetmaker] '}' | - '`' testlist1 '`' | - NAME | NUMBER | STRING+ | '.' '.' '.') -# Modification by David Halter, remove `testlist_gexp` and `listmaker` -testlist_comp: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] ) -lambdef: 'lambda' [varargslist] ':' test -trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME -subscriptlist: subscript (',' subscript)* [','] -subscript: test | [test] ':' [test] [sliceop] -sliceop: ':' [test] -exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] -testlist: test (',' test)* [','] -# Modification by David Halter, dictsetmaker -> dictorsetmaker (so that it's -# the same as in the 3.4 grammar). -dictorsetmaker: ( (test ':' test (comp_for | (',' test ':' test)* [','])) | - (test (comp_for | (',' test)* [','])) ) - -classdef: 'class' NAME ['(' [arglist] ')'] ':' suite - -arglist: (argument ',')* (argument [','] - |'*' test (',' argument)* [',' '**' test] - |'**' test) -argument: test [comp_for] | test '=' test # Really [keyword '='] test - -comp_iter: comp_for | comp_if -comp_for: 'for' exprlist 'in' testlist_safe [comp_iter] -comp_if: 'if' old_test [comp_iter] - -testlist1: test (',' test)* - -# not used in grammar, but may appear in "node" passed from Parser to Compiler -encoding_decl: NAME - -yield_expr: 'yield' [testlist] diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar3.4.txt b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar3.4.txt deleted file mode 100644 index d4a32b8..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar3.4.txt +++ /dev/null @@ -1,135 +0,0 @@ -# Grammar for Python - -# Note: Changing the grammar specified in this file will most likely -# require corresponding changes in the parser module -# (../Modules/parsermodule.c). If you can't make the changes to -# that module yourself, please co-ordinate the required changes -# with someone who can; ask around on python-dev for help. Fred -# Drake will probably be listening there. - -# NOTE WELL: You should also follow all the steps listed in PEP 306, -# "How to Change Python's Grammar" - -# Start symbols for the grammar: -# single_input is a single interactive statement; -# file_input is a module or sequence of commands read from an input file; -# eval_input is the input for the eval() functions. -# NB: compound_stmt in single_input is followed by extra NEWLINE! -file_input: (NEWLINE | stmt)* ENDMARKER -single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE -eval_input: testlist NEWLINE* ENDMARKER - -decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE -decorators: decorator+ -decorated: decorators (classdef | funcdef) -funcdef: 'def' NAME parameters ['->' test] ':' suite -parameters: '(' [typedargslist] ')' -typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' - ['*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef]] - | '*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef) -tfpdef: NAME [':' test] -varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' - ['*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef]] - | '*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) -vfpdef: NAME - -stmt: simple_stmt | compound_stmt -simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE -small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | - import_stmt | global_stmt | nonlocal_stmt | assert_stmt) -expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | - ('=' (yield_expr|testlist_star_expr))*) -testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] -augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | - '<<=' | '>>=' | '**=' | '//=') -# For normal assignments, additional restrictions enforced by the interpreter -del_stmt: 'del' exprlist -pass_stmt: 'pass' -flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt -break_stmt: 'break' -continue_stmt: 'continue' -return_stmt: 'return' [testlist] -yield_stmt: yield_expr -raise_stmt: 'raise' [test ['from' test]] -import_stmt: import_name | import_from -import_name: 'import' dotted_as_names -# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS -import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) - 'import' ('*' | '(' import_as_names ')' | import_as_names)) -import_as_name: NAME ['as' NAME] -dotted_as_name: dotted_name ['as' NAME] -import_as_names: import_as_name (',' import_as_name)* [','] -dotted_as_names: dotted_as_name (',' dotted_as_name)* -dotted_name: NAME ('.' NAME)* -global_stmt: 'global' NAME (',' NAME)* -nonlocal_stmt: 'nonlocal' NAME (',' NAME)* -assert_stmt: 'assert' test [',' test] - -compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated -if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] -while_stmt: 'while' test ':' suite ['else' ':' suite] -for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] -try_stmt: ('try' ':' suite - ((except_clause ':' suite)+ - ['else' ':' suite] - ['finally' ':' suite] | - 'finally' ':' suite)) -with_stmt: 'with' with_item (',' with_item)* ':' suite -with_item: test ['as' expr] -# NB compile.c makes sure that the default except clause is last -except_clause: 'except' [test ['as' NAME]] -# Edit by David Halter: The stmt is now optional. This reflects how Jedi allows -# classes and functions to be empty, which is beneficial for autocompletion. -suite: simple_stmt | NEWLINE INDENT stmt* DEDENT - -test: or_test ['if' or_test 'else' test] | lambdef -test_nocond: or_test | lambdef_nocond -lambdef: 'lambda' [varargslist] ':' test -lambdef_nocond: 'lambda' [varargslist] ':' test_nocond -or_test: and_test ('or' and_test)* -and_test: not_test ('and' not_test)* -not_test: 'not' not_test | comparison -comparison: expr (comp_op expr)* -# <> isn't actually a valid comparison operator in Python. It's here for the -# sake of a __future__ import described in PEP 401 -comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' -star_expr: '*' expr -expr: xor_expr ('|' xor_expr)* -xor_expr: and_expr ('^' and_expr)* -and_expr: shift_expr ('&' shift_expr)* -shift_expr: arith_expr (('<<'|'>>') arith_expr)* -arith_expr: term (('+'|'-') term)* -term: factor (('*'|'/'|'%'|'//') factor)* -factor: ('+'|'-'|'~') factor | power -power: atom trailer* ['**' factor] -atom: ('(' [yield_expr|testlist_comp] ')' | - '[' [testlist_comp] ']' | - '{' [dictorsetmaker] '}' | - NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False') -testlist_comp: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] ) -trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME -subscriptlist: subscript (',' subscript)* [','] -subscript: test | [test] ':' [test] [sliceop] -sliceop: ':' [test] -exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] -testlist: test (',' test)* [','] -dictorsetmaker: ( (test ':' test (comp_for | (',' test ':' test)* [','])) | - (test (comp_for | (',' test)* [','])) ) - -classdef: 'class' NAME ['(' [arglist] ')'] ':' suite - -arglist: (argument ',')* (argument [','] - |'*' test (',' argument)* [',' '**' test] - |'**' test) -# The reason that keywords are test nodes instead of NAME is that using NAME -# results in an ambiguity. ast.c makes sure it's a NAME. -argument: test [comp_for] | test '=' test # Really [keyword '='] test -comp_iter: comp_for | comp_if -comp_for: 'for' exprlist 'in' or_test [comp_iter] -comp_if: 'if' test_nocond [comp_iter] - -# not used in grammar, but may appear in "node" passed from Parser to Compiler -encoding_decl: NAME - -yield_expr: 'yield' [yield_arg] -yield_arg: 'from' test | testlist diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar3.5.txt b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar3.5.txt deleted file mode 100644 index 96a7271..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/grammar3.5.txt +++ /dev/null @@ -1,154 +0,0 @@ -# Grammar for Python - -# Note: Changing the grammar specified in this file will most likely -# require corresponding changes in the parser module -# (../Modules/parsermodule.c). If you can't make the changes to -# that module yourself, please co-ordinate the required changes -# with someone who can; ask around on python-dev for help. Fred -# Drake will probably be listening there. - -# NOTE WELL: You should also follow all the steps listed at -# https://docs.python.org/devguide/grammar.html - -# Start symbols for the grammar: -# single_input is a single interactive statement; -# file_input is a module or sequence of commands read from an input file; -# eval_input is the input for the eval() functions. -# NB: compound_stmt in single_input is followed by extra NEWLINE! -file_input: (NEWLINE | stmt)* ENDMARKER -single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE -eval_input: testlist NEWLINE* ENDMARKER - -decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE -decorators: decorator+ -decorated: decorators (classdef | funcdef | async_funcdef) - -# NOTE: Reinoud Elhorst, using ASYNC/AWAIT keywords instead of tokens -# skipping python3.5 compatibility, in favour of 3.7 solution -async_funcdef: 'async' funcdef -funcdef: 'def' NAME parameters ['->' test] ':' suite - -parameters: '(' [typedargslist] ')' -typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' - ['*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef]] - | '*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef) -tfpdef: NAME [':' test] -varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' - ['*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef]] - | '*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) -vfpdef: NAME - -stmt: simple_stmt | compound_stmt -simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE -small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | - import_stmt | global_stmt | nonlocal_stmt | assert_stmt) -expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | - ('=' (yield_expr|testlist_star_expr))*) -testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] -augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | - '<<=' | '>>=' | '**=' | '//=') -# For normal assignments, additional restrictions enforced by the interpreter -del_stmt: 'del' exprlist -pass_stmt: 'pass' -flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt -break_stmt: 'break' -continue_stmt: 'continue' -return_stmt: 'return' [testlist] -yield_stmt: yield_expr -raise_stmt: 'raise' [test ['from' test]] -import_stmt: import_name | import_from -import_name: 'import' dotted_as_names -# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS -import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) - 'import' ('*' | '(' import_as_names ')' | import_as_names)) -import_as_name: NAME ['as' NAME] -dotted_as_name: dotted_name ['as' NAME] -import_as_names: import_as_name (',' import_as_name)* [','] -dotted_as_names: dotted_as_name (',' dotted_as_name)* -dotted_name: NAME ('.' NAME)* -global_stmt: 'global' NAME (',' NAME)* -nonlocal_stmt: 'nonlocal' NAME (',' NAME)* -assert_stmt: 'assert' test [',' test] - -compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt -async_stmt: 'async' (funcdef | with_stmt | for_stmt) -if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] -while_stmt: 'while' test ':' suite ['else' ':' suite] -for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] -try_stmt: ('try' ':' suite - ((except_clause ':' suite)+ - ['else' ':' suite] - ['finally' ':' suite] | - 'finally' ':' suite)) -with_stmt: 'with' with_item (',' with_item)* ':' suite -with_item: test ['as' expr] -# NB compile.c makes sure that the default except clause is last -except_clause: 'except' [test ['as' NAME]] -# Edit by David Halter: The stmt is now optional. This reflects how Jedi allows -# classes and functions to be empty, which is beneficial for autocompletion. -suite: simple_stmt | NEWLINE INDENT stmt* DEDENT - -test: or_test ['if' or_test 'else' test] | lambdef -test_nocond: or_test | lambdef_nocond -lambdef: 'lambda' [varargslist] ':' test -lambdef_nocond: 'lambda' [varargslist] ':' test_nocond -or_test: and_test ('or' and_test)* -and_test: not_test ('and' not_test)* -not_test: 'not' not_test | comparison -comparison: expr (comp_op expr)* -# <> isn't actually a valid comparison operator in Python. It's here for the -# sake of a __future__ import described in PEP 401 (which really works :-) -comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' -star_expr: '*' expr -expr: xor_expr ('|' xor_expr)* -xor_expr: and_expr ('^' and_expr)* -and_expr: shift_expr ('&' shift_expr)* -shift_expr: arith_expr (('<<'|'>>') arith_expr)* -arith_expr: term (('+'|'-') term)* -term: factor (('*'|'@'|'/'|'%'|'//') factor)* -factor: ('+'|'-'|'~') factor | power -power: atom_expr ['**' factor] -atom_expr: ['await'] atom trailer* -atom: ('(' [yield_expr|testlist_comp] ')' | - '[' [testlist_comp] ']' | - '{' [dictorsetmaker] '}' | - NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False') -testlist_comp: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] ) -trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME -subscriptlist: subscript (',' subscript)* [','] -subscript: test | [test] ':' [test] [sliceop] -sliceop: ':' [test] -exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] -testlist: test (',' test)* [','] -dictorsetmaker: ( ((test ':' test | '**' expr) - (comp_for | (',' (test ':' test | '**' expr))* [','])) | - ((test | star_expr) - (comp_for | (',' (test | star_expr))* [','])) ) - -classdef: 'class' NAME ['(' [arglist] ')'] ':' suite - -arglist: argument (',' argument)* [','] - -# The reason that keywords are test nodes instead of NAME is that using NAME -# results in an ambiguity. ast.c makes sure it's a NAME. -# "test '=' test" is really "keyword '=' test", but we have no such token. -# These need to be in a single rule to avoid grammar that is ambiguous -# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, -# we explicitly match '*' here, too, to give it proper precedence. -# Illegal combinations and orderings are blocked in ast.c: -# multiple (test comp_for) arguements are blocked; keyword unpackings -# that precede iterable unpackings are blocked; etc. -argument: ( test [comp_for] | - test '=' test | - '**' test | - '*' test ) - -comp_iter: comp_for | comp_if -comp_for: 'for' exprlist 'in' or_test [comp_iter] -comp_if: 'if' test_nocond [comp_iter] - -# not used in grammar, but may appear in "node" passed from Parser to Compiler -encoding_decl: NAME - -yield_expr: 'yield' [yield_arg] -yield_arg: 'from' test | testlist diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__init__.py deleted file mode 100644 index 1ddae5f..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -# Modifications: -# Copyright 2006 Google, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. -# Copyright 2014 David Halter. Integration into Jedi. -# Modifications are dual-licensed: MIT and PSF. diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/__init__.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/__init__.cpython-35.pyc deleted file mode 100644 index c6fa84fac27e9342021bbf4d4719d6025d46104a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmWgV<>k_zol$=!ktkjfDT@W9{fDi?VMa8K_`UUB!c}Dv2@tJvT diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 8f1b48285080d5734a57fe96d4b7447d873260d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmXr!<>k_zol$=!ktkjfDT@W9{fDi?VMa8K_`UUB!c}Dv2@tJv9oQZaLNYU0Et) zwUOv+qpHHMX*48MW(zD^sWDubY1lAVWtrwvS(Hu~9u>4&YGkhFa3;;^=b$Rib?%*i zz~;DRA&!ak5}F(^aJn!REtPF3RgBbNg3+;x&)r)xE)p%je6laci;8u6({rs82dx66 zD%%hTfUgieaU4_Id|K#yipPG1MkBHaE7}&t*ToRAMPN@m6x*cB{jNxQBI$D{0f3NO8b^%oX*%jgmuw|GDIR?|hm;6E-n-;l@Gi5CdmH2#_#~K)> zRjM+elMX;DDIf#h4XAfqtG^1h`-=3GoXMjI3t1GjdYpi6r`Z8rjg}M;>K`N=Bia zYw$clRw+*ok31)cl4Tm7gVmEX)BAEcOXHbLEw4CVpg&QzLRM5W#e|jxSZ(A|tt=dv zAQc$P*G4yJvQ}0@nxRrIO}6)ab{|z%;O$*-EKxB$ zK%rmCWzK6yOOxi5NbE5Mij}O3$`N*>)`m-Q3qjE=yi(6L#`vtgEF)kUk=2ZP#*i|Gpfhd7L32 z7rG&w({<$CyXkl10YS}O<$tw!YHjkL?#|;amw{V`_LdKD`blQ@Uj^t z4U+58=bu?}jmkA^zyR@3NiVT|X{T}Dy~01PyhQsB)KcD&((O7R<6au2`|>PAZNa|a zEJ?jKHP#txIm5sYXaOnVou`OrJ2~O7Bt^gpfF$}kT3;s`EY{y#HOOUX81Y_AI~2Wb zGmr=Mi%Q9a)9WDIZp!CrPNm6#O(9vQlgoc(WvOG-YJvygZ`VTBBERNx^by125Fr3$ zii|Cm`BjfyMkOdgYiHh&QJitS503y6GC4K2`T>6^AZv0oyvSk2IzeEncbA~s?vEN5 z7bu#<1zwCC0TP<&#~VCFNL8qJ`F0IsjWXlvdb5uiIwp;7;7dhhyN>0oK(1VdFA+p-g zb6n)E3crq{@42@tlLs5m}FJlKyn+5*crGr|E&@q6H2ZmR8e zC4^mb2F024+>@~~Dz`X@6gf6u%Ki|^M(b?X0yZ^=7!b%*YnK5$8P~w(c7Gpr)HNsU zfb_+!@!zSqSyTNyUUitEwo>}JczYe5hTe*sI(WXpg?5n}8e$yb`9t4yVtk0levKv- z;(H;Ybte#0H_~dR_+~H-Sgg|wcAHMG>EP(tW*M9t1>GBt4J}r8|MbO^r{BC1_z|{v z$h0vY?$&z_D8J9vdk$5<{nR~|x^;(YN8NLP)H@BHbzyc~ z(_a*Q0hJaPEFpqj|2OpCm$x7L%T6O46Wa74r*Gk5RX&wwNj@O%#oo&ndteDyWjldy9cKEip6N!Sz{f3%{oZyp2>>eh1nidH`kJ9P(_ zoV@P2gCa165^{(tQWS-4^A_al9XjUG#!?3p2F^9NF=y_eA->oS8qsvP5bMq5)uDE$;!%cV>h!<_~41U5t=k{4geBY*tfG?lz%MbsI6XiC4ZytT&u^AtS zUGozxYkrER?$CMEyi48QqQqrYhaL9S{ETGYqlqB7?(5Gn{4E~aLqopa+3=P$uG5Kv z+Q-8|eU1)!A;e1|UIgO#J-S&v`u5k}X+#@QtvJHyAnb@UL~+>;zI#VJqjzybLn8IX z-&*25$VY$!qqweJ8SV0DkN6XDdlK$mzQ3+z4~ufO3E9DV#<$A-Bv9H3Mphm1cQN&l9D60F|B~?|KxF?FCiM^ zvBWmf83yfO5WElM?*zjQ^l5=L`b6$Fo`-nsztH%9X$Udr00c-Vqz$o&um_OLIUeq8 z4m%l=?rsh{85-_w4m%kd?r#n|85-Wn;m#gp&huRT%Y{@}6I~7LU5;u4E+j5AfwuzgLXUaI@!$4K=Kl Ubk#ebIMe<}7I0bXwTJEh1JssI20 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/grammar.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/grammar.cpython-36.pyc deleted file mode 100644 index 2c911f12627a0f2429839aaa2d69ba10d4fff051..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4778 zcmaJ_U31&U6$L<$glNfiJ89aaFWZl)$wZc1weED{OeYz;@k^t)v1gKKCc{}`mn0+* zV0J;#)W}atr;nZKzvv(6kHKr7{1^JvbMG!_T4GEM7QpV}?mg$8d$G{(_x5@p{_E3k zp8X^U{u^xkVqAZM!wNJiI0;m!qC7kap9HF<;_m|$>*%U=(o)g0V9=KT2!r7HG_zt> zszt7a(&MbqR#a15%SsAcnMGPH4Eh#UD^Zog=s9k6Q3)v~M$Tr^9Q1n6r|1*X;1Ht> zVFVLe2mtE9kaYm1nx};2*L(Zdpvn zKz0F3ju?P0O+`!P8%8BF)f=OCB-1nZlt@dZ#TQTa#b{BnP49Z4wQ|%-P%86{=^*eG zA{HE{)Hc5e7oXs;e?p^!lMoS&R7lZNt?z@ASjDQ1b6a&(7w3*j)DF&F)l;`{PSh@< zyjORhxG>58>;%D6Fvw&QKTMg0$HloeHY*E}=F(cYBk=p8NHv(ss!ZnKLhS<$w8B$_ zUCifs=C$H=(AXQ7hUq0E1fG`C#RSq4*=(Nc8Po#}Aj(Y5!F+Wf1Qc{_GCLvDR9oxU z$qHLZ^6FfgjKXb&%8X8{ys_Y%V-ctl!$n!KnYk&?GsI;LM^*&49CL&m4-bXa-~o}b zixC@w0sSJg2xG}s6sZUl^sQ!1Gjl=~N{~psSnR;_M~L!Ls{TOCG}Nq+JJL(QGtX%t z#XL*Tpxtqn>wU4DX6aO9mRFoDa6Oi`g7&MaWZ8-m+BIS+R~7)q5Il4F+UbT(w#sJ6 zGE9o4$*KyTg8CGyrNF4gYz`0ma!hNGzpM=S?xV^EyuS;MCF+7FXyBJ}`SBX)+++o% z3nQjLv5|G@*g`%iMzvApqS_avAEif&2_!SwAahIjx#Cznk>};oe&mE}SF=%>9~Fz) z2$1gGgC8nOt94m$k;|F=qX&N!@O7F^5D=tCiFIrR zrx%%>ZnuKa&3yIa;^VD0VJAEzT`e_&bf1*9-OAB}2cn-9X^w!L>qcMaK_V zfhd8_OT??4KsYYR5O@M1O20ts>qNuF`pi{>Aj3kR-?;Q1qNi;R@t}TDDH(Hm9SpX+ z@>y0;X>w#!NY?4(@*i0_*C}c>(F5|gTOn_eUo+9a&$Kv3hyalxW6NdnCSsRS3MFU_ z<}De;8OLwiK1f0)XU0}PfQJII7DuCt0$!{W1g?6xMBR2ga#Wt9Xp$CqF#-Z6G|P`) z;}juTq23kSEsQkEjH~O-d(6;gsDFcBDk9r$ET<)M zPuwO5+c8`_AZL2DERCY#_#E+I9B=gno^NJ^BbMU#&^_E#+wDe(yJn|}o#mMqV`XGv zu@NZ?ynHG92S_$rXS)@ssoBIpK&Dzl2Jz%vLz{d1`>3O?xyg=5U)&n}&cw}{>c{b@ z;|#Tx($B@)+wd~OU{j~!2Aen{qND?w4CX~^Xv?}`@@6t zY<4(W6e`z;r&?wA=$d&nMUMw@9pfvds5@>C2r6NOa8R)s4hJoB8}sUf zc5w90sKYVy<(fMfGw-7L8i%FNzaZKTFLoP*WNeL&hVcd9(A~$y8r>a_F1iX|wty>g zxCrfOeA&7RL-YY->*B+|VuQF1<>X^2d=4W)-SPyo|1*)7Di$vHb4#S2Q(cY6oUb-1 zIarUFHheJTwn?bzQ9}YVyJ(IFowrXIbnBhrkiSHR!@7%?nye~QcPIWLPO-9~kQzd5 z_RutfX%%`|@34sIq3fLf5>rzgmJ}4kNf?Dm_8@7@u7g;aOnOYf$QDj@H_ky z!H;xNFUoW{G(RQ}s2~{18be_=zomw1>_)?dg91v)Xi1I9AL1yvm9&#ivS(-nsYxZ! gWp1Y&o#H#22R6*GRkBqlA3N9nOdfD0id#wR|Gh96h5!Hn diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/parse.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/parse.cpython-35.pyc deleted file mode 100644 index 7dadbf64b59c44e235e1f9b2da3a3765f153fce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6211 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 U*KAonAg0-ZJa^SyUk|SQA2z-Yod5s; diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/pgen.cpython-35.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/pgen.cpython-35.pyc deleted file mode 100644 index b6d18a3adff01eca403e4b46157159426353e6dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10903 zcmb7K?Qa~%d7ru4+k4^hRU#$IihYtTStrYs?W8UoGY(ZzmR(zC)s(}SHhVd7m*i2$ zJKpS4J{>3&2puOa8V6{Cekh85Xo~_x`yoZz4@H0i`IrJl(H9ix=1YNmsf(b0fchc* z{hry~JD#MZCAq_y*_qjy=lMOayC=rSOV9n@mG?h=S*f3@p&tkJC0xNbPmFQdGyYGu@JR;^`i+mW`T)*Pj;dpYH~>SIiEm7i0G80M<$US4?x=`AF^dGr>Q zSCZaR(pym8nDWZX8&@CWi5M`UR;rVqY3!w{qx_a>?Cv(qXK1pW3p;oGHYx?FH2eMr z?<7B2RF-fB|Bb>|JOK{0hBKfdC*eb~%5xOFoW*Vs zbqttL-lX(nvs22OmO2K{DDRlmaiHVMo0U2y&MEJN)W?-~QhD=I$0Dbc_k`3Zm3LZs zpOZQkd{TK&Nqt(jT~Xc{p$*nQtGuV>)-mNhqr7uc$FnqOc0QWC*)V}`uKR7@G{TOl zZIB-Pad5GI6<6>FC_JU^XVn2nqST#&GS8||sROMJwYr~S{|+h`pw)p=b?IRxt3pTZ z+$%{rrVc=JJgKP6A?qC4!~-#+EVIX@3qw|_x>lWt zoX(!#j&d8VPT)s{&1TDQH+KEV4MO8Lc1;dPh$gq}LH)X5A&3gN=e3$`KPtwzIwmS? z`Jvp8a(g6C7D7V=(K^T=Ao+q`y4}+=`If38WG(|kilu)dd zWjl4dhd)4gv(1VvWC!N*9=7+A zlnZN0+d@;j?b`XpL;wE8DUc)XBI-k`+rXAD;!m+<;i z^n$bCCP;o?t5DdolT|wodj{-=wb*@6t@i%Y&i)TU7dD0gSv7w@r?#*^SM@$s2RW?% ziMpScu7c`aQwMpqQ&u|ylI8U;5M1|*>OR0#P&*T{-$}tLpoatI)XtPTkR5GiLOr2KBZ4b*ttgr_}_!rqCBTcl>(+FxW9+ z(ZgObon=?|kPjK3PFBDO+#T@UIWec%xe-b^x0ty9?6YNv^m>!pF8vn;347^V3 zOAvt5dK&jH;%@)+s3;6CnyNmEf`jWSu3#Aj*@rR%)MXWv5HQ=jNVYAnpH%=N?*khG z53m=YBvgQE7Z5%LzB*uHre-K_)r^_JKl2Rhc_EOw$c{@W)(WQak&w_1dI5c4o{(jP zAm#$@{VJ}Yj6%g{p2kU~f5!HE(Ct z9aouqyv?Q~%{SsYI_FpHB2@Sm;pp=e5iiQYLLQXKh@`J{|5=Bw3Ske#uD}%lZNmbI z2Q2|w27jhPh=ff4x)2qEp&hV|;76mk_{g$s=_m4d7z*demSDO^_abAcbynK{AiL1m zu$(J6qlX_Ij>p>|!(sO^E~d`M8f`v%LY}>^tQ`~Ii|JcA)ixPnC#Dl@64 zGLtCBGM|GqC+*YF6&Qi`ytK#DdykPAIs68NmOs?MysqL3Zla+3BZ6;X z0DQw*TGSsxAgLj=)esOC{9!C`l~?Ax)B%~;(wtYT!YjBju9?TmqRkD>x_N>H6-HFt zXtXv&h^tvktmk--YGafz$I#ct70?G!q9A$Lht=P(_p(8=!XN4rdN6WO9-li$3BbeA z!%pp~(O#s~vOCd=)QvgS`y1*;PzCA&lvrN>Q!&3T4RmY_;n+cs{C(2Y()|5oWfx0A z2f&T6uIBgYL&9;uBj-S7=z;dBgod$=wHi2{2!|6k*IH!!gFuNUUSeDlt7UYc(G-;( z-(2PHi>lY)gk<6z_ z&PhkJT?x1SiU6cSZ?w|c zFS}N+i~^Pqy^AY&2?cH0IBdEr7JL%G9f#x|%di)}nUX$^JCxzFb~C5+jPB2mTD(+N zQt_ox&*I{vf`3IpZcD5OQ1^ZqgFJ*5&!{_DWqz!Bm7z`;zKjBKtP~$&lig>)N5C$p zI7wj0@F(p-2nb^e_m^D~>U;>-z)AcCI}HLtpBW(i%m4 zV1xbg9x0|J5IY-N}0)}Jr=w0l+Ac9GU{hZJiv;y5yX?jICWZ6$Ty%JmG#AkQR zD|l#BsJ(t=MZ%R=(Uh2_>If;!3OiB-Sk>khJ46~p5ZL@%TmeOoCb_H~fPN1D` zK?Ve_mSivHD_F*G8&P37-c{tbk*DxO8%&i@^Zd=mek&9$Z=U907b_vcOEh~``Vh!9 zgKhI3mwc85xht!z6}Y4vIX#^DDko(SbnRRKDD(2lIv`k$c=`sHWxOsv1%$gj zPnX0#i?VK0T(QRi&2RmdAIhWg+@iPwy8D52KnK7PDpF(9oniNC_vsjN`C5N+d4G40 z<{NOM7tqgFDgwKH{({8Z)kyV=75qH^TIHPAFS80$FRiMJtd*fhUi1;!Gp%Q%YX}9H zNXE8D#1jbHqj_T1vFTA>nBPRFsk5L+ zh)h{&BsUUsI`FR^LHI{g9me>lSRwZC$3gR_kmz^}oiR97r8J?bF#QP{kR*CQaK1sl zKcb|tc}V(OYq-3=KcIJSQy2lmnN=s48We*GIb2?UOI#aBAmdkH9P;6crFuiua87-x z_atk}>o8^z00g^Wn+&8JcMYg5d%4+t1H?azs~9uDsoi?rW=|X;W|T9H_LgrW*wTI* z?ujU=YQchOKLZ-i;Q#a^ ze0p&Q>75=SZWc=kaSbXD6SudL&_z;L!Iz~84^dPCOUcMk$-@O3=8dQqssj11NcPS*nxrT1i6k%cDGEUT57$?n+}U56p_1f>)khN*A3}6Ou9(l zmULjGy-~t#Vdxb6Uh6`Da7=KJSn!=63V`h6!K;*5e0EB#AE9AS3z4HY`Cd#W08a2C z(EAX&Acbi1A_odW%&r7IpbybUH_Kv{i;5R}WUinXRKy!JCO|$J0y!r@hw!nM)}l}} z2iutI2g8H$94(QKAk(c0xgY5D2l}~4Ujz?2IGEW(0aYLaOIWdSSfbIMd-2mBDr^o~eXyC&TugpD{z>p%0T?xN5dZo<6S)~CcQm&9A+|yND z0Ug96T!H2skO#H@3s;610oMmsF)w9-WFyS~P%^9F2!bVf?*>eRs0=qz!9yfC5fH?D zIl^4Lsf2pKFo=a6%vZd$l1@z|;DN68pR=K*?^P}=EG$$j$Ye0t$Nv`hmnvJG5I)Og zto+7}v$z1v2gwDohqy#+4vLR6fVZ zIH;k=F^vdGeHAh-wV_`_!%_lNgbEKXl8~SXUtK0z89mhQwkb(7D>Cs!5E8V`SRnq?lA3kHj&li+V@baZz{6zYdCZ+N*2M+~Ka z3$KZRO~DodF%lg@{UZLEaTXMtD1Y^x8#k`iZbg~e+XE^@x!e9$vmJvX%7*)Uk-KO7 z&1P>@tCCdLNd-Da3dZOuz9@R=ooVt)IQ66WbQ115uHbtpz+$tk?jfNs@-hcHthS$5 zT5AvjLWOR`DTq)&4F>I^Mxi`U;KJDV+gg2GTSRD0q#dE2kqHsH(K=Oxbk=<;M$S&B*_JGGlttn_$|8<4biC!QbyQ4VhzI5_ zI-{|bd+o5%liXmeAu%u5itwIr3psqgJ0B$}Ay^|xr%++gpVbq%F6s&Z)_-CYT*Fd4 z%U9ccYf!I8rFwn0;~@cxdbwWj?l)TYj$w+zFjXio!Q@q%ImRXdDLE&@NYvbBvB82a zowWkAqJ~=BP$O8QAT~k-XCNX{lc1K8&Jn>gD9U3+24w3_dpfA$FH=1x(rd@Qs8$=|?6Xqetu=!cl%?f)7qm!7C}e51_hB z1rJ0Wc#{+YoCe%Sd?DP%3j}Sm6586b!Exjyq#GWsf($B3_otJ5M*2y>;QJ45nb%cZ z^135dY6TUX5eZJSY-pybH=rB767q2`$DPEc4UWaizy<-@)?Uc#4(3%12H9MORqkil zd>Tcf)J5iBVDHF*Xa?4KAW~c*w=k>wlj))2R7cKyol_54fYQpshf{}^8?c)Mf1hhQ zsNj=|tYrZj=?}@bge!O*#V=+jSu0GnUp(=HAqcH}=Y)@*@Z}Ic6)J+$C9{gfj+hv3 zK*&#j#)e}f8838#-qaf6HG#CDWRO$xa~2q7JKsupA}WMBR(JxZfEda%>&J?`c9D;2 ziZ<=#cuk~*r+_$3Jutvm#$kO($ur z6pTlRkxhs}QI3y=Ll32Xc^aS%USpm{_y{OPDZ=@;ov{uTCA{d-cL5f2Hm^3oqQH<$ zNsjdkVc6oKtPNp?n?OttWPz9-ho&>-?U&H#y(~M&=EdVml9V5@diZ{{e=ObfAgVrM^U{rf8?zq? zO3MV$n5>YH77Sk*Hf#oHa5rOoLyL7}=(3!7D6?dq^CJ4xx9o zF7vwUAOv52WNWYAf`=d~g?zJ+J(TuV%=ZQ7Tb@1NIJeEq4Td(`wdi^63 zY6g=P-eAmVC;KE4xTlf8EDUqnj;&!AkJULs_21<#VCuFT!FIhq#F&8|5_Q0bmM|82 zs8Dvxx$=aliT+sp_0K}s8$@_iOT0v9P};~Ic=O_4kbHtJ0eePll-N*!r--qU-W%Em zXGc@%*K+Y^H{arR2mpR|W4?p`HRvtoz2uvuXpEn&El8AOKNGND-MO9HJABbZC2iG) kaEJ4U9+{pzDlA&N{~Grt(e4zI$5Yw4pR2d$N^|G_7yKv-*8l(j diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/pgen.cpython-36.pyc b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/__pycache__/pgen.cpython-36.pyc deleted file mode 100644 index d0aa20f937d7f4913bf3389d19007252de3dcfaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9661 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 diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/grammar.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/grammar.py deleted file mode 100644 index 414c0db..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/grammar.py +++ /dev/null @@ -1,125 +0,0 @@ -# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -# Modifications: -# Copyright 2014 David Halter. Integration into Jedi. -# Modifications are dual-licensed: MIT and PSF. - -"""This module defines the data structures used to represent a grammar. - -These are a bit arcane because they are derived from the data -structures used by Python's 'pgen' parser generator. - -There's also a table here mapping operators to their names in the -token module; the Python tokenize module reports all operators as the -fallback token code OP, but the parser needs the actual token code. - -""" - -# Python imports -import pickle - - -class Grammar(object): - """Pgen parsing tables conversion class. - - Once initialized, this class supplies the grammar tables for the - parsing engine implemented by parse.py. The parsing engine - accesses the instance variables directly. The class here does not - provide initialization of the tables; several subclasses exist to - do this (see the conv and pgen modules). - - The load() method reads the tables from a pickle file, which is - much faster than the other ways offered by subclasses. The pickle - file is written by calling dump() (after loading the grammar - tables using a subclass). The report() method prints a readable - representation of the tables to stdout, for debugging. - - The instance variables are as follows: - - symbol2number -- a dict mapping symbol names to numbers. Symbol - numbers are always 256 or higher, to distinguish - them from token numbers, which are between 0 and - 255 (inclusive). - - number2symbol -- a dict mapping numbers to symbol names; - these two are each other's inverse. - - states -- a list of DFAs, where each DFA is a list of - states, each state is a list of arcs, and each - arc is a (i, j) pair where i is a label and j is - a state number. The DFA number is the index into - this list. (This name is slightly confusing.) - Final states are represented by a special arc of - the form (0, j) where j is its own state number. - - dfas -- a dict mapping symbol numbers to (DFA, first) - pairs, where DFA is an item from the states list - above, and first is a set of tokens that can - begin this grammar rule (represented by a dict - whose values are always 1). - - labels -- a list of (x, y) pairs where x is either a token - number or a symbol number, and y is either None - or a string; the strings are keywords. The label - number is the index in this list; label numbers - are used to mark state transitions (arcs) in the - DFAs. - - start -- the number of the grammar's start symbol. - - keywords -- a dict mapping keyword strings to arc labels. - - tokens -- a dict mapping token numbers to arc labels. - - """ - - def __init__(self): - self.symbol2number = {} - self.number2symbol = {} - self.states = [] - self.dfas = {} - self.labels = [(0, "EMPTY")] - self.keywords = {} - self.tokens = {} - self.symbol2label = {} - self.start = 256 - - def dump(self, filename): - """Dump the grammar tables to a pickle file.""" - with open(filename, "wb") as f: - pickle.dump(self.__dict__, f, 2) - - def load(self, filename): - """Load the grammar tables from a pickle file.""" - with open(filename, "rb") as f: - d = pickle.load(f) - self.__dict__.update(d) - - def copy(self): - """ - Copy the grammar. - """ - new = self.__class__() - for dict_attr in ("symbol2number", "number2symbol", "dfas", "keywords", - "tokens", "symbol2label"): - setattr(new, dict_attr, getattr(self, dict_attr).copy()) - new.labels = self.labels[:] - new.states = self.states[:] - new.start = self.start - return new - - def report(self): - """Dump the grammar tables to standard output, for debugging.""" - from pprint import pprint - print("s2n") - pprint(self.symbol2number) - print("n2s") - pprint(self.number2symbol) - print("states") - pprint(self.states) - print("dfas") - pprint(self.dfas) - print("labels") - pprint(self.labels) - print("start", self.start) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/parse.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/parse.py deleted file mode 100644 index 9e74838..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/parse.py +++ /dev/null @@ -1,213 +0,0 @@ -# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -# Modifications: -# Copyright 2014 David Halter. Integration into Jedi. -# Modifications are dual-licensed: MIT and PSF. - -""" -Parser engine for the grammar tables generated by pgen. - -The grammar table must be loaded first. - -See Parser/parser.c in the Python distribution for additional info on -how this parsing engine works. -""" - -# Local imports -from jedi.parser import tokenize - - -class InternalParseError(Exception): - """ - Exception to signal the parser is stuck and error recovery didn't help. - Basically this shouldn't happen. It's a sign that something is really - wrong. - """ - - def __init__(self, msg, type, value, start_pos): - Exception.__init__(self, "%s: type=%r, value=%r, start_pos=%r" % - (msg, tokenize.tok_name[type], value, start_pos)) - self.msg = msg - self.type = type - self.value = value - self.start_pos = start_pos - - -def token_to_ilabel(grammar, type_, value): - # Map from token to label - if type_ == tokenize.NAME: - # Check for reserved words (keywords) - try: - return grammar.keywords[value] - except KeyError: - pass - - try: - return grammar.tokens[type_] - except KeyError: - return None - - -class PgenParser(object): - """Parser engine. - - The proper usage sequence is: - - p = Parser(grammar, [converter]) # create instance - p.setup([start]) # prepare for parsing - : - if p.addtoken(...): # parse a token - break - root = p.rootnode # root of abstract syntax tree - - A Parser instance may be reused by calling setup() repeatedly. - - A Parser instance contains state pertaining to the current token - sequence, and should not be used concurrently by different threads - to parse separate token sequences. - - See driver.py for how to get input tokens by tokenizing a file or - string. - - Parsing is complete when addtoken() returns True; the root of the - abstract syntax tree can then be retrieved from the rootnode - instance variable. When a syntax error occurs, error_recovery() - is called. There is no error recovery; the parser cannot be used - after a syntax error was reported (but it can be reinitialized by - calling setup()). - - """ - - def __init__(self, grammar, convert_node, convert_leaf, error_recovery, start): - """Constructor. - - The grammar argument is a grammar.Grammar instance; see the - grammar module for more information. - - The parser is not ready yet for parsing; you must call the - setup() method to get it started. - - The optional convert argument is a function mapping concrete - syntax tree nodes to abstract syntax tree nodes. If not - given, no conversion is done and the syntax tree produced is - the concrete syntax tree. If given, it must be a function of - two arguments, the first being the grammar (a grammar.Grammar - instance), and the second being the concrete syntax tree node - to be converted. The syntax tree is converted from the bottom - up. - - A concrete syntax tree node is a (type, nodes) tuple, where - type is the node type (a token or symbol number) and nodes - is a list of children for symbols, and None for tokens. - - An abstract syntax tree node may be anything; this is entirely - up to the converter function. - - """ - self.grammar = grammar - self.convert_node = convert_node - self.convert_leaf = convert_leaf - - # Each stack entry is a tuple: (dfa, state, node). - # A node is a tuple: (type, children), - # where children is a list of nodes or None - newnode = (start, []) - stackentry = (self.grammar.dfas[start], 0, newnode) - self.stack = [stackentry] - self.rootnode = None - self.error_recovery = error_recovery - - def parse(self, tokenizer): - for type_, value, start_pos, prefix in tokenizer: - if self.addtoken(type_, value, start_pos, prefix): - break - else: - # We never broke out -- EOF is too soon -- Unfinished statement. - # However, the error recovery might have added the token again, if - # the stack is empty, we're fine. - if self.stack: - raise InternalParseError("incomplete input", type_, value, start_pos) - return self.rootnode - - def addtoken(self, type_, value, start_pos, prefix): - """Add a token; return True if this is the end of the program.""" - ilabel = token_to_ilabel(self.grammar, type_, value) - - # Loop until the token is shifted; may raise exceptions - while True: - dfa, state, node = self.stack[-1] - states, first = dfa - arcs = states[state] - # Look for a state with this label - for i, newstate in arcs: - t, v = self.grammar.labels[i] - if ilabel == i: - # Look it up in the list of labels - assert t < 256 - # Shift a token; we're done with it - self.shift(type_, value, newstate, prefix, start_pos) - # Pop while we are in an accept-only state - state = newstate - while states[state] == [(0, state)]: - self.pop() - if not self.stack: - # Done parsing! - return True - dfa, state, node = self.stack[-1] - states, first = dfa - # Done with this token - return False - elif t >= 256: - # See if it's a symbol and if we're in its first set - itsdfa = self.grammar.dfas[t] - itsstates, itsfirst = itsdfa - if ilabel in itsfirst: - # Push a symbol - self.push(t, itsdfa, newstate) - break # To continue the outer while loop - else: - if (0, state) in arcs: - # An accepting state, pop it and try something else - self.pop() - if not self.stack: - # Done parsing, but another token is input - raise InternalParseError("too much input", type_, value, start_pos) - else: - self.error_recovery(self.grammar, self.stack, arcs, type_, - value, start_pos, prefix, self.addtoken) - break - - def shift(self, type_, value, newstate, prefix, start_pos): - """Shift a token. (Internal)""" - dfa, state, node = self.stack[-1] - newnode = self.convert_leaf(self.grammar, type_, value, prefix, start_pos) - node[-1].append(newnode) - self.stack[-1] = (dfa, newstate, node) - - def push(self, type_, newdfa, newstate): - """Push a nonterminal. (Internal)""" - dfa, state, node = self.stack[-1] - newnode = (type_, []) - self.stack[-1] = (dfa, newstate, node) - self.stack.append((newdfa, 0, newnode)) - - def pop(self): - """Pop a nonterminal. (Internal)""" - popdfa, popstate, (type_, children) = self.stack.pop() - # If there's exactly one child, return that child instead of creating a - # new node. We still create expr_stmt and file_input though, because a - # lot of Jedi depends on its logic. - if len(children) == 1: - newnode = children[0] - else: - newnode = self.convert_node(self.grammar, type_, children) - - try: - # Equal to: - # dfa, state, node = self.stack[-1] - # symbol, children = node - self.stack[-1][2][1].append(newnode) - except IndexError: - # Stack is empty, set the rootnode. - self.rootnode = newnode diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/pgen.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/pgen.py deleted file mode 100644 index fa2742d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/pgen2/pgen.py +++ /dev/null @@ -1,394 +0,0 @@ -# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. -# Licensed to PSF under a Contributor Agreement. - -# Modifications: -# Copyright 2014 David Halter. Integration into Jedi. -# Modifications are dual-licensed: MIT and PSF. - -# Pgen imports -from . import grammar -from jedi.parser import token -from jedi.parser import tokenize - - -class ParserGenerator(object): - def __init__(self, filename, stream=None): - close_stream = None - if stream is None: - stream = open(filename) - close_stream = stream.close - self.filename = filename - self.stream = stream - self.generator = tokenize.generate_tokens(stream.readline) - self.gettoken() # Initialize lookahead - self.dfas, self.startsymbol = self.parse() - if close_stream is not None: - close_stream() - self.first = {} # map from symbol name to set of tokens - self.addfirstsets() - - def make_grammar(self): - c = grammar.Grammar() - names = list(self.dfas.keys()) - names.sort() - names.remove(self.startsymbol) - names.insert(0, self.startsymbol) - for name in names: - i = 256 + len(c.symbol2number) - c.symbol2number[name] = i - c.number2symbol[i] = name - for name in names: - dfa = self.dfas[name] - states = [] - for state in dfa: - arcs = [] - for label, next in state.arcs.items(): - arcs.append((self.make_label(c, label), dfa.index(next))) - if state.isfinal: - arcs.append((0, dfa.index(state))) - states.append(arcs) - c.states.append(states) - c.dfas[c.symbol2number[name]] = (states, self.make_first(c, name)) - c.start = c.symbol2number[self.startsymbol] - return c - - def make_first(self, c, name): - rawfirst = self.first[name] - first = {} - for label in rawfirst: - ilabel = self.make_label(c, label) - ##assert ilabel not in first # XXX failed on <> ... != - first[ilabel] = 1 - return first - - def make_label(self, c, label): - # XXX Maybe this should be a method on a subclass of converter? - ilabel = len(c.labels) - if label[0].isalpha(): - # Either a symbol name or a named token - if label in c.symbol2number: - # A symbol name (a non-terminal) - if label in c.symbol2label: - return c.symbol2label[label] - else: - c.labels.append((c.symbol2number[label], None)) - c.symbol2label[label] = ilabel - return ilabel - else: - # A named token (NAME, NUMBER, STRING) - itoken = getattr(token, label, None) - assert isinstance(itoken, int), label - assert itoken in token.tok_name, label - if itoken in c.tokens: - return c.tokens[itoken] - else: - c.labels.append((itoken, None)) - c.tokens[itoken] = ilabel - return ilabel - else: - # Either a keyword or an operator - assert label[0] in ('"', "'"), label - value = eval(label) - if value[0].isalpha(): - # A keyword - if value in c.keywords: - return c.keywords[value] - else: - c.labels.append((token.NAME, value)) - c.keywords[value] = ilabel - return ilabel - else: - # An operator (any non-numeric token) - itoken = token.opmap[value] # Fails if unknown token - if itoken in c.tokens: - return c.tokens[itoken] - else: - c.labels.append((itoken, None)) - c.tokens[itoken] = ilabel - return ilabel - - def addfirstsets(self): - names = list(self.dfas.keys()) - names.sort() - for name in names: - if name not in self.first: - self.calcfirst(name) - #print name, self.first[name].keys() - - def calcfirst(self, name): - dfa = self.dfas[name] - self.first[name] = None # dummy to detect left recursion - state = dfa[0] - totalset = {} - overlapcheck = {} - for label, next in state.arcs.items(): - if label in self.dfas: - if label in self.first: - fset = self.first[label] - if fset is None: - raise ValueError("recursion for rule %r" % name) - else: - self.calcfirst(label) - fset = self.first[label] - totalset.update(fset) - overlapcheck[label] = fset - else: - totalset[label] = 1 - overlapcheck[label] = {label: 1} - inverse = {} - for label, itsfirst in overlapcheck.items(): - for symbol in itsfirst: - if symbol in inverse: - raise ValueError("rule %s is ambiguous; %s is in the" - " first sets of %s as well as %s" % - (name, symbol, label, inverse[symbol])) - inverse[symbol] = label - self.first[name] = totalset - - def parse(self): - dfas = {} - startsymbol = None - # MSTART: (NEWLINE | RULE)* ENDMARKER - while self.type != token.ENDMARKER: - while self.type == token.NEWLINE: - self.gettoken() - # RULE: NAME ':' RHS NEWLINE - name = self.expect(token.NAME) - self.expect(token.OP, ":") - a, z = self.parse_rhs() - self.expect(token.NEWLINE) - #self.dump_nfa(name, a, z) - dfa = self.make_dfa(a, z) - #self.dump_dfa(name, dfa) - # oldlen = len(dfa) - self.simplify_dfa(dfa) - # newlen = len(dfa) - dfas[name] = dfa - #print name, oldlen, newlen - if startsymbol is None: - startsymbol = name - return dfas, startsymbol - - def make_dfa(self, start, finish): - # To turn an NFA into a DFA, we define the states of the DFA - # to correspond to *sets* of states of the NFA. Then do some - # state reduction. Let's represent sets as dicts with 1 for - # values. - assert isinstance(start, NFAState) - assert isinstance(finish, NFAState) - - def closure(state): - base = {} - addclosure(state, base) - return base - - def addclosure(state, base): - assert isinstance(state, NFAState) - if state in base: - return - base[state] = 1 - for label, next in state.arcs: - if label is None: - addclosure(next, base) - - states = [DFAState(closure(start), finish)] - for state in states: # NB states grows while we're iterating - arcs = {} - for nfastate in state.nfaset: - for label, next in nfastate.arcs: - if label is not None: - addclosure(next, arcs.setdefault(label, {})) - for label, nfaset in arcs.items(): - for st in states: - if st.nfaset == nfaset: - break - else: - st = DFAState(nfaset, finish) - states.append(st) - state.addarc(st, label) - return states # List of DFAState instances; first one is start - - def dump_nfa(self, name, start, finish): - print("Dump of NFA for", name) - todo = [start] - for i, state in enumerate(todo): - print(" State", i, state is finish and "(final)" or "") - for label, next in state.arcs: - if next in todo: - j = todo.index(next) - else: - j = len(todo) - todo.append(next) - if label is None: - print(" -> %d" % j) - else: - print(" %s -> %d" % (label, j)) - - def dump_dfa(self, name, dfa): - print("Dump of DFA for", name) - for i, state in enumerate(dfa): - print(" State", i, state.isfinal and "(final)" or "") - for label, next in state.arcs.items(): - print(" %s -> %d" % (label, dfa.index(next))) - - def simplify_dfa(self, dfa): - # This is not theoretically optimal, but works well enough. - # Algorithm: repeatedly look for two states that have the same - # set of arcs (same labels pointing to the same nodes) and - # unify them, until things stop changing. - - # dfa is a list of DFAState instances - changes = True - while changes: - changes = False - for i, state_i in enumerate(dfa): - for j in range(i + 1, len(dfa)): - state_j = dfa[j] - if state_i == state_j: - #print " unify", i, j - del dfa[j] - for state in dfa: - state.unifystate(state_j, state_i) - changes = True - break - - def parse_rhs(self): - # RHS: ALT ('|' ALT)* - a, z = self.parse_alt() - if self.value != "|": - return a, z - else: - aa = NFAState() - zz = NFAState() - aa.addarc(a) - z.addarc(zz) - while self.value == "|": - self.gettoken() - a, z = self.parse_alt() - aa.addarc(a) - z.addarc(zz) - return aa, zz - - def parse_alt(self): - # ALT: ITEM+ - a, b = self.parse_item() - while (self.value in ("(", "[") or - self.type in (token.NAME, token.STRING)): - c, d = self.parse_item() - b.addarc(c) - b = d - return a, b - - def parse_item(self): - # ITEM: '[' RHS ']' | ATOM ['+' | '*'] - if self.value == "[": - self.gettoken() - a, z = self.parse_rhs() - self.expect(token.OP, "]") - a.addarc(z) - return a, z - else: - a, z = self.parse_atom() - value = self.value - if value not in ("+", "*"): - return a, z - self.gettoken() - z.addarc(a) - if value == "+": - return a, z - else: - return a, a - - def parse_atom(self): - # ATOM: '(' RHS ')' | NAME | STRING - if self.value == "(": - self.gettoken() - a, z = self.parse_rhs() - self.expect(token.OP, ")") - return a, z - elif self.type in (token.NAME, token.STRING): - a = NFAState() - z = NFAState() - a.addarc(z, self.value) - self.gettoken() - return a, z - else: - self.raise_error("expected (...) or NAME or STRING, got %s/%s", - self.type, self.value) - - def expect(self, type, value=None): - if self.type != type or (value is not None and self.value != value): - self.raise_error("expected %s/%s, got %s/%s", - type, value, self.type, self.value) - value = self.value - self.gettoken() - return value - - def gettoken(self): - tup = next(self.generator) - while tup[0] in (token.COMMENT, token.NL): - tup = next(self.generator) - self.type, self.value, self.begin, prefix = tup - #print tokenize.tok_name[self.type], repr(self.value) - - def raise_error(self, msg, *args): - if args: - try: - msg = msg % args - except: - msg = " ".join([msg] + list(map(str, args))) - line = open(self.filename).readlines()[self.begin[0]] - raise SyntaxError(msg, (self.filename, self.begin[0], - self.begin[1], line)) - - -class NFAState(object): - def __init__(self): - self.arcs = [] # list of (label, NFAState) pairs - - def addarc(self, next, label=None): - assert label is None or isinstance(label, str) - assert isinstance(next, NFAState) - self.arcs.append((label, next)) - - -class DFAState(object): - def __init__(self, nfaset, final): - assert isinstance(nfaset, dict) - assert isinstance(next(iter(nfaset)), NFAState) - assert isinstance(final, NFAState) - self.nfaset = nfaset - self.isfinal = final in nfaset - self.arcs = {} # map from label to DFAState - - def addarc(self, next, label): - assert isinstance(label, str) - assert label not in self.arcs - assert isinstance(next, DFAState) - self.arcs[label] = next - - def unifystate(self, old, new): - for label, next in self.arcs.items(): - if next is old: - self.arcs[label] = new - - def __eq__(self, other): - # Equality test -- ignore the nfaset instance variable - assert isinstance(other, DFAState) - if self.isfinal != other.isfinal: - return False - # Can't just return self.arcs == other.arcs, because that - # would invoke this method recursively, with cycles... - if len(self.arcs) != len(other.arcs): - return False - for label, next in self.arcs.items(): - if next is not other.arcs.get(label): - return False - return True - - __hash__ = None # For Py3 compatibility. - - -def generate_grammar(filename="Grammar.txt"): - p = ParserGenerator(filename) - return p.make_grammar() diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/token.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/token.py deleted file mode 100644 index 0cb846d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/token.py +++ /dev/null @@ -1,90 +0,0 @@ -from __future__ import absolute_import - -from jedi._compatibility import is_py3, is_py35 -from token import * - - -COMMENT = N_TOKENS -tok_name[COMMENT] = 'COMMENT' -N_TOKENS += 1 - -NL = N_TOKENS -tok_name[NL] = 'NL' -N_TOKENS += 1 - -if is_py3: - BACKQUOTE = N_TOKENS - tok_name[BACKQUOTE] = 'BACKQUOTE' - N_TOKENS += 1 -else: - RARROW = N_TOKENS - tok_name[RARROW] = 'RARROW' - N_TOKENS += 1 - ELLIPSIS = N_TOKENS - tok_name[ELLIPSIS] = 'ELLIPSIS' - N_TOKENS += 1 - -if not is_py35: - ATEQUAL = N_TOKENS - tok_name[ATEQUAL] = 'ATEQUAL' - N_TOKENS += 1 - - - -# Map from operator to number (since tokenize doesn't do this) - -opmap_raw = """\ -( LPAR -) RPAR -[ LSQB -] RSQB -: COLON -, COMMA -; SEMI -+ PLUS -- MINUS -* STAR -/ SLASH -| VBAR -& AMPER -< LESS -> GREATER -= EQUAL -. DOT -% PERCENT -` BACKQUOTE -{ LBRACE -} RBRACE -@ AT -== EQEQUAL -!= NOTEQUAL -<> NOTEQUAL -<= LESSEQUAL ->= GREATEREQUAL -~ TILDE -^ CIRCUMFLEX -<< LEFTSHIFT ->> RIGHTSHIFT -** DOUBLESTAR -+= PLUSEQUAL --= MINEQUAL -*= STAREQUAL -/= SLASHEQUAL -%= PERCENTEQUAL -&= AMPEREQUAL -|= VBAREQUAL -@= ATEQUAL -^= CIRCUMFLEXEQUAL -<<= LEFTSHIFTEQUAL ->>= RIGHTSHIFTEQUAL -**= DOUBLESTAREQUAL -// DOUBLESLASH -//= DOUBLESLASHEQUAL --> RARROW -... ELLIPSIS -""" - -opmap = {} -for line in opmap_raw.splitlines(): - op, name = line.split() - opmap[op] = globals()[name] diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/tokenize.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/tokenize.py deleted file mode 100644 index 233c6d8..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/tokenize.py +++ /dev/null @@ -1,329 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This tokenizer has been copied from the ``tokenize.py`` standard library -tokenizer. The reason was simple: The standard library tokenizer fails -if the indentation is not right. The fast parser of jedi however requires -"wrong" indentation. - -Basically this is a stripped down version of the standard library module, so -you can read the documentation there. Additionally we included some speed and -memory optimizations here. -""" -from __future__ import absolute_import - -import string -import re -from collections import namedtuple -from io import StringIO - -from jedi.parser.token import (tok_name, N_TOKENS, ENDMARKER, STRING, NUMBER, opmap, - NAME, OP, ERRORTOKEN, NEWLINE, INDENT, DEDENT) -from jedi._compatibility import is_py3 - - -cookie_re = re.compile("coding[:=]\s*([-\w.]+)") - - -if is_py3: - # Python 3 has str.isidentifier() to check if a char is a valid identifier - is_identifier = str.isidentifier -else: - namechars = string.ascii_letters + '_' - is_identifier = lambda s: s in namechars - - -COMMENT = N_TOKENS -tok_name[COMMENT] = 'COMMENT' - - -def group(*choices): - return '(' + '|'.join(choices) + ')' - - -def maybe(*choices): - return group(*choices) + '?' - - -# Note: we use unicode matching for names ("\w") but ascii matching for -# number literals. -whitespace = r'[ \f\t]*' -comment = r'#[^\r\n]*' -name = r'\w+' - -hex_number = r'0[xX][0-9a-fA-F]+' -bin_number = r'0[bB][01]+' -if is_py3: - oct_number = r'0[oO][0-7]+' -else: - oct_number = '0[0-7]+' -dec_number = r'(?:0+|[1-9][0-9]*)' -int_number = group(hex_number, bin_number, oct_number, dec_number) -exponent = r'[eE][-+]?[0-9]+' -point_float = group(r'[0-9]+\.[0-9]*', r'\.[0-9]+') + maybe(exponent) -Expfloat = r'[0-9]+' + exponent -float_number = group(point_float, Expfloat) -imag_number = group(r'[0-9]+[jJ]', float_number + r'[jJ]') -number = group(imag_number, float_number, int_number) - -# Tail end of ' string. -single = r"[^'\\]*(?:\\.[^'\\]*)*'" -# Tail end of " string. -double = r'[^"\\]*(?:\\.[^"\\]*)*"' -# Tail end of ''' string. -single3 = r"[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''" -# Tail end of """ string. -double3 = r'[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""' -triple = group("[uUbB]?[rR]?'''", '[uUbB]?[rR]?"""') -# Single-line ' or " string. - -# Because of leftmost-then-longest match semantics, be sure to put the -# longest operators first (e.g., if = came before ==, == would get -# recognized as two instances of =). -operator = group(r"\*\*=?", r">>=?", r"<<=?", r"!=", - r"//=?", r"->", - r"[+\-*@/%&|^=<>]=?", - r"~") - -bracket = '[][(){}]' -special = group(r'\r?\n', r'\.\.\.', r'[:;.,@]') -funny = group(operator, bracket, special) - -# First (or only) line of ' or " string. -cont_str = group(r"[bBuU]?[rR]?'[^\n'\\]*(?:\\.[^\n'\\]*)*" + - group("'", r'\\\r?\n'), - r'[bBuU]?[rR]?"[^\n"\\]*(?:\\.[^\n"\\]*)*' + - group('"', r'\\\r?\n')) -pseudo_extras = group(r'\\\r?\n', comment, triple) -pseudo_token = group(whitespace) + \ - group(pseudo_extras, number, funny, cont_str, name) - - -def _compile(expr): - return re.compile(expr, re.UNICODE) - - -pseudoprog, single3prog, double3prog = map( - _compile, (pseudo_token, single3, double3)) - -endprogs = {"'": _compile(single), '"': _compile(double), - "'''": single3prog, '"""': double3prog, - "r'''": single3prog, 'r"""': double3prog, - "b'''": single3prog, 'b"""': double3prog, - "u'''": single3prog, 'u"""': double3prog, - "R'''": single3prog, 'R"""': double3prog, - "B'''": single3prog, 'B"""': double3prog, - "U'''": single3prog, 'U"""': double3prog, - "br'''": single3prog, 'br"""': double3prog, - "bR'''": single3prog, 'bR"""': double3prog, - "Br'''": single3prog, 'Br"""': double3prog, - "BR'''": single3prog, 'BR"""': double3prog, - "ur'''": single3prog, 'ur"""': double3prog, - "uR'''": single3prog, 'uR"""': double3prog, - "Ur'''": single3prog, 'Ur"""': double3prog, - "UR'''": single3prog, 'UR"""': double3prog, - 'r': None, 'R': None, 'b': None, 'B': None} - -triple_quoted = {} -for t in ("'''", '"""', - "r'''", 'r"""', "R'''", 'R"""', - "b'''", 'b"""', "B'''", 'B"""', - "u'''", 'u"""', "U'''", 'U"""', - "br'''", 'br"""', "Br'''", 'Br"""', - "bR'''", 'bR"""', "BR'''", 'BR"""', - "ur'''", 'ur"""', "Ur'''", 'Ur"""', - "uR'''", 'uR"""', "UR'''", 'UR"""'): - triple_quoted[t] = t -single_quoted = {} -for t in ("'", '"', - "r'", 'r"', "R'", 'R"', - "b'", 'b"', "B'", 'B"', - "u'", 'u"', "U'", 'U"', - "br'", 'br"', "Br'", 'Br"', - "bR'", 'bR"', "BR'", 'BR"', - "ur'", 'ur"', "Ur'", 'Ur"', - "uR'", 'uR"', "UR'", 'UR"'): - single_quoted[t] = t - -del _compile - -tabsize = 8 - -# TODO add with? -ALWAYS_BREAK_TOKENS = (';', 'import', 'class', 'def', 'try', 'except', - 'finally', 'while', 'return') - - -class TokenInfo(namedtuple('Token', ['type', 'string', 'start_pos', 'prefix'])): - def __repr__(self): - annotated_type = tok_name[self.type] - return ('TokenInfo(type=%s, string=%r, start=%r, prefix=%r)' % - self._replace(type=annotated_type)) - - @property - def exact_type(self): - if self.type == OP and self.string in opmap: - return opmap[self.string] - else: - return self.type - - -def source_tokens(source, use_exact_op_types=False): - """Generate tokens from a the source code (string).""" - source = source - readline = StringIO(source).readline - return generate_tokens(readline, use_exact_op_types) - - -def generate_tokens(readline, use_exact_op_types=False): - """ - A heavily modified Python standard library tokenizer. - - Additionally to the default information, yields also the prefix of each - token. This idea comes from lib2to3. The prefix contains all information - that is irrelevant for the parser like newlines in parentheses or comments. - """ - paren_level = 0 # count parentheses - indents = [0] - lnum = 0 - max = 0 - numchars = '0123456789' - contstr = '' - contline = None - # We start with a newline. This makes indent at the first position - # possible. It's not valid Python, but still better than an INDENT in the - # second line (and not in the first). This makes quite a few things in - # Jedi's fast parser possible. - new_line = True - prefix = '' # Should never be required, but here for safety - additional_prefix = '' - while True: # loop over lines in stream - line = readline() # readline returns empty when finished. See StringIO - if not line: - if contstr: - yield TokenInfo(ERRORTOKEN, contstr, contstr_start, prefix) - break - - lnum += 1 - pos, max = 0, len(line) - - if contstr: # continued string - endmatch = endprog.match(line) - if endmatch: - pos = endmatch.end(0) - yield TokenInfo(STRING, contstr + line[:pos], contstr_start, prefix) - contstr = '' - contline = None - else: - contstr = contstr + line - contline = contline + line - continue - - while pos < max: - pseudomatch = pseudoprog.match(line, pos) - if not pseudomatch: # scan for tokens - txt = line[pos] - if line[pos] in '"\'': - # If a literal starts but doesn't end the whole rest of the - # line is an error token. - txt = line[pos:] - yield TokenInfo(ERRORTOKEN, txt, (lnum, pos), prefix) - pos += 1 - continue - - prefix = additional_prefix + pseudomatch.group(1) - additional_prefix = '' - start, pos = pseudomatch.span(2) - spos = (lnum, start) - token, initial = line[start:pos], line[start] - - if new_line and initial not in '\r\n#': - new_line = False - if paren_level == 0: - i = 0 - while line[i] == '\f': - i += 1 - start -= 1 - if start > indents[-1]: - yield TokenInfo(INDENT, '', spos, '') - indents.append(start) - while start < indents[-1]: - yield TokenInfo(DEDENT, '', spos, '') - indents.pop() - - if (initial in numchars or # ordinary number - (initial == '.' and token != '.' and token != '...')): - yield TokenInfo(NUMBER, token, spos, prefix) - elif initial in '\r\n': - if not new_line and paren_level == 0: - yield TokenInfo(NEWLINE, token, spos, prefix) - else: - additional_prefix = prefix + token - new_line = True - elif initial == '#': # Comments - assert not token.endswith("\n") - additional_prefix = prefix + token - elif token in triple_quoted: - endprog = endprogs[token] - endmatch = endprog.match(line, pos) - if endmatch: # all on one line - pos = endmatch.end(0) - token = line[start:pos] - yield TokenInfo(STRING, token, spos, prefix) - else: - contstr_start = (lnum, start) # multiple lines - contstr = line[start:] - contline = line - break - elif initial in single_quoted or \ - token[:2] in single_quoted or \ - token[:3] in single_quoted: - if token[-1] == '\n': # continued string - contstr_start = lnum, start - endprog = (endprogs.get(initial) or endprogs.get(token[1]) - or endprogs.get(token[2])) - contstr = line[start:] - contline = line - break - else: # ordinary string - yield TokenInfo(STRING, token, spos, prefix) - elif is_identifier(initial): # ordinary name - if token in ALWAYS_BREAK_TOKENS: - paren_level = 0 - while True: - indent = indents.pop() - if indent > start: - yield TokenInfo(DEDENT, '', spos, '') - else: - indents.append(indent) - break - yield TokenInfo(NAME, token, spos, prefix) - elif initial == '\\' and line[start:] in ('\\\n', '\\\r\n'): # continued stmt - additional_prefix += prefix + line[start:] - break - else: - if token in '([{': - paren_level += 1 - elif token in ')]}': - paren_level -= 1 - - try: - # This check is needed in any case to check if it's a valid - # operator or just some random unicode character. - exact_type = opmap[token] - except KeyError: - exact_type = typ = ERRORTOKEN - if use_exact_op_types: - typ = exact_type - else: - typ = OP - yield TokenInfo(typ, token, spos, prefix) - - if new_line or additional_prefix[-1:] == '\n': - end_pos = lnum + 1, 0 - else: - end_pos = lnum, max - # As the last position we just take the maximally possible position. We - # remove -1 for the last new line. - for indent in indents[1:]: - yield TokenInfo(DEDENT, '', end_pos, '') - yield TokenInfo(ENDMARKER, '', end_pos, additional_prefix) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/tree.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/tree.py deleted file mode 100644 index c5a2d55..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/tree.py +++ /dev/null @@ -1,1658 +0,0 @@ -""" -If you know what an abstract syntax tree (AST) is, you'll see that this module -is pretty much that. The classes represent syntax elements like functions and -imports. - -This is the "business logic" part of the parser. There's a lot of logic here -that makes it easier for Jedi (and other libraries to deal with a Python syntax -tree. - -By using `get_code` on a module, you can get back the 1-to-1 representation of -the input given to the parser. This is important if you are using refactoring. - -The easiest way to play with this module is to use :class:`parsing.Parser`. -:attr:`parsing.Parser.module` holds an instance of :class:`Module`: - ->>> from jedi._compatibility import u ->>> from jedi.parser import ParserWithRecovery, load_grammar ->>> parser = ParserWithRecovery(load_grammar(), u('import os'), 'example.py') ->>> submodule = parser.module ->>> submodule - - -Any subclasses of :class:`Scope`, including :class:`Module` has an attribute -:attr:`imports `: - ->>> submodule.imports -[] - -See also :attr:`Scope.subscopes` and :attr:`Scope.statements`. - -For static analysis purposes there exists a method called -``nodes_to_execute`` on all nodes and leaves. It's documented in the static -anaylsis documentation. -""" -import os -import re -from inspect import cleandoc -from itertools import chain -import textwrap -import abc - -from jedi._compatibility import (Python3Method, encoding, is_py3, utf8_repr, - literal_eval, use_metaclass, unicode) -from jedi.parser import token -from jedi.parser.utils import underscore_memoization - - -def is_node(node, *symbol_names): - try: - type = node.type - except AttributeError: - return False - else: - return type in symbol_names - - -class PositionModifier(object): - """A start_pos modifier for the fast parser.""" - def __init__(self): - self.line = 0 - - -zero_position_modifier = PositionModifier() - - -class DocstringMixin(object): - __slots__ = () - - @property - def raw_doc(self): - """ Returns a cleaned version of the docstring token. """ - if isinstance(self, Module): - node = self.children[0] - elif isinstance(self, ClassOrFunc): - node = self.children[self.children.index(':') + 1] - if is_node(node, 'suite'): # Normally a suite - node = node.children[2] # -> NEWLINE INDENT stmt - else: # ExprStmt - simple_stmt = self.parent - c = simple_stmt.parent.children - index = c.index(simple_stmt) - if not index: - return '' - node = c[index - 1] - - if is_node(node, 'simple_stmt'): - node = node.children[0] - - if node.type == 'string': - # TODO We have to check next leaves until there are no new - # leaves anymore that might be part of the docstring. A - # docstring can also look like this: ``'foo' 'bar' - # Returns a literal cleaned version of the ``Token``. - cleaned = cleandoc(literal_eval(node.value)) - # Since we want the docstr output to be always unicode, just - # force it. - if is_py3 or isinstance(cleaned, unicode): - return cleaned - else: - return unicode(cleaned, 'UTF-8', 'replace') - return '' - - -class Base(object): - """ - This is just here to have an isinstance check, which is also used on - evaluate classes. But since they have sometimes a special type of - delegation, it is important for those classes to override this method. - - I know that there is a chance to do such things with __instancecheck__, but - since Python 2.5 doesn't support it, I decided to do it this way. - """ - __slots__ = () - - def isinstance(self, *cls): - return isinstance(self, cls) - - @Python3Method - def get_parent_until(self, classes=(), reverse=False, - include_current=True): - """ - Searches the parent "chain" until the object is an instance of - classes. If classes is empty return the last parent in the chain - (is without a parent). - """ - if type(classes) not in (tuple, list): - classes = (classes,) - scope = self if include_current else self.parent - while scope.parent is not None: - # TODO why if classes? - if classes and reverse != scope.isinstance(*classes): - break - scope = scope.parent - return scope - - def get_parent_scope(self, include_flows=False): - """ - Returns the underlying scope. - """ - scope = self.parent - while scope is not None: - if include_flows and isinstance(scope, Flow): - return scope - if scope.is_scope(): - break - scope = scope.parent - return scope - - def get_definition(self): - if self.type in ('newline', 'dedent', 'indent', 'endmarker'): - raise ValueError('Cannot get the indentation of whitespace or indentation.') - scope = self - while scope.parent is not None: - parent = scope.parent - if scope.isinstance(Node, Leaf) and parent.type != 'simple_stmt': - if scope.type == 'testlist_comp': - try: - if isinstance(scope.children[1], CompFor): - return scope.children[1] - except IndexError: - pass - scope = parent - else: - break - return scope - - def assignment_indexes(self): - """ - Returns an array of tuple(int, node) of the indexes that are used in - tuple assignments. - - For example if the name is ``y`` in the following code:: - - x, (y, z) = 2, '' - - would result in ``[(1, xyz_node), (0, yz_node)]``. - """ - indexes = [] - node = self.parent - compare = self - while node is not None: - if is_node(node, 'testlist_comp', 'testlist_star_expr', 'exprlist'): - for i, child in enumerate(node.children): - if child == compare: - indexes.insert(0, (int(i / 2), node)) - break - else: - raise LookupError("Couldn't find the assignment.") - elif isinstance(node, (ExprStmt, CompFor)): - break - - compare = node - node = node.parent - return indexes - - def is_scope(self): - # Default is not being a scope. Just inherit from Scope. - return False - - @abc.abstractmethod - def nodes_to_execute(self, last_added=False): - raise NotImplementedError() - - def get_next_sibling(self): - """ - The node immediately following the invocant in their parent's children - list. If the invocant does not have a next sibling, it is None - """ - # Can't use index(); we need to test by identity - for i, child in enumerate(self.parent.children): - if child is self: - try: - return self.parent.children[i + 1] - except IndexError: - return None - - def get_previous_sibling(self): - """ - The node/leaf immediately preceding the invocant in their parent's - children list. If the invocant does not have a previous sibling, it is - None. - """ - # Can't use index(); we need to test by identity - for i, child in enumerate(self.parent.children): - if child is self: - if i == 0: - return None - return self.parent.children[i - 1] - - def get_previous_leaf(self): - """ - Returns the previous leaf in the parser tree. - Raises an IndexError if it's the first element. - """ - node = self - while True: - c = node.parent.children - i = c.index(node) - if i == 0: - node = node.parent - if node.parent is None: - raise IndexError('Cannot access the previous element of the first one.') - else: - node = c[i - 1] - break - - while True: - try: - node = node.children[-1] - except AttributeError: # A Leaf doesn't have children. - return node - - def get_next_leaf(self): - """ - Returns the previous leaf in the parser tree. - Raises an IndexError if it's the last element. - """ - node = self - while True: - c = node.parent.children - i = c.index(node) - if i == len(c) - 1: - node = node.parent - if node.parent is None: - raise IndexError('Cannot access the next element of the last one.') - else: - node = c[i + 1] - break - - while True: - try: - node = node.children[0] - except AttributeError: # A Leaf doesn't have children. - return node - - -class Leaf(Base): - __slots__ = ('position_modifier', 'value', 'parent', '_start_pos', 'prefix') - - def __init__(self, position_modifier, value, start_pos, prefix=''): - self.position_modifier = position_modifier - self.value = value - self._start_pos = start_pos - self.prefix = prefix - self.parent = None - - @property - def start_pos(self): - return self._start_pos[0] + self.position_modifier.line, self._start_pos[1] - - @start_pos.setter - def start_pos(self, value): - self._start_pos = value[0] - self.position_modifier.line, value[1] - - def get_start_pos_of_prefix(self): - try: - previous_leaf = self - while True: - previous_leaf = previous_leaf.get_previous_leaf() - if previous_leaf.type not in ('indent', 'dedent'): - return previous_leaf.end_pos - except IndexError: - return 1, 0 # It's the first leaf. - - @property - def end_pos(self): - return (self._start_pos[0] + self.position_modifier.line, - self._start_pos[1] + len(self.value)) - - def move(self, line_offset, column_offset): - self._start_pos = (self._start_pos[0] + line_offset, - self._start_pos[1] + column_offset) - - def first_leaf(self): - return self - - def get_code(self, normalized=False, include_prefix=True): - if normalized: - return self.value - if include_prefix: - return self.prefix + self.value - else: - return self.value - - def nodes_to_execute(self, last_added=False): - return [] - - @utf8_repr - def __repr__(self): - return "<%s: %s>" % (type(self).__name__, self.value) - - -class LeafWithNewLines(Leaf): - __slots__ = () - - @property - def end_pos(self): - """ - Literals and whitespace end_pos are more complicated than normal - end_pos, because the containing newlines may change the indexes. - """ - end_pos_line, end_pos_col = self.start_pos - lines = self.value.split('\n') - end_pos_line += len(lines) - 1 - # Check for multiline token - if self.start_pos[0] == end_pos_line: - end_pos_col += len(lines[-1]) - else: - end_pos_col = len(lines[-1]) - return end_pos_line, end_pos_col - - @utf8_repr - def __repr__(self): - return "<%s: %r>" % (type(self).__name__, self.value) - - -class EndMarker(Leaf): - __slots__ = () - type = 'endmarker' - - -class Newline(LeafWithNewLines): - """Contains NEWLINE and ENDMARKER tokens.""" - __slots__ = () - type = 'newline' - - @utf8_repr - def __repr__(self): - return "<%s: %s>" % (type(self).__name__, repr(self.value)) - - -class Name(Leaf): - """ - A string. Sometimes it is important to know if the string belongs to a name - or not. - """ - type = 'name' - __slots__ = () - - def __str__(self): - return self.value - - def __unicode__(self): - return self.value - - def __repr__(self): - return "<%s: %s@%s,%s>" % (type(self).__name__, self.value, - self.start_pos[0], self.start_pos[1]) - - def is_definition(self): - if self.parent.type in ('power', 'atom_expr'): - # In `self.x = 3` self is not a definition, but x is. - return False - - stmt = self.get_definition() - if stmt.type in ('funcdef', 'classdef', 'file_input', 'param'): - return self == stmt.name - elif stmt.type == 'for_stmt': - return self.start_pos < stmt.children[2].start_pos - elif stmt.type == 'try_stmt': - return self.get_previous_sibling() == 'as' - else: - return stmt.type in ('expr_stmt', 'import_name', 'import_from', - 'comp_for', 'with_stmt') \ - and self in stmt.get_defined_names() - - def nodes_to_execute(self, last_added=False): - if last_added is False: - yield self - - -class Literal(LeafWithNewLines): - __slots__ = () - - def eval(self): - return literal_eval(self.value) - - -class Number(Literal): - type = 'number' - __slots__ = () - - -class String(Literal): - type = 'string' - __slots__ = () - - -class Indent(Leaf): - type = 'indent' - __slots__ = () - - -class Dedent(Leaf): - type = 'dedent' - __slots__ = () - - -class Operator(Leaf): - type = 'operator' - __slots__ = () - - def __str__(self): - return self.value - - def __eq__(self, other): - """ - Make comparisons with strings easy. - Improves the readability of the parser. - """ - if isinstance(other, Operator): - return self is other - else: - return self.value == other - - def __ne__(self, other): - """Python 2 compatibility.""" - return self.value != other - - def __hash__(self): - return hash(self.value) - - -class Keyword(Leaf): - type = 'keyword' - __slots__ = () - - def __eq__(self, other): - """ - Make comparisons with strings easy. - Improves the readability of the parser. - """ - if isinstance(other, Keyword): - return self is other - return self.value == other - - def __ne__(self, other): - """Python 2 compatibility.""" - return not self.__eq__(other) - - def __hash__(self): - return hash(self.value) - - -class BaseNode(Base): - """ - The super class for Scope, Import, Name and Statement. Every object in - the parser tree inherits from this class. - """ - __slots__ = ('children', 'parent') - type = None - - def __init__(self, children): - """ - Initialize :class:`BaseNode`. - - :param children: The module in which this Python object locates. - """ - for c in children: - c.parent = self - self.children = children - self.parent = None - - def move(self, line_offset, column_offset): - """ - Move the Node's start_pos. - """ - for c in self.children: - c.move(line_offset, column_offset) - - @property - def start_pos(self): - return self.children[0].start_pos - - def get_start_pos_of_prefix(self): - return self.children[0].get_start_pos_of_prefix() - - @property - def end_pos(self): - return self.children[-1].end_pos - - def get_code(self, normalized=False, include_prefix=True): - # TODO implement normalized (depending on context). - if include_prefix: - return "".join(c.get_code(normalized) for c in self.children) - else: - first = self.children[0].get_code(include_prefix=False) - return first + "".join(c.get_code(normalized) for c in self.children[1:]) - - @Python3Method - def name_for_position(self, position): - for c in self.children: - if isinstance(c, Leaf): - if isinstance(c, Name) and c.start_pos <= position <= c.end_pos: - return c - else: - result = c.name_for_position(position) - if result is not None: - return result - return None - - def get_leaf_for_position(self, position, include_prefixes=False): - for c in self.children: - if include_prefixes: - start_pos = c.get_start_pos_of_prefix() - else: - start_pos = c.start_pos - - if start_pos <= position <= c.end_pos: - try: - return c.get_leaf_for_position(position, include_prefixes) - except AttributeError: - while c.type in ('indent', 'dedent'): - # We'd rather not have indents and dedents as a leaf, - # because they don't contain indentation information. - c = c.get_next_leaf() - return c - - return None - - @Python3Method - def get_statement_for_position(self, pos): - for c in self.children: - if c.start_pos <= pos <= c.end_pos: - if c.type not in ('decorated', 'simple_stmt', 'suite') \ - and not isinstance(c, (Flow, ClassOrFunc)): - return c - else: - try: - return c.get_statement_for_position(pos) - except AttributeError: - pass # Must be a non-scope - return None - - def first_leaf(self): - try: - return self.children[0].first_leaf() - except AttributeError: - return self.children[0] - - def get_next_leaf(self): - """ - Raises an IndexError if it's the last node. (Would be the module) - """ - c = self.parent.children - index = c.index(self) - if index == len(c) - 1: - # TODO WTF? recursion? - return self.get_next_leaf() - else: - return c[index + 1] - - def last_leaf(self): - try: - return self.children[-1].last_leaf() - except AttributeError: - return self.children[-1] - - def get_following_comment_same_line(self): - """ - returns (as string) any comment that appears on the same line, - after the node, including the # - """ - try: - if self.isinstance(ForStmt): - whitespace = self.children[5].first_leaf().prefix - elif self.isinstance(WithStmt): - whitespace = self.children[3].first_leaf().prefix - else: - whitespace = self.last_leaf().get_next_leaf().prefix - except AttributeError: - return None - except ValueError: - # TODO in some particular cases, the tree doesn't seem to be linked - # correctly - return None - if "#" not in whitespace: - return None - comment = whitespace[whitespace.index("#"):] - if "\r" in comment: - comment = comment[:comment.index("\r")] - if "\n" in comment: - comment = comment[:comment.index("\n")] - return comment - - @utf8_repr - def __repr__(self): - code = self.get_code().replace('\n', ' ').strip() - if not is_py3: - code = code.encode(encoding, 'replace') - return "<%s: %s@%s,%s>" % \ - (type(self).__name__, code, self.start_pos[0], self.start_pos[1]) - - -class Node(BaseNode): - """Concrete implementation for interior nodes.""" - __slots__ = ('type',) - - _IGNORE_EXECUTE_NODES = set([ - 'suite', 'subscriptlist', 'subscript', 'simple_stmt', 'sliceop', - 'testlist_comp', 'dictorsetmaker', 'trailer', 'decorators', - 'decorated', 'arglist', 'argument', 'exprlist', 'testlist', - 'testlist_safe', 'testlist1' - ]) - - def __init__(self, type, children): - """ - Initializer. - - Takes a type constant (a symbol number >= 256), a sequence of - child nodes, and an optional context keyword argument. - - As a side effect, the parent pointers of the children are updated. - """ - super(Node, self).__init__(children) - self.type = type - - def nodes_to_execute(self, last_added=False): - """ - For static analysis. - """ - result = [] - if self.type not in Node._IGNORE_EXECUTE_NODES and not last_added: - result.append(self) - last_added = True - - for child in self.children: - result += child.nodes_to_execute(last_added) - return result - - def __repr__(self): - return "%s(%s, %r)" % (self.__class__.__name__, self.type, self.children) - - -class ErrorNode(BaseNode): - """ - TODO doc - """ - __slots__ = () - type = 'error_node' - - def nodes_to_execute(self, last_added=False): - return [] - - -class ErrorLeaf(LeafWithNewLines): - """ - TODO doc - """ - __slots__ = ('original_type') - type = 'error_leaf' - - def __init__(self, position_modifier, original_type, value, start_pos, prefix=''): - super(ErrorLeaf, self).__init__(position_modifier, value, start_pos, prefix) - self.original_type = original_type - - def __repr__(self): - token_type = token.tok_name[self.original_type] - return "<%s: %s, %s)>" % (type(self).__name__, token_type, self.start_pos) - - -class IsScopeMeta(type): - def __instancecheck__(self, other): - return other.is_scope() - - -class IsScope(use_metaclass(IsScopeMeta)): - pass - - -class Scope(BaseNode, DocstringMixin): - """ - Super class for the parser tree, which represents the state of a python - text file. - A Scope manages and owns its subscopes, which are classes and functions, as - well as variables and imports. It is used to access the structure of python - files. - - :param start_pos: The position (line and column) of the scope. - :type start_pos: tuple(int, int) - """ - __slots__ = ('names_dict',) - - def __init__(self, children): - super(Scope, self).__init__(children) - - @property - def returns(self): - # Needed here for fast_parser, because the fast_parser splits and - # returns will be in "normal" modules. - return self._search_in_scope(ReturnStmt) - - @property - def subscopes(self): - return self._search_in_scope(Scope) - - @property - def flows(self): - return self._search_in_scope(Flow) - - @property - def imports(self): - return self._search_in_scope(Import) - - @Python3Method - def _search_in_scope(self, typ): - def scan(children): - elements = [] - for element in children: - if isinstance(element, typ): - elements.append(element) - if is_node(element, 'suite', 'simple_stmt', 'decorated') \ - or isinstance(element, Flow): - elements += scan(element.children) - return elements - - return scan(self.children) - - @property - def statements(self): - return self._search_in_scope((ExprStmt, KeywordStatement)) - - def is_scope(self): - return True - - def __repr__(self): - try: - name = self.path - except AttributeError: - try: - name = self.name - except AttributeError: - name = self.command - - return "<%s: %s@%s-%s>" % (type(self).__name__, name, - self.start_pos[0], self.end_pos[0]) - - def walk(self): - yield self - for s in self.subscopes: - for scope in s.walk(): - yield scope - - for r in self.statements: - while isinstance(r, Flow): - for scope in r.walk(): - yield scope - r = r.next - - -class Module(Scope): - """ - The top scope, which is always a module. - Depending on the underlying parser this may be a full module or just a part - of a module. - """ - __slots__ = ('path', 'global_names', 'used_names', '_name') - type = 'file_input' - - def __init__(self, children): - """ - Initialize :class:`Module`. - - :type path: str - :arg path: File path to this module. - - .. todo:: Document `top_module`. - """ - super(Module, self).__init__(children) - self.path = None # Set later. - - @property - @underscore_memoization - def name(self): - """ This is used for the goto functions. """ - if self.path is None: - string = '' # no path -> empty name - else: - sep = (re.escape(os.path.sep),) * 2 - r = re.search(r'([^%s]*?)(%s__init__)?(\.py|\.so)?$' % sep, self.path) - # Remove PEP 3149 names - string = re.sub('\.[a-z]+-\d{2}[mud]{0,3}$', '', r.group(1)) - # Positions are not real, but a module starts at (1, 0) - p = (1, 0) - name = Name(zero_position_modifier, string, p) - name.parent = self - return name - - @property - def has_explicit_absolute_import(self): - """ - Checks if imports in this module are explicitly absolute, i.e. there - is a ``__future__`` import. - """ - # TODO this is a strange scan and not fully correct. I think Python's - # parser does it in a different way and scans for the first - # statement/import with a tokenizer (to check for syntax changes like - # the future print statement). - for imp in self.imports: - if imp.type == 'import_from' and imp.level == 0: - for path in imp.paths(): - if [str(name) for name in path] == ['__future__', 'absolute_import']: - return True - return False - - def nodes_to_execute(self, last_added=False): - # Yield itself, class needs to be executed for decorator checks. - result = [] - for child in self.children: - result += child.nodes_to_execute() - return result - - -class Decorator(BaseNode): - type = 'decorator' - __slots__ = () - - def nodes_to_execute(self, last_added=False): - if self.children[-2] == ')': - node = self.children[-3] - if node != '(': - return node.nodes_to_execute() - return [] - - -class ClassOrFunc(Scope): - __slots__ = () - - @property - def name(self): - return self.children[1] - - def get_decorators(self): - decorated = self.parent - if is_node(decorated, 'decorated'): - if is_node(decorated.children[0], 'decorators'): - return decorated.children[0].children - else: - return decorated.children[:1] - else: - return [] - - -class Class(ClassOrFunc): - """ - Used to store the parsed contents of a python class. - - :param name: The Class name. - :type name: str - :param supers: The super classes of a Class. - :type supers: list - :param start_pos: The start position (line, column) of the class. - :type start_pos: tuple(int, int) - """ - type = 'classdef' - __slots__ = () - - def __init__(self, children): - super(Class, self).__init__(children) - - def get_super_arglist(self): - if self.children[2] != '(': # Has no parentheses - return None - else: - if self.children[3] == ')': # Empty parentheses - return None - else: - return self.children[3] - - @property - def doc(self): - """ - Return a document string including call signature of __init__. - """ - docstr = self.raw_doc - for sub in self.subscopes: - if str(sub.name) == '__init__': - return '%s\n\n%s' % ( - sub.get_call_signature(func_name=self.name), docstr) - return docstr - - def nodes_to_execute(self, last_added=False): - # Yield itself, class needs to be executed for decorator checks. - yield self - # Super arguments. - arglist = self.get_super_arglist() - try: - children = arglist.children - except AttributeError: - if arglist is not None: - for node_to_execute in arglist.nodes_to_execute(): - yield node_to_execute - else: - for argument in children: - if argument.type == 'argument': - # metaclass= or list comprehension or */** - raise NotImplementedError('Metaclasses not implemented') - else: - for node_to_execute in argument.nodes_to_execute(): - yield node_to_execute - - # care for the class suite: - for node in self.children[self.children.index(':'):]: - # This could be easier without the fast parser. But we need to find - # the position of the colon, because everything after it can be a - # part of the class, not just its suite. - for node_to_execute in node.nodes_to_execute(): - yield node_to_execute - - -def _create_params(parent, argslist_list): - """ - `argslist_list` is a list that can contain an argslist as a first item, but - most not. It's basically the items between the parameter brackets (which is - at most one item). - This function modifies the parser structure. It generates `Param` objects - from the normal ast. Those param objects do not exist in a normal ast, but - make the evaluation of the ast tree so much easier. - You could also say that this function replaces the argslist node with a - list of Param objects. - """ - def check_python2_nested_param(node): - """ - Python 2 allows params to look like ``def x(a, (b, c))``, which is - basically a way of unpacking tuples in params. Python 3 has ditched - this behavior. Jedi currently just ignores those constructs. - """ - return node.type == 'tfpdef' and node.children[0] == '(' - - try: - first = argslist_list[0] - except IndexError: - return [] - - if first.type in ('name', 'tfpdef'): - if check_python2_nested_param(first): - return [first] - else: - return [Param([first], parent)] - elif first == '*': - return [first] - else: # argslist is a `typedargslist` or a `varargslist`. - children = first.children - new_children = [] - start = 0 - # Start with offset 1, because the end is higher. - for end, child in enumerate(children + [None], 1): - if child is None or child == ',': - param_children = children[start:end] - if param_children: # Could as well be comma and then end. - if check_python2_nested_param(param_children[0]): - new_children += param_children - elif param_children[0] == '*' and param_children[1] == ',': - new_children += param_children - else: - new_children.append(Param(param_children, parent)) - start = end - return new_children - - -class Function(ClassOrFunc): - """ - Used to store the parsed contents of a python function. - - Children: - 0) - 1) - 2) parameter list (including open-paren and close-paren s) - 3) - 4) Node() representing function body - 5) ?? - 6) annotation (if present) - """ - __slots__ = ('listeners',) - type = 'funcdef' - - def __init__(self, children): - super(Function, self).__init__(children) - self.listeners = set() # not used here, but in evaluation. - parameters = self.children[2] # After `def foo` - parameters.children[1:-1] = _create_params(parameters, parameters.children[1:-1]) - - @property - def params(self): - return [p for p in self.children[2].children if p.type == 'param'] - - @property - def name(self): - return self.children[1] # First token after `def` - - @property - def yields(self): - # TODO This is incorrect, yields are also possible in a statement. - return self._search_in_scope(YieldExpr) - - def is_generator(self): - return bool(self.yields) - - def annotation(self): - try: - if self.children[3] == "->": - return self.children[4] - assert self.children[3] == ":" - return None - except IndexError: - return None - - def get_call_signature(self, width=72, func_name=None): - """ - Generate call signature of this function. - - :param width: Fold lines if a line is longer than this value. - :type width: int - :arg func_name: Override function name when given. - :type func_name: str - - :rtype: str - """ - func_name = func_name or self.name - code = unicode(func_name) + self._get_paramlist_code() - return '\n'.join(textwrap.wrap(code, width)) - - def _get_paramlist_code(self): - return self.children[2].get_code() - - @property - def doc(self): - """ Return a document string including call signature. """ - docstr = self.raw_doc - return '%s\n\n%s' % (self.get_call_signature(), docstr) - - def nodes_to_execute(self, last_added=False): - # Yield itself, functions needs to be executed for decorator checks. - yield self - for param in self.params: - if param.default is not None: - yield param.default - # care for the function suite: - for node in self.children[4:]: - # This could be easier without the fast parser. The fast parser - # allows that the 4th position is empty or that there's even a - # fifth element (another function/class). So just scan everything - # after colon. - for node_to_execute in node.nodes_to_execute(): - yield node_to_execute - - -class Lambda(Function): - """ - Lambdas are basically trimmed functions, so give it the same interface. - - Children: - 0) - *) for each argument x - -2) - -1) Node() representing body - """ - type = 'lambda' - __slots__ = () - - def __init__(self, children): - # We don't want to call the Function constructor, call its parent. - super(Function, self).__init__(children) - self.listeners = set() # not used here, but in evaluation. - lst = self.children[1:-2] # Everything between `lambda` and the `:` operator is a parameter. - self.children[1:-2] = _create_params(self, lst) - - @property - def name(self): - # Borrow the position of the AST node. - return Name(self.children[0].position_modifier, '', self.children[0].start_pos) - - def _get_paramlist_code(self): - return '(' + ''.join(param.get_code() for param in self.params).strip() + ')' - - @property - def params(self): - return self.children[1:-2] - - def is_generator(self): - return False - - def annotation(self): - # lambda functions do not support annotations - return None - - @property - def yields(self): - return [] - - def nodes_to_execute(self, last_added=False): - for param in self.params: - if param.default is not None: - yield param.default - # Care for the lambda test (last child): - for node_to_execute in self.children[-1].nodes_to_execute(): - yield node_to_execute - - def __repr__(self): - return "<%s@%s>" % (self.__class__.__name__, self.start_pos) - - -class Flow(BaseNode): - __slots__ = () - - def nodes_to_execute(self, last_added=False): - for child in self.children: - for node_to_execute in child.nodes_to_execute(): - yield node_to_execute - - -class IfStmt(Flow): - type = 'if_stmt' - __slots__ = () - - def check_nodes(self): - """ - Returns all the `test` nodes that are defined as x, here: - - if x: - pass - elif x: - pass - """ - for i, c in enumerate(self.children): - if c in ('elif', 'if'): - yield self.children[i + 1] - - def node_in_which_check_node(self, node): - """ - Returns the check node (see function above) that a node is contained - in. However if it the node is in the check node itself and not in the - suite return None. - """ - start_pos = node.start_pos - for check_node in reversed(list(self.check_nodes())): - if check_node.start_pos < start_pos: - if start_pos < check_node.end_pos: - return None - # In this case the node is within the check_node itself, - # not in the suite - else: - return check_node - - def node_after_else(self, node): - """ - Checks if a node is defined after `else`. - """ - for c in self.children: - if c == 'else': - if node.start_pos > c.start_pos: - return True - else: - return False - - -class WhileStmt(Flow): - type = 'while_stmt' - __slots__ = () - - -class ForStmt(Flow): - type = 'for_stmt' - __slots__ = () - - def get_input_node(self): - """ - Returns the input node ``y`` from: ``for x in y:``. - """ - return self.children[3] - - def defines_one_name(self): - """ - Returns True if only one name is returned: ``for x in y``. - Returns False if the for loop is more complicated: ``for x, z in y``. - - :returns: bool - """ - return self.children[1].type == 'name' - - -class TryStmt(Flow): - type = 'try_stmt' - __slots__ = () - - def except_clauses(self): - """ - Returns the ``test`` nodes found in ``except_clause`` nodes. - Returns ``[None]`` for except clauses without an exception given. - """ - for node in self.children: - if node.type == 'except_clause': - yield node.children[1] - elif node == 'except': - yield None - - def nodes_to_execute(self, last_added=False): - result = [] - for child in self.children[2::3]: - result += child.nodes_to_execute() - for child in self.children[0::3]: - if child.type == 'except_clause': - # Add the test node and ignore the `as NAME` definition. - result += child.children[1].nodes_to_execute() - return result - - -class WithStmt(Flow): - type = 'with_stmt' - __slots__ = () - - def get_defined_names(self): - names = [] - for with_item in self.children[1:-2:2]: - # Check with items for 'as' names. - if is_node(with_item, 'with_item'): - names += _defined_names(with_item.children[2]) - return names - - def node_from_name(self, name): - node = name - while True: - node = node.parent - if is_node(node, 'with_item'): - return node.children[0] - - def nodes_to_execute(self, last_added=False): - result = [] - for child in self.children[1::2]: - if child.type == 'with_item': - # Just ignore the `as EXPR` part - at least for now, because - # most times it's just a name. - child = child.children[0] - result += child.nodes_to_execute() - return result - - -class Import(BaseNode): - __slots__ = () - - def path_for_name(self, name): - try: - # The name may be an alias. If it is, just map it back to the name. - name = self.aliases()[name] - except KeyError: - pass - - for path in self.paths(): - if name in path: - return path[:path.index(name) + 1] - raise ValueError('Name should be defined in the import itself') - - def is_nested(self): - return False # By default, sub classes may overwrite this behavior - - def is_star_import(self): - return self.children[-1] == '*' - - def nodes_to_execute(self, last_added=False): - """ - `nodes_to_execute` works a bit different for imports, because the names - itself cannot directly get resolved (except on itself). - """ - # TODO couldn't we return the names? Would be nicer. - return [self] - - -class ImportFrom(Import): - type = 'import_from' - __slots__ = () - - def get_defined_names(self): - return [alias or name for name, alias in self._as_name_tuples()] - - def aliases(self): - """Mapping from alias to its corresponding name.""" - return dict((alias, name) for name, alias in self._as_name_tuples() - if alias is not None) - - def get_from_names(self): - for n in self.children[1:]: - if n not in ('.', '...'): - break - if is_node(n, 'dotted_name'): # from x.y import - return n.children[::2] - elif n == 'import': # from . import - return [] - else: # from x import - return [n] - - @property - def level(self): - """The level parameter of ``__import__``.""" - level = 0 - for n in self.children[1:]: - if n in ('.', '...'): - level += len(n.value) - else: - break - return level - - def _as_name_tuples(self): - last = self.children[-1] - if last == ')': - last = self.children[-2] - elif last == '*': - return # No names defined directly. - - if is_node(last, 'import_as_names'): - as_names = last.children[::2] - else: - as_names = [last] - for as_name in as_names: - if as_name.type == 'name': - yield as_name, None - else: - yield as_name.children[::2] # yields x, y -> ``x as y`` - - def star_import_name(self): - """ - The last name defined in a star import. - """ - return self.paths()[-1][-1] - - def paths(self): - """ - The import paths defined in an import statement. Typically an array - like this: ``[, ]``. - """ - dotted = self.get_from_names() - - if self.children[-1] == '*': - return [dotted] - return [dotted + [name] for name, alias in self._as_name_tuples()] - - -class ImportName(Import): - """For ``import_name`` nodes. Covers normal imports without ``from``.""" - type = 'import_name' - __slots__ = () - - def get_defined_names(self): - return [alias or path[0] for path, alias in self._dotted_as_names()] - - @property - def level(self): - """The level parameter of ``__import__``.""" - return 0 # Obviously 0 for imports without from. - - def paths(self): - return [path for path, alias in self._dotted_as_names()] - - def _dotted_as_names(self): - """Generator of (list(path), alias) where alias may be None.""" - dotted_as_names = self.children[1] - if is_node(dotted_as_names, 'dotted_as_names'): - as_names = dotted_as_names.children[::2] - else: - as_names = [dotted_as_names] - - for as_name in as_names: - if is_node(as_name, 'dotted_as_name'): - alias = as_name.children[2] - as_name = as_name.children[0] - else: - alias = None - if as_name.type == 'name': - yield [as_name], alias - else: - # dotted_names - yield as_name.children[::2], alias - - def is_nested(self): - """ - This checks for the special case of nested imports, without aliases and - from statement:: - - import foo.bar - """ - return [1 for path, alias in self._dotted_as_names() - if alias is None and len(path) > 1] - - def aliases(self): - return dict((alias, path[-1]) for path, alias in self._dotted_as_names() - if alias is not None) - - -class KeywordStatement(BaseNode): - """ - For the following statements: `assert`, `del`, `global`, `nonlocal`, - `raise`, `return`, `yield`, `return`, `yield`. - - `pass`, `continue` and `break` are not in there, because they are just - simple keywords and the parser reduces it to a keyword. - """ - __slots__ = () - - @property - def type(self): - """ - Keyword statements start with the keyword and end with `_stmt`. You can - crosscheck this with the Python grammar. - """ - return '%s_stmt' % self.keyword - - @property - def keyword(self): - return self.children[0].value - - def nodes_to_execute(self, last_added=False): - result = [] - for child in self.children: - result += child.nodes_to_execute() - return result - - -class AssertStmt(KeywordStatement): - __slots__ = () - - def assertion(self): - return self.children[1] - - -class GlobalStmt(KeywordStatement): - __slots__ = () - - def get_defined_names(self): - return [] - - def get_global_names(self): - return self.children[1::2] - - def nodes_to_execute(self, last_added=False): - """ - The global keyword allows to define any name. Even if it doesn't - exist. - """ - return [] - - -class ReturnStmt(KeywordStatement): - __slots__ = () - - -class YieldExpr(BaseNode): - __slots__ = () - - @property - def type(self): - return 'yield_expr' - - def nodes_to_execute(self, last_added=False): - if len(self.children) > 1: - return self.children[1].nodes_to_execute() - else: - return [] - - -def _defined_names(current): - """ - A helper function to find the defined names in statements, for loops and - list comprehensions. - """ - names = [] - if is_node(current, 'testlist_star_expr', 'testlist_comp', 'exprlist'): - for child in current.children[::2]: - names += _defined_names(child) - elif is_node(current, 'atom', 'star_expr'): - names += _defined_names(current.children[1]) - elif is_node(current, 'power', 'atom_expr'): - if current.children[-2] != '**': # Just if there's no operation - trailer = current.children[-1] - if trailer.children[0] == '.': - names.append(trailer.children[1]) - else: - names.append(current) - return names - - -class ExprStmt(BaseNode, DocstringMixin): - type = 'expr_stmt' - __slots__ = () - - def get_defined_names(self): - return list(chain.from_iterable(_defined_names(self.children[i]) - for i in range(0, len(self.children) - 2, 2) - if '=' in self.children[i + 1].value)) - - def get_rhs(self): - """Returns the right-hand-side of the equals.""" - return self.children[-1] - - def first_operation(self): - """ - Returns `+=`, `=`, etc or None if there is no operation. - """ - try: - return self.children[1] - except IndexError: - return None - - def nodes_to_execute(self, last_added=False): - # I think evaluating the statement (and possibly returned arrays), - # should be enough for static analysis. - result = [self] - for child in self.children: - result += child.nodes_to_execute(last_added=True) - return result - - -class Param(BaseNode): - """ - It's a helper class that makes business logic with params much easier. The - Python grammar defines no ``param`` node. It defines it in a different way - that is not really suited to working with parameters. - """ - type = 'param' - - def __init__(self, children, parent): - super(Param, self).__init__(children) - self.parent = parent - for child in children: - child.parent = self - - @property - def stars(self): - first = self.children[0] - if first in ('*', '**'): - return len(first.value) - return 0 - - @property - def default(self): - try: - return self.children[int(self.children[0] in ('*', '**')) + 2] - except IndexError: - return None - - def annotation(self): - tfpdef = self._tfpdef() - if is_node(tfpdef, 'tfpdef'): - assert tfpdef.children[1] == ":" - assert len(tfpdef.children) == 3 - annotation = tfpdef.children[2] - return annotation - else: - return None - - def _tfpdef(self): - """ - tfpdef: see grammar.txt. - """ - offset = int(self.children[0] in ('*', '**')) - return self.children[offset] - - @property - def name(self): - if is_node(self._tfpdef(), 'tfpdef'): - return self._tfpdef().children[0] - else: - return self._tfpdef() - - @property - def position_nr(self): - return self.parent.children.index(self) - 1 - - @property - def parent_function(self): - return self.get_parent_until(IsScope) - - def __repr__(self): - default = '' if self.default is None else '=%s' % self.default - return '<%s: %s>' % (type(self).__name__, str(self._tfpdef()) + default) - - -class CompFor(BaseNode): - type = 'comp_for' - __slots__ = () - - def get_comp_fors(self): - yield self - last = self.children[-1] - while True: - if isinstance(last, CompFor): - yield last - elif not is_node(last, 'comp_if'): - break - last = last.children[-1] - - def is_scope(self): - return True - - @property - def names_dict(self): - dct = {} - for name in self.get_defined_names(): - arr = dct.setdefault(name.value, []) - arr.append(name) - return dct - - def names_dicts(self, search_global): - yield self.names_dict - - def get_defined_names(self): - return _defined_names(self.children[1]) - - def nodes_to_execute(self, last_added=False): - last = self.children[-1] - if last.type == 'comp_if': - for node in last.children[-1].nodes_to_execute(): - yield node - last = self.children[-2] - elif last.type == 'comp_for': - for node in last.nodes_to_execute(): - yield node - last = self.children[-2] - for node in last.nodes_to_execute(): - yield node diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/utils.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/utils.py deleted file mode 100644 index 9098b09..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/parser/utils.py +++ /dev/null @@ -1,198 +0,0 @@ -import inspect -import time -import os -import sys -import json -import hashlib -import gc -import shutil -import pickle - -from jedi import settings -from jedi import debug - - -def underscore_memoization(func): - """ - Decorator for methods:: - - class A(object): - def x(self): - if self._x: - self._x = 10 - return self._x - - Becomes:: - - class A(object): - @underscore_memoization - def x(self): - return 10 - - A now has an attribute ``_x`` written by this decorator. - """ - name = '_' + func.__name__ - - def wrapper(self): - try: - return getattr(self, name) - except AttributeError: - result = func(self) - if inspect.isgenerator(result): - result = list(result) - setattr(self, name, result) - return result - - return wrapper - - -# for fast_parser, should not be deleted -parser_cache = {} - - -class ParserCacheItem(object): - def __init__(self, parser, change_time=None): - self.parser = parser - if change_time is None: - change_time = time.time() - self.change_time = change_time - - -def load_parser(path): - """ - Returns the module or None, if it fails. - """ - p_time = os.path.getmtime(path) if path else None - try: - parser_cache_item = parser_cache[path] - if not path or p_time <= parser_cache_item.change_time: - return parser_cache_item.parser - except KeyError: - if settings.use_filesystem_cache: - return ParserPickling.load_parser(path, p_time) - - -def save_parser(path, parser, pickling=True): - try: - p_time = None if path is None else os.path.getmtime(path) - except OSError: - p_time = None - pickling = False - - item = ParserCacheItem(parser, p_time) - parser_cache[path] = item - if settings.use_filesystem_cache and pickling: - ParserPickling.save_parser(path, item) - - -class ParserPickling(object): - - version = 26 - """ - Version number (integer) for file system cache. - - Increment this number when there are any incompatible changes in - parser representation classes. For example, the following changes - are regarded as incompatible. - - - Class name is changed. - - Class is moved to another module. - - Defined slot of the class is changed. - """ - - def __init__(self): - self.__index = None - self.py_tag = 'cpython-%s%s' % sys.version_info[:2] - """ - Short name for distinguish Python implementations and versions. - - It's like `sys.implementation.cache_tag` but for Python < 3.3 - we generate something similar. See: - http://docs.python.org/3/library/sys.html#sys.implementation - - .. todo:: Detect interpreter (e.g., PyPy). - """ - - def load_parser(self, path, original_changed_time): - try: - pickle_changed_time = self._index[path] - except KeyError: - return None - if original_changed_time is not None \ - and pickle_changed_time < original_changed_time: - # the pickle file is outdated - return None - - with open(self._get_hashed_path(path), 'rb') as f: - try: - gc.disable() - parser_cache_item = pickle.load(f) - finally: - gc.enable() - - debug.dbg('pickle loaded: %s', path) - parser_cache[path] = parser_cache_item - return parser_cache_item.parser - - def save_parser(self, path, parser_cache_item): - self.__index = None - try: - files = self._index - except KeyError: - files = {} - self._index = files - - with open(self._get_hashed_path(path), 'wb') as f: - pickle.dump(parser_cache_item, f, pickle.HIGHEST_PROTOCOL) - files[path] = parser_cache_item.change_time - - self._flush_index() - - @property - def _index(self): - if self.__index is None: - try: - with open(self._get_path('index.json')) as f: - data = json.load(f) - except (IOError, ValueError): - self.__index = {} - else: - # 0 means version is not defined (= always delete cache): - if data.get('version', 0) != self.version: - self.clear_cache() - else: - self.__index = data['index'] - return self.__index - - def _remove_old_modules(self): - # TODO use - change = False - if change: - self._flush_index(self) - self._index # reload index - - def _flush_index(self): - data = {'version': self.version, 'index': self._index} - with open(self._get_path('index.json'), 'w') as f: - json.dump(data, f) - self.__index = None - - def clear_cache(self): - shutil.rmtree(self._cache_directory()) - self.__index = {} - - def _get_hashed_path(self, path): - return self._get_path('%s.pkl' % hashlib.md5(path.encode("utf-8")).hexdigest()) - - def _get_path(self, file): - dir = self._cache_directory() - if not os.path.exists(dir): - os.makedirs(dir) - return os.path.join(dir, file) - - def _cache_directory(self): - return os.path.join(settings.cache_directory, self.py_tag) - - -# is a singleton -ParserPickling = ParserPickling() diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/refactoring.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/refactoring.py deleted file mode 100644 index a342f08..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/refactoring.py +++ /dev/null @@ -1,202 +0,0 @@ -""" -Introduce some basic refactoring functions to |jedi|. This module is still in a -very early development stage and needs much testing and improvement. - -.. warning:: I won't do too much here, but if anyone wants to step in, please - do. Refactoring is none of my priorities - -It uses the |jedi| `API `_ and supports currently the -following functions (sometimes bug-prone): - -- rename -- extract variable -- inline variable -""" -import difflib - -from jedi import common -from jedi.evaluate import helpers -from jedi.parser import tree as pt - - -class Refactoring(object): - def __init__(self, change_dct): - """ - :param change_dct: dict(old_path=(new_path, old_lines, new_lines)) - """ - self.change_dct = change_dct - - def old_files(self): - dct = {} - for old_path, (new_path, old_l, new_l) in self.change_dct.items(): - dct[new_path] = '\n'.join(new_l) - return dct - - def new_files(self): - dct = {} - for old_path, (new_path, old_l, new_l) in self.change_dct.items(): - dct[new_path] = '\n'.join(new_l) - return dct - - def diff(self): - texts = [] - for old_path, (new_path, old_l, new_l) in self.change_dct.items(): - if old_path: - udiff = difflib.unified_diff(old_l, new_l) - else: - udiff = difflib.unified_diff(old_l, new_l, old_path, new_path) - texts.append('\n'.join(udiff)) - return '\n'.join(texts) - - -def rename(script, new_name): - """ The `args` / `kwargs` params are the same as in `api.Script`. - :param operation: The refactoring operation to execute. - :type operation: str - :type source: str - :return: list of changed lines/changed files - """ - return Refactoring(_rename(script.usages(), new_name)) - - -def _rename(names, replace_str): - """ For both rename and inline. """ - order = sorted(names, key=lambda x: (x.module_path, x.line, x.column), - reverse=True) - - def process(path, old_lines, new_lines): - if new_lines is not None: # goto next file, save last - dct[path] = path, old_lines, new_lines - - dct = {} - current_path = object() - new_lines = old_lines = None - for name in order: - if name.in_builtin_module(): - continue - if current_path != name.module_path: - current_path = name.module_path - - process(current_path, old_lines, new_lines) - if current_path is not None: - # None means take the source that is a normal param. - with open(current_path) as f: - source = f.read() - - new_lines = common.splitlines(common.source_to_unicode(source)) - old_lines = new_lines[:] - - nr, indent = name.line, name.column - line = new_lines[nr - 1] - new_lines[nr - 1] = line[:indent] + replace_str + \ - line[indent + len(name.name):] - process(current_path, old_lines, new_lines) - return dct - - -def extract(script, new_name): - """ The `args` / `kwargs` params are the same as in `api.Script`. - :param operation: The refactoring operation to execute. - :type operation: str - :type source: str - :return: list of changed lines/changed files - """ - new_lines = common.splitlines(common.source_to_unicode(script.source)) - old_lines = new_lines[:] - - user_stmt = script._parser.user_stmt() - - # TODO care for multiline extracts - dct = {} - if user_stmt: - pos = script._pos - line_index = pos[0] - 1 - arr, index = helpers.array_for_pos(user_stmt, pos) - if arr is not None: - start_pos = arr[index].start_pos - end_pos = arr[index].end_pos - - # take full line if the start line is different from end line - e = end_pos[1] if end_pos[0] == start_pos[0] else None - start_line = new_lines[start_pos[0] - 1] - text = start_line[start_pos[1]:e] - for l in range(start_pos[0], end_pos[0] - 1): - text += '\n' + l - if e is None: - end_line = new_lines[end_pos[0] - 1] - text += '\n' + end_line[:end_pos[1]] - - # remove code from new lines - t = text.lstrip() - del_start = start_pos[1] + len(text) - len(t) - - text = t.rstrip() - del_end = len(t) - len(text) - if e is None: - new_lines[end_pos[0] - 1] = end_line[end_pos[1] - del_end:] - e = len(start_line) - else: - e = e - del_end - start_line = start_line[:del_start] + new_name + start_line[e:] - new_lines[start_pos[0] - 1] = start_line - new_lines[start_pos[0]:end_pos[0] - 1] = [] - - # add parentheses in multiline case - open_brackets = ['(', '[', '{'] - close_brackets = [')', ']', '}'] - if '\n' in text and not (text[0] in open_brackets and text[-1] == - close_brackets[open_brackets.index(text[0])]): - text = '(%s)' % text - - # add new line before statement - indent = user_stmt.start_pos[1] - new = "%s%s = %s" % (' ' * indent, new_name, text) - new_lines.insert(line_index, new) - dct[script.path] = script.path, old_lines, new_lines - return Refactoring(dct) - - -def inline(script): - """ - :type script: api.Script - """ - new_lines = common.splitlines(common.source_to_unicode(script.source)) - - dct = {} - - definitions = script.goto_assignments() - with common.ignored(AssertionError): - assert len(definitions) == 1 - stmt = definitions[0]._definition - usages = script.usages() - inlines = [r for r in usages - if not stmt.start_pos <= (r.line, r.column) <= stmt.end_pos] - inlines = sorted(inlines, key=lambda x: (x.module_path, x.line, x.column), - reverse=True) - expression_list = stmt.expression_list() - # don't allow multiline refactorings for now. - assert stmt.start_pos[0] == stmt.end_pos[0] - index = stmt.start_pos[0] - 1 - - line = new_lines[index] - replace_str = line[expression_list[0].start_pos[1]:stmt.end_pos[1] + 1] - replace_str = replace_str.strip() - # tuples need parentheses - if expression_list and isinstance(expression_list[0], pr.Array): - arr = expression_list[0] - if replace_str[0] not in ['(', '[', '{'] and len(arr) > 1: - replace_str = '(%s)' % replace_str - - # if it's the only assignment, remove the statement - if len(stmt.get_defined_names()) == 1: - line = line[:stmt.start_pos[1]] + line[stmt.end_pos[1]:] - - dct = _rename(inlines, replace_str) - # remove the empty line - new_lines = dct[script.path][2] - if line.strip(): - new_lines[index] = line - else: - new_lines.pop(index) - - return Refactoring(dct) diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/settings.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/settings.py deleted file mode 100644 index 13dcfd4..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/settings.py +++ /dev/null @@ -1,233 +0,0 @@ -""" -This module contains variables with global |jedi| settings. To change the -behavior of |jedi|, change the variables defined in :mod:`jedi.settings`. - -Plugins should expose an interface so that the user can adjust the -configuration. - - -Example usage:: - - from jedi import settings - settings.case_insensitive_completion = True - - -Completion output -~~~~~~~~~~~~~~~~~ - -.. autodata:: case_insensitive_completion -.. autodata:: add_dot_after_module -.. autodata:: add_bracket_after_function -.. autodata:: no_completion_duplicates - - -Filesystem cache -~~~~~~~~~~~~~~~~ - -.. autodata:: cache_directory -.. autodata:: use_filesystem_cache - - -Parser -~~~~~~ - -.. autodata:: fast_parser - - -Dynamic stuff -~~~~~~~~~~~~~ - -.. autodata:: dynamic_array_additions -.. autodata:: dynamic_params -.. autodata:: dynamic_params_for_other_modules -.. autodata:: additional_dynamic_modules -.. autodata:: auto_import_modules - - -.. _settings-recursion: - -Recursions -~~~~~~~~~~ - -Recursion settings are important if you don't want extremly -recursive python code to go absolutely crazy. First of there is a -global limit :data:`max_executions`. This limit is important, to set -a maximum amount of time, the completion may use. - -The default values are based on experiments while completing the |jedi| library -itself (inception!). But I don't think there's any other Python library that -uses recursion in a similarly extreme way. These settings make the completion -definitely worse in some cases. But a completion should also be fast. - -.. autodata:: max_until_execution_unique -.. autodata:: max_function_recursion_level -.. autodata:: max_executions_without_builtins -.. autodata:: max_executions -.. autodata:: max_dynamic_params_depth -.. autodata:: scale_call_signatures - - -Caching -~~~~~~~ - -.. autodata:: star_import_cache_validity -.. autodata:: call_signatures_validity - - -""" -import os -import platform - -# ---------------- -# completion output settings -# ---------------- - -case_insensitive_completion = True -""" -The completion is by default case insensitive. -""" - -add_bracket_after_function = False -""" -Adds an opening bracket after a function, because that's normal behaviour. -Removed it again, because in VIM that is not very practical. -""" - -no_completion_duplicates = True -""" -If set, completions with the same name don't appear in the output anymore, -but are in the `same_name_completions` attribute. -""" - -# ---------------- -# Filesystem cache -# ---------------- - -use_filesystem_cache = True -""" -Use filesystem cache to save once parsed files with pickle. -""" - -if platform.system().lower() == 'windows': - _cache_directory = os.path.join(os.getenv('APPDATA') or '~', 'Jedi', - 'Jedi') -elif platform.system().lower() == 'darwin': - _cache_directory = os.path.join('~', 'Library', 'Caches', 'Jedi') -else: - _cache_directory = os.path.join(os.getenv('XDG_CACHE_HOME') or '~/.cache', - 'jedi') -cache_directory = os.path.expanduser(_cache_directory) -""" -The path where all the caches can be found. - -On Linux, this defaults to ``~/.cache/jedi/``, on OS X to -``~/Library/Caches/Jedi/`` and on Windows to ``%APPDATA%\\Jedi\\Jedi\\``. -On Linux, if environment variable ``$XDG_CACHE_HOME`` is set, -``$XDG_CACHE_HOME/jedi`` is used instead of the default one. -""" - -# ---------------- -# parser -# ---------------- - -fast_parser = True -""" -Use the fast parser. This means that reparsing is only being done if -something has been changed e.g. to a function. If this happens, only the -function is being reparsed. -""" - -# ---------------- -# dynamic stuff -# ---------------- - -dynamic_array_additions = True -""" -check for `append`, etc. on arrays: [], {}, () as well as list/set calls. -""" - -dynamic_params = True -""" -A dynamic param completion, finds the callees of the function, which define -the params of a function. -""" - -dynamic_params_for_other_modules = True -""" -Do the same for other modules. -""" - -additional_dynamic_modules = [] -""" -Additional modules in which |jedi| checks if statements are to be found. This -is practical for IDEs, that want to administrate their modules themselves. -""" - -dynamic_flow_information = True -""" -Check for `isinstance` and other information to infer a type. -""" - -auto_import_modules = [ - 'hashlib', # setattr -] -""" -Modules that are not analyzed but imported, although they contain Python code. -This improves autocompletion for libraries that use ``setattr`` or -``globals()`` modifications a lot. -""" - -# ---------------- -# recursions -# ---------------- - -max_until_execution_unique = 50 -""" -This limit is probably the most important one, because if this limit is -exceeded, functions can only be one time executed. So new functions will be -executed, complex recursions with the same functions again and again, are -ignored. -""" - -max_function_recursion_level = 5 -""" -`max_function_recursion_level` is more about whether the recursions are -stopped in deepth or in width. The ratio beetween this and -`max_until_execution_unique` is important here. It stops a recursion (after -the number of function calls in the recursion), if it was already used -earlier. -""" - -max_executions_without_builtins = 200 -""" -.. todo:: Document this. -""" - -max_executions = 250 -""" -A maximum amount of time, the completion may use. -""" - -scale_call_signatures = 0.1 -""" -Because call_signatures is normally used on every single key hit, it has -to be faster than a normal completion. This is the factor that is used to -scale `max_executions` and `max_until_execution_unique`: -""" - -# ---------------- -# caching validity (time) -# ---------------- - -star_import_cache_validity = 60.0 -""" -In huge packages like numpy, checking all star imports on every completion -might be slow, therefore we do a star import caching, that lasts a certain -time span (in seconds). -""" - -call_signatures_validity = 3.0 -""" -Finding function calls might be slow (0.1-0.5s). This is not acceptible for -normal writing. Therefore cache it for a short time. -""" diff --git a/vim-plugins/bundle/jedi-vim/jedi/jedi/utils.py b/vim-plugins/bundle/jedi-vim/jedi/jedi/utils.py deleted file mode 100644 index 44f7c0d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/jedi/utils.py +++ /dev/null @@ -1,131 +0,0 @@ -""" -Utilities for end-users. -""" - -from __future__ import absolute_import -import __main__ -from collections import namedtuple -import logging -import traceback -import re -import os -import sys - -from jedi import Interpreter -from jedi.api.helpers import get_on_completion_name -from jedi import common - - -READLINE_DEBUG = False - - -def setup_readline(namespace_module=__main__): - """ - Install Jedi completer to :mod:`readline`. - - This function setups :mod:`readline` to use Jedi in Python interactive - shell. If you want to use a custom ``PYTHONSTARTUP`` file (typically - ``$HOME/.pythonrc.py``), you can add this piece of code:: - - try: - from jedi.utils import setup_readline - setup_readline() - except ImportError: - # Fallback to the stdlib readline completer if it is installed. - # Taken from http://docs.python.org/2/library/rlcompleter.html - print("Jedi is not installed, falling back to readline") - try: - import readline - import rlcompleter - readline.parse_and_bind("tab: complete") - except ImportError: - print("Readline is not installed either. No tab completion is enabled.") - - This will fallback to the readline completer if Jedi is not installed. - The readline completer will only complete names in the global namespace, - so for example:: - - ran - - will complete to ``range`` - - with both Jedi and readline, but:: - - range(10).cou - - will show complete to ``range(10).count`` only with Jedi. - - You'll also need to add ``export PYTHONSTARTUP=$HOME/.pythonrc.py`` to - your shell profile (usually ``.bash_profile`` or ``.profile`` if you use - bash). - - """ - if READLINE_DEBUG: - logging.basicConfig( - filename='/tmp/jedi.log', - filemode='a', - level=logging.DEBUG - ) - - class JediRL(object): - def complete(self, text, state): - """ - This complete stuff is pretty weird, a generator would make - a lot more sense, but probably due to backwards compatibility - this is still the way how it works. - - The only important part is stuff in the ``state == 0`` flow, - everything else has been copied from the ``rlcompleter`` std. - library module. - """ - if state == 0: - sys.path.insert(0, os.getcwd()) - # Calling python doesn't have a path, so add to sys.path. - try: - logging.debug("Start REPL completion: " + repr(text)) - interpreter = Interpreter(text, [namespace_module.__dict__]) - - lines = common.splitlines(text) - position = (len(lines), len(lines[-1])) - name = get_on_completion_name(interpreter._get_module(), lines, position) - before = text[:len(text) - len(name)] - completions = interpreter.completions() - except: - logging.error("REPL Completion error:\n" + traceback.format_exc()) - raise - finally: - sys.path.pop(0) - - self.matches = [before + c.name_with_symbols for c in completions] - try: - return self.matches[state] - except IndexError: - return None - - try: - import readline - except ImportError: - print("Jedi: Module readline not available.") - else: - readline.set_completer(JediRL().complete) - readline.parse_and_bind("tab: complete") - # jedi itself does the case matching - readline.parse_and_bind("set completion-ignore-case on") - # because it's easier to hit the tab just once - readline.parse_and_bind("set show-all-if-unmodified") - readline.parse_and_bind("set show-all-if-ambiguous on") - # don't repeat all the things written in the readline all the time - readline.parse_and_bind("set completion-prefix-display-length 2") - # No delimiters, Jedi handles that. - readline.set_completer_delims('') - - -def version_info(): - """ - Returns a namedtuple of Jedi's version, similar to Python's - ``sys.version_info``. - """ - Version = namedtuple('Version', 'major, minor, micro') - from jedi import __version__ - tupl = re.findall('[a-z]+|\d+', __version__) - return Version(*[x if i == 3 else int(x) for i, x in enumerate(tupl)]) diff --git a/vim-plugins/bundle/jedi-vim/jedi/pytest.ini b/vim-plugins/bundle/jedi-vim/jedi/pytest.ini deleted file mode 100644 index 6fafa94..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/pytest.ini +++ /dev/null @@ -1,10 +0,0 @@ -[pytest] -addopts = --doctest-modules - -# Ignore broken files in blackbox test directories -norecursedirs = .* docs completion refactor absolute_import namespace_package scripts extensions speed static_analysis not_in_sys_path buildout_project sample_venvs init_extension_module - -# Activate `clean_jedi_cache` fixture for all tests. This should be -# fine as long as we are using `clean_jedi_cache` as a session scoped -# fixture. -usefixtures = clean_jedi_cache diff --git a/vim-plugins/bundle/jedi-vim/jedi/scripts/memory_check.py b/vim-plugins/bundle/jedi-vim/jedi/scripts/memory_check.py deleted file mode 100755 index 7bbcad2..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/scripts/memory_check.py +++ /dev/null @@ -1,58 +0,0 @@ -#! /usr/bin/env python -""" -This is a convenience script to test the speed and memory usage of Jedi with -large libraries. - -Each library is preloaded by jedi, recording the time and memory consumed by -each operation. - -You can provide additional libraries via command line arguments. - -Note: This requires the psutil library, available on PyPI. -""" -import time -import sys -import os -import psutil -sys.path.insert(0, os.path.abspath(os.path.dirname(__file__) + '/..')) -import jedi - - -def used_memory(): - """Return the total MB of System Memory in use.""" - return psutil.virtual_memory().used / 2 ** 20 - - -def profile_preload(mod): - """Preload a module into Jedi, recording time and memory used.""" - base = used_memory() - t0 = time.time() - jedi.preload_module(mod) - elapsed = time.time() - t0 - used = used_memory() - base - return elapsed, used - - -def main(mods): - """Preload the modules, and print the time and memory used.""" - t0 = time.time() - baseline = used_memory() - print('Time (s) | Mem (MB) | Package') - print('------------------------------') - for mod in mods: - elapsed, used = profile_preload(mod) - if used > 0: - print('%8.2f | %8d | %s' % (elapsed, used, mod)) - print('------------------------------') - elapsed = time.time() - t0 - used = used_memory() - baseline - print('%8.2f | %8d | %s' % (elapsed, used, 'Total')) - - -if __name__ == '__main__': - if sys.argv[1:]: - mods = sys.argv[1:] - else: - mods = ['re', 'numpy', 'scipy', 'scipy.sparse', 'scipy.stats', - 'wx', 'decimal', 'PyQt4.QtGui', 'PySide.QtGui', 'Tkinter'] - main(mods) diff --git a/vim-plugins/bundle/jedi-vim/jedi/scripts/profile.py b/vim-plugins/bundle/jedi-vim/jedi/scripts/profile.py deleted file mode 100755 index 44028b0..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/scripts/profile.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env python -""" -Profile a piece of Python code with ``cProfile``. Tries a completion on a -certain piece of code. - -Usage: - profile.py [] [-n ] [-d] [-o] [-s ] - profile.py -h | --help - -Options: - -h --help Show this screen. - -n Number of passes before profiling [default: 1]. - -d --debug Enable Jedi internal debugging. - -o --omit Omit profiler, just do a normal run. - -s Sort the profile results, e.g. cum, name [default: time]. -""" - -import time -import cProfile - -from docopt import docopt -import jedi - - -def run(code, index): - start = time.time() - result = jedi.Script(code).completions() - print('Used %ss for the %sth run.' % (time.time() - start, index + 1)) - return result - - -def main(args): - code = args[''] - n = int(args['-n']) - for i in range(n): - run(code, i) - - jedi.set_debug_function(notices=args['--debug']) - if args['--omit']: - run(code, n) - else: - cProfile.runctx('run(code, n)', globals(), locals(), sort=args['-s']) - - -if __name__ == '__main__': - args = docopt(__doc__) - if args[''] is None: - args[''] = 'import numpy; numpy.array([0])' - main(args) diff --git a/vim-plugins/bundle/jedi-vim/jedi/scripts/wx_check.py b/vim-plugins/bundle/jedi-vim/jedi/scripts/wx_check.py deleted file mode 100755 index 1e48c39..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/scripts/wx_check.py +++ /dev/null @@ -1,61 +0,0 @@ -#! /usr/bin/env python -""" -Depends: ``objgraph`` (third party Python library) - -``wx._core`` is a very nice module to test Jedi's speed and memory performance -on big Python modules. Its size is ~16kLOC (one file). It also seems to look -like a typical big Python modules. A mix between a lot of different Python -things. - -You can view a markup version of it here: -http://svn.wxwidgets.org/viewvc/wx/wxPython/trunk/src/gtk/_core.py?view=markup -""" - -import resource -import time -import sys -try: - import urllib.request as urllib2 -except ImportError: - import urllib2 -import gc -from os.path import abspath, dirname - -import objgraph - -sys.path.insert(0, dirname(dirname(abspath(__file__)))) -import jedi - - -def process_memory(): - """ - In kB according to - http://stackoverflow.com/questions/938733/total-memory-used-by-python-process - """ - return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss - -uri = 'http://svn.wxwidgets.org/viewvc/wx/wxPython/trunk/src/gtk/_core.py?revision=74740&content-type=text%2Fplain&view=co' - -wx_core = urllib2.urlopen(uri).read() - - -def run(): - start = time.time() - print('Process Memory before: %skB' % process_memory()) - # After this the module should be cached. - # Need to invent a path so that it's really cached. - jedi.Script(wx_core, path='foobar.py').completions() - - gc.collect() # make sure that it's all fair and the gc did its job. - print('Process Memory after: %skB' % process_memory()) - - print(objgraph.most_common_types(limit=50)) - print('\nIt took %s seconds to parse the file.' % (time.time() - start)) - - -print('First pass') -run() -print('\nSecond pass') -run() -print('\nThird pass') -run() diff --git a/vim-plugins/bundle/jedi-vim/jedi/setup.py b/vim-plugins/bundle/jedi-vim/jedi/setup.py deleted file mode 100755 index 89ff880..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/setup.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python - -from __future__ import with_statement -try: - from setuptools import setup -except ImportError: - # Distribute is not actually required to install - from distutils.core import setup - -__AUTHOR__ = 'David Halter' -__AUTHOR_EMAIL__ = 'davidhalter88@gmail.com' - -readme = open('README.rst').read() + '\n\n' + open('CHANGELOG.rst').read() -packages = ['jedi', 'jedi.parser', 'jedi.parser.pgen2', - 'jedi.evaluate', 'jedi.evaluate.compiled', 'jedi.api'] - -import jedi - -setup(name='jedi', - version=jedi.__version__, - description='An autocompletion tool for Python that can be used for text editors.', - author=__AUTHOR__, - author_email=__AUTHOR_EMAIL__, - maintainer=__AUTHOR__, - maintainer_email=__AUTHOR_EMAIL__, - url='https://github.com/davidhalter/jedi', - license='MIT', - keywords='python completion refactoring vim', - long_description=readme, - packages=packages, - package_data={'jedi': ['evaluate/compiled/fake/*.pym', 'parser/grammar*.txt']}, - platforms=['any'], - classifiers=[ - 'Development Status :: 4 - Beta', - 'Environment :: Plugins', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: MIT License', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - 'Topic :: Software Development :: Libraries :: Python Modules', - 'Topic :: Text Editors :: Integrated Development Environments (IDE)', - 'Topic :: Utilities', - ], - ) diff --git a/vim-plugins/bundle/jedi-vim/jedi/sith.py b/vim-plugins/bundle/jedi-vim/jedi/sith.py deleted file mode 100755 index 903ef0e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/sith.py +++ /dev/null @@ -1,220 +0,0 @@ -#!/usr/bin/env python - -""" -Sith attacks (and helps debugging) Jedi. - -Randomly search Python files and run Jedi on it. Exception and used -arguments are recorded to ``./record.json`` (specified by --record):: - - ./sith.py random /path/to/sourcecode - -Redo recorded exception:: - - ./sith.py redo - -Show recorded exception:: - - ./sith.py show - -Run a specific operation - - ./sith.py run - -Where operation is one of completions, goto_assignments, goto_definitions, -usages, or call_signatures. - -Note: Line numbers start at 1; columns start at 0 (this is consistent with -many text editors, including Emacs). - -Usage: - sith.py [--pdb|--ipdb|--pudb] [-d] [-n=] [-f] [--record=] random [-s] [] - sith.py [--pdb|--ipdb|--pudb] [-d] [-f] [--record=] redo - sith.py [--pdb|--ipdb|--pudb] [-d] [-f] run - sith.py show [--record=] - sith.py -h | --help - -Options: - -h --help Show this screen. - --record= Exceptions are recorded in here [default: record.json]. - -f, --fs-cache By default, file system cache is off for reproducibility. - -n, --maxtries= Maximum of random tries [default: 100] - -d, --debug Jedi print debugging when an error is raised. - -s Shows the path/line numbers of every completion before it starts. - --pdb Launch pdb when error is raised. - --ipdb Launch ipdb when error is raised. - --pudb Launch pudb when error is raised. -""" - -from __future__ import print_function, division, unicode_literals -from docopt import docopt - -import json -import os -import random -import sys -import traceback - -import jedi - - -class SourceFinder(object): - _files = None - - @staticmethod - def fetch(file_path): - if not os.path.isdir(file_path): - yield file_path - return - for root, dirnames, filenames in os.walk(file_path): - for name in filenames: - if name.endswith('.py'): - yield os.path.join(root, name) - - @classmethod - def files(cls, file_path): - if cls._files is None: - cls._files = list(cls.fetch(file_path)) - return cls._files - - -class TestCase(object): - def __init__(self, operation, path, line, column, traceback=None): - if operation not in self.operations: - raise ValueError("%s is not a valid operation" % operation) - - # Set other attributes - self.operation = operation - self.path = path - self.line = line - self.column = column - self.traceback = traceback - - @classmethod - def from_cache(cls, record): - with open(record) as f: - args = json.load(f) - return cls(*args) - - operations = [ - 'completions', 'goto_assignments', 'goto_definitions', 'usages', - 'call_signatures'] - - @classmethod - def generate(cls, file_path): - operation = random.choice(cls.operations) - - path = random.choice(SourceFinder.files(file_path)) - with open(path) as f: - source = f.read() - lines = source.splitlines() - - if not lines: - lines = [''] - line = random.randint(1, len(lines)) - column = random.randint(0, len(lines[line - 1])) - return cls(operation, path, line, column) - - def run(self, debugger, record=None, print_result=False): - try: - with open(self.path) as f: - self.script = jedi.Script(f.read(), self.line, self.column, self.path) - kwargs = {} - if self.operation == 'goto_assignments': - kwargs['follow_imports'] = random.choice([False, True]) - - self.objects = getattr(self.script, self.operation)(**kwargs) - if print_result: - print("{path}: Line {line} column {column}".format(**self.__dict__)) - self.show_location(self.line, self.column) - self.show_operation() - except jedi.NotFoundError: - pass - except Exception: - self.traceback = traceback.format_exc() - if record is not None: - call_args = (self.operation, self.path, self.line, self.column, self.traceback) - with open(record, 'w') as f: - json.dump(call_args, f) - self.show_errors() - if debugger: - einfo = sys.exc_info() - pdb = __import__(debugger) - if debugger == 'pudb': - pdb.post_mortem(einfo[2], einfo[0], einfo[1]) - else: - pdb.post_mortem(einfo[2]) - exit(1) - - def show_location(self, lineno, column, show=3): - # Three lines ought to be enough - lower = lineno - show if lineno - show > 0 else 0 - prefix = ' |' - for i, line in enumerate(self.script.source.split('\n')[lower:lineno]): - print(prefix, lower + i + 1, line) - print(prefix, ' ', ' ' * (column + len(str(lineno))), '^') - - def show_operation(self): - print("%s:\n" % self.operation.capitalize()) - if self.operation == 'completions': - self.show_completions() - else: - self.show_definitions() - - def show_completions(self): - for completion in self.objects: - print(completion.name) - - def show_definitions(self): - for completion in self.objects: - print(completion.desc_with_module) - if completion.module_path is None: - continue - if os.path.abspath(completion.module_path) == os.path.abspath(self.path): - self.show_location(completion.line, completion.column) - - def show_errors(self): - print(self.traceback) - print(("Error with running Script(...).{operation}() with\n" - "\tpath: {path}\n" - "\tline: {line}\n" - "\tcolumn: {column}").format(**self.__dict__)) - - -def main(arguments): - debugger = 'pdb' if arguments['--pdb'] else \ - 'ipdb' if arguments['--ipdb'] else \ - 'pudb' if arguments['--pudb'] else None - record = arguments['--record'] - - jedi.settings.use_filesystem_cache = arguments['--fs-cache'] - if arguments['--debug']: - jedi.set_debug_function() - - if arguments['redo'] or arguments['show']: - t = TestCase.from_cache(record) - if arguments['show']: - t.show_errors() - else: - t.run(debugger) - elif arguments['run']: - TestCase( - arguments[''], arguments[''], - int(arguments['']), int(arguments['']) - ).run(debugger, print_result=True) - else: - for _ in range(int(arguments['--maxtries'])): - t = TestCase.generate(arguments[''] or '.') - if arguments['-s']: - print('%s %s %s %s ' % (t.operation, t.path, t.line, t.column)) - sys.stdout.flush() - else: - print('.', end='') - t.run(debugger, record) - - sys.stdout.flush() - print() - - -if __name__ == '__main__': - arguments = docopt(__doc__) - main(arguments) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/blabla_test_documentation.py b/vim-plugins/bundle/jedi-vim/jedi/test/blabla_test_documentation.py deleted file mode 100644 index db31bf0..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/blabla_test_documentation.py +++ /dev/null @@ -1,30 +0,0 @@ -# todo probably remove test_integration_keyword - -def test_keyword_doc(): - r = list(Script("or", 1, 1).goto_definitions()) - assert len(r) == 1 - assert len(r[0].doc) > 100 - - r = list(Script("asfdasfd", 1, 1).goto_definitions()) - assert len(r) == 0 - - k = Script("fro").completions()[0] - imp_start = '\nThe ``import' - assert k.raw_doc.startswith(imp_start) - assert k.doc.startswith(imp_start) - - -def test_blablabla(): - defs = Script("import").goto_definitions() - assert len(defs) == 1 and [1 for d in defs if d.doc] - # unrelated to #44 - - -def test_operator_doc(self): - r = list(Script("a == b", 1, 3).goto_definitions()) - assert len(r) == 1 - assert len(r[0].doc) > 100 - -def test_lambda(): - defs = Script('lambda x: x', column=0).goto_definitions() - assert [d.type for d in defs] == ['keyword'] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/__init__.py deleted file mode 100644 index 374dd94..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" needed for some modules to test against packages. """ - -some_variable = 1 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/arrays.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/arrays.py deleted file mode 100644 index dcbbe37..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/arrays.py +++ /dev/null @@ -1,430 +0,0 @@ -# ----------------- -# basic array lookups -# ----------------- - - -#? int() -[1,""][0] -#? str() -[1,""][1] -#? int() str() -[1,""][2] -#? int() str() -[1,""][20] -#? int() str() -[1,""][str(hello)] - -a = list() -#? list() -[a][0] - -#? list() -[[a,a,a]][2][100] - -c = [[a,""]] -#? str() -c[0][1] - -b = [6,7] - -#? int() -b[8-7] - -# ----------------- -# Slices -# ----------------- -#? list() -b[8:] - -#? list() -b[int():] - -#? list() -b[:] - - -class _StrangeSlice(): - def __getitem__(self, sliced): - return sliced - -# Should not result in an error, just because the slice itself is returned. -#? slice() -_StrangeSlice()[1:2] - - -# ----------------- -# iterable multiplication -# ----------------- -a = ['']*2 -#? list() -a - -# ----------------- -# tuple assignments -# ----------------- -a1, b1 = (1, "") -#? int() -a1 -#? str() -b1 - -(a2, b2) = (1, "") -#? int() -a2 -#? str() -b2 - -# list assignment -[list1, list2] = (1, "") -#? int() -list1 -#? str() -list2 - -[list3, list4] = [1, ""] -#? int() -list3 -#? str() -list4 - -# ----------------- -# subtuple assignment -# ----------------- -(a3, (b3, c3)) = (1, ("", list)) -#? list -c3 - -a4, (b4, c4) = (1, ("", list)) -#? list -c4 -#? int() -a4 -#? str() -b4 - - -# ----------------- -# multiple assignments -# ----------------- -a = b = 1 -#? int() -a -#? int() -b - -(a, b) = (c, (e, f)) = ('2', (3, 4)) -#? str() -a -#? tuple() -b -#? str() -c -#? int() -e -#? int() -f - - -# ----------------- -# unnessecary braces -# ----------------- -a = (1) -#? int() -a -#? int() -(1) -#? int() -((1)) -#? int() -((1)+1) - -u, v = 1, "" -#? int() -u - -((u1, v1)) = 1, "" -#? int() -u1 -#? int() -(u1) - -(a), b = 1, '' -#? int() -a - -def a(): return '' -#? str() -(a)() -#? str() -(a)().replace() -#? int() -(tuple).index() -#? int() -(tuple)().index() - -class C(): - def __init__(self): - self.a = (str()).upper() - -#? str() -C().a - -# ----------------- -# imbalanced sides -# ----------------- -(f, g) = (1,) -#? int() -f -#? [] -g. - -(f, g, h) = (1,'') -#? int() -f -#? str() -g -#? [] -h. - -(f1, g1) = 1 -#? [] -f1. -#? [] -g1. - -(f, g) = (1,'',1.0) -#? int() -f -#? str() -g - -# ----------------- -# dicts -# ----------------- -dic2 = {'asdf': 3, 'b': 'str'} -#? int() -dic2['asdf'] - -# string literal -#? int() -dic2[r'asdf'] -#? int() -dic2[r'asdf'] -#? int() -dic2[r'as' 'd' u'f'] -#? int() str() -dic2['just_something'] - -# unpacking -a, b = dic2 -#? str() -a -a, b = {1: 'x', 2.0: 1j} -#? int() float() -a -#? int() float() -b - - -def f(): - """ github #83 """ - r = {} - r['status'] = (200, 'ok') - return r - -#? dict() -f() - -# completion within dicts -#? 9 ['str'] -{str: str} - -# iteration problem (detected with sith) -d = dict({'a':''}) -def y(a): - return a -#? -y(**d) - -# problem with more complicated casts -dic = {str(key): ''} -#? str() -dic[''] - - -for x in {1: 3.0, '': 1j}: - #? int() str() - x - -# ----------------- -# with variable as index -# ----------------- -a = (1, "") -index = 1 -#? str() -a[index] - -# these should just ouput the whole array -index = int -#? int() str() -a[index] -index = int() -#? int() str() -a[index] - -# dicts -index = 'asdf' - -dic2 = {'asdf': 3, 'b': 'str'} -#? int() -dic2[index] - -# ----------------- -# __getitem__ -# ----------------- - -class GetItem(): - def __getitem__(self, index): - return 1.0 - -#? float() -GetItem()[0] - -class GetItem(): - def __init__(self, el): - self.el = el - - def __getitem__(self, index): - return self.el - -#? str() -GetItem("")[1] - -class GetItemWithList(): - def __getitem__(self, index): - return [1, 1.0, 's'][index] - -#? float() -GetItemWithList()[1] - -for i in 0, 2: - #? int() str() - GetItemWithList()[i] - - -# With super -class SuperYeah(list): - def __getitem__(self, index): - return super()[index] - -#? -SuperYeah([1])[0] -#? -SuperYeah()[0] - -# ----------------- -# conversions -# ----------------- - -a = [1, ""] -#? int() str() -list(a)[1] - -#? int() str() -list(a)[0] -#? -set(a)[0] - -#? int() str() -list(set(a))[1] -#? int() str() -list(list(set(a)))[1] - -# does not yet work, because the recursion catching is not good enough (catches # to much) -#? int() str() -list(set(list(set(a))))[1] -#? int() str() -list(set(set(a)))[1] - -# frozenset -#? int() str() -list(frozenset(a))[1] -#? int() str() -list(set(frozenset(a)))[1] - -# iter -#? int() str() -list(iter(a))[1] -#? int() str() -list(iter(list(set(a))))[1] - -# tuple -#? int() str() -tuple(a)[1] -#? int() str() -tuple(list(set(a)))[1] - -#? int() -tuple({1})[0] -#? int() -tuple((1,))[0] - -# implementation detail for lists, should not be visible -#? [] -list().__iterable - -# With a list comprehension. -for i in set(a for a in [1]): - #? int() - i - - -# ----------------- -# Merged Arrays -# ----------------- - -for x in [1] + ['']: - #? int() str() - x - -# ----------------- -# For loops with attribute assignment. -# ----------------- -def test_func(): - x = 'asdf' - for x.something in [6,7,8]: - pass - #? str() - x - - for x.something, b in [[6, 6.0]]: - pass - #? str() - x - - -# ----------------- -# PEP 3132 Extended Iterable Unpacking (star unpacking) -# ----------------- - -a, *b, c = [1, 'b', list, dict] -#? int() -a -#? str() -b -#? list -c - -# Not valid syntax -a, *b, *c = [1, 'd', list] -#? int() -a -#? str() -b -#? list -c - -lc = [x for a, *x in [(1, '', 1.0)]] - -#? -lc[0][0] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/basic.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/basic.py deleted file mode 100644 index 5b4f909..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/basic.py +++ /dev/null @@ -1,293 +0,0 @@ -# ----------------- -# cursor position -# ----------------- -#? 0 int -int() -#? 3 int -int() -#? 4 str -int(str) - - -# ----------------- -# should not complete -# ----------------- -#? [] -. -#? [] -str.. -#? [] -a(0):. - -# ----------------- -# if/else/elif -# ----------------- - -if (random.choice([0, 1])): - 1 -elif(random.choice([0, 1])): - a = 3 -else: - a = '' -#? int() str() -a -def func(): - if random.choice([0, 1]): - 1 - elif(random.choice([0, 1])): - a = 3 - else: - a = '' - #? int() str() - return a -#? int() str() -func() - -# ----------------- -# keywords -# ----------------- - -#? list() -assert [] - -def focus_return(): - #? list() - return [] - - -# ----------------- -# for loops -# ----------------- - -for a in [1,2]: - #? int() - a - -for a1 in 1,"": - #? int() str() - a1 - -for a3, b3 in (1,""), (1,""), (1,""): - #? int() - a3 - #? str() - b3 - -for a4, (b4, c4) in (1,("", list)), (1,("", list)): - #? int() - a4 - #? str() - b4 - #? list - c4 - -a = [] -for i in [1,'']: - #? int() str() - i - a += [i] - -#? int() str() -a[0] - -for i in list([1,'']): - #? int() str() - i - -#? int() str() -for x in [1,'']: x - -a = [] -b = [1.0,''] -for i in b: - a += [i] - -#? float() str() -a[0] - -for i in [1,2,3]: - #? int() - i -else: - i - - -# ----------------- -# range() -# ----------------- -for i in range(10): - #? int() - i - -# ----------------- -# ternary operator -# ----------------- - -a = 3 -b = '' if a else set() -#? str() set() -b - -def ret(a): - return ['' if a else set()] - -#? str() set() -ret(1)[0] -#? str() set() -ret()[0] - -# ----------------- -# with statements -# ----------------- - -with open('') as f: - #? ['closed'] - f.closed - for line in f: - #? str() - line - -with open('') as f1, open('') as f2: - #? ['closed'] - f1.closed - #? ['closed'] - f2.closed - - -# ----------------- -# global vars -# ----------------- - -def global_define(): - global global_var_in_func - global_var_in_func = 3 - -#? int() -global_var_in_func - - -def funct1(): - # From issue #610 - global global_dict_var - global_dict_var = dict() -def funct2(): - global global_dict_var - #? dict() - global_dict_var - - -# ----------------- -# within docstrs -# ----------------- - -def a(): - """ - #? ['global_define'] - global_define - """ - pass - -#? -# str literals in comment """ upper - -def completion_in_comment(): - #? ['Exception'] - # might fail because the comment is not a leaf: Exception - pass - -some_word -#? ['Exception'] -# Very simple comment completion: Exception -# Commment after it - -# ----------------- -# magic methods -# ----------------- - -class A(object): pass -class B(): pass - -#? ['__init__'] -A.__init__ -#? ['__init__'] -B.__init__ - -#? ['__init__'] -int().__init__ - -# ----------------- -# comments -# ----------------- - -class A(): - def __init__(self): - self.hello = {} # comment shouldn't be a string -#? dict() -A().hello - -# ----------------- -# unicode -# ----------------- -a = 'smörbröd' -#? str() -a -xyz = 'smörbröd.py' -if 1: - #? str() - xyz - -#? -¹. - -# ----------------- -# exceptions -# ----------------- -try: - import math -except ImportError as i_a: - #? ['i_a'] - i_a - #? ImportError() - i_a -try: - import math -except ImportError, i_b: - # TODO check this only in Python2 - ##? ['i_b'] - i_b - ##? ImportError() - i_b - - -class MyException(Exception): - def __init__(self, my_attr): - self.my_attr = my_attr - -try: - raise MyException(1) -except MyException as e: - #? ['my_attr'] - e.my_attr - #? 22 ['my_attr'] - for x in e.my_attr: - pass - - -# ----------------- -# continuations -# ----------------- - -foo = \ -1 -#? int() -foo - -# ----------------- -# module attributes -# ----------------- - -# Don't move this to imports.py, because there's a star import. -#? str() -__file__ -#? ['__file__'] -__file__ diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/classes.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/classes.py deleted file mode 100644 index 6aa226b..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/classes.py +++ /dev/null @@ -1,470 +0,0 @@ -def find_class(): - """ This scope is special, because its in front of TestClass """ - #? ['ret'] - TestClass.ret - if 1: - #? ['ret'] - TestClass.ret - -class FindClass(): - #? [] - TestClass.ret - if a: - #? [] - TestClass.ret - - def find_class(self): - #? ['ret'] - TestClass.ret - if 1: - #? ['ret'] - TestClass.ret - -#? [] -FindClass().find_class.self -#? [] -FindClass().find_class.self.find_class - -# set variables, which should not be included, because they don't belong to the -# class -second = 1 -second = "" -class TestClass(object): - var_class = TestClass(1) - - def __init__(self2, first_param, second_param, third=1.0): - self2.var_inst = first_param - self2.second = second_param - self2.first = first_param - a = 3 - - def var_func(self): - return 1 - - def get_first(self): - # traversal - self.second_new = self.second - return self.var_inst - - def values(self): - self.var_local = 3 - #? ['var_class', 'var_func', 'var_inst', 'var_local'] - self.var_ - - def ret(self, a1): - # should not know any class functions! - #? [] - values - #? ['return'] - ret - return a1 - -# should not work -#? [] -var_local -#? [] -var_inst -#? [] -var_func - -# instance -inst = TestClass(1) - -#? ['var_class', 'var_func', 'var_inst', 'var_local'] -inst.var - -#? ['var_class', 'var_func'] -TestClass.var - -#? int() -inst.var_local -#? [] -TestClass.var_local. - -#? int() -TestClass().ret(1) -# Should not return int(), because we want the type before `.ret(1)`. -#? 11 TestClass() -TestClass().ret(1) -#? int() -inst.ret(1) - -myclass = TestClass(1, '', 3.0) -#? int() -myclass.get_first() -#? [] -myclass.get_first.real - -# too many params -#? int() -TestClass(1,1,1).var_inst - -# too few params -#? int() -TestClass(1).first -#? [] -TestClass(1).second. - -# complicated variable settings in class -#? str() -myclass.second -#? str() -myclass.second_new - -# multiple classes / ordering -ints = TestClass(1, 1.0) -strs = TestClass("", '') -#? float() -ints.second -#? str() -strs.second - -#? ['var_class'] -TestClass.var_class.var_class.var_class.var_class - -# operations (+, *, etc) shouldn't be InstanceElements - #246 -class A(): - def __init__(self): - self.addition = 1 + 2 -#? int() -A().addition - -# should also work before `=` -#? 8 int() -A().addition = None -#? 8 int() -A(1).addition = None -#? 1 A -A(1).addition = None -a = A() -#? 8 int() -a.addition = None - - -# ----------------- -# inheritance -# ----------------- - -class Base(object): - def method_base(self): - return 1 - -class SuperClass(Base): - class_super = 3 - def __init__(self): - self.var_super = '' - def method_super(self): - self.var2_super = list - -class Mixin(SuperClass): - def method_mixin(self): - return int - -#? 20 SuperClass -class SubClass(SuperClass): - class_sub = 3 - def __init__(self): - self.var_sub = '' - def method_sub(self): - self.var_sub = list - return tuple - -instance = SubClass() - -#? ['method_base', 'method_sub', 'method_super'] -instance.method_ -#? ['var2_super', 'var_sub', 'var_super'] -instance.var -#? ['class_sub', 'class_super'] -instance.class_ - -#? ['method_base', 'method_sub', 'method_super'] -SubClass.method_ -#? [] -SubClass.var -#? ['class_sub', 'class_super'] -SubClass.class_ - -# ----------------- -# inheritance of builtins -# ----------------- - -class Base(str): - pass - -#? ['upper'] -Base.upper -#? ['upper'] -Base().upper - -# ----------------- -# dynamic inheritance -# ----------------- - -class Angry(object): - def shout(self): - return 'THIS IS MALARKEY!' - -def classgetter(): - return Angry - -class Dude(classgetter()): - def react(self): - #? ['shout'] - self.s - -# ----------------- -# __call__ -# ----------------- - -class CallClass(): - def __call__(self): - return 1 - -#? int() -CallClass()() - -# ----------------- -# variable assignments -# ----------------- - -class V: - def __init__(self, a): - self.a = a - - def ret(self): - return self.a - - d = b - b = ret - if 1: - c = b - -#? int() -V(1).b() -#? int() -V(1).c() -#? -V(1).d() -# Only keywords should be possible to complete. -#? ['is', 'in', 'not', 'and', 'or', 'if'] -V(1).d() - - -# ----------------- -# ordering -# ----------------- -class A(): - def b(self): - #? int() - a_func() - #? str() - self.a_func() - return a_func() - - def a_func(self): - return "" - -def a_func(): - return 1 - -#? int() -A().b() -#? str() -A().a_func() - -# ----------------- -# nested classes -# ----------------- -class A(): - class B(): - pass - def b(self): - return 1.0 - -#? float() -A().b() - -class A(): - def b(self): - class B(): - def b(self): - return [] - return B().b() - -#? list() -A().b() - -# ----------------- -# ducktyping -# ----------------- - -def meth(self): - return self.a, self.b - -class WithoutMethod(): - a = 1 - def __init__(self): - self.b = 1.0 - def blub(self): - return self.b - m = meth - -class B(): - b = '' - -a = WithoutMethod().m() -#? int() -a[0] -#? float() -a[1] - -#? float() -WithoutMethod.blub(WithoutMethod()) -#? str() -WithoutMethod.blub(B()) - -# ----------------- -# __getattr__ / getattr() / __getattribute__ -# ----------------- - -#? str().upper -getattr(str(), 'upper') -#? str.upper -getattr(str, 'upper') - -# some strange getattr calls -#? -getattr(str, 1) -#? -getattr() -#? -getattr(str) -#? -getattr(getattr, 1) -#? -getattr(str, []) - - -class Base(): - def ret(self, b): - return b - -class Wrapper(): - def __init__(self, obj): - self.obj = obj - - def __getattr__(self, name): - return getattr(self.obj, name) - -class Wrapper2(): - def __getattribute__(self, name): - return getattr(Base(), name) - -#? int() -Wrapper(Base()).ret(3) - -#? int() -Wrapper2(Base()).ret(3) - -class GetattrArray(): - def __getattr__(self, name): - return [1] - -#? int() -GetattrArray().something[0] - - -# ----------------- -# private vars -# ----------------- -class PrivateVar(): - def __init__(self): - self.__var = 1 - #? int() - self.__var - #? ['__var'] - self.__var -#? [] -PrivateVar().__var -#? -PrivateVar().__var - -# ----------------- -# super -# ----------------- -class Super(object): - a = 3 - def return_sup(self): - return 1 - -class TestSuper(Super): - #? - super() - def test(self): - #? Super() - super() - #? ['a'] - super().a - if 1: - #? Super() - super() - def a(): - #? - super() - - def return_sup(self): - #? int() - return super().return_sup() - -#? int() -TestSuper().return_sup() - - -# ----------------- -# if flow at class level -# ----------------- -class TestX(object): - def normal_method(self): - return 1 - - if True: - def conditional_method(self): - var = self.normal_method() - #? int() - var - return 2 - - def other_method(self): - var = self.conditional_method() - #? int() - var - -# ----------------- -# mro method -# ----------------- - -class A(object): - a = 3 - -#? ['mro'] -A.mro -#? [] -A().mro - - -# ----------------- -# mro resolution -# ----------------- - -class B(A()): - b = 3 - -#? -B.a -#? -B().a -#? int() -B.b -#? int() -B().b diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/completion.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/completion.py deleted file mode 100644 index 91bc2aa..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/completion.py +++ /dev/null @@ -1,26 +0,0 @@ -""" -Special cases of completions (typically special positions that caused issues -with context parsing. -""" - -def pass_decorator(func): - return func - - -def x(): - return ( - 1, -#? ["tuple"] -tuple - ) - - # Comment just somewhere - - -class MyClass: - @pass_decorator - def x(foo, -#? 5 ["tuple"] -tuple, - ): - return 1 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/complex.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/complex.py deleted file mode 100644 index 3ea8327..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/complex.py +++ /dev/null @@ -1,14 +0,0 @@ -""" Mostly for stupid error reports of @dbrgn. :-) """ - -import time - -class Foo(object): - global time - asdf = time - -def asdfy(): - return Foo - -xorz = getattr(asdfy()(), 'asdf') -#? time -xorz diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/comprehensions.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/comprehensions.py deleted file mode 100644 index a0a709c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/comprehensions.py +++ /dev/null @@ -1,200 +0,0 @@ -# ----------------- -# list comprehensions -# ----------------- - -# basics: - -a = ['' for a in [1]] -#? str() -a[0] -#? ['insert'] -a.insert - -a = [a for a in [1]] -#? int() -a[0] - -y = 1.0 -# Should not leak. -[y for y in [3]] -#? float() -y - -a = [a for a in (1, 2)] -#? int() -a[0] - -a = [a for a,b in [(1,'')]] -#? int() -a[0] - -arr = [1,''] -a = [a for a in arr] -#? int() -a[0] -#? str() -a[1] -#? int() str() -a[2] - -a = [a if 1.0 else '' for a in [1] if [1.0]] -#? int() str() -a[0] - -# name resolve should be correct -left, right = 'a', 'b' -left, right = [x for x in (left, right)] -#? str() -left - -# with a dict literal -#? int() -[a for a in {1:'x'}][0] - -# list comprehensions should also work in combination with functions -def listen(arg): - for x in arg: - #? str() - x - -listen(['' for x in [1]]) -#? -([str for x in []])[0] - -# with a set literal -#? int() -[a for a in {1, 2, 3}][0] - -# ----------------- -# nested list comprehensions -# ----------------- - -b = [a for arr in [[1]] for a in arr] -#? int() -b[0] - -b = [a for arr in [[1]] if '' for a in arr if ''] -#? int() -b[0] - -b = [b for arr in [[[1.0]]] for a in arr for b in a] -#? float() -b[0] - -# jedi issue #26 -#? list() -a = [[int(v) for v in line.strip().split() if v] for line in ["123", "123", "123"] if line] -#? list() -a[0] -#? int() -a[0][0] - -# ----------------- -# generator comprehensions -# ----------------- - -left, right = (i for i in (1, '')) - -#? int() -left -#? str() -right - -gen = (i for i in (1,)) - -#? int() -next(gen) -#? -gen[0] - -gen = (a for arr in [[1.0]] for a in arr) -#? float() -next(gen) - -#? int() -(i for i in (1,)).send() - -# issues with different formats -left, right = (i for i in - ('1', 2)) -#? str() -left -#? int() -right - -# ----------------- -# dict comprehensions -# ----------------- - -#? int() -list({a - 1: 3 for a in [1]})[0] - -d = {a - 1: b for a, b in {1: 'a', 3: 1.0}.items()} -#? int() -list(d)[0] -#? str() float() -d.values()[0] -#? str() -d[0] -#? float() str() -d[1] -#? float() -d[2] - -# ----------------- -# set comprehensions -# ----------------- - -#? set() -{a - 1 for a in [1]} - -#? set() -{a for a in range(10)} - -#? int() -[x for x in {a for a in range(10)}][0] - -#? int() -{a for a in range(10)}.pop() -#? float() str() -{b for a in [[3.0], ['']] for b in a}.pop() - -#? int() -next(iter({a for a in range(10)})) - - -# ----------------- -# name resolution in comprehensions. -# ----------------- - -def x(): - """Should not try to resolve to the if hio, which was a bug.""" - #? 22 - [a for a in h if hio] - if hio: pass - -# ----------------- -# slices -# ----------------- - -#? list() -foo = [x for x in [1, '']][:1] -#? int() -foo[0] - -# ----------------- -# In class -# ----------------- - -class X(): - def __init__(self, bar): - self.bar = bar - - def foo(self): - x = [a for a in self.bar][0] - #? int() - x - return x - -#? int() -X([1]).foo() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/context.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/context.py deleted file mode 100644 index 0f0b288..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/context.py +++ /dev/null @@ -1,32 +0,0 @@ -class Base(): - myfoobar = 3 - - -class X(Base): - def func(self, foo): - pass - - -class Y(X): - def actual_function(self): - pass - - #? [] - def actual_function - #? ['func'] - def f - - #? [] - def __class__ - - #? ['__repr__'] - def __repr__ - - #? [] - def mro - - #? ['myfoobar'] - myfoobar - -#? [] -myfoobar diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/decorators.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/decorators.py deleted file mode 100644 index 702c3f3..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/decorators.py +++ /dev/null @@ -1,306 +0,0 @@ -# ----------------- -# normal decorators -# ----------------- - -def decorator(func): - def wrapper(*args): - return func(1, *args) - return wrapper - -@decorator -def decorated(a,b): - return a,b - -exe = decorated(set, '') - -#? set -exe[1] - -#? int() -exe[0] - -# more complicated with args/kwargs -def dec(func): - def wrapper(*args, **kwargs): - return func(*args, **kwargs) - return wrapper - -@dec -def fu(a, b, c, *args, **kwargs): - return a, b, c, args, kwargs - -exe = fu(list, c=set, b=3, d='') - -#? list -exe[0] -#? int() -exe[1] -#? set -exe[2] -#? [] -exe[3][0]. -#? str() -exe[4]['d'] - - -exe = fu(list, set, 3, '', d='') - -#? str() -exe[3][0] - -# ----------------- -# multiple decorators -# ----------------- -def dec2(func2): - def wrapper2(first_arg, *args2, **kwargs2): - return func2(first_arg, *args2, **kwargs2) - return wrapper2 - -@dec2 -@dec -def fu2(a, b, c, *args, **kwargs): - return a, b, c, args, kwargs - -exe = fu2(list, c=set, b=3, d='str') - -#? list -exe[0] -#? int() -exe[1] -#? set -exe[2] -#? [] -exe[3][0]. -#? str() -exe[4]['d'] - - -# ----------------- -# Decorator is a class -# ----------------- -def same_func(func): - return func - -class Decorator(object): - def __init__(self, func): - self.func = func - - def __call__(self, *args, **kwargs): - return self.func(1, *args, **kwargs) - -@Decorator -def nothing(a,b,c): - return a,b,c - -#? int() -nothing("")[0] -#? str() -nothing("")[1] - - -@same_func -@Decorator -def nothing(a,b,c): - return a,b,c - -#? int() -nothing("")[0] - -class MethodDecoratorAsClass(): - class_var = 3 - @Decorator - def func_without_self(arg, arg2): - return arg, arg2 - - @Decorator - def func_with_self(self, arg): - return self.class_var - -#? int() -MethodDecoratorAsClass().func_without_self('')[0] -#? str() -MethodDecoratorAsClass().func_without_self('')[1] -#? -MethodDecoratorAsClass().func_with_self(1) - - -class SelfVars(): - """Init decorator problem as an instance, #247""" - @Decorator - def __init__(self): - """ - __init__ decorators should be ignored when looking up variables in the - class. - """ - self.c = list - - @Decorator - def shouldnt_expose_var(not_self): - """ - Even though in real Python this shouldn't expose the variable, in this - case Jedi exposes the variable, because these kind of decorators are - normally descriptors, which SHOULD be exposed (at least 90%). - """ - not_self.b = 1.0 - - def other_method(self): - #? float() - self.b - #? list - self.c - -# ----------------- -# not found decorators (are just ignored) -# ----------------- -@not_found_decorator -def just_a_func(): - return 1 - -#? int() -just_a_func() - -#? ['__closure__'] -just_a_func.__closure__ - - -class JustAClass: - @not_found_decorator2 - def a(self): - return 1 - -#? ['__call__'] -JustAClass().a.__call__ -#? int() -JustAClass().a() -#? ['__call__'] -JustAClass.a.__call__ -#? int() -JustAClass.a() - -# ----------------- -# illegal decorators -# ----------------- - -class DecoratorWithoutCall(): - def __init__(self, func): - self.func = func - -@DecoratorWithoutCall -def f(): - return 1 - -# cannot be resolved - should be ignored -@DecoratorWithoutCall(None) -def g(): - return 1 - -#? -f() -#? int() -g() - - -class X(): - @str - def x(self): - pass - - def y(self): - #? str() - self.x - #? - self.x() - -# ----------------- -# method decorators -# ----------------- - -def dec(f): - def wrapper(s): - return f(s) - return wrapper - -class MethodDecorators(): - _class_var = 1 - def __init__(self): - self._method_var = '' - - @dec - def constant(self): - return 1.0 - - @dec - def class_var(self): - return self._class_var - - @dec - def method_var(self): - return self._method_var - -#? float() -MethodDecorators().constant() -#? int() -MethodDecorators().class_var() -#? str() -MethodDecorators().method_var() - - -class Base(): - @not_existing - def __init__(self): - pass - @not_existing - def b(self): - return '' - @dec - def c(self): - return 1 - -class MethodDecoratorDoesntExist(Base): - """#272 github: combination of method decorators and super()""" - def a(self): - #? - super().__init__() - #? str() - super().b() - #? int() - super().c() - #? float() - self.d() - - @doesnt_exist - def d(self): - return 1.0 - -# ----------------- -# others -# ----------------- -def memoize(function): - def wrapper(*args): - if random.choice([0, 1]): - pass - else: - rv = function(*args) - return rv - return wrapper - -@memoize -def follow_statement(stmt): - return stmt - -# here we had problems with the else clause, because the parent was not right. -#? int() -follow_statement(1) - -# ----------------- -# class decorators -# ----------------- - -# class decorators should just be ignored -@should_ignore -class A(): - def ret(self): - return 1 - -#? int() -A().ret() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/definition.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/definition.py deleted file mode 100644 index f896984..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/definition.py +++ /dev/null @@ -1,68 +0,0 @@ -""" -Fallback to callee definition when definition not found. -- https://github.com/davidhalter/jedi/issues/131 -- https://github.com/davidhalter/jedi/pull/149 -""" - -"""Parenthesis closed at next line.""" - -# Ignore these definitions for a little while, not sure if we really want them. -# python <= 2.5 - -#? isinstance -isinstance( -) - -#? isinstance -isinstance( -) - -#? isinstance -isinstance(None, -) - -#? isinstance -isinstance(None, -) - -"""Parenthesis closed at same line.""" - -# Note: len('isinstance(') == 11 -#? 11 isinstance -isinstance() - -# Note: len('isinstance(None,') == 16 -##? 16 isinstance -isinstance(None,) - -# Note: len('isinstance(None,') == 16 -##? 16 isinstance -isinstance(None, ) - -# Note: len('isinstance(None, ') == 17 -##? 17 isinstance -isinstance(None, ) - -# Note: len('isinstance( ') == 12 -##? 12 isinstance -isinstance( ) - -"""Unclosed parenthesis.""" - -#? isinstance -isinstance( - -def x(): pass # acts like EOF - -##? isinstance -isinstance( - -def x(): pass # acts like EOF - -#? isinstance -isinstance(None, - -def x(): pass # acts like EOF - -##? isinstance -isinstance(None, diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/descriptors.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/descriptors.py deleted file mode 100644 index 4741778..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/descriptors.py +++ /dev/null @@ -1,219 +0,0 @@ -class RevealAccess(object): - """ - A data descriptor that sets and returns values - normally and prints a message logging their access. - """ - def __init__(self, initval=None, name='var'): - self.val = initval - self.name = name - - def __get__(self, obj, objtype): - print('Retrieving', self.name) - return self.val - - def __set__(self, obj, val): - print('Updating', self.name) - self.val = val - - def just_a_method(self): - pass - -class C(object): - x = RevealAccess(10, 'var "x"') - #? RevealAccess() - x - #? ['just_a_method'] - x.just_a_method - y = 5.0 - def __init__(self): - #? int() - self.x - - #? [] - self.just_a_method - #? [] - C.just_a_method - -m = C() -#? int() -m.x -#? float() -m.y -#? int() -C.x - -#? [] -m.just_a_method -#? [] -C.just_a_method - -# ----------------- -# properties -# ----------------- -class B(): - @property - def r(self): - return 1 - @r.setter - def r(self, value): - return '' - def t(self): - return '' - p = property(t) - -#? [] -B().r(). -#? int() -B().r - -#? str() -B().p -#? [] -B().p(). - -class PropClass(): - def __init__(self, a): - self.a = a - @property - def ret(self): - return self.a - - @ret.setter - def ret(self, value): - return 1.0 - - def ret2(self): - return self.a - ret2 = property(ret2) - - @property - def nested(self): - """ causes recusions in properties, should work """ - return self.ret - - @property - def nested2(self): - """ causes recusions in properties, should not work """ - return self.nested2 - - @property - def join1(self): - """ mutual recusion """ - return self.join2 - - @property - def join2(self): - """ mutual recusion """ - return self.join1 - -#? str() -PropClass("").ret -#? [] -PropClass().ret. - -#? str() -PropClass("").ret2 -#? -PropClass().ret2 - -#? int() -PropClass(1).nested -#? [] -PropClass().nested. - -#? -PropClass(1).nested2 -#? [] -PropClass().nested2. - -#? -PropClass(1).join1 -# ----------------- -# staticmethod/classmethod -# ----------------- - -class E(object): - a = '' - def __init__(self, a): - self.a = a - - def f(x): - return x - f = staticmethod(f) - - @staticmethod - def g(x): - return x - - def s(cls, x): - return x - s = classmethod(s) - - @classmethod - def t(cls, x): - return x - - @classmethod - def u(cls, x): - return cls.a - -e = E(1) -#? int() -e.f(1) -#? int() -E.f(1) -#? int() -e.g(1) -#? int() -E.g(1) - -#? int() -e.s(1) -#? int() -E.s(1) -#? int() -e.t(1) -#? int() -E.t(1) - -#? str() -e.u(1) -#? str() -E.u(1) - -# ----------------- -# Conditions -# ----------------- - -from functools import partial - - -class Memoize(): - def __init__(self, func): - self.func = func - - def __get__(self, obj, objtype): - if obj is None: - return self.func - - return partial(self, obj) - - def __call__(self, *args, **kwargs): - # We don't do caching here, but that's what would normally happen. - return self.func(*args, **kwargs) - - -class MemoizeTest(): - def __init__(self, x): - self.x = x - - @Memoize - def some_func(self): - return self.x - - -#? int() -MemoizeTest(10).some_func() -# Now also call the same function over the class (see if clause above). -#? float() -MemoizeTest.some_func(MemoizeTest(10.0)) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/docstring.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/docstring.py deleted file mode 100644 index 338080a..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/docstring.py +++ /dev/null @@ -1,235 +0,0 @@ -""" Test docstrings in functions and classes, which are used to infer types """ - -# ----------------- -# sphinx style -# ----------------- -def sphinxy(a, b, c, d, x): - """ asdfasdf - :param a: blablabla - :type a: str - :type b: (str, int) - :type c: random.Random - :type d: :class:`random.Random` - :param str x: blablabla - :rtype: dict - """ - #? str() - a - #? str() - b[0] - #? int() - b[1] - #? ['seed'] - c.seed - #? ['seed'] - d.seed - #? ['lower'] - x.lower - -#? dict() -sphinxy() - -# wrong declarations -def sphinxy2(a, b, x): - """ - :param a: Forgot type declaration - :type a: - :param b: Just something - :type b: `` - :param x: Just something without type - :rtype: - """ - #? - a - #? - b - #? - x - -#? -sphinxy2() - -# local classes -> github #370 -class ProgramNode(): - pass - -def local_classes(node, node2): - """ - :type node: ProgramNode - ... and the class definition after this func definition: - :type node2: ProgramNode2 - """ - #? ProgramNode() - node - #? ProgramNode2() - node2 - -class ProgramNode2(): - pass - - -def list_with_non_imports(lst): - """ - Should be able to work with tuples and lists and still import stuff. - - :type lst: (random.Random, [collections.defaultdict, ...]) - """ - #? ['seed'] - lst[0].seed - - import collections as col - # use some weird index - #? col.defaultdict() - lst[1][10] - - -def two_dots(a): - """ - :type a: json.decoder.JSONDecoder - """ - #? ['raw_decode'] - a.raw_decode - - -# sphinx returns -def return_module_object(): - """ - :rtype: :class:`random.Random` - """ - -#? ['seed'] -return_module_object().seed - - -# ----------------- -# epydoc style -# ----------------- -def epydoc(a, b): - """ asdfasdf - @type a: str - @param a: blablabla - @type b: (str, int) - @param b: blablah - @rtype: list - """ - #? str() - a - #? str() - b[0] - - #? int() - b[1] - -#? list() -epydoc() - - -# Returns with param type only -def rparam(a,b): - """ - @type a: str - """ - return a - -#? str() -rparam() - - -# Composite types -def composite(): - """ - @rtype: (str, int, dict) - """ - -x, y, z = composite() -#? str() -x -#? int() -y -#? dict() -z - - -# Both docstring and calculated return type -def both(): - """ - @rtype: str - """ - return 23 - -#? str() int() -both() - -class Test(object): - def __init__(self): - self.teststr = "" - """ - # jedi issue #210 - """ - def test(self): - #? ['teststr'] - self.teststr - -# ----------------- -# statement docstrings -# ----------------- -d = '' -""" bsdf """ -#? str() -d.upper() - -# ----------------- -# class docstrings -# ----------------- - -class InInit(): - def __init__(self, foo): - """ - :type foo: str - """ - #? str() - foo - - -class InClass(): - """ - :type foo: str - """ - def __init__(self, foo): - #? str() - foo - - -class InBoth(): - """ - :type foo: str - """ - def __init__(self, foo): - """ - :type foo: int - """ - #? str() int() - foo - - -def __init__(foo): - """ - :type foo: str - """ - #? str() - foo - - -# ----------------- -# Renamed imports (#507) -# ----------------- - -import datetime -from datetime import datetime as datetime_imported - -def import_issues(foo): - """ - @type foo: datetime_imported - """ - #? datetime.datetime() - foo diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/dynamic_arrays.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/dynamic_arrays.py deleted file mode 100644 index 19cb920..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/dynamic_arrays.py +++ /dev/null @@ -1,306 +0,0 @@ -""" -Checking for ``list.append`` and all the other possible array modifications. -""" -# ----------------- -# list.append -# ----------------- -arr = [] -for a in [1,2]: - arr.append(a); - -arr.append # should not cause an exception -arr.append() # should not cause an exception - -#? int() -arr[10] - -arr = [tuple()] -for a in [1,2]: - arr.append(a); - -#? int() tuple() -arr[10] -#? int() -arr[10].index() - -arr = list([]) -arr.append(1) -#? int() -arr[0] - -# ----------------- -# list.insert -# ----------------- -arr = [""] -arr.insert(0, 1.0) - -# on exception due to this, please! -arr.insert(0) -arr.insert() - -#? float() str() -arr[10] - -for a in arr: - #? float() str() - a - -#? float() str() -list(arr)[10] - -# ----------------- -# set.add -# ----------------- -st = {1.0} -for a in [1,2]: - st.add(a) - -st.append('') # lists should not have an influence - -st.add # should not cause an exception -st.add() - -# ----------------- -# list.extend / set.update -# ----------------- - -arr = [1.0] -arr.extend([1,2,3]) -arr.extend([]) -arr.extend("") # should ignore - -#? float() int() -arr[100] - -a = set(arr) -a.update(list(["", 1])) - -#? float() int() str() -list(a)[0] -# ----------------- -# set/list initialized as functions -# ----------------- - -st = set() -st.add(1) - -#? int() -for s in st: s - -lst = list() -lst.append(1) - -#? int() -for i in lst: i - -# ----------------- -# renames / type changes -# ----------------- -arr = [] -arr2 = arr -arr2.append('') -#? str() -arr2[0] - - -st = {1.0} -st.add(1) -lst = list(st) - -lst.append('') - -#? float() int() str() -lst[0] - -lst = [1] -lst.append(1.0) -s = set(lst) -s.add("") -lst = list(s) -lst.append({}) - -#? dict() int() float() str() -lst[0] - -# should work with tuple conversion, too. -#? dict() int() float() str() -tuple(lst)[0] - -# but not with an iterator -#? -iter(lst)[0] - -# ----------------- -# complex including += -# ----------------- -class C(): pass -class D(): pass -class E(): pass -lst = [1] -lst.append(1.0) -lst += [C] -s = set(lst) -s.add("") -s += [D] -lst = list(s) -lst.append({}) -lst += [E] - -##? dict() int() float() str() C D E -lst[0] - -# ----------------- -# functions -# ----------------- - -def arr_append(arr4, a): - arr4.append(a) - -def add_to_arr(arr2, a): - arr2.append(a) - return arr2 - -def app(a): - arr3.append(a) - -arr3 = [1.0] -res = add_to_arr(arr3, 1) -arr_append(arr3, 'str') -app(set()) - -#? float() str() int() set() -arr3[10] - -#? float() str() int() set() -res[10] - -# ----------------- -# returns, special because the module dicts are not correct here. -# ----------------- -def blub(): - a = [] - a.append(1.0) - #? float() - a[0] - return a - -#? float() -blub()[0] - -# list with default -def blub(): - a = list([1]) - a.append(1.0) - return a - -#? int() float() -blub()[0] - -# empty list -def blub(): - a = list() - a.append(1.0) - return a -#? float() -blub()[0] - -# with if -def blub(): - if 1: - a = [] - a.append(1.0) - return a - -#? float() -blub()[0] - -# with else clause -def blub(): - if random.choice([0, 1]): - 1 - else: - a = [] - a.append(1) - return a - -#? int() -blub()[0] -# ----------------- -# returns, the same for classes -# ----------------- -class C(): - def blub(self, b): - if 1: - a = [] - a.append(b) - return a - - def blub2(self): - """ mapper function """ - a = self.blub(1.0) - #? float() - a[0] - return a - - def literal_arr(self, el): - self.a = [] - self.a.append(el) - #? int() - self.a[0] - return self.a - - def list_arr(self, el): - self.b = list([]) - self.b.append(el) - #? float() - self.b[0] - return self.b - -#? int() -C().blub(1)[0] -#? float() -C().blub2(1)[0] - -#? int() -C().a[0] -#? int() -C().literal_arr(1)[0] - -#? float() -C().b[0] -#? float() -C().list_arr(1.0)[0] - -# ----------------- -# array recursions -# ----------------- - -a = set([1.0]) -a.update(a) -a.update([1]) - -#? float() int() -list(a)[0] - -def first(a): - b = [] - b.append(a) - b.extend(second(a)) - return list(b) - -def second(a): - b = [] - b.extend(first(a)) - return list(b) - -#? float() -first(1.0)[0] - -def third(): - b = [] - b.extend - extend() - b.extend(first()) - return list(b) -#? -third()[0] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/dynamic_params.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/dynamic_params.py deleted file mode 100644 index 2afc986..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/dynamic_params.py +++ /dev/null @@ -1,134 +0,0 @@ -""" -This is used for dynamic object completion. -Jedi tries to guess param types with a backtracking approach. -""" -def func(a, default_arg=2): - #? int() - default_arg - #? int() str() - return a - -#? int() -func(1) - -func - -int(1) + (int(2))+ func('') - -# Again the same function, but with another call. -def func(a): - #? float() - return a - -func(1.0) - -# Again the same function, but with no call. -def func(a): - #? - return a - -def func(a): - #? float() - return a -str(func(1.0)) - -# ----------------- -# *args, **args -# ----------------- -def arg(*args): - #? tuple() - args - #? int() - args[0] - -arg(1,"") -# ----------------- -# decorators -# ----------------- -def def_func(f): - def wrapper(*args, **kwargs): - return f(*args, **kwargs) - return wrapper - -@def_func -def func(c): - #? str() - return c - -#? str() -func("str") - -@def_func -def func(c=1): - #? int() float() - return c - -func(1.0) - -def tricky_decorator(func): - def wrapper(*args): - return func(1, *args) - - return wrapper - - -@tricky_decorator -def func(a, b): - #? int() - a - #? float() - b - -func(1.0) - -# Needs to be here, because in this case func is an import -> shouldn't lead to -# exceptions. -import sys as func -func.sys - -# ----------------- -# classes -# ----------------- - -class A(): - def __init__(self, a): - #? str() - a - -A("s") - -class A(): - def __init__(self, a): - #? int() - a - self.a = a - - def test(self, a): - #? float() - a - self.c = self.test2() - - def test2(self): - #? int() - return self.a - - def test3(self): - #? int() - self.test2() - #? int() - self.c - -A(3).test(2.0) -A(3).test2() - - -# ----------------- -# list comprehensions -# ----------------- - -def from_comprehension(foo): - #? int() float() - return foo - -[from_comprehension(1.0) for n in (1,)] -[from_comprehension(n) for n in (1,)] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/flow_analysis.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/flow_analysis.py deleted file mode 100644 index 2840d9e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/flow_analysis.py +++ /dev/null @@ -1,257 +0,0 @@ -def foo(x): - if 1.0: - return 1 - else: - return '' - -#? int() -foo(1) - - -# Exceptions are not analyzed. So check both if branches -def try_except(x): - try: - if 0: - return 1 - else: - return '' - except AttributeError: - return 1.0 - -#? float() str() -try_except(1) - - -# Exceptions are not analyzed. So check both if branches -def try_except(x): - try: - if 0: - return 1 - else: - return '' - except AttributeError: - return 1.0 - -#? float() str() -try_except(1) - - -# ----------------- -# elif -# ----------------- - -def elif_flows1(x): - if False: - return 1 - elif True: - return 1.0 - else: - return '' - -#? float() -elif_flows1(1) - - -def elif_flows2(x): - try: - if False: - return 1 - elif 0: - return 1.0 - else: - return '' - except ValueError: - return set - -#? str() set -elif_flows2(1) - - -def elif_flows3(x): - try: - if True: - return 1 - elif 0: - return 1.0 - else: - return '' - except ValueError: - return set - -#? int() set -elif_flows3(1) - -# ----------------- -# mid-difficulty if statements -# ----------------- -def check(a): - if a is None: - return 1 - return '' - return set - -#? int() -check(None) -#? str() -check('asb') - -a = list -if 2 == True: - a = set -elif 1 == True: - a = 0 - -#? int() -a -if check != 1: - a = '' -#? str() -a -if check == check: - a = list -#? list -a -if check != check: - a = set -else: - a = dict -#? dict -a -if not (check is not check): - a = 1 -#? int() -a - - -# ----------------- -# name resolution -# ----------------- - -a = list -def elif_name(x): - try: - if True: - a = 1 - elif 0: - a = 1.0 - else: - return '' - except ValueError: - a = x - return a - -#? int() set -elif_name(set) - -if 0: - a = '' -else: - a = int - -#? int -a - -# ----------------- -# isinstance -# ----------------- - -class A(): pass - -def isinst(x): - if isinstance(x, A): - return dict - elif isinstance(x, int) and x == 1 or x is True: - return set - elif isinstance(x, (float, reversed)): - return list - elif not isinstance(x, str): - return tuple - return 1 - -#? dict -isinst(A()) -#? set -isinst(True) -#? set -isinst(1) -#? tuple -isinst(2) -#? list -isinst(1.0) -#? tuple -isinst(False) -#? int() -isinst('') - -# ----------------- -# flows that are not reachable should be able to access parent scopes. -# ----------------- - -foobar = '' - -if 0: - within_flow = 1.0 - #? float() - within_flow - #? str() - foobar - if 0: - nested = 1 - #? int() - nested - #? float() - within_flow - #? str() - foobar - #? - nested - -# ----------------- -# True objects like modules -# ----------------- - -class X(): - pass -if X: - a = 1 -else: - a = '' -#? int() -a - - -# ----------------- -# Recursion issues -# ----------------- - -def possible_recursion_error(filename): - if filename == 'a': - return filename - # It seems like without the brackets there wouldn't be a RecursionError. - elif type(filename) == str: - return filename - - -if NOT_DEFINED: - s = str() -else: - s = str() -#? str() -possible_recursion_error(s) - - -# ----------------- -# In combination with imports -# ----------------- - -from import_tree import flow_import - -if 1 == flow_import.env: - a = 1 -elif 2 == flow_import.env: - a = '' -elif 3 == flow_import.env: - a = 1.0 - -#? int() str() -a diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/functions.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/functions.py deleted file mode 100644 index c1a40e5..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/functions.py +++ /dev/null @@ -1,475 +0,0 @@ -def array(first_param): - #? ['first_param'] - first_param - return list() - -#? [] -array.first_param -#? [] -array.first_param. -func = array -#? [] -func.first_param - -#? list() -array() - -#? ['array'] -arr - - -def inputs(param): - return param - -#? list -inputs(list) - -def variable_middle(): - var = 3 - return var - -#? int() -variable_middle() - -def variable_rename(param): - var = param - return var - -#? int() -variable_rename(1) - -def multi_line_func(a, # comment blabla - - b): - return b - -#? str() -multi_line_func(1,'') - -def multi_line_call(b): - return b - - -multi_line_call( -#? int() - b=1) - - -# nothing after comma -def asdf(a): - return a - -x = asdf(a=1, - ) -#? int() -x - -# ----------------- -# double execution -# ----------------- -def double_exe(param): - return param - -#? str() -variable_rename(double_exe)("") - -# -> shouldn't work (and throw no error) -#? [] -variable_rename(list())(). -#? [] -variable_rename(1)(). - -# ----------------- -# recursions (should ignore) -# ----------------- -def recursion(a, b): - if a: - return b - else: - return recursion(a+".", b+1) - -# Does not also return int anymore, because we now support operators in simple cases. -#? float() -recursion("a", 1.0) - -def other(a): - return recursion2(a) - -def recursion2(a): - if random.choice([0, 1]): - return other(a) - else: - if random.choice([0, 1]): - return recursion2("") - else: - return a - -#? int() str() -recursion2(1) - -# ----------------- -# ordering -# ----------------- - -def a(): - #? int() - b() - return b() - -def b(): - return 1 - -#? int() -a() - -# ----------------- -# keyword arguments -# ----------------- - -def func(a=1, b=''): - return a, b - -exe = func(b=list, a=tuple) -#? tuple -exe[0] - -#? list -exe[1] - -# ----------------- -# default arguments -# ----------------- - -#? int() -func()[0] -#? str() -func()[1] -#? float() -func(1.0)[0] -#? str() -func(1.0)[1] - - -#? float() -func(a=1.0)[0] -#? str() -func(a=1.0)[1] -#? int() -func(b=1.0)[0] -#? float() -func(b=1.0)[1] -#? list -func(a=list, b=set)[0] -#? set -func(a=list, b=set)[1] - - -def func_default(a, b=1): - return a, b - - -def nested_default(**kwargs): - return func_default(**kwargs) - -#? float() -nested_default(a=1.0)[0] -#? int() -nested_default(a=1.0)[1] -#? str() -nested_default(a=1.0, b='')[1] - -# Defaults should only work if they are defined before - not after. -def default_function(a=default): - #? - return a - -#? -default_function() - -default = int() - -def default_function(a=default): - #? int() - return a - -#? int() -default_function() - - -# ----------------- -# closures -# ----------------- -def a(): - l = 3 - def func_b(): - l = '' - #? str() - l - #? ['func_b'] - func_b - #? int() - l - -# ----------------- -# *args -# ----------------- - -def args_func(*args): - #? tuple() - return args - -exe = args_func(1, "") -#? int() -exe[0] -#? str() -exe[1] - -# illegal args (TypeError) -#? -args_func(*1)[0] -# iterator -#? int() -args_func(*iter([1]))[0] - -# different types -e = args_func(*[1+"", {}]) -#? int() str() -e[0] -#? dict() -e[1] - -_list = [1,""] -exe2 = args_func(_list)[0] - -#? str() -exe2[1] - -exe3 = args_func([1,""])[0] - -#? str() -exe3[1] - -def args_func(arg1, *args): - return arg1, args - -exe = args_func(1, "", list) -#? int() -exe[0] -#? tuple() -exe[1] -#? list -exe[1][1] - - -# In a dynamic search, both inputs should be given. -def simple(a): - #? int() str() - return a -def xargs(*args): - return simple(*args) - -xargs(1) -xargs('') - - -# *args without a self symbol -def memoize(func): - def wrapper(*args, **kwargs): - return func(*args, **kwargs) - return wrapper - - -class Something(): - @memoize - def x(self, a, b=1): - return a - -#? int() -Something().x(1) - - -# ----------------- -# ** kwargs -# ----------------- -def kwargs_func(**kwargs): - #? ['keys'] - kwargs.keys - #? dict() - return kwargs - -exe = kwargs_func(a=3,b=4.0) -#? dict() -exe -#? int() -exe['a'] -#? float() -exe['b'] -#? int() float() -exe['c'] - -a = 'a' -exe2 = kwargs_func(**{a:3, - 'b':4.0}) -#? int() -exe2['a'] -#? float() -exe2['b'] -#? int() float() -exe2['c'] - -# ----------------- -# *args / ** kwargs -# ----------------- - -def func_without_call(*args, **kwargs): - #? tuple() - args - #? dict() - kwargs - -def fu(a=1, b="", *args, **kwargs): - return a, b, args, kwargs - -exe = fu(list, 1, "", c=set, d="") - -#? list -exe[0] -#? int() -exe[1] -#? tuple() -exe[2] -#? str() -exe[2][0] -#? dict() -exe[3] -#? set -exe[3]['c'] - - -def kwargs_iteration(**kwargs): - return kwargs - -for x in kwargs_iteration(d=3): - #? float() - {'d': 1.0, 'c': '1'}[x] - - -# ----------------- -# nested *args -# ----------------- -def function_args(a, b, c): - return b - -def nested_args(*args): - return function_args(*args) - -def nested_args2(*args, **kwargs): - return nested_args(*args) - -#? int() -nested_args('', 1, 1.0, list) -#? [] -nested_args(''). - -#? int() -nested_args2('', 1, 1.0) -#? [] -nested_args2(''). - -# ----------------- -# nested **kwargs -# ----------------- -def nested_kw(**kwargs1): - return function_args(**kwargs1) - -def nested_kw2(**kwargs2): - return nested_kw(**kwargs2) - -# invalid command, doesn't need to return anything -#? -nested_kw(b=1, c=1.0, list) -#? int() -nested_kw(b=1) -# invalid command, doesn't need to return anything -#? -nested_kw(d=1.0, b=1, list) -#? int() -nested_kw(a=3.0, b=1) -#? int() -nested_kw(b=1, a=r"") -#? [] -nested_kw(1, ''). -#? [] -nested_kw(a=''). - -#? int() -nested_kw2(b=1) -#? int() -nested_kw2(b=1, c=1.0) -#? int() -nested_kw2(c=1.0, b=1) -#? [] -nested_kw2(''). -#? [] -nested_kw2(a=''). -#? [] -nested_kw2('', b=1). - -# ----------------- -# nested *args/**kwargs -# ----------------- -def nested_both(*args, **kwargs): - return function_args(*args, **kwargs) - -def nested_both2(*args, **kwargs): - return nested_both(*args, **kwargs) - -# invalid commands, may return whatever. -#? list -nested_both('', b=1, c=1.0, list) -#? list -nested_both('', c=1.0, b=1, list) - -#? [] -nested_both(''). - -#? int() -nested_both2('', b=1, c=1.0) -#? int() -nested_both2('', c=1.0, b=1) -#? [] -nested_both2(''). - -# ----------------- -# nested *args/**kwargs with a default arg -# ----------------- -def function_def(a, b, c): - return a, b - -def nested_def(a, *args, **kwargs): - return function_def(a, *args, **kwargs) - -def nested_def2(*args, **kwargs): - return nested_def(*args, **kwargs) - -#? str() -nested_def2('', 1, 1.0)[0] -#? str() -nested_def2('', b=1, c=1.0)[0] -#? str() -nested_def2('', c=1.0, b=1)[0] -#? int() -nested_def2('', 1, 1.0)[1] -#? int() -nested_def2('', b=1, c=1.0)[1] -#? int() -nested_def2('', c=1.0, b=1)[1] -#? [] -nested_def2('')[1]. - -# ----------------- -# magic methods -# ----------------- -def a(): pass -#? ['__closure__'] -a.__closure__ diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/generators.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/generators.py deleted file mode 100644 index d8eba2d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/generators.py +++ /dev/null @@ -1,199 +0,0 @@ -# ----------------- -# yield statement -# ----------------- -def gen(): - if random.choice([0, 1]): - yield 1 - else: - yield "" - -gen_exe = gen() -#? int() str() -next(gen_exe) - -#? int() str() list -next(gen_exe, list) - - -def gen_ret(value): - yield value - -#? int() -next(gen_ret(1)) - -#? [] -next(gen_ret()). - -# generators evaluate to true if cast by bool. -a = '' -if gen_ret(): - a = 3 -#? int() -a - - -# ----------------- -# generators should not be indexable -# ----------------- -def get(param): - if random.choice([0, 1]): - yield 1 - else: - yield "" - -#? [] -get()[0]. - -# ----------------- -# __iter__ -# ----------------- -for a in get(): - #? int() str() - a - - -class Get(): - def __iter__(self): - if random.choice([0, 1]): - yield 1 - else: - yield "" - -b = [] -for a in Get(): - #? int() str() - a - b += [a] - -#? list() -b -#? int() str() -b[0] - -g = iter(Get()) -#? int() str() -next(g) - -g = iter([1.0]) -#? float() -next(g) - - -# ----------------- -# __next__ -# ----------------- -class Counter: - def __init__(self, low, high): - self.current = low - self.high = high - - def __iter__(self): - return self - - def next(self): - """ need to have both __next__ and next, because of py2/3 testing """ - return self.__next__() - - def __next__(self): - if self.current > self.high: - raise StopIteration - else: - self.current += 1 - return self.current - 1 - - -for c in Counter(3, 8): - #? int() - print c - - -# ----------------- -# tuples -# ----------------- -def gen(): - if random.choice([0,1]): - yield 1, "" - else: - yield 2, 1.0 - - -a, b = next(gen()) -#? int() -a -#? str() float() -b - - -def simple(): - if random.choice([0, 1]): - yield 1 - else: - yield "" - -a, b = simple() -#? int() str() -a -# For now this is ok. -#? -b - - -def simple2(): - yield 1 - yield "" - -a, b = simple2() -#? int() -a -#? str() -b - - -# ----------------- -# More complicated access -# ----------------- - -# `close` is a method wrapper. -#? ['__call__'] -gen().close.__call__ - -#? -gen().throw() - -#? ['co_consts'] -gen().gi_code.co_consts - -#? [] -gen.gi_code.co_consts - -# `send` is also a method wrapper. -#? ['__call__'] -gen().send.__call__ - -#? tuple() -gen().send() - -#? -gen()() - -# ----------------- -# yield from -# ----------------- - -# python >= 3.3 - -def yield_from(): - yield from iter([1]) - -#? int() -next(yield_from()) - -def yield_from_multiple(): - yield from iter([1]) - yield str() - -x, y = yield_from_multiple() -#? int() -x -#? str() -y diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/goto.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/goto.py deleted file mode 100644 index ef9938c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/goto.py +++ /dev/null @@ -1,231 +0,0 @@ -# goto_assignments command tests are different in syntax - -definition = 3 -#! 0 ['a = definition'] -a = definition - -#! [] -b -#! ['a = definition'] -a - -b = a -c = b -#! ['c = b'] -c - -cd = 1 -#! 1 ['cd = c'] -cd = c -#! 0 ['cd = e'] -cd = e - -#! ['module math'] -import math -#! ['import math'] -math - -#! ['import math'] -b = math -#! ['b = math'] -b - -#! 18 ['foo = 10'] -foo = 10;print(foo) - -# ----------------- -# classes -# ----------------- -class C(object): - def b(self): - #! ['b = math'] - b - #! ['def b'] - self.b - #! 14 ['def b'] - self.b() - #! 11 ['self'] - self.b - return 1 - - #! ['def b'] - b - -#! ['b = math'] -b - -#! ['def b'] -C.b -#! ['def b'] -C().b -#! 0 ['class C'] -C().b -#! 0 ['class C'] -C().b - -D = C -#! ['def b'] -D.b -#! ['def b'] -D().b - -#! 0 ['D = C'] -D().b -#! 0 ['D = C'] -D().b - -def c(): - return '' - -#! ['def c'] -c -#! 0 ['def c'] -c() - - -class ClassVar(): - x = 3 - -#! ['x = 3'] -ClassVar.x -#! ['x = 3'] -ClassVar().x - -# before assignments -#! 10 ['x = 3'] -ClassVar.x = '' -#! 12 ['x = 3'] -ClassVar().x = '' - -# Recurring use of the same var name, github #315 -def f(t=None): - #! 9 ['t=None'] - t = t or 1 - - -class X(): - pass - -#! 3 [] -X(foo=x) - -# ----------------- -# imports -# ----------------- - -#! ['module import_tree'] -import import_tree -#! ["a = ''"] -import_tree.a - -#! ['module mod1'] -import import_tree.mod1 -#! ['a = 1'] -import_tree.mod1.a - -#! ['module pkg'] -import import_tree.pkg -#! ['a = list'] -import_tree.pkg.a - -#! ['module mod1'] -import import_tree.pkg.mod1 -#! ['a = 1.0'] -import_tree.pkg.mod1.a -#! ["a = ''"] -import_tree.a - -#! ['module mod1'] -from import_tree.pkg import mod1 -#! ['a = 1.0'] -mod1.a - -#! ['module mod1'] -from import_tree import mod1 -#! ['a = 1'] -mod1.a - -#! ['a = 1.0'] -from import_tree.pkg.mod1 import a - -#! ['import os'] -from .imports import os - -#! ['some_variable = 1'] -from . import some_variable - -# ----------------- -# anonymous classes -# ----------------- -def func(): - class A(): - def b(self): - return 1 - return A() - -#! 8 ['def b'] -func().b() - -# ----------------- -# on itself -# ----------------- - -#! 7 ['class ClassDef'] -class ClassDef(): - """ abc """ - pass - -# ----------------- -# params -# ----------------- - -param = ClassDef -#! 8 ['param'] -def ab1(param): pass -#! 9 ['param'] -def ab2(param): pass -#! 11 ['param = ClassDef'] -def ab3(a=param): pass - -ab1(ClassDef);ab2(ClassDef);ab3(ClassDef) - -# ----------------- -# for loops -# ----------------- - -for i in range(1): - #! ['for i in range(1): i'] - i - -for key, value in [(1,2)]: - #! ['for key, value in [(1,2)]: key'] - key - -for i in []: - #! ['for i in []: i'] - i - -# ----------------- -# decorator -# ----------------- -def dec(dec_param=3): - pass - -#! 8 ['dec_param=3'] -@dec(dec_param=5) -def y(): - pass - -class ClassDec(): - def class_func(func): - return func - -#! 14 ['def class_func'] -@ClassDec.class_func -def x(): - pass - -#! 2 ['class ClassDec'] -@ClassDec.class_func -def z(): - pass diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/__init__.py deleted file mode 100644 index 5cbbcd7..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -a = '' - -from . import invisible_pkg - -the_pkg = invisible_pkg - -invisible_pkg = 1 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/flow_import.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/flow_import.py deleted file mode 100644 index a0a779e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/flow_import.py +++ /dev/null @@ -1,4 +0,0 @@ -if name: - env = 1 -else: - env = 2 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/invisible_pkg.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/invisible_pkg.py deleted file mode 100644 index 9c78ce2..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/invisible_pkg.py +++ /dev/null @@ -1,7 +0,0 @@ -""" -It should not be possible to import this pkg except for the import_tree itself, -because it is overwritten there. (It would be possible with a sys.path -modification, though). -""" - -foo = 1.0 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/mod1.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/mod1.py deleted file mode 100644 index bd696d6..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/mod1.py +++ /dev/null @@ -1,4 +0,0 @@ -a = 1 -from import_tree.random import a as c - -foobarbaz = 3.0 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/mod2.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/mod2.py deleted file mode 100644 index 19914f5..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/mod2.py +++ /dev/null @@ -1 +0,0 @@ -from . import mod1 as fake diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/pkg/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/pkg/__init__.py deleted file mode 100644 index 480f222..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/pkg/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -a = list - -from math import * diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/pkg/mod1.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/pkg/mod1.py deleted file mode 100644 index 2b6777c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/pkg/mod1.py +++ /dev/null @@ -1 +0,0 @@ -a = 1.0 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/random.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/random.py deleted file mode 100644 index a63ed05..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/random.py +++ /dev/null @@ -1,4 +0,0 @@ -""" -Here because random is also a builtin module. -""" -a = set diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/recurse_class1.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/recurse_class1.py deleted file mode 100644 index 773408c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/recurse_class1.py +++ /dev/null @@ -1,5 +0,0 @@ -import recurse_class2 - -class C(recurse_class2.C): - def a(self): - pass diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/recurse_class2.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/recurse_class2.py deleted file mode 100644 index 42f84ef..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/recurse_class2.py +++ /dev/null @@ -1,4 +0,0 @@ -import recurse_class1 - -class C(recurse_class1.C): - pass diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/rename1.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/rename1.py deleted file mode 100644 index bdc3315..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/rename1.py +++ /dev/null @@ -1,3 +0,0 @@ -""" used for renaming tests """ - -abc = 3 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/rename2.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/rename2.py deleted file mode 100644 index 8423895..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/import_tree/rename2.py +++ /dev/null @@ -1,6 +0,0 @@ -""" used for renaming tests """ - - -from rename1 import abc - -abc diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/imports.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/imports.py deleted file mode 100644 index 246b91e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/imports.py +++ /dev/null @@ -1,285 +0,0 @@ -# ----------------- -# own structure -# ----------------- - -# do separate scopes -def scope_basic(): - from import_tree import mod1 - - #? int() - mod1.a - - #? [] - import_tree.a - - #? [] - import_tree.mod1 - - import import_tree - #? str() - import_tree.a - - -def scope_pkg(): - import import_tree.mod1 - - #? str() - import_tree.a - - #? ['mod1'] - import_tree.mod1 - - #? int() - import_tree.mod1.a - -def scope_nested(): - import import_tree.pkg.mod1 - - #? str() - import_tree.a - - #? list - import_tree.pkg.a - - #? ['sqrt'] - import_tree.pkg.sqrt - - #? ['pkg'] - import_tree.p - - #? float() - import_tree.pkg.mod1.a - #? ['a', '__name__', '__package__', '__file__', '__doc__'] - a = import_tree.pkg.mod1. - - import import_tree.random - #? set - import_tree.random.a - -def scope_nested2(): - """Multiple modules should be indexable, if imported""" - import import_tree.mod1 - import import_tree.pkg - #? ['mod1'] - import_tree.mod1 - #? ['pkg'] - import_tree.pkg - - # With the latest changes this completion also works, because submodules - # are always included (some nested import structures lead to this, - # typically). - #? ['rename1'] - import_tree.rename1 - -def scope_from_import_variable(): - """ - All of them shouldn't work, because "fake" imports don't work in python - without the use of ``sys.modules`` modifications (e.g. ``os.path`` see also - github issue #213 for clarification. - """ - a = 3 - #? - from import_tree.mod2.fake import a - #? - from import_tree.mod2.fake import c - - #? - a - #? - c - -def scope_from_import_variable_with_parenthesis(): - from import_tree.mod2.fake import ( - a, foobarbaz - ) - - #? - a - #? - foobarbaz - # shouldn't complete, should still list the name though. - #? ['foobarbaz'] - foobarbaz - - -def as_imports(): - from import_tree.mod1 import a as xyz - #? int() - xyz - import not_existant, import_tree.mod1 as foo - #? int() - foo.a - import import_tree.mod1 as bar - #? int() - bar.a - - -def test_import_priorities(): - """ - It's possible to overwrite import paths in an ``__init__.py`` file, by - just assigining something there. - - See also #536. - """ - from import_tree import the_pkg, invisible_pkg - #? int() - invisible_pkg - # In real Python, this would be the module, but it's not, because Jedi - # doesn't care about most stateful issues such as __dict__, which it would - # need to, to do this in a correct way. - #? int() - the_pkg - # Importing foo is still possible, even though inivisible_pkg got changed. - #? float() - from import_tree.invisible_pkg import foo - - -# ----------------- -# std lib modules -# ----------------- -import tokenize -#? ['tok_name'] -tokenize.tok_name - -from pyclbr import * - -#? ['readmodule_ex'] -readmodule_ex -import os - -#? ['dirname'] -os.path.dirname - -from os.path import ( - expanduser -) - -#? os.path.expanduser -expanduser - -from itertools import (tee, - islice) -#? ['islice'] -islice - -from functools import (partial, wraps) -#? ['wraps'] -wraps - -from keyword import kwlist, \ - iskeyword -#? ['kwlist'] -kwlist - -#? [] -from keyword import not_existing1, not_existing2 - -from tokenize import io -tokenize.generate_tokens - -# ----------------- -# builtins -# ----------------- - -import sys -#? ['prefix'] -sys.prefix - -#? ['append'] -sys.path.append - -from math import * -#? ['cos', 'cosh'] -cos - -def func_with_import(): - import time - return time - -#? ['sleep'] -func_with_import().sleep - -# ----------------- -# relative imports -# ----------------- - -from .import_tree import mod1 -#? int() -mod1.a - -from ..import_tree import mod1 -#? -mod1.a - -from .......import_tree import mod1 -#? -mod1.a - -from .. import helpers -#? int() -helpers.sample_int - -from ..helpers import sample_int as f -#? int() -f - -from . import run -#? [] -run. - -from . import import_tree as imp_tree -#? str() -imp_tree.a - -from . import datetime as mod1 -#? [] -mod1. - -# self import -# this can cause recursions -from imports import * - -# ----------------- -# packages -# ----------------- - -from import_tree.mod1 import c -#? set -c - -from import_tree import recurse_class1 - -#? ['a'] -recurse_class1.C.a -# github #239 RecursionError -#? ['a'] -recurse_class1.C().a - -# ----------------- -# Jedi debugging -# ----------------- - -# memoizing issues (check git history for the fix) -import not_existing_import - -if not_existing_import: - a = not_existing_import -else: - a = not_existing_import -#? -a - -# ----------------- -# module underscore descriptors -# ----------------- - -def underscore(): - import keyword - #? ['__file__'] - keyword.__file__ - #? str() - keyword.__file__ - - # Does that also work for the our own module? - #? ['__file__'] - __file__ diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/invalid.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/invalid.py deleted file mode 100644 index 7c047e6..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/invalid.py +++ /dev/null @@ -1,214 +0,0 @@ -""" -This file is less about the results and much more about the fact, that no -exception should be thrown. - -Basically this file could change depending on the current implementation. But -there should never be any errors. -""" - -# wait until keywords are out of definitions (pydoc function). -##? 5 -'s'() - -#? [] -str()).upper - -# ----------------- -# funcs -# ----------------- -def asdf(a or b): # multiple param names - return a - -#? -asdf(2) - -asdf = '' - -from a import (b -def blub(): - return 0 -def wrong_indents(): - asdf = 3 - asdf - asdf( - # TODO this seems to be wrong now? - ##? int() - asdf -def openbrace(): - asdf = 3 - asdf( - #? int() - asdf - return 1 - -#? int() -openbrace() - -blub([ -#? int() -openbrace() - -def indentfault(): - asd( - indentback - -#? [] -indentfault(). - -def openbrace2(): - asd( -def normalfunc(): - return 1 - -#? int() -normalfunc() - -# dots in param -def f(seq1...=None): - return seq1 -#? -f(1) - -@ -def test_empty_decorator(): - return 1 - -#? int() -test_empty_decorator() - -def invalid_param(param=): - #? - param -# ----------------- -# flows -# ----------------- - -# first part not complete (raised errors) -if a - a -else: - #? ['AttributeError'] - AttributeError - -try -#? ['AttributeError'] -except AttributeError - pass -finally: - pass - -#? ['isinstance'] -if isi -try: - except TypeError: - #? str() - str() - -def break(): pass -# wrong ternary expression -a = '' -a = 1 if -#? str() -a - -# No completions for for loops without the right syntax -for for_local in : - for_local -#? [] -for_local -#? -for_local - - -# ----------------- -# list comprehensions -# ----------------- - -a2 = [for a2 in [0]] -#? -a2[0] - -a3 = [for xyz in] -#? -a3[0] - -a3 = [a4 for in 'b'] -#? -a3[0] - -a3 = [a4 for a in for x in y] -#? -a3[0] - -a = [for a in -def break(): pass - -#? -a[0] - -a = [a for a in [1,2] -def break(): pass -#? -a[0] - -#? [] -int()).real - -# ----------------- -# keywords -# ----------------- - -#! [] -as - -def empty_assert(): - x = 3 - assert - #? int() - x - -import datetime as - - -# ----------------- -# statements -# ----------------- - -call = '' -invalid = .call -#? -invalid - -invalid = call?.call -#? str() -invalid - -# comma -invalid = ,call -#? str() -invalid - - -# ----------------- -# classes -# ----------------- - -class BrokenPartsOfClass(): - def foo(self): - # This construct contains two places where Jedi with Python 3 can fail. - # It should just ignore those constructs and still execute `bar`. - pass - if 2: - try: - pass - except ValueError, e: - raise TypeError, e - else: - pass - - def bar(self): - self.x = 3 - return '' - -#? str() -BrokenPartsOfClass().bar() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/isinstance.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/isinstance.py deleted file mode 100644 index 7101150..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/isinstance.py +++ /dev/null @@ -1,100 +0,0 @@ -if isinstance(i, str): - #? str() - i - -if isinstance(j, (str, int)): - #? str() int() - j - -while isinstance(k, (str, int)): - #? str() int() - k - -if not isinstance(k, (str, int)): - #? - k - -while not isinstance(k, (str, int)): - #? - k - -assert isinstance(ass, int) -#? int() -ass - -assert isinstance(ass, str) -assert not isinstance(ass, int) - -if 2: - #? str() - ass - -# ----------------- -# invalid arguments -# ----------------- - -if isinstance(wrong, str()): - #? - wrong - -# ----------------- -# in functions -# ----------------- - -import datetime - - -def fooooo(obj): - if isinstance(obj, datetime.datetime): - #? datetime.datetime() - obj - - -def fooooo2(obj): - if isinstance(obj, datetime.date): - return obj - else: - return 1 - -a -# In earlier versions of Jedi, this returned both datetime and int, but now -# Jedi does flow checks and realizes that the top return isn't executed. -#? int() -fooooo2('') - - -def isinstance_func(arr): - for value in arr: - if isinstance(value, dict): - # Shouldn't fail, even with the dot. - #? 17 dict() - value. - elif isinstance(value, int): - x = value - #? int() - x - -# ----------------- -# Names with multiple indices. -# ----------------- - -class Test(): - def __init__(self, testing): - if isinstance(testing, str): - self.testing = testing - else: - self.testing = 10 - - def boo(self): - if isinstance(self.testing, str): - #? str() - self.testing - #? Test() - self - -# ----------------- -# Syntax -# ----------------- - -#? -isinstance(1, int()) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/keywords.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/keywords.py deleted file mode 100644 index 9631e8d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/keywords.py +++ /dev/null @@ -1,59 +0,0 @@ - -#? ['raise'] -raise - -#? ['Exception'] -except - -#? [] -b + continu - -#? [] -b + continue - -#? ['continue'] -b; continue - -#? ['continue'] -b; continu - -#? [] -c + brea - -#? [] -a + break - -#? ['break'] -b; break - -# ----------------- -# Keywords should not appear everywhere. -# ----------------- - -#? [] -with open() as f -#? [] -def i -#? [] -class i - -#? [] -continue i - -# More syntax details, e.g. while only after newline, but not after semicolon, -# continue also after semicolon -#? ['while'] -while -#? [] -x while -#? [] -x; while -#? ['continue'] -x; continue - -#? [] -and -#? ['and'] -x and -#? [] -x * and diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/lambdas.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/lambdas.py deleted file mode 100644 index d739169..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/lambdas.py +++ /dev/null @@ -1,106 +0,0 @@ -# ----------------- -# lambdas -# ----------------- -a = lambda: 3 -#? int() -a() - -x = [] -a = lambda x: x -#? int() -a(0) - -#? float() -(lambda x: x)(3.0) - -arg_l = lambda x, y: y, x -#? float() -arg_l[0]('', 1.0) -#? list() -arg_l[1] - -arg_l = lambda x, y: (y, x) -args = 1,"" -result = arg_l(*args) -#? tuple() -result -#? str() -result[0] -#? int() -result[1] - -def with_lambda(callable_lambda, *args, **kwargs): - return callable_lambda(1, *args, **kwargs) - -#? int() -with_lambda(arg_l, 1.0)[1] -#? float() -with_lambda(arg_l, 1.0)[0] -#? float() -with_lambda(arg_l, y=1.0)[0] -#? int() -with_lambda(lambda x: x) -#? float() -with_lambda(lambda x, y: y, y=1.0) - -arg_func = lambda *args, **kwargs: (args[0], kwargs['a']) -#? int() -arg_func(1, 2, a='', b=10)[0] -#? list() -arg_func(1, 2, a=[], b=10)[1] - -# magic method -a = lambda: 3 -#? ['__closure__'] -a.__closure__ - -class C(): - def __init__(self, foo=1.0): - self.a = lambda: 1 - self.foo = foo - - def ret(self): - return lambda: self.foo - - def with_param(self): - return lambda x: x + self.a() - -#? int() -C().a() - -#? str() -C('foo').ret()() - -index = C().with_param()(1) -#? float() -['', 1, 1.0][index] - - -def xy(param): - def ret(a, b): - return a + b - - return lambda b: ret(param, b) - -#? int() -xy(1)(2) - -# ----------------- -# lambda param (#379) -# ----------------- -class Test(object): - def __init__(self, pred=lambda a, b: a): - self.a = 1 - #? int() - self.a - #? float() - pred(1.0, 2) - -# ----------------- -# test_nocond in grammar (happens in list comprehensions with `if`) -# ----------------- -# Doesn't need to do anything yet. It should just not raise an error. These -# nocond lambdas make no sense at all. - -#? int() -[a for a in [1,2] if lambda: 3][0] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/named_param.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/named_param.py deleted file mode 100644 index b420df1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/named_param.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Named Params: ->>> def a(abc): pass -... ->>> a(abc=3) # <- this stuff (abc) -""" - -def a(abc): - pass - -#? 5 ['abc'] -a(abc) - - -def a(*some_args, **some_kwargs): - pass - -#? 11 [] -a(some_args) - -#? 13 [] -a(some_kwargs) - -def multiple(foo, bar): - pass - -#? 17 ['bar'] -multiple(foo, bar) - -#? ['bar'] -multiple(foo, bar - -my_lambda = lambda lambda_param: lambda_param + 1 -#? 22 ['lambda_param'] -my_lambda(lambda_param) - -# __call__ -class Test(object): - def __init__(self, hello_other): - pass - - def __call__(self, hello): - pass - -#? 12 ['hello'] -Test()(hello=) -#? 11 [] -Test()(self=) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/on_import.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/on_import.py deleted file mode 100644 index dfaad45..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/on_import.py +++ /dev/null @@ -1,108 +0,0 @@ -def from_names(): - #? ['mod1'] - from import_tree.pkg. - #? ['path'] - from os. - -def from_names_goto(): - from import_tree import pkg - #? pkg - from import_tree.pkg - -def builtin_test(): - #? ['math'] - import math - -# ----------------- -# completions within imports -# ----------------- - -#? ['sqlite3'] -import sqlite3 - -#? ['classes'] -import classes - -#? ['timedelta'] -from datetime import timedel -#? 21 [] -from datetime.timedel import timedel - -# should not be possible, because names can only be looked up 1 level deep. -#? [] -from datetime.timedelta import resolution -#? [] -from datetime.timedelta import - -#? ['Cursor'] -from sqlite3 import Cursor - -#? ['some_variable'] -from . import some_variable -#? ['arrays'] -from . import arrays -#? [] -from . import import_tree as ren - -import os -#? os.path.join -from os.path import join - -# ----------------- -# special positions -> edge cases -# ----------------- -import datetime - -#? 6 datetime -from datetime.time import time - -#? [] -import datetime. -#? [] -import datetime.date - -#? 21 ['import'] -from import_tree.pkg import pkg -#? 49 ['a', '__name__', '__doc__', '__file__', '__package__'] -from import_tree.pkg.mod1 import not_existant, # whitespace before -#? ['a', '__name__', '__doc__', '__file__', '__package__'] -from import_tree.pkg.mod1 import not_existant, -#? 22 ['mod1'] -from import_tree.pkg. import mod1 -#? 17 ['mod1', 'mod2', 'random', 'pkg', 'rename1', 'rename2', 'recurse_class1', 'recurse_class2', 'invisible_pkg', 'flow_import'] -from import_tree. import pkg - -#? 18 ['pkg'] -from import_tree.p import pkg - -#? 17 ['import_tree'] -from .import_tree import -#? 10 ['run'] -from ..run import -#? ['run'] -from ..run -#? 10 ['run'] -from ..run. -#? [] -from ..run. - -#? ['run'] -from .. import run - -#? [] -from not_a_module import - - -#137 -import json -#? 23 json.dump -from json import load, dump -#? 17 json.load -from json import load, dump -# without the from clause: -import json, datetime -#? 7 json -import json, datetime -#? 13 datetime -import json, datetime - diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/ordering.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/ordering.py deleted file mode 100644 index 61eb192..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/ordering.py +++ /dev/null @@ -1,195 +0,0 @@ -# ----------------- -# normal -# ----------------- -a = "" -a = 1 - -#? int() -a -#? [] -a.append - -a = list - -b = 1; b = "" -#? str() -b - -# temp should not be accessible before definition -#? [] -temp - -a = 1 -temp = b; -b = a -a = temp -#? int() -b -#? int() -b -#? str() -a - -a = tuple -if 1: - a = list - -#? ['append'] -a.append -#? ['index'] -a.index - -# ----------------- -# tuples exchanges -# ----------------- -a, b = 1, "" -#? int() -a -#? str() -b - -b, a = a, b -#? int() -b -#? str() -a - -b, a = a, b -#? int() -a -#? str() -b - -# ----------------- -# function -# ----------------- -def a(a=3): - #? int() - a - #? [] - a.func - return a - -#? int() -a(2) -#? [] -a(2).func - -a_param = 3 -def func(a_param): - # should not be int - #? [] - a_param. - -from os import path - - -# should not return a function, because `a` is a function above -def f(b, a): return a -#? [] -f(b=3). - -# ----------------- -# closure -# ----------------- - -def x(): - a = 0 - - def x(): - return a - - a = 3.0 - return x() - -#? float() -x() - -# ----------------- -# class -# ----------------- -class A(object): - a = "" - a = 3 - #? int() - a - a = list() - def __init__(self): - self.b = "" - - def before(self): - self.b = 3 - # TODO should this be so? include entries after cursor? - #? int() str() list - self.b - self.b = list - - self.a = 1 - #? str() int() - self.a - - #? ['after'] - self.after - - self.c = 3 - #? int() - self.c - - def after(self): - self.a = '' - - c = set() - -#? list() -A.a - -a = A() -#? ['after'] -a.after -#? [] -a.upper -#? [] -a.append -#? [] -a.real - -#? str() int() -a.a - -a = 3 -class a(): - def __init__(self, a): - self.a = a - -#? float() -a(1.0).a -#? -a().a - -# ----------------- -# imports -# ----------------- - -math = 3 -import math -#? ['cosh'] -math.cosh -#? [] -math.real - -math = 3 -#? int() -math -#? [] -math.cos - -# do the same for star imports -cosh = 3 -from math import * -# cosh doesn't work, but that's not a problem, star imports should be at the -# start of EVERY script! -cosh.real - -cosh = 3 -#? int() -cosh diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/parser.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/parser.py deleted file mode 100644 index 68793f4..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/parser.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Issues with the parser and not the type inference should be part of this file. -""" - -class IndentIssues(): - """ - issue jedi-vim#288 - Which is really a fast parser issue. It used to start a new block at the - parentheses, because it had problems with the indentation. - """ - def one_param( - self, - ): - return 1 - - def with_param( - self, - y): - return y - - - -#? int() -IndentIssues().one_param() - -#? str() -IndentIssues().with_param('') - - -""" -Just because there's a def keyword, doesn't mean it should not be able to -complete to definition. -""" -definition = 0 -#? ['definition'] -str(def - - -# It might be hard to determine the context -class Foo(object): - @property - #? ['str'] - def bar(str diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484.py deleted file mode 100644 index b944cd1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484.py +++ /dev/null @@ -1,160 +0,0 @@ -""" Pep-0484 type hinting """ - -# python >= 3.2 - - -class A(): - pass - - -def function_parameters(a: A, b, c: str, d: int, e: str, f: str, g: int=4): - """ - :param e: if docstring and annotation agree, only one should be returned - :type e: str - :param f: if docstring and annotation disagree, both should be returned - :type f: int - """ - #? A() - a - #? - b - #? str() - c - #? int() - d - #? str() - e - #? int() str() - f - # int() - g - - -def return_unspecified(): - pass - -#? -return_unspecified() - - -def return_none() -> None: - """ - Return type None means the same as no return type as far as jedi - is concerned - """ - pass - -#? -return_none() - - -def return_str() -> str: - pass - -#? str() -return_str() - - -def return_custom_class() -> A: - pass - -#? A() -return_custom_class() - - -def return_annotation_and_docstring() -> str: - """ - :rtype: int - """ - pass - -#? str() int() -return_annotation_and_docstring() - - -def return_annotation_and_docstring_different() -> str: - """ - :rtype: str - """ - pass - -#? str() -return_annotation_and_docstring_different() - - -def annotation_forward_reference(b: "B") -> "B": - #? B() - b - -#? ["test_element"] -annotation_forward_reference(1).t - -class B: - test_element = 1 - pass - -#? B() -annotation_forward_reference(1) - - -class SelfReference: - test_element = 1 - def test_method(self, x: "SelfReference") -> "SelfReference": - #? SelfReference() - x - #? ["test_element", "test_method"] - self.t - #? ["test_element", "test_method"] - x.t - #? ["test_element", "test_method"] - self.test_method(1).t - -#? SelfReference() -SelfReference().test_method() - -def function_with_non_pep_0484_annotation( - x: "I can put anything here", - xx: "", - yy: "\r\n\0;+*&^564835(---^&*34", - y: 3 + 3, - zz: float) -> int("42"): - # infers int from function call - #? int() - x - # infers int from function call - #? int() - xx - # infers int from function call - #? int() - yy - # infers str from function call - #? str() - y - #? float() - zz -#? -function_with_non_pep_0484_annotation(1, 2, 3, "force string") - -def function_forward_reference_dynamic( - x: return_str_type(), - y: "return_str_type()") -> None: - #? - x - #? str() - y - -def return_str_type(): - return str - - -X = str -def function_with_assined_class_in_reference(x: X, y: "Y"): - #? str() - x - #? int() - y -Y = int - -def just_because_we_can(x: "flo" + "at"): - #? float() - x diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484_comments.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484_comments.py deleted file mode 100644 index 7d5f7c2..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484_comments.py +++ /dev/null @@ -1,109 +0,0 @@ -a = 3 # type: str -#? str() -a - -b = 3 # type: str but I write more -#? int() -b - -c = 3 # type: str # I comment more -#? str() -c - -d = "It should not read comments from the next line" -# type: int -#? str() -d - -# type: int -e = "It should not read comments from the previous line" -#? str() -e - -class BB: pass - -def test(a, b): - a = a # type: BB - c = a # type: str - d = a - # type: str - e = a # type: str # Should ignore long whitespace - - #? BB() - a - #? str() - c - #? BB() - d - #? str() - e - -a,b = 1, 2 # type: str, float -#? str() -a -#? float() -b - -class Employee: - pass - -# The typing library is not installable for Python 2.6, therefore ignore the -# following tests. -# python >= 2.7 - -from typing import List -x = [] # type: List[Employee] -#? Employee() -x[1] -x, y, z = [], [], [] # type: List[int], List[int], List[str] -#? int() -y[2] -x, y, z = [], [], [] # type: (List[float], List[float], List[BB]) -for zi in z: - #? BB() - zi - -x = [ - 1, - 2, -] # type: List[str] - -#? str() -x[1] - - -for bar in foo(): # type: str - #? str() - bar - -for bar, baz in foo(): # type: int, float - #? int() - bar - #? float() - baz - -for bar, baz in foo(): - # type: str, str - """ type hinting on next line should not work """ - #? - bar - #? - baz - -with foo(): # type: int - ... - -with foo() as f: # type: str - #? str() - f - -with foo() as f: - # type: str - """ type hinting on next line should not work """ - #? - f - -aaa = some_extremely_long_function_name_that_doesnt_leave_room_for_hints() \ - # type: float # We should be able to put hints on the next line with a \ -#? float() -aaa diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484_typing.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484_typing.py deleted file mode 100644 index 75c1c0b..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/pep0484_typing.py +++ /dev/null @@ -1,263 +0,0 @@ -""" -Test the typing library, with docstrings. This is needed since annotations -are not supported in python 2.7 else then annotating by comment (and this is -still TODO at 2016-01-23) -""" -# There's no Python 2.6 typing module. -# python >= 2.7 -import typing -class B: - pass - -def we_can_has_sequence(p, q, r, s, t, u): - """ - :type p: typing.Sequence[int] - :type q: typing.Sequence[B] - :type r: typing.Sequence[int] - :type s: typing.Sequence["int"] - :type t: typing.MutableSequence[dict] - :type u: typing.List[float] - """ - #? ["count"] - p.c - #? int() - p[1] - #? ["count"] - q.c - #? B() - q[1] - #? ["count"] - r.c - #? int() - r[1] - #? ["count"] - s.c - #? int() - s[1] - #? [] - s.a - #? ["append"] - t.a - #? dict() - t[1] - #? ["append"] - u.a - #? float() - u[1] - -def iterators(ps, qs, rs, ts): - """ - :type ps: typing.Iterable[int] - :type qs: typing.Iterator[str] - :type rs: typing.Sequence["ForwardReference"] - :type ts: typing.AbstractSet["float"] - """ - for p in ps: - #? int() - p - #? - next(ps) - a, b = ps - #? int() - a - ##? int() --- TODO fix support for tuple assignment - # https://github.com/davidhalter/jedi/pull/663#issuecomment-172317854 - # test below is just to make sure that in case it gets fixed by accident - # these tests will be fixed as well the way they should be - #? - b - - for q in qs: - #? str() - q - #? str() - next(qs) - for r in rs: - #? ForwardReference() - r - #? - next(rs) - for t in ts: - #? float() - t - -def sets(p, q): - """ - :type p: typing.AbstractSet[int] - :type q: typing.MutableSet[float] - """ - #? [] - p.a - #? ["add"] - q.a - -def tuple(p, q, r): - """ - :type p: typing.Tuple[int] - :type q: typing.Tuple[int, str, float] - :type r: typing.Tuple[B, ...] - """ - #? int() - p[0] - #? int() - q[0] - #? str() - q[1] - #? float() - q[2] - #? B() - r[0] - #? B() - r[1] - #? B() - r[2] - #? B() - r[10000] - i, s, f = q - #? int() - i - ##? str() --- TODO fix support for tuple assignment - # https://github.com/davidhalter/jedi/pull/663#issuecomment-172317854 - #? - s - ##? float() --- TODO fix support for tuple assignment - # https://github.com/davidhalter/jedi/pull/663#issuecomment-172317854 - #? - f - -class Key: - pass - -class Value: - pass - -def mapping(p, q, d, r, s, t): - """ - :type p: typing.Mapping[Key, Value] - :type q: typing.MutableMapping[Key, Value] - :type d: typing.Dict[Key, Value] - :type r: typing.KeysView[Key] - :type s: typing.ValuesView[Value] - :type t: typing.ItemsView[Key, Value] - """ - #? [] - p.setd - #? ["setdefault"] - q.setd - #? ["setdefault"] - d.setd - #? Value() - p[1] - for key in p: - #? Key() - key - for key in p.keys(): - #? Key() - key - for value in p.values(): - #? Value() - value - for item in p.items(): - #? Key() - item[0] - #? Value() - item[1] - (key, value) = item - #? Key() - key - #? Value() - value - for key, value in p.items(): - #? Key() - key - #? Value() - value - for key in r: - #? Key() - key - for value in s: - #? Value() - value - for key, value in t: - #? Key() - key - #? Value() - value - -def union(p, q, r, s, t): - """ - :type p: typing.Union[int] - :type q: typing.Union[int, int] - :type r: typing.Union[int, str, "int"] - :type s: typing.Union[int, typing.Union[str, "typing.Union['float', 'dict']"]] - :type t: typing.Union[int, None] - """ - #? int() - p - #? int() - q - #? int() str() - r - #? int() str() float() dict() - s - #? int() - t - -def optional(p): - """ - :type p: typing.Optional[int] - Optional does not do anything special. However it should be recognised - as being of that type. Jedi doesn't do anything with the extra into that - it can be None as well - """ - #? int() - p - -class ForwardReference: - pass - -class TestDict(typing.Dict[str, int]): - def setdud(self): - pass - -def testdict(x): - """ - :type x: TestDict - """ - #? ["setdud", "setdefault"] - x.setd - for key in x.keys(): - #? str() - key - for value in x.values(): - #? int() - value - -x = TestDict() -#? ["setdud", "setdefault"] -x.setd -for key in x.keys(): - #? str() - key -for value in x.values(): - #? int() - value -# python >= 3.2 -""" -docstrings have some auto-import, annotations can use all of Python's -import logic -""" -import typing as t -def union2(x: t.Union[int, str]): - #? int() str() - x - -from typing import Union -def union3(x: Union[int, str]): - #? int() str() - x - -from typing import Union as U -def union4(x: U[int, str]): - #? int() str() - x diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/precedence.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/precedence.py deleted file mode 100644 index 6078115..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/precedence.py +++ /dev/null @@ -1,138 +0,0 @@ -""" -Test Jedi's operation understanding. Jedi should understand simple additions, -multiplications, etc. -""" -# ----------------- -# numbers -# ----------------- -x = [1, 'a', 1.0] - -#? int() str() float() -x[12] - -#? float() -x[1 + 1] - -index = 0 + 1 - -#? str() -x[index] - -#? int() -x[1 + (-1)] - -def calculate(number): - return number + constant - -constant = 1 - -#? float() -x[calculate(1)] - -def calculate(number): - return number + constant - -# ----------------- -# strings -# ----------------- - -x = 'upp' + 'e' - -#? str.upper -getattr(str, x + 'r') - -a = "a"*3 -#? str() -a -a = 3 * "a" -#? str() -a - -a = 3 * "a" -#? str() -a - -#? int() -(3 ** 3) -#? int() str() -(3 ** 'a') - -# ----------------- -# assignments -# ----------------- - -x = [1, 'a', 1.0] - -i = 0 -i += 1 -i += 1 -#? float() -x[i] - -i = 1 -i += 1 -i -= 3 -i += 1 -#? int() -x[i] - -# ----------------- -# in -# ----------------- - -if 'X' in 'Y': - a = 3 -else: - a = '' -# For now don't really check for truth values. So in should return both -# results. -#? str() int() -a - -# ----------------- -# for flow assignments -# ----------------- - -class FooBar(object): - fuu = 0.1 - raboof = 'fourtytwo' - -# targets should be working -target = '' -for char in ['f', 'u', 'u']: - target += char -#? float() -getattr(FooBar, target) - -# github #24 -target = u'' -for char in reversed(['f', 'o', 'o', 'b', 'a', 'r']): - target += char - -#? str() -getattr(FooBar, target) - - -# ----------------- -# repetition problems -> could be very slow and memory expensive - shouldn't -# be. -# ----------------- - -b = [str(1)] -l = list -for x in [l(0), l(1), l(2), l(3), l(4), l(5), l(6), l(7), l(8), l(9), l(10), - l(11), l(12), l(13), l(14), l(15), l(16), l(17), l(18), l(19), l(20), - l(21), l(22), l(23), l(24), l(25), l(26), l(27), l(28), l(29)]: - b += x - -#? str() -b[1] - - -# ----------------- -# undefined names -# ----------------- -a = foobarbaz + 'hello' - -#? int() float() -{'hello': 1, 'bar': 1.0}[a] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/recursion.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/recursion.py deleted file mode 100644 index 77e5b24..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/recursion.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -Code that might cause recursion issues (or has caused in the past). -""" - -def Recursion(): - def recurse(self): - self.a = self.a - self.b = self.b.recurse() - -#? -Recursion().a - -#? -Recursion().b - - -class X(): - def __init__(self): - self.recursive = [1, 3] - - def annoying(self): - self.recursive = [self.recursive[0]] - - def recurse(self): - self.recursive = [self.recursive[1]] - -#? int() -X().recursive[0] - - -def to_list(iterable): - return list(set(iterable)) - - -def recursion1(foo): - return to_list(to_list(foo)) + recursion1(foo) - -#? int() -recursion1([1,2])[0] - - -class FooListComp(): - def __init__(self): - self.recursive = [1] - - def annoying(self): - self.recursive = [x for x in self.recursive] - - -#? int() -FooListComp().recursive[0] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/stdlib.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/stdlib.py deleted file mode 100644 index 92b7929..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/stdlib.py +++ /dev/null @@ -1,224 +0,0 @@ -""" -std library stuff -""" - -# ----------------- -# builtins -# ----------------- -arr = [''] - -#? str() -sorted(arr)[0] - -#? str() -next(reversed(arr)) -next(reversed(arr)) - -# should not fail if there's no return value. -def yielder(): - yield None - -#? None -next(reversed(yielder())) - -# empty reversed should not raise an error -#? -next(reversed()) - -#? str() -next(open('')) - -#? int() -{'a':2}.setdefault('a', 3) - -# Compiled classes should have the meta class attributes. -#? ['__itemsize__'] -tuple.__itemsize__ - -# ----------------- -# type() calls with one parameter -# ----------------- -#? int -type(1) -#? int -type(int()) -#? type -type(int) -#? type -type(type) -#? list -type([]) - -def x(): - yield 1 -generator = type(x()) -#? generator -type(x for x in []) -#? type(x) -type(lambda: x) - -import math -import os -#? type(os) -type(math) -class X(): pass -#? type -type(X) - -# ----------------- -# enumerate -# ----------------- -for i, j in enumerate(["as", "ad"]): - #? int() - i - #? str() - j - -# ----------------- -# re -# ----------------- -import re -c = re.compile(r'a') -# re.compile should not return str -> issue #68 -#? [] -c.startswith -#? int() -c.match().start() - -#? int() -re.match(r'a', 'a').start() - -for a in re.finditer('a', 'a'): - #? int() - a.start() - -#? str() -re.sub('a', 'a') - -# ----------------- -# ref -# ----------------- -import weakref - -#? int() -weakref.proxy(1) - -#? weakref.ref() -weakref.ref(1) -#? int() -weakref.ref(1)() - -# ----------------- -# functools -# ----------------- -import functools - -basetwo = functools.partial(int, base=2) -#? int() -basetwo() - -def function(a, b): - return a, b -a = functools.partial(function, 0) - -#? int() -a('')[0] -#? str() -a('')[1] - -kw = functools.partial(function, b=1.0) -tup = kw(1) -#? int() -tup[0] -#? float() -tup[1] - -def my_decorator(f): - @functools.wraps(f) - def wrapper(*args, **kwds): - return f(*args, **kwds) - return wrapper - -@my_decorator -def example(a): - return a - -#? str() -example('') - - -# ----------------- -# sqlite3 (#84) -# ----------------- - -import sqlite3 -#? sqlite3.Connection() -con = sqlite3.connect() -#? sqlite3.Cursor() -c = con.cursor() -#? sqlite3.Row() -row = c.fetchall()[0] -#? str() -row.keys()[0] - -def huhu(db): - """ - :type db: sqlite3.Connection - :param db: the db connection - """ - #? sqlite3.Connection() - db - -# ----------------- -# hashlib -# ----------------- - -import hashlib - -#? ['md5'] -hashlib.md5 - -# ----------------- -# copy -# ----------------- - -import copy -#? int() -copy.deepcopy(1) - -#? -copy.copy() - -# ----------------- -# json -# ----------------- - -# We don't want any results for json, because it depends on IO. -import json -#? -json.load('asdf') -#? -json.loads('[1]') - -# ----------------- -# random -# ----------------- - -import random -class A(object): - def say(self): pass -class B(object): - def shout(self): pass -cls = random.choice([A, B]) -#? ['say', 'shout'] -cls().s - -# ----------------- -# random -# ----------------- - -import zipfile -z = zipfile.ZipFile("foo") -# It's too slow. So we don't run it at the moment. -##? ['upper'] -z.read('name').upper diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/sys_path.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/sys_path.py deleted file mode 100644 index ebaccc2..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/sys_path.py +++ /dev/null @@ -1,25 +0,0 @@ - -import sys -import os -from os import dirname - -sys.path.insert(0, '../../jedi') -sys.path.append(dirname(os.path.abspath('thirdparty' + os.path.sep + 'asdf'))) - -# modifications, that should fail: -# because of sys module -sys.path.append(sys.path[1] + '/thirdparty') -# syntax err -sys.path.append('a' +* '/thirdparty') - -#? ['evaluate'] -import evaluate - -#? ['Evaluator'] -evaluate.Evaluator - -#? ['jedi_'] -import jedi_ - -#? ['el'] -jedi_.el diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/PyQt4_.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/PyQt4_.py deleted file mode 100644 index f4e4183..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/PyQt4_.py +++ /dev/null @@ -1,19 +0,0 @@ -from PyQt4.QtCore import * -from PyQt4.QtGui import * - -#? ['QActionGroup'] -QActionGroup - -#? ['currentText'] -QStyleOptionComboBox().currentText - -#? [] -QStyleOptionComboBox().currentText. - -from PyQt4 import QtGui - -#? ['currentText'] -QtGui.QStyleOptionComboBox().currentText - -#? [] -QtGui.QStyleOptionComboBox().currentText. diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/django_.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/django_.py deleted file mode 100644 index 9914a6d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/django_.py +++ /dev/null @@ -1,11 +0,0 @@ -#! ['class ObjectDoesNotExist'] -from django.core.exceptions import ObjectDoesNotExist -import django - -#? ['get_version'] -django.get_version - -from django.conf import settings - -#? ['configured'] -settings.configured diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/jedi_.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/jedi_.py deleted file mode 100644 index dc384b1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/jedi_.py +++ /dev/null @@ -1,52 +0,0 @@ - -from jedi import functions, evaluate, parsing - -el = functions.completions()[0] -#? ['description'] -el.description - -#? str() -el.description - - -scopes, path, dot, like = \ - api._prepare_goto(source, row, column, path, True) - -# has problems with that (sometimes) very deep nesting. -#? set() -el = scopes - -# get_names_for_scope is also recursion stuff -#? tuple() -el = list(evaluate.get_names_for_scope())[0] - -#? int() parsing.Module() -el = list(evaluate.get_names_for_scope(1))[0][0] -#? parsing.Module() -el = list(evaluate.get_names_for_scope())[0][0] - -#? list() -el = list(evaluate.get_names_for_scope(1))[0][1] -#? list() -el = list(evaluate.get_names_for_scope())[0][1] - -#? list() -parsing.Scope((0,0)).get_set_vars() -#? parsing.Import() parsing.Name() -parsing.Scope((0,0)).get_set_vars()[0] -# TODO access parent is not possible, because that is not set in the class -## parsing.Class() -parsing.Scope((0,0)).get_set_vars()[0].parent - -#? parsing.Import() parsing.Name() -el = list(evaluate.get_names_for_scope())[0][1][0] - -#? evaluate.Array() evaluate.Class() evaluate.Function() evaluate.Instance() -list(evaluate.follow_call())[0] - -# With the right recursion settings, this should be possible (and maybe more): -# Array Class Function Generator Instance Module -# However, this was produced with the recursion settings 10/350/10000, and -# lasted 18.5 seconds. So we just have to be content with the results. -#? evaluate.Class() evaluate.Function() -evaluate.get_scopes_for_name()[0] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/psycopg2_.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/psycopg2_.py deleted file mode 100644 index 834704b..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/psycopg2_.py +++ /dev/null @@ -1,11 +0,0 @@ -import psycopg2 - -conn = psycopg2.connect('dbname=test') - -#? ['cursor'] -conn.cursor - -cur = conn.cursor() - -#? ['fetchall'] -cur.fetchall diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/pylab_.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/pylab_.py deleted file mode 100644 index ab132a4..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/thirdparty/pylab_.py +++ /dev/null @@ -1,36 +0,0 @@ -import pylab - -# two gotos -#! ['module numpy'] -import numpy - -#! ['module random'] -import numpy.random - -#? ['array2string'] -numpy.array2string - -#? ['shape'] -numpy.matrix().shape - -#? ['random_integers'] -pylab.random_integers - -#? [] -numpy.random_integers - -#? ['random_integers'] -numpy.random.random_integers -#? ['sample'] -numpy.random.sample - -import numpy -na = numpy.array([1,2]) -#? ['shape'] -na.shape - -# shouldn't raise an error #29, jedi-vim -# doesn't return something, because matplotlib uses __import__ -fig = pylab.figure() -#? -fig.add_subplot diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/types.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/types.py deleted file mode 100644 index 768b660..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/types.py +++ /dev/null @@ -1,127 +0,0 @@ -# ----------------- -# non array -# ----------------- - -#? ['imag'] -int.imag - -#? [] -int.is_integer - -#? ['is_integer'] -float.is_int - -#? ['is_integer'] -1.0.is_integer - -#? ['upper'] -"".upper - -#? ['upper'] -r"".upper - -# strangely this didn't work, because the = is used for assignments -#? ['upper'] -"=".upper -a = "=" -#? ['upper'] -a.upper - - -# ----------------- -# lists -# ----------------- -arr = [] -#? ['append'] -arr.app - -#? ['append'] -list().app -#? ['append'] -[].append - -arr2 = [1,2,3] -#? ['append'] -arr2.app - -#? int() -arr.count(1) - -x = [] -#? -x.pop() -x = [3] -#? int() -x.pop() -x = [] -x.append(1.0) -#? float() -x.pop() - -# ----------------- -# dicts -# ----------------- -dic = {} - -#? ['copy', 'clear'] -dic.c - -dic2 = dict(a=1, b=2) -#? ['pop', 'popitem'] -dic2.p -#? ['popitem'] -{}.popitem - -dic2 = {'asdf': 3} -#? ['popitem'] -dic2.popitem - -#? int() -dic2['asdf'] - -d = {'a': 3, 1.0: list} - -#? int() list -d.values()[0] -##? int() list -dict(d).values()[0] - -#? str() -d.items()[0][0] -#? int() -d.items()[0][1] - -# ----------------- -# set -# ----------------- -set_t = {1,2} - -#? ['clear', 'copy'] -set_t.c - -set_t2 = set() - -#? ['clear', 'copy'] -set_t2.c - -# ----------------- -# tuples -# ----------------- -tup = ('',2) - -#? ['count'] -tup.c - -tup2 = tuple() -#? ['index'] -tup2.i -#? ['index'] -().i - -tup3 = 1,"" -#? ['index'] -tup3.index - -tup4 = 1,"" -#? ['index'] -tup4.index diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/completion/usages.py b/vim-plugins/bundle/jedi-vim/jedi/test/completion/usages.py deleted file mode 100644 index 3805152..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/completion/usages.py +++ /dev/null @@ -1,275 +0,0 @@ -""" -Renaming tests. This means search for usages. -I always leave a little bit of space to add room for additions, because the -results always contain position informations. -""" -#< 4 (0,4), (3,0), (5,0), (17,0), (12,4), (14,5), (15,0) -def abc(): pass - -#< 0 (-3,4), (0,0), (2,0), (14,0), (9,4), (11,5), (12,0) -abc.d.a.bsaasd.abc.d - -abc -# unicode chars shouldn't be a problem. -x['smörbröd'].abc - -# With the new parser these statements are not recognized as stateents, because -# they are not valid Python. -if 1: - abc = -else: - (abc) = -abc = -#< (-17,4), (-14,0), (-12,0), (0,0), (-2,0), (-3,5), (-5,4) -abc - -abc = 5 - - -Abc = 3 - -#< 6 (0,6), (2,4), (5,8), (17,0) -class Abc(): - #< (-2,6), (0,4), (3,8), (15,0) - Abc - - def Abc(self): - Abc; self.c = 3 - - #< 17 (0,16), (2,8) - def a(self, Abc): - #< 10 (-2,16), (0,8) - Abc - - #< 19 (0,18), (2,8) - def self_test(self): - #< 12 (-2,18), (0,8) - self.b - -Abc.d.Abc - - -#< 4 (0,4), (5,1) -def blubi(): - pass - - -#< (-5,4), (0,1) -@blubi -def a(): pass - - -#< 0 (0,0), (1,0) -set_object_var = object() -set_object_var.var = 1 - - -response = 5 -#< 0 (0,0), (1,0), (2,0), (4,0) -response = HttpResponse(mimetype='application/pdf') -response['Content-Disposition'] = 'attachment; filename=%s.pdf' % id -response.write(pdf) -#< (-4,0), (-3,0), (-2,0), (0,0) -response - - -# ----------------- -# imports -# ----------------- -#< (0,7), (3,0) -import module_not_exists - -#< (-3,7), (0,0) -module_not_exists - - -#< ('rename1', 1,0), (0,24), (3,0), (6,17), ('rename2', 4,5), (10,17), (13,17), ('imports', 72, 16) -from import_tree import rename1 - -#< (0,8), ('rename1',3,0), ('rename2',4,20), ('rename2',6,0), (3,32), (7,32), (4,0) -rename1.abc - -#< (-3,8), ('rename1', 3,0), ('rename2', 4,20), ('rename2', 6,0), (0,32), (4,32), (1,0) -from import_tree.rename1 import abc -abc - -#< 20 ('rename1', 1,0), ('rename2', 4,5), (-10,24), (-7,0), (-4,17), (0,17), (3,17), ('imports', 72, 16) -from import_tree.rename1 import abc - -#< (0, 32), -from import_tree.rename1 import not_existing - -# Shouldn't raise an error or do anything weird. -from not_existing import * - -# ----------------- -# classes -# ----------------- - -class TestMethods(object): - #< 8 (0,8), (2,13) - def a_method(self): - #< 13 (-2,8), (0,13) - self.a_method() - #< 13 (2,8), (0,13), (3,13) - self.b_method() - - def b_method(self): - self.b_method - - -class TestClassVar(object): - #< 4 (0,4), (5,13), (7,21) - class_v = 1 - def a(self): - class_v = 1 - - #< (-5,4), (0,13), (2,21) - self.class_v - #< (-7,4), (-2,13), (0,21) - TestClassVar.class_v - #< (0,8), (-7, 8) - class_v - -class TestInstanceVar(): - def a(self): - #< 13 (4,13), (0,13) - self._instance_var = 3 - - def b(self): - #< (-4,13), (0,13) - self._instance_var - # A call to self used to trigger an error, because it's also a trailer - # with two children. - self() - - -class NestedClass(): - def __getattr__(self, name): - return self - -# Shouldn't find a definition, because there's other `instance`. -# TODO reenable that test -##< (0, 14), -NestedClass().instance - - -# ----------------- -# inheritance -# ----------------- -class Super(object): - #< 4 (0,4), (23,18), (25,13) - base_class = 1 - #< 4 (0,4), - class_var = 1 - - #< 8 (0,8), - def base_method(self): - #< 13 (0,13), (20,13) - self.base_var = 1 - #< 13 (0,13), - self.instance_var = 1 - - #< 8 (0,8), - def just_a_method(self): pass - - -#< 20 (0,16), (-18,6) -class TestClass(Super): - #< 4 (0,4), - class_var = 1 - - def x_method(self): - - #< (0,18), (2,13), (-23,4) - TestClass.base_class - #< (-2,18), (0,13), (-25,4) - self.base_class - #< (-20,13), (0,13) - self.base_var - #< - TestClass.base_var - - - #< 13 (5,13), (0,13) - self.instance_var = 3 - - #< 9 (0,8), - def just_a_method(self): - #< (-5,13), (0,13) - self.instance_var - - -# ----------------- -# properties -# ----------------- -class TestProperty: - - @property - #< 10 (0,8), (5,13) - def prop(self): - return 1 - - def a(self): - #< 13 (-5,8), (0,13) - self.prop - - @property - #< 13 (0,8), (4,5) - def rw_prop(self): - return self._rw_prop - - #< 8 (-4,8), (0,5) - @rw_prop.setter - #< 8 (0,8), (5,13) - def rw_prop(self, value): - self._rw_prop = value - - def b(self): - #< 13 (-5,8), (0,13) - self.rw_prop - -# ----------------- -# *args, **kwargs -# ----------------- -#< 11 (1,11), (0,8) -def f(**kwargs): - return kwargs - - -# ----------------- -# No result -# ----------------- -if isinstance(j, int): - #< - j - -# ----------------- -# Dynamic Param Search -# ----------------- - -class DynamicParam(): - def foo(self): - return - -def check(instance): - #< 13 (-5,8), (0,13) - instance.foo() - -check(DynamicParam()) - -# ----------------- -# Compiled Objects -# ----------------- - -import _sre - -#< 0 (-3,7), (0,0), ('_sre', None, None) -_sre - -# ----------------- -# on syntax -# ----------------- - -#< 0 -import undefined diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/conftest.py b/vim-plugins/bundle/jedi-vim/jedi/test/conftest.py deleted file mode 100644 index ac04e26..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/conftest.py +++ /dev/null @@ -1,130 +0,0 @@ -import os -import re - -import pytest - -from . import helpers -from . import run -from . import refactor - -import jedi -from jedi.evaluate.analysis import Warning -from jedi import settings - - -def pytest_addoption(parser): - parser.addoption( - "--integration-case-dir", - default=os.path.join(helpers.test_dir, 'completion'), - help="Directory in which integration test case files locate.") - parser.addoption( - "--refactor-case-dir", - default=os.path.join(helpers.test_dir, 'refactor'), - help="Directory in which refactoring test case files locate.") - parser.addoption( - "--test-files", "-T", default=[], action='append', - help=( - "Specify test files using FILE_NAME[:LINE[,LINE[,...]]]. " - "For example: -T generators.py:10,13,19. " - "Note that you can use -m to specify the test case by id.")) - parser.addoption( - "--thirdparty", action='store_true', - help="Include integration tests that requires third party modules.") - - -def parse_test_files_option(opt): - """ - Parse option passed to --test-files into a key-value pair. - - >>> parse_test_files_option('generators.py:10,13,19') - ('generators.py', [10, 13, 19]) - """ - opt = str(opt) - if ':' in opt: - (f_name, rest) = opt.split(':', 1) - return (f_name, list(map(int, rest.split(',')))) - else: - return (opt, []) - - -def pytest_generate_tests(metafunc): - """ - :type metafunc: _pytest.python.Metafunc - """ - test_files = dict(map(parse_test_files_option, - metafunc.config.option.test_files)) - if 'case' in metafunc.fixturenames: - base_dir = metafunc.config.option.integration_case_dir - thirdparty = metafunc.config.option.thirdparty - cases = list(run.collect_dir_tests(base_dir, test_files)) - if thirdparty: - cases.extend(run.collect_dir_tests( - os.path.join(base_dir, 'thirdparty'), test_files, True)) - ids = ["%s:%s" % (c.module_name, c.line_nr_test) for c in cases] - metafunc.parametrize('case', cases, ids=ids) - - if 'refactor_case' in metafunc.fixturenames: - base_dir = metafunc.config.option.refactor_case_dir - metafunc.parametrize( - 'refactor_case', - refactor.collect_dir_tests(base_dir, test_files)) - - if 'static_analysis_case' in metafunc.fixturenames: - base_dir = os.path.join(os.path.dirname(__file__), 'static_analysis') - metafunc.parametrize( - 'static_analysis_case', - collect_static_analysis_tests(base_dir, test_files)) - - -def collect_static_analysis_tests(base_dir, test_files): - for f_name in os.listdir(base_dir): - files_to_execute = [a for a in test_files.items() if a[0] in f_name] - if f_name.endswith(".py") and (not test_files or files_to_execute): - path = os.path.join(base_dir, f_name) - yield StaticAnalysisCase(path) - - -class StaticAnalysisCase(object): - """ - Static Analysis cases lie in the static_analysis folder. - The tests also start with `#!`, like the goto_definition tests. - """ - def __init__(self, path): - self._path = path - with open(path) as f: - self._source = f.read() - - self.skip = False - for line in self._source.splitlines(): - self.skip = self.skip or run.skip_python_version(line) - - - def collect_comparison(self): - cases = [] - for line_nr, line in enumerate(self._source.splitlines(), 1): - match = re.match(r'(\s*)#! (\d+ )?(.*)$', line) - if match is not None: - column = int(match.group(2) or 0) + len(match.group(1)) - cases.append((line_nr + 1, column, match.group(3))) - return cases - - def run(self, compare_cb): - analysis = jedi.Script(self._source, path=self._path)._analysis() - typ_str = lambda inst: 'warning ' if isinstance(inst, Warning) else '' - analysis = [(r.line, r.column, typ_str(r) + r.name) - for r in analysis] - compare_cb(self, analysis, self.collect_comparison()) - - def __repr__(self): - return "<%s: %s>" % (self.__class__.__name__, os.path.basename(self._path)) - - -@pytest.fixture() -def isolated_jedi_cache(monkeypatch, tmpdir): - """ - Set `jedi.settings.cache_directory` to a temporary directory during test. - - Same as `clean_jedi_cache`, but create the temporary directory for - each test case (scope='function'). - """ - monkeypatch.setattr(settings, 'cache_directory', str(tmpdir)) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/helpers.py b/vim-plugins/bundle/jedi-vim/jedi/test/helpers.py deleted file mode 100644 index 111b859..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/helpers.py +++ /dev/null @@ -1,40 +0,0 @@ -""" -A helper module for testing, improves compatibility for testing (as -``jedi._compatibility``) as well as introducing helper functions. -""" - -import sys -if sys.hexversion < 0x02070000: - import unittest2 as unittest -else: - import unittest -TestCase = unittest.TestCase - -import os -from os.path import abspath, dirname -import functools - -test_dir = dirname(abspath(__file__)) -root_dir = dirname(test_dir) - -sample_int = 1 # This is used in completion/imports.py - -def cwd_at(path): - """ - Decorator to run function at `path`. - - :type path: str - :arg path: relative path from repository root (e.g., ``'jedi'``). - """ - def decorator(func): - @functools.wraps(func) - def wrapper(*args, **kwds): - try: - oldcwd = os.getcwd() - repo_root = os.path.dirname(test_dir) - os.chdir(os.path.join(repo_root, path)) - return func(*args, **kwds) - finally: - os.chdir(oldcwd) - return wrapper - return decorator diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/refactor.py b/vim-plugins/bundle/jedi-vim/jedi/test/refactor.py deleted file mode 100755 index 9cc10fd..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/refactor.py +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env python -""" -Refactoring tests work a little bit similar to Black Box tests. But the idea is -here to compare two versions of code. **Note: Refactoring is currently not in -active development (and was never stable), the tests are therefore not really -valuable - just ignore them.** -""" -from __future__ import with_statement -import os -import re - -from functools import reduce -import jedi -from jedi import refactoring - - -class RefactoringCase(object): - - def __init__(self, name, source, line_nr, index, path, - new_name, start_line_test, desired): - self.name = name - self.source = source - self.line_nr = line_nr - self.index = index - self.path = path - self.new_name = new_name - self.start_line_test = start_line_test - self.desired = desired - - def refactor(self): - script = jedi.Script(self.source, self.line_nr, self.index, self.path) - f_name = os.path.basename(self.path) - refactor_func = getattr(refactoring, f_name.replace('.py', '')) - args = (self.new_name,) if self.new_name else () - return refactor_func(script, *args) - - def run(self): - refactor_object = self.refactor() - - # try to get the right excerpt of the newfile - f = refactor_object.new_files()[self.path] - lines = f.splitlines()[self.start_line_test:] - - end = self.start_line_test + len(lines) - pop_start = None - for i, l in enumerate(lines): - if l.startswith('# +++'): - end = i - break - elif '#? ' in l: - pop_start = i - lines.pop(pop_start) - self.result = '\n'.join(lines[:end - 1]).strip() - return self.result - - def check(self): - return self.run() == self.desired - - def __repr__(self): - return '<%s: %s:%s>' % (self.__class__.__name__, - self.name, self.line_nr - 1) - - -def collect_file_tests(source, path, lines_to_execute): - r = r'^# --- ?([^\n]*)\n((?:(?!\n# \+\+\+).)*)' \ - r'\n# \+\+\+((?:(?!\n# ---).)*)' - for match in re.finditer(r, source, re.DOTALL | re.MULTILINE): - name = match.group(1).strip() - first = match.group(2).strip() - second = match.group(3).strip() - start_line_test = source[:match.start()].count('\n') + 1 - - # get the line with the position of the operation - p = re.match(r'((?:(?!#\?).)*)#\? (\d*) ?([^\n]*)', first, re.DOTALL) - if p is None: - print("Please add a test start.") - continue - until = p.group(1) - index = int(p.group(2)) - new_name = p.group(3) - - line_nr = start_line_test + until.count('\n') + 2 - if lines_to_execute and line_nr - 1 not in lines_to_execute: - continue - - yield RefactoringCase(name, source, line_nr, index, path, - new_name, start_line_test, second) - - -def collect_dir_tests(base_dir, test_files): - for f_name in os.listdir(base_dir): - files_to_execute = [a for a in test_files.items() if a[0] in f_name] - lines_to_execute = reduce(lambda x, y: x + y[1], files_to_execute, []) - if f_name.endswith(".py") and (not test_files or files_to_execute): - path = os.path.join(base_dir, f_name) - with open(path) as f: - source = f.read() - for case in collect_file_tests(source, path, lines_to_execute): - yield case diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/refactor/extract.py b/vim-plugins/bundle/jedi-vim/jedi/test/refactor/extract.py deleted file mode 100644 index 312aced..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/refactor/extract.py +++ /dev/null @@ -1,47 +0,0 @@ -# --- simple -def test(): - #? 35 a - return test(100, (30 + b, c) + 1) - -# +++ -def test(): - a = (30 + b, c) + 1 - return test(100, a) - - -# --- simple #2 -def test(): - #? 25 a - return test(100, (30 + b, c) + 1) - -# +++ -def test(): - a = 30 + b - return test(100, (a, c) + 1) - - -# --- multiline -def test(): - #? 30 x - return test(1, (30 + b, c) - + 1) -# +++ -def test(): - x = ((30 + b, c) - + 1) - return test(1, x -) - - -# --- multiline #2 -def test(): - #? 25 x - return test(1, (30 + b, c) - + 1) -# +++ -def test(): - x = 30 + b - return test(1, (x, c) - + 1) - - diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/refactor/inline.py b/vim-plugins/bundle/jedi-vim/jedi/test/refactor/inline.py deleted file mode 100644 index c373be2..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/refactor/inline.py +++ /dev/null @@ -1,18 +0,0 @@ -# --- simple -def test(): - #? 4 - a = (30 + b, c) + 1 - return test(100, a) -# +++ -def test(): - return test(100, (30 + b, c) + 1) - - -# --- simple -if 1: - #? 4 - a = 1, 2 - return test(100, a) -# +++ -if 1: - return test(100, (1, 2)) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/refactor/rename.py b/vim-plugins/bundle/jedi-vim/jedi/test/refactor/rename.py deleted file mode 100644 index e98c589..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/refactor/rename.py +++ /dev/null @@ -1,17 +0,0 @@ -""" -Test coverage for renaming is mostly being done by testing -`Script.usages`. -""" - -# --- simple -def test1(): - #? 7 blabla - test1() - AssertionError - return test1, test1.not_existing -# +++ -def blabla(): - blabla() - AssertionError - return blabla, blabla.not_existing - diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/run.py b/vim-plugins/bundle/jedi-vim/jedi/test/run.py deleted file mode 100755 index 8337f7c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/run.py +++ /dev/null @@ -1,444 +0,0 @@ -#!/usr/bin/env python -""" -|jedi| is mostly being tested by what I would call "Blackbox Tests". These -tests are just testing the interface and do input/output testing. This makes a -lot of sense for |jedi|. Jedi supports so many different code structures, that -it is just stupid to write 200'000 unittests in the manner of -``regression.py``. Also, it is impossible to do doctests/unittests on most of -the internal data structures. That's why |jedi| uses mostly these kind of -tests. - -There are different kind of tests: - -- completions / goto_definitions ``#?`` -- goto_assignments: ``#!`` -- usages: ``#<`` - -How to run tests? -+++++++++++++++++ - -Jedi uses pytest_ to run unit and integration tests. To run tests, -simply run ``py.test``. You can also use tox_ to run tests for -multiple Python versions. - -.. _pytest: http://pytest.org -.. _tox: http://testrun.org/tox - -Integration test cases are located in ``test/completion`` directory -and each test case is indicated by either the comment ``#?`` (completions / -definitions), ``#!`` (assignments), or ``#<`` (usages). -There is also support for third party libraries. In a normal test run they are -not being executed, you have to provide a ``--thirdparty`` option. - -In addition to standard `-k` and `-m` options in py.test, you can use -`-T` (`--test-files`) option to specify integration test cases to run. -It takes the format of ``FILE_NAME[:LINE[,LINE[,...]]]`` where -``FILE_NAME`` is a file in ``test/completion`` and ``LINE`` is a line -number of the test comment. Here is some recipes: - -Run tests only in ``basic.py`` and ``imports.py``:: - - py.test test/test_integration.py -T basic.py -T imports.py - -Run test at line 4, 6, and 8 in ``basic.py``:: - - py.test test/test_integration.py -T basic.py:4,6,8 - -See ``py.test --help`` for more information. - -If you want to debug a test, just use the ``--pdb`` option. - -Alternate Test Runner -+++++++++++++++++++++ - -If you don't like the output of ``py.test``, there's an alternate test runner -that you can start by running ``./run.py``. The above example could be run by:: - - ./run.py basic 4 6 8 50-80 - -The advantage of this runner is simplicity and more customized error reports. -Using both runners will help you to have a quicker overview of what's -happening. - - -Auto-Completion -+++++++++++++++ - -Uses comments to specify a test in the next line. The comment says which -results are expected. The comment always begins with `#?`. The last row -symbolizes the cursor. - -For example:: - - #? ['real'] - a = 3; a.rea - -Because it follows ``a.rea`` and a is an ``int``, which has a ``real`` -property. - -Goto Definitions -++++++++++++++++ - -Definition tests use the same symbols like completion tests. This is -possible because the completion tests are defined with a list:: - - #? int() - ab = 3; ab - -Goto Assignments -++++++++++++++++ - -Tests look like this:: - - abc = 1 - #! ['abc=1'] - abc - -Additionally it is possible to specify the column by adding a number, which -describes the position of the test (otherwise it's just the end of line):: - - #! 2 ['abc=1'] - abc - -Usages -++++++ - -Tests look like this:: - - abc = 1 - #< abc@1,0 abc@3,0 - abc -""" -import os -import re -import sys -import operator -from ast import literal_eval -from io import StringIO -from functools import reduce - -import jedi -from jedi._compatibility import unicode, is_py3 -from jedi.parser import Parser, load_grammar -from jedi.api.classes import Definition - - -TEST_COMPLETIONS = 0 -TEST_DEFINITIONS = 1 -TEST_ASSIGNMENTS = 2 -TEST_USAGES = 3 - - -class IntegrationTestCase(object): - def __init__(self, test_type, correct, line_nr, column, start, line, - path=None, skip=None): - self.test_type = test_type - self.correct = correct - self.line_nr = line_nr - self.column = column - self.start = start - self.line = line - self.path = path - self.skip = skip - - @property - def module_name(self): - return os.path.splitext(os.path.basename(self.path))[0] - - @property - def line_nr_test(self): - """The test is always defined on the line before.""" - return self.line_nr - 1 - - def __repr__(self): - return '<%s: %s:%s:%s>' % (self.__class__.__name__, self.module_name, - self.line_nr_test, self.line.rstrip()) - - def script(self): - return jedi.Script(self.source, self.line_nr, self.column, self.path) - - def run(self, compare_cb): - testers = { - TEST_COMPLETIONS: self.run_completion, - TEST_DEFINITIONS: self.run_goto_definitions, - TEST_ASSIGNMENTS: self.run_goto_assignments, - TEST_USAGES: self.run_usages, - } - return testers[self.test_type](compare_cb) - - def run_completion(self, compare_cb): - completions = self.script().completions() - #import cProfile; cProfile.run('script.completions()') - - comp_str = set([c.name for c in completions]) - return compare_cb(self, comp_str, set(literal_eval(self.correct))) - - def run_goto_definitions(self, compare_cb): - script = self.script() - evaluator = script._evaluator - - def comparison(definition): - suffix = '()' if definition.type == 'instance' else '' - return definition.desc_with_module + suffix - - def definition(correct, correct_start, path): - should_be = set() - for match in re.finditer('(?:[^ ]+)', correct): - string = match.group(0) - parser = Parser(load_grammar(), string, start_symbol='eval_input') - parser.position_modifier.line = self.line_nr - element = parser.get_parsed_node() - element.parent = jedi.api.completion.get_user_scope( - script._get_module(), - (self.line_nr, self.column) - ) - results = evaluator.eval_element(element) - if not results: - raise Exception('Could not resolve %s on line %s' - % (match.string, self.line_nr - 1)) - - should_be |= set(Definition(evaluator, r) for r in results) - - # Because the objects have different ids, `repr`, then compare. - should = set(comparison(r) for r in should_be) - return should - - should = definition(self.correct, self.start, script.path) - result = script.goto_definitions() - is_str = set(comparison(r) for r in result) - return compare_cb(self, is_str, should) - - def run_goto_assignments(self, compare_cb): - result = self.script().goto_assignments() - comp_str = str(sorted(str(r.description) for r in result)) - return compare_cb(self, comp_str, self.correct) - - def run_usages(self, compare_cb): - result = self.script().usages() - self.correct = self.correct.strip() - compare = sorted((r.module_name, r.line, r.column) for r in result) - wanted = [] - if not self.correct: - positions = [] - else: - positions = literal_eval(self.correct) - for pos_tup in positions: - if type(pos_tup[0]) == str: - # this means that there is a module specified - wanted.append(pos_tup) - else: - line = pos_tup[0] - if pos_tup[0] is not None: - line += self.line_nr - wanted.append((self.module_name, line, pos_tup[1])) - - return compare_cb(self, compare, sorted(wanted)) - - -def skip_python_version(line): - comp_map = { - '==': 'eq', - '<=': 'le', - '>=': 'ge', - '<': 'lt', - '>': 'gt', - } - # check for python minimal version number - match = re.match(r" *# *python *([<>]=?|==) *(\d+(?:\.\d+)?)$", line) - if match: - minimal_python_version = tuple( - map(int, match.group(2).split("."))) - operation = getattr(operator, comp_map[match.group(1)]) - if not operation(sys.version_info, minimal_python_version): - return "Minimal python version %s %s" % (match.group(1), match.group(2)) - - return None - - -def collect_file_tests(path, lines, lines_to_execute): - def makecase(t): - return IntegrationTestCase(t, correct, line_nr, column, - start, line, path=path, skip=skip) - - start = None - correct = None - test_type = None - skip = None - for line_nr, line in enumerate(lines, 1): - if correct is not None: - r = re.match('^(\d+)\s*(.*)$', correct) - if r: - column = int(r.group(1)) - correct = r.group(2) - start += r.regs[2][0] # second group, start index - else: - column = len(line) - 1 # -1 for the \n - if test_type == '!': - yield makecase(TEST_ASSIGNMENTS) - elif test_type == '<': - yield makecase(TEST_USAGES) - elif correct.startswith('['): - yield makecase(TEST_COMPLETIONS) - else: - yield makecase(TEST_DEFINITIONS) - correct = None - else: - skip = skip or skip_python_version(line) - try: - r = re.search(r'(?:^|(?<=\s))#([?!<])\s*([^\n]*)', line) - # test_type is ? for completion and ! for goto_assignments - test_type = r.group(1) - correct = r.group(2) - # Quick hack to make everything work (not quite a bloody unicorn hack though). - if correct == '': - correct = ' ' - start = r.start() - except AttributeError: - correct = None - else: - # Skip the test, if this is not specified test. - for l in lines_to_execute: - if isinstance(l, tuple) and l[0] <= line_nr <= l[1] \ - or line_nr == l: - break - else: - if lines_to_execute: - correct = None - - -def collect_dir_tests(base_dir, test_files, check_thirdparty=False): - for f_name in os.listdir(base_dir): - files_to_execute = [a for a in test_files.items() if f_name.startswith(a[0])] - lines_to_execute = reduce(lambda x, y: x + y[1], files_to_execute, []) - if f_name.endswith(".py") and (not test_files or files_to_execute): - skip = None - if check_thirdparty: - lib = f_name.replace('_.py', '') - try: - # there is always an underline at the end. - # It looks like: completion/thirdparty/pylab_.py - __import__(lib) - except ImportError: - skip = 'Thirdparty-Library %s not found.' % lib - - path = os.path.join(base_dir, f_name) - - if is_py3: - source = open(path, encoding='utf-8').read() - else: - source = unicode(open(path).read(), 'UTF-8') - - for case in collect_file_tests(path, StringIO(source), - lines_to_execute): - case.source = source - if skip: - case.skip = skip - yield case - - -docoptstr = """ -Using run.py to make debugging easier with integration tests. - -An alternative testing format, which is much more hacky, but very nice to -work with. - -Usage: - run.py [--pdb] [--debug] [--thirdparty] [...] - run.py --help - -Options: - -h --help Show this screen. - --pdb Enable pdb debugging on fail. - -d, --debug Enable text output debugging (please install ``colorama``). - --thirdparty Also run thirdparty tests (in ``completion/thirdparty``). -""" -if __name__ == '__main__': - import docopt - arguments = docopt.docopt(docoptstr) - - import time - t_start = time.time() - # Sorry I didn't use argparse here. It's because argparse is not in the - # stdlib in 2.5. - import sys - - if arguments['--debug']: - jedi.set_debug_function() - - # get test list, that should be executed - test_files = {} - last = None - for arg in arguments['']: - match = re.match('(\d+)-(\d+)', arg) - if match: - start, end = match.groups() - test_files[last].append((int(start), int(end))) - elif arg.isdigit(): - if last is None: - continue - test_files[last].append(int(arg)) - else: - test_files[arg] = [] - last = arg - - # completion tests: - dir_ = os.path.dirname(os.path.realpath(__file__)) - completion_test_dir = os.path.join(dir_, '../test/completion') - completion_test_dir = os.path.abspath(completion_test_dir) - summary = [] - tests_fail = 0 - - # execute tests - cases = list(collect_dir_tests(completion_test_dir, test_files)) - if test_files or arguments['--thirdparty']: - completion_test_dir += '/thirdparty' - cases += collect_dir_tests(completion_test_dir, test_files, True) - - def file_change(current, tests, fails): - if current is not None: - current = os.path.basename(current) - print('%s \t\t %s tests and %s fails.' % (current, tests, fails)) - - def report(case, actual, desired): - if actual == desired: - return 0 - else: - print("\ttest fail @%d, actual = %s, desired = %s" - % (case.line_nr - 1, actual, desired)) - return 1 - - import traceback - current = cases[0].path if cases else None - count = fails = 0 - for c in cases: - if c.skip: - continue - if current != c.path: - file_change(current, count, fails) - current = c.path - count = fails = 0 - - try: - if c.run(report): - tests_fail += 1 - fails += 1 - except Exception: - traceback.print_exc() - print("\ttest fail @%d" % (c.line_nr - 1)) - tests_fail += 1 - fails += 1 - if arguments['--pdb']: - import pdb - pdb.post_mortem() - - count += 1 - - file_change(current, count, fails) - - print('\nSummary: (%s fails of %s tests) in %.3fs' - % (tests_fail, len(cases), time.time() - t_start)) - for s in summary: - print(s) - - exit_code = 1 if tests_fail else 0 - sys.exit(exit_code) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/speed/precedence.py b/vim-plugins/bundle/jedi-vim/jedi/test/speed/precedence.py deleted file mode 100644 index afd8824..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/speed/precedence.py +++ /dev/null @@ -1,37 +0,0 @@ -def marks(code): - if '.' in code: - another(code[:code.index(',') - 1] + '!') - else: - another(code + '.') - - -def another(code2): - call(numbers(code2 + 'haha')) - -marks('start1 ') -marks('start2 ') - - -def alphabet(code4): - if 1: - if 2: - return code4 + 'a' - else: - return code4 + 'b' - else: - if 2: - return code4 + 'c' - else: - return code4 + 'd' - - -def numbers(code5): - if 2: - return alphabet(code5 + '1') - else: - return alphabet(code5 + '2') - - -def call(code3): - code3 = numbers(numbers('end')) + numbers(code3) - code3.partition diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/arguments.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/arguments.py deleted file mode 100644 index 2fc8e81..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/arguments.py +++ /dev/null @@ -1,73 +0,0 @@ -# ----------------- -# normal arguments (no keywords) -# ----------------- - - -def simple(a): - return a - -simple(1) -#! 6 type-error-too-few-arguments -simple() -#! 10 type-error-too-many-arguments -simple(1, 2) - - -#! 10 type-error-too-many-arguments -simple(1, 2, 3) - -# ----------------- -# keyword arguments -# ----------------- - -simple(a=1) -#! 7 type-error-keyword-argument -simple(b=1) -#! 10 type-error-too-many-arguments -simple(1, a=1) - - -def two_params(x, y): - return y - - -two_params(y=2, x=1) -two_params(1, y=2) - -#! 11 type-error-multiple-values -two_params(1, x=2) -#! 17 type-error-too-many-arguments -two_params(1, 2, y=3) - -# ----------------- -# default arguments -# ----------------- - -def default(x, y=1, z=2): - return x - -#! 7 type-error-too-few-arguments -default() -default(1) -default(1, 2) -default(1, 2, 3) -#! 17 type-error-too-many-arguments -default(1, 2, 3, 4) - -default(x=1) - -# ----------------- -# class arguments -# ----------------- - -class Instance(): - def __init__(self, foo): - self.foo = foo - -Instance(1).foo -Instance(foo=1).foo - -#! 12 type-error-too-many-arguments -Instance(1, 2).foo -#! 8 type-error-too-few-arguments -Instance().foo diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/attribute_error.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/attribute_error.py deleted file mode 100644 index 4b084c1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/attribute_error.py +++ /dev/null @@ -1,119 +0,0 @@ -class Cls(): - class_attr = '' - def __init__(self, input): - self.instance_attr = 3 - self.input = input - - def f(self): - #! 12 attribute-error - return self.not_existing - - def undefined_object(self, obj): - """ - Uses an arbitrary object and performs an operation on it, shouldn't - be a problem. - """ - obj.arbitrary_lookup - - def defined_lookup(self, obj): - """ - `obj` is defined by a call into this function. - """ - obj.upper - #! 4 attribute-error - obj.arbitrary_lookup - - #! 13 name-error - class_attr = a - -Cls(1).defined_lookup('') - -c = Cls(1) -c.class_attr -Cls.class_attr -#! 4 attribute-error -Cls.class_attr_error -c.instance_attr -#! 2 attribute-error -c.instance_attr_error - - -c.something = None - -#! 12 name-error -something = a -something - -# ----------------- -# Unused array variables should still raise attribute errors. -# ----------------- - -# should not raise anything. -for loop_variable in [1, 2]: - #! 4 name-error - x = undefined - loop_variable - -#! 28 name-error -for loop_variable in [1, 2, undefined]: - pass - -#! 7 attribute-error -[1, ''.undefined_attr] - - -def return_one(something): - return 1 - -#! 14 attribute-error -return_one(''.undefined_attribute) - -#! 12 name-error -[r for r in undefined] - -#! 1 name-error -[undefined for r in [1, 2]] - -[r for r in [1, 2]] - -# some random error that showed up -class NotCalled(): - def match_something(self, param): - seems_to_need_an_assignment = param - return [value.match_something() for value in []] - -# ----------------- -# decorators -# ----------------- - -#! 1 name-error -@undefined_decorator -def func(): - return 1 - -# ----------------- -# operators -# ----------------- - -string = '%s %s' % (1, 2) - -# Shouldn't raise an error, because `string` is really just a string, not an -# array or something. -string.upper - -# ----------------- -# imports -# ----------------- - -# Star imports and the like in modules should not cause attribute errors in -# this module. -import import_tree - -import_tree.a -import_tree.b - -# This is something that raised an error, because it was using a complex -# mixture of Jedi fakes and compiled objects. -import _sre -#! 15 attribute-error -_sre.compile().not_existing diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/attribute_warnings.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/attribute_warnings.py deleted file mode 100644 index 0e1e5e9..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/attribute_warnings.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Jedi issues warnings for possible errors if ``__getattr__``, -``__getattribute__`` or ``setattr`` are used. -""" - -# ----------------- -# __getattr*__ -# ----------------- - - -class Cls(): - def __getattr__(self, name): - return getattr(str, name) - - -Cls().upper - -#! 6 warning attribute-error -Cls().undefined - - -class Inherited(Cls): - pass - -Inherited().upper - -#! 12 warning attribute-error -Inherited().undefined - -# ----------------- -# setattr -# ----------------- - - -class SetattrCls(): - def __init__(self, dct): - # Jedi doesn't even try to understand such code - for k, v in dct.items(): - setattr(self, k, v) - - self.defined = 3 - -c = SetattrCls({'a': 'b'}) -c.defined -#! 2 warning attribute-error -c.undefined diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/branches.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/branches.py deleted file mode 100644 index 6828d33..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/branches.py +++ /dev/null @@ -1,46 +0,0 @@ -# ----------------- -# Simple tests -# ----------------- - -import random - -if random.choice([0, 1]): - x = '' -else: - x = 1 -if random.choice([0, 1]): - y = '' -else: - y = 1 - -# A simple test -if x != 1: - x.upper() -else: - #! 2 attribute-error - x.upper() - pass - -# This operation is wrong, because the types could be different. -#! 6 type-error-operation -z = x + y -# However, here we have correct types. -if x == y: - z = x + y -else: - #! 6 type-error-operation - z = x + y - -# ----------------- -# With a function -# ----------------- - -def addition(a, b): - if type(a) == type(b): - return a + b - else: - #! 9 type-error-operation - return a + b - -addition(1, 1) -addition(1.0, '') diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/builtins.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/builtins.py deleted file mode 100644 index 86caca6..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/builtins.py +++ /dev/null @@ -1,11 +0,0 @@ -# ---------- -# isinstance -# ---------- - -isinstance(1, int) -isinstance(1, (int, str)) - -#! 14 type-error-isinstance -isinstance(1, 1) -#! 14 type-error-isinstance -isinstance(1, [int, str]) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/class_simple.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/class_simple.py deleted file mode 100644 index 3f84fde..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/class_simple.py +++ /dev/null @@ -1,13 +0,0 @@ -class Base(object): - class Nested(): - def foo(): - pass - - -class X(Base.Nested): - pass - - -X().foo() -#! 4 attribute-error -X().bar() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/comprehensions.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/comprehensions.py deleted file mode 100644 index 4af799d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/comprehensions.py +++ /dev/null @@ -1,41 +0,0 @@ -[a + 1 for a in [1, 2]] - -#! 3 type-error-operation -[a + '' for a in [1, 2]] -#! 3 type-error-operation -(a + '' for a in [1, 2]) - -#! 12 type-error-not-iterable -[a for a in 1] - -tuple(str(a) for a in [1]) - -#! 8 type-error-operation -tuple(a + 3 for a in ['']) - -# ---------- -# Some variables within are not defined -# ---------- - -#! 12 name-error -[1 for a in NOT_DEFINFED for b in a if 1] - -#! 25 name-error -[1 for a in [1] for b in NOT_DEFINED if 1] - -#! 12 name-error -[1 for a in NOT_DEFINFED for b in [1] if 1] - -#! 19 name-error -(1 for a in [1] if NOT_DEFINED) - -# ---------- -# unbalanced sides. -# ---------- - -# ok -(1 for a, b in [(1, 2)]) -#! 13 value-error-too-few-values -(1 for a, b, c in [(1, 2)]) -#! 10 value-error-too-many-values -(1 for a, b in [(1, 2, 3)]) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/descriptors.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/descriptors.py deleted file mode 100644 index 0fc5d15..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/descriptors.py +++ /dev/null @@ -1,13 +0,0 @@ -# classmethod -class TarFile(): - @classmethod - def open(cls, name, **kwargs): - return cls.taropen(name, **kwargs) - - @classmethod - def taropen(cls, name, **kwargs): - return name - - -# should just work -TarFile.open('hallo') diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/generators.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/generators.py deleted file mode 100644 index b941800..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/generators.py +++ /dev/null @@ -1,7 +0,0 @@ -def generator(): - yield 1 - -#! 11 type-error-not-subscriptable -generator()[0] - -list(generator())[0] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/__init__.py deleted file mode 100644 index cb485f1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -""" -Another import tree, this time not for completion, but static analysis. -""" - -from .a import * diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/a.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/a.py deleted file mode 100644 index b02981c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/a.py +++ /dev/null @@ -1 +0,0 @@ -from . import b diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/b.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/import_tree/b.py deleted file mode 100644 index e69de29..0000000 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/imports.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/imports.py deleted file mode 100644 index 0df9bac..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/imports.py +++ /dev/null @@ -1,25 +0,0 @@ - -#! 7 import-error -import not_existing - -import os - -from os.path import abspath -#! 20 import-error -from os.path import not_existing - -from datetime import date -date.today - -#! 5 attribute-error -date.not_existing_attribute - -#! 14 import-error -from datetime.date import today - -#! 16 import-error -import datetime.date -#! 7 import-error -import not_existing_nested.date - -import os.path diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/iterable.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/iterable.py deleted file mode 100644 index 0eae367..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/iterable.py +++ /dev/null @@ -1,21 +0,0 @@ - -a, b = {'asdf': 3, 'b': 'str'} -a - -x = [1] -x[0], b = {'a': 1, 'b': '2'} - -dct = {3: ''} -for x in dct: - pass - -#! 4 type-error-not-iterable -for x, y in dct: - pass - -# Shouldn't cause issues, because if there are no types (or we don't know what -# the types are, we should just ignore it. -#! 0 value-error-too-few-values -a, b = [] -#! 7 name-error -a, b = NOT_DEFINED diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/keywords.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/keywords.py deleted file mode 100644 index e3fcaa4..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/keywords.py +++ /dev/null @@ -1,7 +0,0 @@ -def raises(): - raise KeyError() - - -def wrong_name(): - #! 6 name-error - raise NotExistingException() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/operations.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/operations.py deleted file mode 100644 index 05e1406..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/operations.py +++ /dev/null @@ -1,16 +0,0 @@ --1 + 1 -1 + 1.0 -#! 2 type-error-operation -1 + '1' -#! 2 type-error-operation -1 - '1' - --1 - - 1 --1 - int() -int() - float() -float() - 3.0 - -a = 3 -b = '' -#! 2 type-error-operation -a + b diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/python2.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/python2.py deleted file mode 100644 index 4d896e3..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/python2.py +++ /dev/null @@ -1,11 +0,0 @@ -""" -Some special cases of Python 2. -""" -# python <= 2.7 - -# print is syntax: -print 1 -print(1) - -#! 6 name-error -print NOT_DEFINED diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/star_arguments.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/star_arguments.py deleted file mode 100644 index 34be43b..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/star_arguments.py +++ /dev/null @@ -1,119 +0,0 @@ -# ----------------- -# *args -# ----------------- - - -def simple(a): - return a - - -def nested(*args): - return simple(*args) - -nested(1) -#! 6 type-error-too-few-arguments -nested() - - -def nested_no_call_to_function(*args): - return simple(1, *args) - - -def simple2(a, b, c): - return b -def nested(*args): - return simple2(1, *args) -def nested_twice(*args1): - return nested(*args1) - -nested_twice(2, 3) -#! 13 type-error-too-few-arguments -nested_twice(2) -#! 19 type-error-too-many-arguments -nested_twice(2, 3, 4) - - -# A named argument can be located before *args. -def star_args_with_named(*args): - return simple2(c='', *args) - -star_args_with_named(1, 2) -# ----------------- -# **kwargs -# ----------------- - - -def kwargs_test(**kwargs): - return simple2(1, **kwargs) - -kwargs_test(c=3, b=2) -#! 12 type-error-too-few-arguments -kwargs_test(c=3) -#! 12 type-error-too-few-arguments -kwargs_test(b=2) -#! 22 type-error-keyword-argument -kwargs_test(b=2, c=3, d=4) -#! 12 type-error-multiple-values -kwargs_test(b=2, c=3, a=4) - - -def kwargs_nested(**kwargs): - return kwargs_test(b=2, **kwargs) - -kwargs_nested(c=3) -#! 13 type-error-too-few-arguments -kwargs_nested() -#! 19 type-error-keyword-argument -kwargs_nested(c=2, d=4) -#! 14 type-error-multiple-values -kwargs_nested(c=2, a=4) -# TODO reenable -##! 14 type-error-multiple-values -#kwargs_nested(b=3, c=2) - -# ----------------- -# mixed *args/**kwargs -# ----------------- - -def simple_mixed(a, b, c): - return b - -def mixed(*args, **kwargs): - return simple_mixed(1, *args, **kwargs) - -mixed(1, 2) -mixed(1, c=2) -mixed(b=2, c=3) -mixed(c=4, b='') - -# need separate functions, otherwise these might swallow the errors -def mixed2(*args, **kwargs): - return simple_mixed(1, *args, **kwargs) - - -#! 7 type-error-too-few-arguments -mixed2(c=2) -#! 7 type-error-too-few-arguments -mixed2(3) -#! 13 type-error-too-many-arguments -mixed2(3, 4, 5) -# TODO reenable -##! 13 type-error-too-many-arguments -#mixed2(3, 4, c=5) -#! 7 type-error-multiple-values -mixed2(3, b=5) - -# ----------------- -# plain wrong arguments -# ----------------- - -#! 12 type-error-star-star -simple(1, **[]) -#! 12 type-error-star-star -simple(1, **1) -class A(): pass -#! 12 type-error-star-star -simple(1, **A()) - -#! 11 type-error-star -simple(1, *1) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/try_except.py b/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/try_except.py deleted file mode 100644 index e654328..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/static_analysis/try_except.py +++ /dev/null @@ -1,89 +0,0 @@ -try: - #! 4 attribute-error - str.not_existing -except TypeError: - pass - -try: - str.not_existing -except AttributeError: - #! 4 attribute-error - str.not_existing - pass - -try: - import not_existing_import -except ImportError: - pass -try: - #! 7 import-error - import not_existing_import -except AttributeError: - pass - -# ----------------- -# multi except -# ----------------- -try: - str.not_existing -except (TypeError, AttributeError): pass - -try: - str.not_existing -except ImportError: - pass -except (NotImplementedError, AttributeError): pass - -try: - #! 4 attribute-error - str.not_existing -except (TypeError, NotImplementedError): pass - -# ----------------- -# detailed except -# ----------------- -try: - str.not_existing -except ((AttributeError)): pass -try: - #! 4 attribute-error - str.not_existing -except [AttributeError]: pass - -# Should be able to detect errors in except statement as well. -try: - pass -#! 7 name-error -except Undefined: - pass - -# ----------------- -# inheritance -# ----------------- - -try: - undefined -except Exception: - pass - -# should catch everything -try: - undefined -except: - pass - -# ----------------- -# kind of similar: hasattr -# ----------------- - -if hasattr(str, 'undefined'): - str.undefined - str.upper - #! 4 attribute-error - str.undefined2 - #! 4 attribute-error - int.undefined -else: - str.upper - #! 4 attribute-error - str.undefined diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_api.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_api.py deleted file mode 100644 index d388c51..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_api.py +++ /dev/null @@ -1,179 +0,0 @@ -""" -Test all things related to the ``jedi.api`` module. -""" - -from textwrap import dedent - -from jedi import api -from jedi._compatibility import is_py3 -from pytest import raises -from jedi.parser import utils - - -def test_preload_modules(): - def check_loaded(*modules): - # +1 for None module (currently used) - assert len(parser_cache) == len(modules) + 1 - for i in modules: - assert [i in k for k in parser_cache.keys() if k is not None] - - temp_cache, utils.parser_cache = utils.parser_cache, {} - parser_cache = utils.parser_cache - - api.preload_module('sys') - check_loaded() # compiled (c_builtin) modules shouldn't be in the cache. - api.preload_module('json', 'token') - check_loaded('json', 'token') - - utils.parser_cache = temp_cache - - -def test_empty_script(): - assert api.Script('') - - -def test_line_number_errors(): - """ - Script should raise a ValueError if line/column numbers are not in a - valid range. - """ - s = 'hello' - # lines - with raises(ValueError): - api.Script(s, 2, 0) - with raises(ValueError): - api.Script(s, 0, 0) - - # columns - with raises(ValueError): - api.Script(s, 1, len(s) + 1) - with raises(ValueError): - api.Script(s, 1, -1) - - # ok - api.Script(s, 1, 0) - api.Script(s, 1, len(s)) - - -def _check_number(source, result='float'): - completions = api.Script(source).completions() - assert completions[0].parent().name == result - - -def test_completion_on_number_literals(): - # No completions on an int literal (is a float). - assert [c.name for c in api.Script('1.').completions()] \ - == ['and', 'if', 'in', 'is', 'not', 'or'] - - # Multiple points after an int literal basically mean that there's a float - # and a call after that. - _check_number('1..') - _check_number('1.0.') - - # power notation - _check_number('1.e14.') - _check_number('1.e-3.') - _check_number('9e3.') - assert api.Script('1.e3..').completions() == [] - assert api.Script('1.e-13..').completions() == [] - - -def test_completion_on_hex_literals(): - assert api.Script('0x1..').completions() == [] - _check_number('0x1.', 'int') # hexdecimal - # Completing binary literals doesn't work if they are not actually binary - # (invalid statements). - assert api.Script('0b2.b').completions() == [] - _check_number('0b1.', 'int') # binary - - _check_number('0x2e.', 'int') - _check_number('0xE7.', 'int') - _check_number('0xEa.', 'int') - # theoretically, but people can just check for syntax errors: - #assert api.Script('0x.').completions() == [] - - -def test_completion_on_complex_literals(): - assert api.Script('1j..').completions() == [] - _check_number('1j.', 'complex') - _check_number('44.j.', 'complex') - _check_number('4.0j.', 'complex') - # No dot no completion - I thought, but 4j is actually a literall after - # which a keyword like or is allowed. Good times, haha! - assert (set([c.name for c in api.Script('4j').completions()]) == - set(['if', 'and', 'in', 'is', 'not', 'or'])) - - -def test_goto_assignments_on_non_name(): - assert api.Script('for').goto_assignments() == [] - - assert api.Script('assert').goto_assignments() == [] - if is_py3: - assert api.Script('True').goto_assignments() == [] - else: - # In Python 2.7 True is still a name. - assert api.Script('True').goto_assignments()[0].description == 'class bool' - - -def test_goto_definitions_on_non_name(): - assert api.Script('import x', column=0).goto_definitions() == [] - - -def test_goto_definition_not_multiple(): - """ - There should be only one Definition result if it leads back to the same - origin (e.g. instance method) - """ - - s = dedent('''\ - import random - class A(): - def __init__(self, a): - self.a = 3 - - def foo(self): - pass - - if random.randint(0, 1): - a = A(2) - else: - a = A(1) - a''') - assert len(api.Script(s).goto_definitions()) == 1 - - -def test_usage_description(): - descs = [u.description for u in api.Script("foo = ''; foo").usages()] - assert set(descs) == set(["foo = ''", 'foo']) - - -def test_get_line_code(): - def get_line_code(source, line=None, **kwargs): - return api.Script(source, line=line).completions()[0].get_line_code(**kwargs) - - # On builtin - assert get_line_code('') == '' - - # On custom code - line = ' foo' - assert get_line_code('def foo():\n%s' % line) == line - - # With before/after - line = ' foo' - source = 'def foo():\n%s\nother_line' % line - assert get_line_code(source, line=2) == line - assert get_line_code(source, line=2, after=1) == line + '\nother_line' - assert get_line_code(source, line=2, after=1, before=1) == source - - -def test_goto_assignments_follow_imports(): - code = dedent(""" - import inspect - inspect.isfunction""") - definition, = api.Script(code, column=0).goto_assignments(follow_imports=True) - assert 'inspect.py' in definition.module_path - assert definition.start_pos == (1, 0) - - definition, = api.Script(code).goto_assignments(follow_imports=True) - assert 'inspect.py' in definition.module_path - assert definition.start_pos > (1, 0) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_api_classes_follow_definition.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_api_classes_follow_definition.py deleted file mode 100644 index ffc0cb6..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_api_classes_follow_definition.py +++ /dev/null @@ -1,62 +0,0 @@ -from itertools import chain - -import jedi -from ..helpers import cwd_at - - -def test_import_empty(): - """ github #340, return the full word. """ - completion = jedi.Script("import ").completions()[0] - definition = completion.follow_definition()[0] - assert definition - - -def check_follow_definition_types(source): - # nested import - completions = jedi.Script(source, path='some_path.py').completions() - defs = chain.from_iterable(c.follow_definition() for c in completions) - return [d.type for d in defs] - - -def test_follow_import_incomplete(): - """ - Completion on incomplete imports should always take the full completion - to do any evaluation. - """ - datetime = check_follow_definition_types("import itertool") - assert datetime == ['module'] - - # empty `from * import` parts - itert = jedi.Script("from itertools import ").completions() - definitions = [d for d in itert if d.name == 'chain'] - assert len(definitions) == 1 - assert [d.type for d in definitions[0].follow_definition()] == ['class'] - - # incomplete `from * import` part - datetime = check_follow_definition_types("from datetime import datetim") - assert set(datetime) == set(['class', 'instance']) # py33: builtin and pure py version - - # os.path check - ospath = check_follow_definition_types("from os.path import abspat") - assert ospath == ['function'] - - # alias - alias = check_follow_definition_types("import io as abcd; abcd") - assert alias == ['module'] - - -@cwd_at('test/completion/import_tree') -def test_follow_definition_nested_import(): - types = check_follow_definition_types("import pkg.mod1; pkg") - assert types == ['module'] - - types = check_follow_definition_types("import pkg.mod1; pkg.mod1") - assert types == ['module'] - - types = check_follow_definition_types("import pkg.mod1; pkg.mod1.a") - assert types == ['instance'] - - -def test_follow_definition_land_on_import(): - types = check_follow_definition_types("import datetime; datetim") - assert types == ['module'] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_call_signatures.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_call_signatures.py deleted file mode 100644 index 1add2ab..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_call_signatures.py +++ /dev/null @@ -1,389 +0,0 @@ -from textwrap import dedent -import inspect - -from ..helpers import TestCase -from jedi import Script -from jedi import cache -from jedi._compatibility import is_py33 - - -def assert_signature(source, expected_name, expected_index=0, line=None, column=None): - signatures = Script(source, line, column).call_signatures() - - assert len(signatures) <= 1 - - if not signatures: - assert expected_name is None, \ - 'There are no signatures, but `%s` expected.' % expected_name - else: - assert signatures[0].name == expected_name - assert signatures[0].index == expected_index - return signatures[0] - - -class TestCallSignatures(TestCase): - def _run_simple(self, source, name, index=0, column=None, line=1): - assert_signature(source, name, index, line, column) - - def test_valid_call(self): - assert_signature('str()', 'str', column=4) - - def test_simple(self): - run = self._run_simple - - # simple - s1 = "sorted(a, str(" - run(s1, 'sorted', 0, 7) - run(s1, 'sorted', 1, 9) - run(s1, 'sorted', 1, 10) - run(s1, 'sorted', 1, 11) - run(s1, 'str', 0, 14) - - s2 = "abs(), " - run(s2, 'abs', 0, 4) - run(s2, None, column=5) - run(s2, None) - - s3 = "abs()." - run(s3, None, column=5) - run(s3, None) - - def test_more_complicated(self): - run = self._run_simple - ''' - s4 = 'abs(zip(), , set,' - run(s4, None, column=3) - run(s4, 'abs', 0, 4) - run(s4, 'zip', 0, 8) - run(s4, 'abs', 0, 9) - #run(s4, 'abs', 1, 10) - ''' - - s5 = "sorted(1,\nif 2:\n def a():" - run(s5, 'sorted', 0, 7) - run(s5, 'sorted', 1, 9) - - s6 = "str().center(" - run(s6, 'center', 0) - run(s6, 'str', 0, 4) - - s7 = "str().upper().center(" - s8 = "str(int[zip(" - run(s7, 'center', 0) - run(s8, 'zip', 0) - run(s8, 'str', 0, 8) - - run("import time; abc = time; abc.sleep(", 'sleep', 0) - - def test_issue_57(self): - # jedi #57 - s = "def func(alpha, beta): pass\n" \ - "func(alpha='101'," - self._run_simple(s, 'func', 0, column=13, line=2) - - def test_flows(self): - # jedi-vim #9 - self._run_simple("with open(", 'open', 0) - - # jedi-vim #11 - self._run_simple("for sorted(", 'sorted', 0) - self._run_simple("for s in sorted(", 'sorted', 0) - - def test_complex(self): - s = """ - def abc(a,b): - pass - - def a(self): - abc( - - if 1: - pass - """ - assert_signature(s, 'abc', 0, line=6, column=24) - s = """ - import re - def huhu(it): - re.compile( - return it * 2 - """ - assert_signature(s, 'compile', 0, line=4, column=31) - - # jedi-vim #70 - s = """def foo(""" - assert Script(s).call_signatures() == [] - - # jedi-vim #116 - s = """import itertools; test = getattr(itertools, 'chain'); test(""" - assert_signature(s, 'chain', 0) - - def test_call_signature_on_module(self): - """github issue #240""" - s = 'import datetime; datetime(' - # just don't throw an exception (if numpy doesn't exist, just ignore it) - assert Script(s).call_signatures() == [] - - def test_call_signatures_empty_parentheses_pre_space(self): - s = dedent("""\ - def f(a, b): - pass - f( )""") - assert_signature(s, 'f', 0, line=3, column=3) - - def test_multiple_signatures(self): - s = dedent("""\ - if x: - def f(a, b): - pass - else: - def f(a, b): - pass - f(""") - assert len(Script(s).call_signatures()) == 2 - - def test_call_signatures_whitespace(self): - s = dedent("""\ - abs( - def x(): - pass - """) - assert_signature(s, 'abs', 0, line=1, column=5) - - def test_decorator_in_class(self): - """ - There's still an implicit param, with a decorator. - Github issue #319. - """ - s = dedent("""\ - def static(func): - def wrapped(obj, *args): - return f(type(obj), *args) - return wrapped - - class C(object): - @static - def test(cls): - return 10 - - C().test(""") - - signatures = Script(s).call_signatures() - assert len(signatures) == 1 - x = [p.description for p in signatures[0].params] - assert x == ['*args'] - - def test_additional_brackets(self): - assert_signature('str((', 'str', 0) - - def test_unterminated_strings(self): - assert_signature('str(";', 'str', 0) - - def test_whitespace_before_bracket(self): - assert_signature('str (', 'str', 0) - assert_signature('str (";', 'str', 0) - assert_signature('str\n(', None) - - def test_brackets_in_string_literals(self): - assert_signature('str (" (', 'str', 0) - assert_signature('str (" )', 'str', 0) - - def test_function_definitions_should_break(self): - """ - Function definitions (and other tokens that cannot exist within call - signatures) should break and not be able to return a call signature. - """ - assert_signature('str(\ndef x', 'str', 0) - assert not Script('str(\ndef x(): pass').call_signatures() - - def test_flow_call(self): - assert not Script('if (1').call_signatures() - - def test_chained_calls(self): - source = dedent(''' - class B(): - def test2(self, arg): - pass - - class A(): - def test1(self): - return B() - - A().test1().test2(''') - - assert_signature(source, 'test2', 0) - - def test_return(self): - source = dedent(''' - def foo(): - return '.'.join()''') - - assert_signature(source, 'join', 0, column=len(" return '.'.join(")) - - -class TestParams(TestCase): - def params(self, source, line=None, column=None): - signatures = Script(source, line, column).call_signatures() - assert len(signatures) == 1 - return signatures[0].params - - def test_param_name(self): - if not is_py33: - p = self.params('''int(''') - # int is defined as: `int(x[, base])` - assert p[0].name == 'x' - # `int` docstring has been redefined: - # http://bugs.python.org/issue14783 - # TODO have multiple call signatures for int (like in the docstr) - #assert p[1].name == 'base' - - p = self.params('''open(something,''') - assert p[0].name in ['file', 'name'] - assert p[1].name == 'mode' - - def test_builtins(self): - """ - The self keyword should be visible even for builtins, if not - instantiated. - """ - p = self.params('str.endswith(') - assert p[0].name == 'self' - assert p[1].name == 'suffix' - p = self.params('str().endswith(') - assert p[0].name == 'suffix' - - -def test_signature_is_definition(): - """ - Through inheritance, a call signature is a sub class of Definition. - Check if the attributes match. - """ - s = """class Spam(): pass\nSpam""" - signature = Script(s + '(').call_signatures()[0] - definition = Script(s + '(', column=0).goto_definitions()[0] - signature.line == 1 - signature.column == 6 - - # Now compare all the attributes that a CallSignature must also have. - for attr_name in dir(definition): - dont_scan = ['defined_names', 'line_nr', 'start_pos', 'documentation', - 'doc', 'parent', 'goto_assignments'] - if attr_name.startswith('_') or attr_name in dont_scan: - continue - attribute = getattr(definition, attr_name) - signature_attribute = getattr(signature, attr_name) - if inspect.ismethod(attribute): - assert attribute() == signature_attribute() - else: - assert attribute == signature_attribute - - -def test_no_signature(): - # str doesn't have a __call__ method - assert Script('str()(').call_signatures() == [] - - s = dedent("""\ - class X(): - pass - X()(""") - assert Script(s).call_signatures() == [] - assert len(Script(s, column=2).call_signatures()) == 1 - - -def test_dict_literal_in_incomplete_call(): - source = """\ - import json - - def foo(): - json.loads( - - json.load.return_value = {'foo': [], - 'bar': True} - - c = Foo() - """ - - script = Script(dedent(source), line=4, column=15) - assert script.call_signatures() - - -def test_completion_interference(): - """Seems to cause problems, see also #396.""" - cache.parser_cache.pop(None, None) - assert Script('open(').call_signatures() - - # complete something usual, before doing the same call_signatures again. - assert Script('from datetime import ').completions() - - assert Script('open(').call_signatures() - - -def test_keyword_argument_index(): - def get(source, column=None): - return Script(source, column=column).call_signatures()[0] - - assert get('sorted([], key=a').index == 2 - assert get('sorted([], key=').index == 2 - assert get('sorted([], no_key=a').index is None - - kw_func = 'def foo(a, b): pass\nfoo(b=3, a=4)' - assert get(kw_func, column=len('foo(b')).index == 0 - assert get(kw_func, column=len('foo(b=')).index == 1 - assert get(kw_func, column=len('foo(b=3, a=')).index == 0 - - kw_func_simple = 'def foo(a, b): pass\nfoo(b=4)' - assert get(kw_func_simple, column=len('foo(b')).index == 0 - assert get(kw_func_simple, column=len('foo(b=')).index == 1 - - args_func = 'def foo(*kwargs): pass\n' - assert get(args_func + 'foo(a').index == 0 - assert get(args_func + 'foo(a, b').index == 0 - - kwargs_func = 'def foo(**kwargs): pass\n' - assert get(kwargs_func + 'foo(a=2').index == 0 - assert get(kwargs_func + 'foo(a=2, b=2').index == 0 - - both = 'def foo(*args, **kwargs): pass\n' - assert get(both + 'foo(a=2').index == 1 - assert get(both + 'foo(a=2, b=2').index == 1 - assert get(both + 'foo(a=2, b=2)', column=len('foo(b=2, a=2')).index == 1 - assert get(both + 'foo(a, b, c').index == 0 - - -def test_bracket_start(): - def bracket_start(src): - signatures = Script(src).call_signatures() - assert len(signatures) == 1 - return signatures[0].bracket_start - - assert bracket_start('str(') == (1, 3) - - -def test_different_caller(): - """ - It's possible to not use names, but another function result or an array - index and then get the call signature of it. - """ - - assert_signature('[str][0](', 'str', 0) - assert_signature('[str][0]()', 'str', 0, column=len('[str][0](')) - - assert_signature('(str)(', 'str', 0) - assert_signature('(str)()', 'str', 0, column=len('(str)(')) - - -def test_in_function(): - code = dedent('''\ - class X(): - @property - def func(''') - assert not Script(code).call_signatures() - - -def test_lambda_params(): - code = dedent('''\ - my_lambda = lambda x: x+1 - my_lambda(1)''') - sig, = Script(code, column=11).call_signatures() - assert sig.index == 0 - assert sig.name == '' - assert [p.name for p in sig.params] == ['x'] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_classes.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_classes.py deleted file mode 100644 index 64d9264..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_classes.py +++ /dev/null @@ -1,354 +0,0 @@ -""" Test all things related to the ``jedi.api_classes`` module. -""" - -from textwrap import dedent -from inspect import cleandoc - -import pytest - -from jedi import Script, defined_names, __doc__ as jedi_doc, names -from ..helpers import cwd_at -from ..helpers import TestCase - - -def test_is_keyword(): - #results = Script('import ', 1, 1, None).goto_definitions() - #assert len(results) == 1 and results[0].is_keyword is True - results = Script('str', 1, 1, None).goto_definitions() - assert len(results) == 1 and results[0].is_keyword is False - - -def make_definitions(): - """ - Return a list of definitions for parametrized tests. - - :rtype: [jedi.api_classes.BaseDefinition] - """ - source = dedent(""" - import sys - - class C: - pass - - x = C() - - def f(): - pass - - def g(): - yield - - h = lambda: None - """) - - definitions = [] - definitions += defined_names(source) - - source += dedent(""" - variable = sys or C or x or f or g or g() or h""") - lines = source.splitlines() - script = Script(source, len(lines), len('variable'), None) - definitions += script.goto_definitions() - - script2 = Script(source, 4, len('class C'), None) - definitions += script2.usages() - - source_param = "def f(a): return a" - script_param = Script(source_param, 1, len(source_param), None) - definitions += script_param.goto_assignments() - - return definitions - - -@pytest.mark.parametrize('definition', make_definitions()) -def test_basedefinition_type(definition): - assert definition.type in ('module', 'class', 'instance', 'function', - 'generator', 'statement', 'import', 'param') - - -def test_basedefinition_type_import(): - def get_types(source, **kwargs): - return set([t.type for t in Script(source, **kwargs).completions()]) - - # import one level - assert get_types('import t') == set(['module']) - assert get_types('import ') == set(['module']) - assert get_types('import datetime; datetime') == set(['module']) - - # from - assert get_types('from datetime import timedelta') == set(['class']) - assert get_types('from datetime import timedelta; timedelta') == set(['class']) - assert get_types('from json import tool') == set(['module']) - assert get_types('from json import tool; tool') == set(['module']) - - # import two levels - assert get_types('import json.tool; json') == set(['module']) - assert get_types('import json.tool; json.tool') == set(['module']) - assert get_types('import json.tool; json.tool.main') == set(['function']) - assert get_types('import json.tool') == set(['module']) - assert get_types('import json.tool', column=9) == set(['module']) - - -def test_function_call_signature_in_doc(): - defs = Script(""" - def f(x, y=1, z='a'): - pass - f""").goto_definitions() - doc = defs[0].doc - assert "f(x, y=1, z='a')" in str(doc) - - -def test_class_call_signature(): - defs = Script(""" - class Foo: - def __init__(self, x, y=1, z='a'): - pass - Foo""").goto_definitions() - doc = defs[0].doc - assert "Foo(self, x, y=1, z='a')" in str(doc) - - -def test_position_none_if_builtin(): - gotos = Script('import sys; sys.path').goto_assignments() - assert gotos[0].line is None - assert gotos[0].column is None - - -@cwd_at('.') -def test_completion_docstring(): - """ - Jedi should follow imports in certain conditions - """ - def docstr(src, result): - c = Script(src).completions()[0] - assert c.docstring(raw=True, fast=False) == cleandoc(result) - - c = Script('import jedi\njed').completions()[0] - assert c.docstring(fast=False) == cleandoc(jedi_doc) - - docstr('import jedi\njedi.Scr', cleandoc(Script.__doc__)) - - docstr('abcd=3;abcd', '') - docstr('"hello"\nabcd=3\nabcd', 'hello') - # It works with a ; as well. - docstr('"hello"\nabcd=3;abcd', 'hello') - # Shouldn't work with a tuple. - docstr('"hello",0\nabcd=3\nabcd', '') - - -def test_completion_params(): - c = Script('import string; string.capwords').completions()[0] - assert [p.name for p in c.params] == ['s', 'sep'] - - -def test_signature_params(): - def check(defs): - params = defs[0].params - assert len(params) == 1 - assert params[0].name == 'bar' - - s = dedent(''' - def foo(bar): - pass - foo''') - - check(Script(s).goto_definitions()) - - check(Script(s).goto_assignments()) - check(Script(s + '\nbar=foo\nbar').goto_assignments()) - - -def test_param_endings(): - """ - Params should be represented without the comma and whitespace they have - around them. - """ - sig = Script('def x(a, b=5, c=""): pass\n x(').call_signatures()[0] - assert [p.description for p in sig.params] == ['a', 'b=5', 'c=""'] - - -class TestIsDefinition(TestCase): - def _def(self, source, index=-1): - return names(dedent(source), references=True, all_scopes=True)[index] - - def _bool_is_definitions(self, source): - ns = names(dedent(source), references=True, all_scopes=True) - # Assure that names are definitely sorted. - ns = sorted(ns, key=lambda name: (name.line, name.column)) - return [name.is_definition() for name in ns] - - def test_name(self): - d = self._def('name') - assert d.name == 'name' - assert not d.is_definition() - - def test_stmt(self): - src = 'a = f(x)' - d = self._def(src, 0) - assert d.name == 'a' - assert d.is_definition() - d = self._def(src, 1) - assert d.name == 'f' - assert not d.is_definition() - d = self._def(src) - assert d.name == 'x' - assert not d.is_definition() - - def test_import(self): - assert self._bool_is_definitions('import x as a') == [False, True] - assert self._bool_is_definitions('from x import y') == [False, True] - assert self._bool_is_definitions('from x.z import y') == [False, False, True] - - -class TestParent(TestCase): - def _parent(self, source, line=None, column=None): - defs = Script(dedent(source), line, column).goto_assignments() - assert len(defs) == 1 - return defs[0].parent() - - def test_parent(self): - parent = self._parent('foo=1\nfoo') - assert parent.type == 'module' - - parent = self._parent(''' - def spam(): - if 1: - y=1 - y''') - assert parent.name == 'spam' - assert parent.parent().type == 'module' - - def test_on_function(self): - parent = self._parent('''\ - def spam(): - pass''', 1, len('def spam')) - assert parent.name == '' - assert parent.type == 'module' - - def test_parent_on_completion(self): - parent = Script(dedent('''\ - class Foo(): - def bar(): pass - Foo().bar''')).completions()[0].parent() - assert parent.name == 'Foo' - assert parent.type == 'instance' - - parent = Script('str.join').completions()[0].parent() - assert parent.name == 'str' - assert parent.type == 'class' - - -def test_type(): - """ - Github issue #397, type should never raise an error. - """ - for c in Script('import os; os.path.').completions(): - assert c.type - - -class TestGotoAssignments(TestCase): - """ - This tests the BaseDefinition.goto_assignments function, not the jedi - function. They are not really different in functionality, but really - different as an implementation. - """ - def test_repetition(self): - defs = names('a = 1; a', references=True, definitions=False) - # Repeat on the same variable. Shouldn't change once we're on a - # definition. - for _ in range(3): - assert len(defs) == 1 - ass = defs[0].goto_assignments() - assert ass[0].description == 'a = 1' - - def test_named_params(self): - src = """\ - def foo(a=1, bar=2): - pass - foo(bar=1) - """ - bar = names(dedent(src), references=True)[-1] - param = bar.goto_assignments()[0] - assert param.start_pos == (1, 13) - assert param.type == 'param' - - def test_class_call(self): - src = 'from threading import Thread; Thread(group=1)' - n = names(src, references=True)[-1] - assert n.name == 'group' - param_def = n.goto_assignments()[0] - assert param_def.name == 'group' - assert param_def.type == 'param' - - def test_parentheses(self): - n = names('("").upper', references=True)[-1] - assert n.goto_assignments()[0].name == 'upper' - - def test_import(self): - nms = names('from json import load', references=True) - assert nms[0].name == 'json' - assert nms[0].type == 'import' - n = nms[0].goto_assignments()[0] - assert n.name == 'json' - assert n.type == 'module' - - assert nms[1].name == 'load' - assert nms[1].type == 'import' - n = nms[1].goto_assignments()[0] - assert n.name == 'load' - assert n.type == 'function' - - nms = names('import os; os.path', references=True) - assert nms[0].name == 'os' - assert nms[0].type == 'import' - n = nms[0].goto_assignments()[0] - assert n.name == 'os' - assert n.type == 'module' - - n = nms[2].goto_assignments()[0] - assert n.name == 'path' - assert n.type == 'import' - - nms = names('import os.path', references=True) - n = nms[0].goto_assignments()[0] - assert n.name == 'os' - assert n.type == 'module' - n = nms[1].goto_assignments()[0] - # This is very special, normally the name doesn't chance, but since - # os.path is a sys.modules hack, it does. - assert n.name in ('ntpath', 'posixpath', 'os2emxpath') - assert n.type == 'module' - - def test_import_alias(self): - nms = names('import json as foo', references=True) - assert nms[0].name == 'json' - assert nms[0].type == 'import' - n = nms[0].goto_assignments()[0] - assert n.name == 'json' - assert n.type == 'module' - - assert nms[1].name == 'foo' - assert nms[1].type == 'import' - ass = nms[1].goto_assignments() - assert len(ass) == 1 - assert ass[0].name == 'json' - assert ass[0].type == 'module' - - -def test_added_equals_to_params(): - def run(rest_source): - source = dedent(""" - def foo(bar, baz): - pass - """) - results = Script(source + rest_source).completions() - assert len(results) == 1 - return results[0] - - assert run('foo(bar').name_with_symbols == 'bar=' - assert run('foo(bar').complete == '=' - assert run('foo(bar, baz').complete == '=' - assert run(' bar').name_with_symbols == 'bar' - assert run(' bar').complete == '' - x = run('foo(bar=isins').name_with_symbols - assert x == 'isinstance' diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_completion_context.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_completion_context.py deleted file mode 100644 index fee4f0e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_completion_context.py +++ /dev/null @@ -1,9 +0,0 @@ -from textwrap import dedent -from jedi import Script - - -def test_in_whitespace(): - code = dedent(''' - def x(): - pass''') - assert len(Script(code, column=2).completions()) > 20 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_defined_names.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_defined_names.py deleted file mode 100644 index aae1f6c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_defined_names.py +++ /dev/null @@ -1,92 +0,0 @@ -""" -Tests for `api.defined_names`. -""" - -from textwrap import dedent - -from jedi import defined_names, names -from ..helpers import TestCase - - -class TestDefinedNames(TestCase): - def assert_definition_names(self, definitions, names_): - assert [d.name for d in definitions] == names_ - - def check_defined_names(self, source, names_): - definitions = names(dedent(source)) - self.assert_definition_names(definitions, names_) - return definitions - - def test_get_definitions_flat(self): - self.check_defined_names(""" - import module - class Class: - pass - def func(): - pass - data = None - """, ['module', 'Class', 'func', 'data']) - - def test_dotted_assignment(self): - self.check_defined_names(""" - x = Class() - x.y.z = None - """, ['x', 'z']) # TODO is this behavior what we want? - - def test_multiple_assignment(self): - self.check_defined_names(""" - x = y = None - """, ['x', 'y']) - - def test_multiple_imports(self): - self.check_defined_names(""" - from module import a, b - from another_module import * - """, ['a', 'b']) - - def test_nested_definitions(self): - definitions = self.check_defined_names(""" - class Class: - def f(): - pass - def g(): - pass - """, ['Class']) - subdefinitions = definitions[0].defined_names() - self.assert_definition_names(subdefinitions, ['f', 'g']) - self.assertEqual([d.full_name for d in subdefinitions], - ['Class.f', 'Class.g']) - - def test_nested_class(self): - definitions = self.check_defined_names(""" - class L1: - class L2: - class L3: - def f(): pass - def f(): pass - def f(): pass - def f(): pass - """, ['L1', 'f']) - subdefs = definitions[0].defined_names() - subsubdefs = subdefs[0].defined_names() - self.assert_definition_names(subdefs, ['L2', 'f']) - self.assert_definition_names(subsubdefs, ['L3', 'f']) - self.assert_definition_names(subsubdefs[0].defined_names(), ['f']) - - -def test_follow_imports(): - # github issue #344 - imp = defined_names('import datetime')[0] - assert imp.name == 'datetime' - datetime_names = [str(d.name) for d in imp.defined_names()] - assert 'timedelta' in datetime_names - - -def test_names_twice(): - source = dedent(''' - def lol(): - pass - ''') - - defs = names(source=source) - assert defs[0].defined_names() == [] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_full_name.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_full_name.py deleted file mode 100644 index b96c548..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_full_name.py +++ /dev/null @@ -1,91 +0,0 @@ -""" -Tests for :attr:`.BaseDefinition.full_name`. - -There are three kinds of test: - -#. Test classes derived from :class:`MixinTestFullName`. - Child class defines :attr:`.operation` to alter how - the api definition instance is created. - -#. :class:`TestFullDefinedName` is to test combination of - ``obj.full_name`` and ``jedi.defined_names``. - -#. Misc single-function tests. -""" - -import textwrap - -import pytest - -import jedi -from ..helpers import TestCase - - -class MixinTestFullName(object): - operation = None - - def check(self, source, desired): - script = jedi.Script(textwrap.dedent(source)) - definitions = getattr(script, type(self).operation)() - for d in definitions: - self.assertEqual(d.full_name, desired) - - def test_os_path_join(self): - self.check('import os; os.path.join', 'os.path.join') - - def test_builtin(self): - self.check('TypeError', 'TypeError') - - -class TestFullNameWithGotoDefinitions(MixinTestFullName, TestCase): - operation = 'goto_definitions' - - @pytest.mark.skipif('sys.version_info[0] < 3', reason='Python 2 also yields None.') - def test_tuple_mapping(self): - self.check(""" - import re - any_re = re.compile('.*') - any_re""", '_sre.compile.SRE_Pattern') - - def test_from_import(self): - self.check('from os import path', 'os.path') - - -class TestFullNameWithCompletions(MixinTestFullName, TestCase): - operation = 'completions' - - -class TestFullDefinedName(TestCase): - """ - Test combination of ``obj.full_name`` and ``jedi.defined_names``. - """ - - def check(self, source, desired): - definitions = jedi.defined_names(textwrap.dedent(source)) - full_names = [d.full_name for d in definitions] - self.assertEqual(full_names, desired) - - def test_local_names(self): - self.check(""" - def f(): pass - class C: pass - """, ['f', 'C']) - - def test_imports(self): - self.check(""" - import os - from os import path - from os.path import join - from os import path as opath - """, ['os', 'os.path', 'os.path.join', 'os.path']) - - -def test_sub_module(): - """ - ``full_name needs to check sys.path to actually find it's real path module - path. - """ - defs = jedi.Script('from jedi.api import classes; classes').goto_definitions() - assert [d.full_name for d in defs] == ['jedi.api.classes'] - defs = jedi.Script('import jedi.api; jedi.api').goto_definitions() - assert [d.full_name for d in defs] == ['jedi.api'] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_interpreter.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_interpreter.py deleted file mode 100644 index 0976241..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_interpreter.py +++ /dev/null @@ -1,160 +0,0 @@ -""" -Tests of ``jedi.api.Interpreter``. -""" - -from ..helpers import TestCase -import jedi -from jedi._compatibility import is_py33 -from jedi.evaluate.compiled import mixed - -class _GlobalNameSpace(): - class SideEffectContainer(): - pass - - -def get_completion(source, namespace): - i = jedi.Interpreter(source, [namespace]) - completions = i.completions() - assert len(completions) == 1 - return completions[0] - - -def test_builtin_details(): - import keyword - - class EmptyClass: - pass - - variable = EmptyClass() - - def func(): - pass - - cls = get_completion('EmptyClass', locals()) - var = get_completion('variable', locals()) - f = get_completion('func', locals()) - m = get_completion('keyword', locals()) - assert cls.type == 'class' - assert var.type == 'instance' - assert f.type == 'function' - assert m.type == 'module' - - -def test_nested_resolve(): - class XX(): - def x(): - pass - - cls = get_completion('XX', locals()) - func = get_completion('XX.x', locals()) - assert func.start_pos == (cls.start_pos[0] + 1, 12) - - -def test_side_effect_completion(): - """ - In the repl it's possible to cause side effects that are not documented in - Python code, however we want references to Python code as well. Therefore - we need some mixed kind of magic for tests. - """ - _GlobalNameSpace.SideEffectContainer.foo = 1 - side_effect = get_completion('SideEffectContainer', _GlobalNameSpace.__dict__) - - # It's a class that contains MixedObject. - assert isinstance(side_effect._definition.base, mixed.MixedObject) - foo = get_completion('SideEffectContainer.foo', _GlobalNameSpace.__dict__) - assert foo.name == 'foo' - - -class TestInterpreterAPI(TestCase): - def check_interpreter_complete(self, source, namespace, completions, - **kwds): - script = jedi.Interpreter(source, [namespace], **kwds) - cs = script.completions() - actual = [c.name for c in cs] - self.assertEqual(sorted(actual), sorted(completions)) - - def test_complete_raw_function(self): - from os.path import join - self.check_interpreter_complete('join("").up', - locals(), - ['upper']) - - def test_complete_raw_function_different_name(self): - from os.path import join as pjoin - self.check_interpreter_complete('pjoin("").up', - locals(), - ['upper']) - - def test_complete_raw_module(self): - import os - self.check_interpreter_complete('os.path.join("a").up', - locals(), - ['upper']) - - def test_complete_raw_instance(self): - import datetime - dt = datetime.datetime(2013, 1, 1) - completions = ['time', 'timetz', 'timetuple'] - if is_py33: - completions += ['timestamp'] - self.check_interpreter_complete('(dt - dt).ti', - locals(), - completions) - - def test_list(self): - array = ['haha', 1] - self.check_interpreter_complete('array[0].uppe', - locals(), - ['upper']) - self.check_interpreter_complete('array[0].real', - locals(), - []) - - # something different, no index given, still just return the right - self.check_interpreter_complete('array[int].real', - locals(), - ['real']) - self.check_interpreter_complete('array[int()].real', - locals(), - ['real']) - # inexistent index - self.check_interpreter_complete('array[2].upper', - locals(), - ['upper']) - - def test_slice(self): - class Foo(): - bar = [] - baz = 'xbarx' - self.check_interpreter_complete('getattr(Foo, baz[1:-1]).append', - locals(), - ['append']) - - def test_getitem_side_effects(self): - class Foo(): - def __getitem__(self, index): - # possible side effects here, should therefore not call this. - return index - - foo = Foo() - self.check_interpreter_complete('foo[0].', locals(), []) - - def test_property_error(self): - class Foo(): - @property - def bar(self): - raise ValueError - - foo = Foo() - self.check_interpreter_complete('foo.bar', locals(), ['bar']) - self.check_interpreter_complete('foo.bar.baz', locals(), []) - - def test_param_completion(self): - def foo(bar): - pass - - lambd = lambda xyz: 3 - - self.check_interpreter_complete('foo(bar', locals(), ['bar']) - # TODO we're not yet using the Python3.5 inspect.signature, yet. - assert not jedi.Interpreter('lambd(xyz', [locals()]).completions() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_unicode.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_unicode.py deleted file mode 100644 index bcd8ad4..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_unicode.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- -""" -All character set and unicode related tests. -""" -from jedi import Script -from jedi._compatibility import u, unicode - - -def test_unicode_script(): - """ normally no unicode objects are being used. (<=2.7) """ - s = unicode("import datetime; datetime.timedelta") - completions = Script(s).completions() - assert len(completions) - assert type(completions[0].description) is unicode - - s = u("author='öä'; author") - completions = Script(s).completions() - x = completions[0].description - assert type(x) is unicode - - s = u("#-*- coding: iso-8859-1 -*-\nauthor='öä'; author") - s = s.encode('latin-1') - completions = Script(s).completions() - assert type(completions[0].description) is unicode - - -def test_unicode_attribute(): - """ github jedi-vim issue #94 """ - s1 = u('#-*- coding: utf-8 -*-\nclass Person():\n' - ' name = "e"\n\nPerson().name.') - completions1 = Script(s1).completions() - assert 'strip' in [c.name for c in completions1] - s2 = u('#-*- coding: utf-8 -*-\nclass Person():\n' - ' name = "é"\n\nPerson().name.') - completions2 = Script(s2).completions() - assert 'strip' in [c.name for c in completions2] - - -def test_multibyte_script(): - """ `jedi.Script` must accept multi-byte string source. """ - try: - code = u("import datetime; datetime.d") - comment = u("# multi-byte comment ã‚ã„ã†ãˆãŠÃ¤") - s = (u('%s\n%s') % (code, comment)).encode('utf-8') - except NameError: - pass # python 3 has no unicode method - else: - assert len(Script(s, 1, len(code)).completions()) - - -def test_goto_definition_at_zero(): - """At zero usually sometimes raises unicode issues.""" - assert Script("a", 1, 1).goto_definitions() == [] - s = Script("str", 1, 1).goto_definitions() - assert len(s) == 1 - assert list(s)[0].description == 'class str' - assert Script("", 1, 0).goto_definitions() == [] - - -def test_complete_at_zero(): - s = Script("str", 1, 3).completions() - assert len(s) == 1 - assert list(s)[0].name == 'str' - - s = Script("", 1, 0).completions() - assert len(s) > 0 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_usages.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_usages.py deleted file mode 100644 index 1325e41..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_api/test_usages.py +++ /dev/null @@ -1,6 +0,0 @@ -import jedi - - -def test_import_usage(): - s = jedi.Script("from .. import foo", line=1, column=18, path="foo.py") - assert [usage.line for usage in s.usages()] == [1] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_cache.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_cache.py deleted file mode 100644 index 7cff4d4..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_cache.py +++ /dev/null @@ -1,109 +0,0 @@ -""" -Test all things related to the ``jedi.cache`` module. -""" - -import time - -import pytest - -import jedi -from jedi import settings, cache -from jedi.parser.utils import ParserCacheItem, ParserPickling - - -ParserPicklingCls = type(ParserPickling) -ParserPickling = ParserPicklingCls() - - -def test_modulepickling_change_cache_dir(monkeypatch, tmpdir): - """ - ParserPickling should not save old cache when cache_directory is changed. - - See: `#168 `_ - """ - dir_1 = str(tmpdir.mkdir('first')) - dir_2 = str(tmpdir.mkdir('second')) - - item_1 = ParserCacheItem('fake parser 1') - item_2 = ParserCacheItem('fake parser 2') - path_1 = 'fake path 1' - path_2 = 'fake path 2' - - monkeypatch.setattr(settings, 'cache_directory', dir_1) - ParserPickling.save_parser(path_1, item_1) - cached = load_stored_item(ParserPickling, path_1, item_1) - assert cached == item_1.parser - - monkeypatch.setattr(settings, 'cache_directory', dir_2) - ParserPickling.save_parser(path_2, item_2) - cached = load_stored_item(ParserPickling, path_1, item_1) - assert cached is None - - -def load_stored_item(cache, path, item): - """Load `item` stored at `path` in `cache`.""" - return cache.load_parser(path, item.change_time - 1) - - -@pytest.mark.usefixtures("isolated_jedi_cache") -def test_modulepickling_delete_incompatible_cache(): - item = ParserCacheItem('fake parser') - path = 'fake path' - - cache1 = ParserPicklingCls() - cache1.version = 1 - cache1.save_parser(path, item) - cached1 = load_stored_item(cache1, path, item) - assert cached1 == item.parser - - cache2 = ParserPicklingCls() - cache2.version = 2 - cached2 = load_stored_item(cache2, path, item) - assert cached2 is None - - -@pytest.mark.skipif('True', message='Currently the star import cache is not enabled.') -def test_star_import_cache_duration(): - new = 0.01 - old, jedi.settings.star_import_cache_validity = \ - jedi.settings.star_import_cache_validity, new - - dct = cache._time_caches['star_import_cache_validity'] - old_dct = dict(dct) - dct.clear() # first empty... - # path needs to be not-None (otherwise caching effects are not visible) - jedi.Script('', 1, 0, '').completions() - time.sleep(2 * new) - jedi.Script('', 1, 0, '').completions() - - # reset values - jedi.settings.star_import_cache_validity = old - assert len(dct) == 1 - dct = old_dct - cache._star_import_cache = {} - - -def test_cache_call_signatures(): - """ - See github issue #390. - """ - def check(column, call_name, path=None): - assert jedi.Script(s, 1, column, path).call_signatures()[0].name == call_name - - s = 'str(int())' - - for i in range(3): - check(8, 'int') - check(4, 'str') - # Can keep doing these calls and always get the right result. - - # Now lets specify a source_path of boo and alternate these calls, it - # should still work. - for i in range(3): - check(8, 'int', 'boo') - check(4, 'str', 'boo') - - -def test_cache_line_split_issues(): - """Should still work even if there's a newline.""" - assert jedi.Script('int(\n').call_signatures()[0].name == 'int' diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_debug.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_debug.py deleted file mode 100644 index 0033107..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_debug.py +++ /dev/null @@ -1,9 +0,0 @@ -import jedi -from jedi import debug - -def test_simple(): - jedi.set_debug_function() - debug.speed('foo') - debug.dbg('bar') - debug.warning('baz') - jedi.set_debug_function(None, False, False, False) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/absolute_import/local_module.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/absolute_import/local_module.py deleted file mode 100644 index aa4bf00..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/absolute_import/local_module.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -This is a module that imports the *standard library* unittest, -despite there being a local "unittest" module. It specifies that it -wants the stdlib one with the ``absolute_import`` __future__ import. - -The twisted equivalent of this module is ``twisted.trial._synctest``. -""" -from __future__ import absolute_import - -import unittest - - -class Assertions(unittest.TestCase): - pass diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/absolute_import/unittest.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/absolute_import/unittest.py deleted file mode 100644 index eee1e93..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/absolute_import/unittest.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -This is a module that shadows a builtin (intentionally). - -It imports a local module, which in turn imports stdlib unittest (the -name shadowed by this module). If that is properly resolved, there's -no problem. However, if jedi doesn't understand absolute_imports, it -will get this module again, causing infinite recursion. -""" -from local_module import Assertions - - -class TestCase(Assertions): - def test(self): - self.assertT diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/app b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/app deleted file mode 100644 index 7394d2d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/app +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/python - -import sys -sys.path[0:0] = [ - '/usr/lib/python3.4/site-packages', - '/tmp/.buildout/eggs/important_package.egg' -] - -import important_package - -if __name__ == '__main__': - sys.exit(important_package.main()) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/binary_file b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/binary_file deleted file mode 100644 index f1ad755..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/binary_file +++ /dev/null @@ -1 +0,0 @@ -‰PNG diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/empty_file b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/bin/empty_file deleted file mode 100644 index e69de29..0000000 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/buildout.cfg b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/buildout.cfg deleted file mode 100644 index e69de29..0000000 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/src/proj_name/module_name.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/buildout_project/src/proj_name/module_name.py deleted file mode 100644 index e69de29..0000000 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask/__init__.py deleted file mode 100644 index e876bc1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask/ext/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask/ext/__init__.py deleted file mode 100644 index 8b13789..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask/ext/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask_baz/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask_baz/__init__.py deleted file mode 100644 index e9b3fff..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask_baz/__init__.py +++ /dev/null @@ -1 +0,0 @@ -Baz = 1 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask_foo.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask_foo.py deleted file mode 100644 index 0b910b8..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flask_foo.py +++ /dev/null @@ -1,2 +0,0 @@ -class Foo(object): - pass diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/bar.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/bar.py deleted file mode 100644 index 6629f9a..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/bar.py +++ /dev/null @@ -1,2 +0,0 @@ -class Bar(object): - pass diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/moo/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/moo/__init__.py deleted file mode 100644 index 266e809..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/flask-site-packages/flaskext/moo/__init__.py +++ /dev/null @@ -1 +0,0 @@ -Moo = 1 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/init_extension_module/__init__.cpython-34m.so b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/init_extension_module/__init__.cpython-34m.so deleted file mode 100755 index abfadc39cf3f41ffd58890d8696622dadae2513a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16493 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 bcq 3: - return a - - annot_ret('')""") - assert [d.name for d in jedi.Script(source, ).goto_definitions()] == ['str'] - - source = dedent("""\ - def annot(a:int): - return a - - annot('')""") - - assert [d.name for d in jedi.Script(source, ).goto_definitions()] == ['int'] - - -@pytest.mark.skipif('sys.version_info[0] < 3') -@pytest.mark.parametrize('reference', [ - 'assert 1', - '1', - 'def x(): pass', - '1, 2', - r'1\n' -]) -def test_illegal_forward_references(reference): - source = 'def foo(bar: "%s"): bar' % reference - - assert not jedi.Script(source).goto_definitions() - - -@pytest.mark.skipif('sys.version_info[0] < 3') -def test_lambda_forward_references(): - source = 'def foo(bar: "lambda: 3"): bar' - - # For now just receiving the 3 is ok. I'm doubting that this is what we - # want. We also execute functions. Should we only execute classes? - assert jedi.Script(source).goto_definitions() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_buildout_detection.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_buildout_detection.py deleted file mode 100644 index c5c6556..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_buildout_detection.py +++ /dev/null @@ -1,89 +0,0 @@ -import os -from textwrap import dedent - -from jedi._compatibility import u -from jedi.evaluate.sys_path import (_get_parent_dir_with_file, - _get_buildout_scripts, - sys_path_with_modifications, - _check_module) -from jedi.evaluate import Evaluator -from jedi.parser import ParserWithRecovery, load_grammar - -from ..helpers import cwd_at - - -@cwd_at('test/test_evaluate/buildout_project/src/proj_name') -def test_parent_dir_with_file(): - parent = _get_parent_dir_with_file( - os.path.abspath(os.curdir), 'buildout.cfg') - assert parent is not None - assert parent.endswith(os.path.join('test', 'test_evaluate', 'buildout_project')) - - -@cwd_at('test/test_evaluate/buildout_project/src/proj_name') -def test_buildout_detection(): - scripts = _get_buildout_scripts(os.path.abspath('./module_name.py')) - assert len(scripts) == 1 - curdir = os.path.abspath(os.curdir) - appdir_path = os.path.normpath(os.path.join(curdir, '../../bin/app')) - assert scripts[0] == appdir_path - - -def test_append_on_non_sys_path(): - SRC = dedent(u(""" - class Dummy(object): - path = [] - - d = Dummy() - d.path.append('foo')""")) - grammar = load_grammar() - p = ParserWithRecovery(grammar, SRC) - paths = _check_module(Evaluator(grammar), p.module) - assert len(paths) > 0 - assert 'foo' not in paths - - -def test_path_from_invalid_sys_path_assignment(): - SRC = dedent(u(""" - import sys - sys.path = 'invalid'""")) - grammar = load_grammar() - p = ParserWithRecovery(grammar, SRC) - paths = _check_module(Evaluator(grammar), p.module) - assert len(paths) > 0 - assert 'invalid' not in paths - - -@cwd_at('test/test_evaluate/buildout_project/src/proj_name/') -def test_sys_path_with_modifications(): - SRC = dedent(u(""" - import os - """)) - grammar = load_grammar() - p = ParserWithRecovery(grammar, SRC) - p.module.path = os.path.abspath(os.path.join(os.curdir, 'module_name.py')) - paths = sys_path_with_modifications(Evaluator(grammar), p.module) - assert '/tmp/.buildout/eggs/important_package.egg' in paths - - -def test_path_from_sys_path_assignment(): - SRC = dedent(u(""" - #!/usr/bin/python - - import sys - sys.path[0:0] = [ - '/usr/lib/python3.4/site-packages', - '/home/test/.buildout/eggs/important_package.egg' - ] - - path[0:0] = [1] - - import important_package - - if __name__ == '__main__': - sys.exit(important_package.main())""")) - grammar = load_grammar() - p = ParserWithRecovery(grammar, SRC) - paths = _check_module(Evaluator(grammar), p.module) - assert 1 not in paths - assert '/home/test/.buildout/eggs/important_package.egg' in paths diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_compiled.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_compiled.py deleted file mode 100644 index 762260e..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_compiled.py +++ /dev/null @@ -1,86 +0,0 @@ -from textwrap import dedent - -from jedi._compatibility import builtins, is_py3 -from jedi.parser import load_grammar -from jedi.parser.tree import Function -from jedi.evaluate import compiled, representation -from jedi.evaluate import Evaluator -from jedi import Script - - -def _evaluator(): - return Evaluator(load_grammar()) - - -def test_simple(): - e = _evaluator() - bltn = compiled.CompiledObject(e, builtins) - obj = compiled.CompiledObject(e, '_str_', bltn) - upper = e.find_types(obj, 'upper') - assert len(upper) == 1 - objs = list(e.execute(list(upper)[0])) - assert len(objs) == 1 - assert isinstance(objs[0], representation.Instance) - - -def test_fake_loading(): - e = _evaluator() - assert isinstance(compiled.create(e, next), Function) - - builtin = compiled.get_special_object(e, 'BUILTINS') - string = builtin.get_subscope_by_name('str') - from_name = compiled._create_from_name(e, builtin, string, '__init__') - assert isinstance(from_name, Function) - - -def test_fake_docstr(): - assert compiled.create(_evaluator(), next).raw_doc == next.__doc__ - - -def test_parse_function_doc_illegal_docstr(): - docstr = """ - test_func(o - - doesn't have a closing bracket. - """ - assert ('', '') == compiled._parse_function_doc(docstr) - - -def test_doc(): - """ - Even CompiledObject docs always return empty docstrings - not None, that's - just a Jedi API definition. - """ - obj = compiled.CompiledObject(_evaluator(), ''.__getnewargs__) - assert obj.doc == '' - - -def test_string_literals(): - def typ(string): - d = Script("a = %s; a" % string).goto_definitions()[0] - return d.name - - assert typ('""') == 'str' - assert typ('r""') == 'str' - if is_py3: - assert typ('br""') == 'bytes' - assert typ('b""') == 'bytes' - assert typ('u""') == 'str' - else: - assert typ('b""') == 'str' - assert typ('u""') == 'unicode' - - -def test_method_completion(): - code = dedent(''' - class Foo: - def bar(self): - pass - - foo = Foo() - foo.bar.__func__''') - if is_py3: - result = [] - else: - result = ['__func__'] - assert [c.name for c in Script(code).completions()] == result diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_docstring.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_docstring.py deleted file mode 100644 index 6dbd1ca..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_docstring.py +++ /dev/null @@ -1,152 +0,0 @@ -""" -Testing of docstring related issues and especially ``jedi.docstrings``. -""" - -from textwrap import dedent -import jedi -from ..helpers import unittest - -try: - import numpydoc -except ImportError: - numpydoc_unavailable = True -else: - numpydoc_unavailable = False - - -class TestDocstring(unittest.TestCase): - def test_function_doc(self): - defs = jedi.Script(""" - def func(): - '''Docstring of `func`.''' - func""").goto_definitions() - self.assertEqual(defs[0].raw_doc, 'Docstring of `func`.') - - @unittest.skip('need evaluator class for that') - def test_attribute_docstring(self): - defs = jedi.Script(""" - x = None - '''Docstring of `x`.''' - x""").goto_definitions() - self.assertEqual(defs[0].raw_doc, 'Docstring of `x`.') - - @unittest.skip('need evaluator class for that') - def test_multiple_docstrings(self): - defs = jedi.Script(""" - def func(): - '''Original docstring.''' - x = func - '''Docstring of `x`.''' - x""").goto_definitions() - docs = [d.raw_doc for d in defs] - self.assertEqual(docs, ['Original docstring.', 'Docstring of `x`.']) - - def test_completion(self): - assert jedi.Script(''' - class DocstringCompletion(): - #? [] - """ asdfas """''').completions() - - def test_docstrings_type_dotted_import(self): - s = """ - def func(arg): - ''' - :type arg: random.Random - ''' - arg.""" - names = [c.name for c in jedi.Script(s).completions()] - assert 'seed' in names - - def test_docstrings_param_type(self): - s = """ - def func(arg): - ''' - :param str arg: some description - ''' - arg.""" - names = [c.name for c in jedi.Script(s).completions()] - assert 'join' in names - - def test_docstrings_type_str(self): - s = """ - def func(arg): - ''' - :type arg: str - ''' - arg.""" - - names = [c.name for c in jedi.Script(s).completions()] - assert 'join' in names - - def test_docstring_instance(self): - # The types hint that it's a certain kind - s = dedent(""" - class A: - def __init__(self,a): - ''' - :type a: threading.Thread - ''' - - if a is not None: - a.start() - - self.a = a - - - def method_b(c): - ''' - :type c: A - ''' - - c.""") - - names = [c.name for c in jedi.Script(s).completions()] - assert 'a' in names - assert '__init__' in names - assert 'mro' not in names # Exists only for types. - - @unittest.skipIf(numpydoc_unavailable, 'numpydoc module is unavailable') - def test_numpydoc_docstring(self): - s = dedent(''' - def foobar(x, y): - """ - Parameters - ---------- - x : int - y : str - """ - y.''') - names = [c.name for c in jedi.Script(s).completions()] - assert 'isupper' in names - assert 'capitalize' in names - - @unittest.skipIf(numpydoc_unavailable, 'numpydoc module is unavailable') - def test_numpydoc_docstring_set_of_values(self): - s = dedent(''' - def foobar(x, y): - """ - Parameters - ---------- - x : {'foo', 'bar', 100500}, optional - """ - x.''') - names = [c.name for c in jedi.Script(s).completions()] - assert 'isupper' in names - assert 'capitalize' in names - assert 'numerator' in names - - @unittest.skipIf(numpydoc_unavailable, 'numpydoc module is unavailable') - def test_numpydoc_alternative_types(self): - s = dedent(''' - def foobar(x, y): - """ - Parameters - ---------- - x : int or str or list - """ - x.''') - names = [c.name for c in jedi.Script(s).completions()] - assert 'isupper' in names - assert 'capitalize' in names - assert 'numerator' in names - assert 'append' in names diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_extension.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_extension.py deleted file mode 100644 index 83efc20..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_extension.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Test compiled module -""" -import os - -import jedi -from ..helpers import cwd_at -import pytest - - -def test_completions(): - s = jedi.Script('import _ctypes; _ctypes.') - assert len(s.completions()) >= 15 - - -def test_call_signatures_extension(): - if os.name == 'nt': - func = 'LoadLibrary' - params = 1 - else: - func = 'dlopen' - params = 2 - s = jedi.Script('import _ctypes; _ctypes.%s(' % (func,)) - sigs = s.call_signatures() - assert len(sigs) == 1 - assert len(sigs[0].params) == params - - -def test_call_signatures_stdlib(): - s = jedi.Script('import math; math.cos(') - sigs = s.call_signatures() - assert len(sigs) == 1 - assert len(sigs[0].params) == 1 - - -# Check only on linux 64 bit platform and Python3.4. -@pytest.mark.skipif('sys.platform != "linux" or sys.maxsize <= 2**32 or sys.version_info[:2] != (3, 4)') -@cwd_at('test/test_evaluate') -def test_init_extension_module(): - """ - ``__init__`` extension modules are also packages and Jedi should understand - that. - - Originally coming from #472. - - This test was built by the module.c and setup.py combination you can find - in the init_extension_module folder. You can easily build the - `__init__.cpython-34m.so` by compiling it (create a virtualenv and run - `setup.py install`. - - This is also why this test only runs on certain systems (and Python 3.4). - """ - s = jedi.Script('import init_extension_module as i\ni.', path='not_existing.py') - assert 'foo' in [c.name for c in s.completions()] - - s = jedi.Script('from init_extension_module import foo\nfoo', path='not_existing.py') - assert ['foo'] == [c.name for c in s.completions()] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_helpers.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_helpers.py deleted file mode 100644 index 02e6d36..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_helpers.py +++ /dev/null @@ -1,16 +0,0 @@ -from textwrap import dedent - -from jedi import names -from jedi.evaluate import helpers - - -def test_call_of_leaf_in_brackets(): - s = dedent(""" - x = 1 - type(x) - """) - last_x = names(s, references=True, definitions=False)[-1] - name = last_x._name - - call = helpers.call_of_leaf(name) - assert call == name diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_imports.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_imports.py deleted file mode 100644 index 8eb2387..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_imports.py +++ /dev/null @@ -1,129 +0,0 @@ -import os -import sys - -import pytest - -import jedi -from jedi._compatibility import find_module_py33, find_module -from ..helpers import cwd_at - - -@pytest.mark.skipif('sys.version_info < (3,3)') -def test_find_module_py33(): - """Needs to work like the old find_module.""" - assert find_module_py33('_io') == (None, '_io', False) - - -def test_find_module_package(): - file, path, is_package = find_module('json') - assert file is None - assert path.endswith('json') - assert is_package is True - - -def test_find_module_not_package(): - file, path, is_package = find_module('io') - assert file is not None - assert path.endswith('io.py') - assert is_package is False - - -def test_find_module_package_zipped(): - if 'zipped_imports/pkg.zip' not in sys.path: - sys.path.append(os.path.join(os.path.dirname(__file__), - 'zipped_imports/pkg.zip')) - file, path, is_package = find_module('pkg') - assert file is not None - assert path.endswith('pkg.zip') - assert is_package is True - assert len(jedi.Script('import pkg; pkg.mod', 1, 19).completions()) == 1 - - -@pytest.mark.skipif('sys.version_info < (2,7)') -def test_find_module_not_package_zipped(): - if 'zipped_imports/not_pkg.zip' not in sys.path: - sys.path.append(os.path.join(os.path.dirname(__file__), - 'zipped_imports/not_pkg.zip')) - file, path, is_package = find_module('not_pkg') - assert file is not None - assert path.endswith('not_pkg.zip') - assert is_package is False - assert len( - jedi.Script('import not_pkg; not_pkg.val', 1, 27).completions()) == 1 - - -@cwd_at('test/test_evaluate/not_in_sys_path/pkg') -def test_import_not_in_sys_path(): - """ - non-direct imports (not in sys.path) - """ - a = jedi.Script(path='module.py', line=5).goto_definitions() - assert a[0].name == 'int' - - a = jedi.Script(path='module.py', line=6).goto_definitions() - assert a[0].name == 'str' - a = jedi.Script(path='module.py', line=7).goto_definitions() - assert a[0].name == 'str' - - -@pytest.mark.parametrize("script,name", [ - ("from flask.ext import foo; foo.", "Foo"), # flask_foo.py - ("from flask.ext import bar; bar.", "Bar"), # flaskext/bar.py - ("from flask.ext import baz; baz.", "Baz"), # flask_baz/__init__.py - ("from flask.ext import moo; moo.", "Moo"), # flaskext/moo/__init__.py - ("from flask.ext.", "foo"), - ("from flask.ext.", "bar"), - ("from flask.ext.", "baz"), - ("from flask.ext.", "moo"), - pytest.mark.xfail(("import flask.ext.foo; flask.ext.foo.", "Foo")), - pytest.mark.xfail(("import flask.ext.bar; flask.ext.bar.", "Foo")), - pytest.mark.xfail(("import flask.ext.baz; flask.ext.baz.", "Foo")), - pytest.mark.xfail(("import flask.ext.moo; flask.ext.moo.", "Foo")), -]) -def test_flask_ext(script, name): - """flask.ext.foo is really imported from flaskext.foo or flask_foo. - """ - path = os.path.join(os.path.dirname(__file__), 'flask-site-packages') - completions = jedi.Script(script, sys_path=[path]).completions() - assert name in [c.name for c in completions] - - -@cwd_at('test/test_evaluate/') -def test_not_importable_file(): - src = 'import not_importable_file as x; x.' - assert not jedi.Script(src, path='example.py').completions() - - -def test_import_unique(): - src = "import os; os.path" - defs = jedi.Script(src, path='example.py').goto_definitions() - defs = [d._definition for d in defs] - assert len(defs) == len(set(defs)) - - -def test_cache_works_with_sys_path_param(tmpdir): - foo_path = tmpdir.join('foo') - bar_path = tmpdir.join('bar') - foo_path.join('module.py').write('foo = 123', ensure=True) - bar_path.join('module.py').write('bar = 123', ensure=True) - foo_completions = jedi.Script('import module; module.', - sys_path=[foo_path.strpath]).completions() - bar_completions = jedi.Script('import module; module.', - sys_path=[bar_path.strpath]).completions() - assert 'foo' in [c.name for c in foo_completions] - assert 'bar' not in [c.name for c in foo_completions] - - assert 'bar' in [c.name for c in bar_completions] - assert 'foo' not in [c.name for c in bar_completions] - - -def test_import_completion_docstring(): - import abc - s = jedi.Script('"""test"""\nimport ab') - completions = s.completions() - assert len(completions) == 1 - assert completions[0].docstring(fast=False) == abc.__doc__ - - # However for performance reasons not all modules are loaded and the - # docstring is empty in this case. - assert completions[0].docstring() == '' diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_namespace_package.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_namespace_package.py deleted file mode 100644 index 3beed65..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_namespace_package.py +++ /dev/null @@ -1,65 +0,0 @@ -import jedi -from os.path import dirname, join - - -def test_namespace_package(): - sys_path = [join(dirname(__file__), d) - for d in ['namespace_package/ns1', 'namespace_package/ns2']] - - def script_with_path(*args, **kwargs): - return jedi.Script(sys_path=sys_path, *args, **kwargs) - - # goto definition - assert script_with_path('from pkg import ns1_file').goto_definitions() - assert script_with_path('from pkg import ns2_file').goto_definitions() - assert not script_with_path('from pkg import ns3_file').goto_definitions() - - # goto assignment - tests = { - 'from pkg.ns2_folder.nested import foo': 'nested!', - 'from pkg.ns2_folder import foo': 'ns2_folder!', - 'from pkg.ns2_file import foo': 'ns2_file!', - 'from pkg.ns1_folder import foo': 'ns1_folder!', - 'from pkg.ns1_file import foo': 'ns1_file!', - 'from pkg import foo': 'ns1!', - } - for source, solution in tests.items(): - ass = script_with_path(source).goto_assignments() - assert len(ass) == 1 - assert ass[0].description == "foo = '%s'" % solution - - # completion - completions = script_with_path('from pkg import ').completions() - names = [str(c.name) for c in completions] # str because of unicode - compare = ['foo', 'ns1_file', 'ns1_folder', 'ns2_folder', 'ns2_file', - 'pkg_resources', 'pkgutil', '__name__', '__path__', - '__package__', '__file__', '__doc__'] - # must at least contain these items, other items are not important - assert set(compare) == set(names) - - tests = { - 'from pkg import ns2_folder as x': 'ns2_folder!', - 'from pkg import ns2_file as x': 'ns2_file!', - 'from pkg.ns2_folder import nested as x': 'nested!', - 'from pkg import ns1_folder as x': 'ns1_folder!', - 'from pkg import ns1_file as x': 'ns1_file!', - 'import pkg as x': 'ns1!', - } - for source, solution in tests.items(): - for c in script_with_path(source + '; x.').completions(): - if c.name == 'foo': - completion = c - solution = "statement: foo = '%s'" % solution - assert completion.description == solution - - -def test_nested_namespace_package(): - CODE = 'from nested_namespaces.namespace.pkg import CONST' - - sys_path = [dirname(__file__)] - - script = jedi.Script(sys_path=sys_path, source=CODE, line=1, column=45) - - result = script.goto_definitions() - - assert len(result) == 1 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_precedence.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_precedence.py deleted file mode 100644 index 462b7d4..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_precedence.py +++ /dev/null @@ -1,20 +0,0 @@ -from jedi.parser import load_grammar, Parser -from jedi.evaluate import Evaluator -from jedi.evaluate.compiled import CompiledObject - -import pytest - - -@pytest.mark.skipif('sys.version_info[0] < 3') # Ellipsis does not exists in 2 -@pytest.mark.parametrize('source', [ - '1 == 1', - '1.0 == 1', - '... == ...' -]) -def test_equals(source): - evaluator = Evaluator(load_grammar()) - node = Parser(load_grammar(), source, 'eval_input').get_parsed_node() - results = evaluator.eval_element(node) - assert len(results) == 1 - first = results.pop() - assert isinstance(first, CompiledObject) and first.obj is True diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_pyc.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_pyc.py deleted file mode 100644 index c101da1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_pyc.py +++ /dev/null @@ -1,64 +0,0 @@ -""" -Test completions from *.pyc files: - - - generate a dummy python module - - compile the dummy module to generate a *.pyc - - delete the pure python dummy module - - try jedi on the generated *.pyc -""" -import os -import shutil -import sys - -import pytest - -import jedi -from ..helpers import cwd_at - - -SRC = """class Foo: - pass - -class Bar: - pass -""" - - -def generate_pyc(): - os.mkdir("dummy_package") - with open("dummy_package/__init__.py", 'w'): - pass - with open("dummy_package/dummy.py", 'w') as f: - f.write(SRC) - import compileall - compileall.compile_file("dummy_package/dummy.py") - os.remove("dummy_package/dummy.py") - - if sys.version_info[0] == 3: - # Python3 specific: - # To import pyc modules, we must move them out of the __pycache__ - # directory and rename them to remove ".cpython-%s%d" - # see: http://stackoverflow.com/questions/11648440/python-does-not-detect-pyc-files - for f in os.listdir("dummy_package/__pycache__"): - dst = f.replace('.cpython-%s%s' % sys.version_info[:2], "") - dst = os.path.join("dummy_package", dst) - shutil.copy(os.path.join("dummy_package/__pycache__", f), dst) - - -# Python 2.6 does not necessarily come with `compileall.compile_file`. -@pytest.mark.skipif("sys.version_info > (2,6)") -@cwd_at('test/test_evaluate') -def test_pyc(): - """ - The list of completion must be greater than 2. - """ - try: - generate_pyc() - s = jedi.Script("from dummy_package import dummy; dummy.", path='blub.py') - assert len(s.completions()) >= 2 - finally: - shutil.rmtree("dummy_package") - - -if __name__ == "__main__": - test_pyc() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_representation.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_representation.py deleted file mode 100644 index 1d3d562..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_representation.py +++ /dev/null @@ -1,36 +0,0 @@ -from textwrap import dedent - -from jedi import Script - - -def get_definition_and_evaluator(source): - d = Script(dedent(source)).goto_definitions()[0] - return d._name.parent, d._evaluator - - -def test_function_execution(): - """ - We've been having an issue of a mutable list that was changed inside the - function execution. Test if an execution always returns the same result. - """ - - s = """ - def x(): - return str() - x""" - func, evaluator = get_definition_and_evaluator(s) - # Now just use the internals of the result (easiest way to get a fully - # usable function). - # Should return the same result both times. - assert len(evaluator.execute(func)) == 1 - assert len(evaluator.execute(func)) == 1 - - -def test_class_mro(): - s = """ - class X(object): - pass - X""" - cls, evaluator = get_definition_and_evaluator(s) - mro = cls.py__mro__() - assert [str(c.name) for c in mro] == ['X', 'object'] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_sys_path.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_sys_path.py deleted file mode 100644 index 9635eec..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/test_sys_path.py +++ /dev/null @@ -1,59 +0,0 @@ -import os -from glob import glob -import sys - -import pytest - -from jedi._compatibility import unicode -from jedi.parser import ParserWithRecovery, load_grammar -from jedi.evaluate import sys_path, Evaluator - - -def test_paths_from_assignment(): - def paths(src): - grammar = load_grammar() - stmt = ParserWithRecovery(grammar, unicode(src)).module.statements[0] - return set(sys_path._paths_from_assignment(Evaluator(grammar), stmt)) - - assert paths('sys.path[0:0] = ["a"]') == set(['a']) - assert paths('sys.path = ["b", 1, x + 3, y, "c"]') == set(['b', 'c']) - assert paths('sys.path = a = ["a"]') == set(['a']) - - # Fail for complicated examples. - assert paths('sys.path, other = ["a"], 2') == set() - - -# Currently venv site-packages resolution only seeks pythonX.Y/site-packages -# that belong to the same version as the interpreter to avoid issues with -# cross-version imports. "venvs/" dir contains "venv27" and "venv34" that -# mimic venvs created for py2.7 and py3.4 respectively. If test runner is -# invoked with one of those versions, the test below will be run for the -# matching directory. -CUR_DIR = os.path.dirname(__file__) -VENVS = list(glob( - os.path.join(CUR_DIR, 'sample_venvs/venv%d%d' % sys.version_info[:2]))) - - -@pytest.mark.parametrize('venv', VENVS) -def test_get_venv_path(venv): - pjoin = os.path.join - venv_path = sys_path.get_venv_path(venv) - - site_pkgs = (glob(pjoin(venv, 'lib', 'python*', 'site-packages')) + - glob(pjoin(venv, 'lib', 'site-packages')))[0] - ETALON = [ - pjoin('/path', 'from', 'egg-link'), - pjoin(site_pkgs, '.', 'relative', 'egg-link', 'path'), - site_pkgs, - pjoin(site_pkgs, 'dir-from-foo-pth'), - ] - - # Ensure that pth and egg-link paths were added. - assert venv_path[:len(ETALON)] == ETALON - - # Ensure that none of venv dirs leaked to the interpreter. - assert not set(sys.path).intersection(ETALON) - - # Ensure that "import ..." lines were ignored. - assert pjoin('/path', 'from', 'smth.py') not in venv_path - assert pjoin('/path', 'from', 'smth.py:extend_path') not in venv_path diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/zipped_imports/not_pkg.zip b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/zipped_imports/not_pkg.zip deleted file mode 100644 index f1516a6aaf8a2bc2f646e122937b72555fdd010d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmWIWW@Zs#-~htsdp>zEAOS800fxN%lK6t`biIPg&=iAanuJMIa6X07mLFiU0rr diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/zipped_imports/pkg.zip b/vim-plugins/bundle/jedi-vim/jedi/test/test_evaluate/zipped_imports/pkg.zip deleted file mode 100644 index ec8eac4d89a29b59a8bf0f81e9094ae6f904e3f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 504 zcmWIWW@h1H00EJ`pFF?}D8a%Yz)+B#t{)n~!%+UCCme*oGKw$+0Ck8kZ~!5?4t}VP z`1s7c%#!$cy@E<~&8N@kp3v6{JaN`v^Q`AnFYQz3TQ`XsDH^4AS}t7~6T^D*<;R(o zGgY~^aUFAOivilj&LJ0I@LV70CUYQ0*v*0FT3)E#x%nxjIjK;a%YaT!fI3^-`;4Y< z=!Vb${S$uIPlN5hs?FTFvX~KUi$TDid(uD~Ksdmgkx7&pSE%p+Re*uRTSpKL2_p`8 z7(sL+LI~OY{0s=)OB#)!x>3RlyFnoDB0G^6#h`UigOEJW!2t7ofHx}}$eqkUcn(O5 HFoJjhA|ie< diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_integration.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_integration.py deleted file mode 100644 index edca711..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_integration.py +++ /dev/null @@ -1,60 +0,0 @@ -import os - -import pytest - -from . import helpers - - -def assert_case_equal(case, actual, desired): - """ - Assert ``actual == desired`` with formatted message. - - This is not needed for typical py.test use case, but as we need - ``--assert=plain`` (see ../pytest.ini) to workaround some issue - due to py.test magic, let's format the message by hand. - """ - assert actual == desired, """ -Test %r failed. -actual = %s -desired = %s -""" % (case, actual, desired) - - -def assert_static_analysis(case, actual, desired): - """A nicer formatting for static analysis tests.""" - a = set(actual) - d = set(desired) - assert actual == desired, """ -Test %r failed. -not raised = %s -unspecified = %s -""" % (case, sorted(d - a), sorted(a - d)) - - -def test_completion(case, monkeypatch): - if case.skip is not None: - pytest.skip(case.skip) - repo_root = helpers.root_dir - monkeypatch.chdir(os.path.join(repo_root, 'jedi')) - case.run(assert_case_equal) - - -def test_static_analysis(static_analysis_case): - if static_analysis_case.skip is not None: - pytest.skip(static_analysis_case.skip) - else: - static_analysis_case.run(assert_static_analysis) - - -def test_refactor(refactor_case): - """ - Run refactoring test case. - - :type refactor_case: :class:`.refactor.RefactoringCase` - """ - if 0: - # TODO Refactoring is not relevant at the moment, it will be changed - # significantly in the future, but maybe we can use these tests: - refactor_case.run() - assert_case_equal(refactor_case, - refactor_case.result, refactor_case.desired) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_analysis.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_analysis.py deleted file mode 100644 index cfcd405..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_analysis.py +++ /dev/null @@ -1,12 +0,0 @@ -""" -Test of keywords and ``jedi.keywords`` -""" -from jedi import Script - - -def test_issue436(): - code = "bar = 0\nbar += 'foo' + 4" - errors = set(repr(e) for e in Script(code)._analysis()) - assert len(errors) == 2 - assert '' in errors - assert '' in errors diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_import.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_import.py deleted file mode 100644 index d961666..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_import.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -Tests of various import related things that could not be tested with "Black Box -Tests". -""" -from jedi import Script -from .helpers import cwd_at -from jedi._compatibility import is_py26 - -import pytest - - -def test_goto_definition_on_import(): - assert Script("import sys_blabla", 1, 8).goto_definitions() == [] - assert len(Script("import sys", 1, 8).goto_definitions()) == 1 - - -@cwd_at('jedi') -def test_complete_on_empty_import(): - assert Script("from datetime import").completions()[0].name == 'import' - # should just list the files in the directory - assert 10 < len(Script("from .", path='whatever.py').completions()) < 30 - - # Global import - assert len(Script("from . import", 1, 5, 'whatever.py').completions()) > 30 - # relative import - assert 10 < len(Script("from . import", 1, 6, 'whatever.py').completions()) < 30 - - # Global import - assert len(Script("from . import classes", 1, 5, 'whatever.py').completions()) > 30 - # relative import - assert 10 < len(Script("from . import classes", 1, 6, 'whatever.py').completions()) < 30 - - wanted = set(['ImportError', 'import', 'ImportWarning']) - assert set([c.name for c in Script("import").completions()]) == wanted - if not is_py26: # python 2.6 doesn't always come with a library `import*`. - assert len(Script("import import", path='').completions()) > 0 - - # 111 - assert Script("from datetime import").completions()[0].name == 'import' - assert Script("from datetime import ").completions() - - -def test_imports_on_global_namespace_without_path(): - """If the path is None, there shouldn't be any import problem""" - completions = Script("import operator").completions() - assert [c.name for c in completions] == ['operator'] - completions = Script("import operator", path='example.py').completions() - assert [c.name for c in completions] == ['operator'] - - # the first one has a path the second doesn't - completions = Script("import keyword", path='example.py').completions() - assert [c.name for c in completions] == ['keyword'] - completions = Script("import keyword").completions() - assert [c.name for c in completions] == ['keyword'] - - -def test_named_import(): - """named import - jedi-vim issue #8""" - s = "import time as dt" - assert len(Script(s, 1, 15, '/').goto_definitions()) == 1 - assert len(Script(s, 1, 10, '/').goto_definitions()) == 1 - - -@pytest.mark.skipif('True', reason='The nested import stuff is still very messy.') -def test_goto_following_on_imports(): - s = "import multiprocessing.dummy; multiprocessing.dummy" - g = Script(s).goto_assignments() - assert len(g) == 1 - assert (g[0].line, g[0].column) != (0, 0) - - -def test_after_from(): - def check(source, result, column=None): - completions = Script(source, column=column).completions() - assert [c.name for c in completions] == result - - check('\nfrom os. ', ['path']) - check('\nfrom os ', ['import']) - check('from os ', ['import']) - check('\nfrom os import whatever', ['import'], len('from os im')) - - check('from os\\\n', ['import']) - check('from os \\\n', ['import']) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_keyword.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_keyword.py deleted file mode 100644 index ad4a2ae..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_keyword.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -Test of keywords and ``jedi.keywords`` -""" -from jedi._compatibility import is_py3 -from jedi import Script - - -def test_goto_assignments_keyword(): - """ - Bug: goto assignments on ``in`` used to raise AttributeError:: - - 'unicode' object has no attribute 'generate_call_path' - """ - Script('in').goto_assignments() - - -def test_keyword(): - """ github jedi-vim issue #44 """ - defs = Script("print").goto_definitions() - if is_py3: - assert [d.doc for d in defs] - else: - assert defs == [] - - assert Script("import").goto_assignments() == [] - - completions = Script("import", 1, 1).completions() - assert len(completions) > 10 and 'if' in [c.name for c in completions] - assert Script("assert").goto_definitions() == [] diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_stdlib.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_stdlib.py deleted file mode 100644 index 3cbe658..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_integration_stdlib.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Tests of various stdlib related things that could not be tested -with "Black Box Tests". -""" -from textwrap import dedent - -import pytest -from jedi import Script -from jedi._compatibility import is_py26 - -# The namedtuple is different for different Python2.7 versions. Some versions -# are missing the attribute `_class_template`. -pytestmark = pytest.mark.skipif('sys.version_info[0] < 3') - - -@pytest.mark.parametrize(['letter', 'expected'], [ - ('n', ['name']), - ('s', ['smart']), -]) -def test_namedtuple_str(letter, expected): - source = dedent("""\ - import collections - Person = collections.namedtuple('Person', 'name smart') - dave = Person('Dave', False) - dave.%s""") % letter - result = Script(source).completions() - completions = set(r.name for r in result) - if is_py26: - assert completions == set() - else: - assert completions == set(expected) - - -def test_namedtuple_list(): - source = dedent("""\ - import collections - Cat = collections.namedtuple('Person', ['legs', u'length', 'large']) - garfield = Cat(4, '85cm', True) - garfield.l""") - result = Script(source).completions() - completions = set(r.name for r in result) - if is_py26: - assert completions == set() - else: - assert completions == set(['legs', 'length', 'large']) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_jedi_system.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_jedi_system.py deleted file mode 100644 index ea0d1e9..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_jedi_system.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -Test the Jedi "System" which means for example to test if imports are -correctly used. -""" - -import os -import inspect - -import jedi - - -def test_settings_module(): - """ - jedi.settings and jedi.cache.settings must be the same module. - """ - from jedi import cache - from jedi import settings - assert cache.settings is settings - - -def test_no_duplicate_modules(): - """ - Make sure that import hack works as expected. - - Jedi does an import hack (see: jedi/__init__.py) to have submodules - with circular dependencies. The modules in this circular dependency - "loop" must be imported by ``import `` rather than normal - ``from jedi import `` (or ``from . jedi ...``). This test - make sure that this is satisfied. - - See also: - - - `#160 `_ - - `#161 `_ - """ - import sys - jedipath = os.path.dirname(os.path.abspath(jedi.__file__)) - - def is_submodule(m): - try: - filepath = m.__file__ - except AttributeError: - return False - return os.path.abspath(filepath).startswith(jedipath) - - modules = list(filter(is_submodule, sys.modules.values())) - top_modules = [m for m in modules if not m.__name__.startswith('jedi.')] - for m in modules: - if m is jedi: - # py.test automatically improts `jedi.*` when --doctest-modules - # is given. So this test cannot succeeds. - continue - for tm in top_modules: - try: - imported = getattr(m, tm.__name__) - except AttributeError: - continue - if inspect.ismodule(imported): - # module could have a function with the same name, e.g. - # `keywords.keywords`. - assert imported is tm diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_new_parser.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_new_parser.py deleted file mode 100644 index e66591d..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_new_parser.py +++ /dev/null @@ -1,13 +0,0 @@ -from jedi._compatibility import u -from jedi.parser import ParserWithRecovery, load_grammar - - -def test_basic_parsing(): - def compare(string): - """Generates the AST object and then regenerates the code.""" - assert ParserWithRecovery(load_grammar(), string).module.get_code() == string - - compare(u('\na #pass\n')) - compare(u('wblabla* 1\t\n')) - compare(u('def x(a, b:3): pass\n')) - compare(u('assert foo\n')) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/__init__.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_fast_parser.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_fast_parser.py deleted file mode 100644 index 46cdf5c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_fast_parser.py +++ /dev/null @@ -1,496 +0,0 @@ -from textwrap import dedent - -import pytest - -import jedi -from jedi._compatibility import u -from jedi import cache -from jedi.parser import load_grammar -from jedi.parser.fast import FastParser -from jedi.parser.utils import save_parser - - -def test_add_to_end(): - """ - fast_parser doesn't parse everything again. It just updates with the - help of caches, this is an example that didn't work. - """ - - a = dedent(""" - class Abc(): - def abc(self): - self.x = 3 - - class Two(Abc): - def h(self): - self - """) # ^ here is the first completion - - b = " def g(self):\n" \ - " self." - assert jedi.Script(a, 8, 12, 'example.py').completions() - assert jedi.Script(a + b, path='example.py').completions() - - a = a[:-1] + '.\n' - assert jedi.Script(a, 8, 13, 'example.py').completions() - assert jedi.Script(a + b, path='example.py').completions() - - -def test_class_in_docstr(): - """ - Regression test for a problem with classes in docstrings. - """ - a = '"\nclasses\n"' - jedi.Script(a, 1, 0)._get_module() - - b = a + '\nimport os' - assert jedi.Script(b, 4, 8).goto_assignments() - - -def test_carriage_return_splitting(): - source = u(dedent(''' - - - - "string" - - class Foo(): - pass - ''')) - source = source.replace('\n', '\r\n') - p = FastParser(load_grammar(), source) - assert [n.value for lst in p.module.names_dict.values() for n in lst] == ['Foo'] - - -def test_split_parts(): - cache.parser_cache.pop(None, None) - - def splits(source): - class Mock(FastParser): - def __init__(self, *args): - self.number_of_splits = 0 - - return tuple(FastParser._split_parts(Mock(None, None), source)) - - def test(*parts): - assert splits(''.join(parts)) == parts - - test('a\n\n', 'def b(): pass\n', 'c\n') - test('a\n', 'def b():\n pass\n', 'c\n') - - test('from x\\\n') - test('a\n\\\n') - - -def check_fp(src, number_parsers_used, number_of_splits=None, number_of_misses=0): - if number_of_splits is None: - number_of_splits = number_parsers_used - - p = FastParser(load_grammar(), u(src)) - save_parser(None, p, pickling=False) - - assert src == p.module.get_code() - assert p.number_of_splits == number_of_splits - assert p.number_parsers_used == number_parsers_used - assert p.number_of_misses == number_of_misses - return p.module - - -def test_change_and_undo(): - # Empty the parser cache for the path None. - cache.parser_cache.pop(None, None) - func_before = 'def func():\n pass\n' - # Parse the function and a. - check_fp(func_before + 'a', 2) - # Parse just b. - check_fp(func_before + 'b', 1, 2) - # b has changed to a again, so parse that. - check_fp(func_before + 'a', 1, 2) - # Same as before no parsers should be used. - check_fp(func_before + 'a', 0, 2) - - # Getting rid of an old parser: Still no parsers used. - check_fp('a', 0, 1) - # Now the file has completely change and we need to parse. - check_fp('b', 1, 1) - # And again. - check_fp('a', 1, 1) - - -def test_positions(): - # Empty the parser cache for the path None. - cache.parser_cache.pop(None, None) - - func_before = 'class A:\n pass\n' - m = check_fp(func_before + 'a', 2) - assert m.start_pos == (1, 0) - assert m.end_pos == (3, 1) - - m = check_fp('a', 0, 1) - assert m.start_pos == (1, 0) - assert m.end_pos == (1, 1) - - -def test_if(): - src = dedent('''\ - def func(): - x = 3 - if x: - def y(): - return x - return y() - - func() - ''') - - # Two parsers needed, one for pass and one for the function. - check_fp(src, 2) - assert [d.name for d in jedi.Script(src, 8, 6).goto_definitions()] == ['int'] - - -def test_if_simple(): - src = dedent('''\ - if 1: - a = 3 - ''') - check_fp(src + 'a', 1) - check_fp(src + "else:\n a = ''\na", 1) - - -def test_for(): - src = dedent("""\ - for a in [1,2]: - a - - for a1 in 1,"": - a1 - """) - check_fp(src, 1) - - -def test_class_with_class_var(): - src = dedent("""\ - class SuperClass: - class_super = 3 - def __init__(self): - self.foo = 4 - pass - """) - check_fp(src, 3) - - -def test_func_with_if(): - src = dedent("""\ - def recursion(a): - if foo: - return recursion(a) - else: - if bar: - return inexistent - else: - return a - """) - check_fp(src, 1) - - -def test_decorator(): - src = dedent("""\ - class Decorator(): - @memoize - def dec(self, a): - return a - """) - check_fp(src, 2) - - -def test_nested_funcs(): - src = dedent("""\ - def memoize(func): - def wrapper(*args, **kwargs): - return func(*args, **kwargs) - return wrapper - """) - check_fp(src, 3) - - -def test_class_and_if(): - src = dedent("""\ - class V: - def __init__(self): - pass - - if 1: - c = 3 - - def a_func(): - return 1 - - # COMMENT - a_func()""") - check_fp(src, 5, 5) - assert [d.name for d in jedi.Script(src).goto_definitions()] == ['int'] - - -def test_func_with_for_and_comment(): - # The first newline is important, leave it. It should not trigger another - # parser split. - src = dedent("""\ - - def func(): - pass - - - for a in [1]: - # COMMENT - a""") - check_fp(src, 2) - # We don't need to parse the for loop, but we need to parse the other two, - # because the split is in a different place. - check_fp('a\n' + src, 2, 3) - - -def test_multi_line_params(): - src = dedent("""\ - def x(a, - b): - pass - - foo = 1 - """) - check_fp(src, 2) - - -def test_one_statement_func(): - src = dedent("""\ - first - def func(): a - """) - check_fp(src + 'second', 3) - # Empty the parser cache, because we're not interested in modifications - # here. - cache.parser_cache.pop(None, None) - check_fp(src + 'def second():\n a', 3) - - -def test_class_func_if(): - src = dedent("""\ - class Class: - def func(self): - if 1: - a - else: - b - - pass - """) - check_fp(src, 3) - - -def test_for_on_one_line(): - src = dedent("""\ - foo = 1 - for x in foo: pass - - def hi(): - pass - """) - check_fp(src, 2) - - src = dedent("""\ - def hi(): - for x in foo: pass - pass - - pass - """) - check_fp(src, 2) - - src = dedent("""\ - def hi(): - for x in foo: pass - - def nested(): - pass - """) - check_fp(src, 2) - - -def test_multi_line_for(): - src = dedent("""\ - for x in [1, - 2]: - pass - - pass - """) - check_fp(src, 1) - - -def test_wrong_indentation(): - src = dedent("""\ - def func(): - a - b - a - """) - #check_fp(src, 1) - - src = dedent("""\ - def complex(): - def nested(): - a - b - a - - def other(): - pass - """) - check_fp(src, 3) - - -def test_open_parentheses(): - func = 'def func():\n a' - code = u('isinstance(\n\n' + func) - p = FastParser(load_grammar(), code) - # As you can see, the part that was failing is still there in the get_code - # call. It is not relevant for evaluation, but still available as an - # ErrorNode. - assert p.module.get_code() == code - assert p.number_of_splits == 2 - assert p.number_parsers_used == 2 - save_parser(None, p, pickling=False) - - # Now with a correct parser it should work perfectly well. - check_fp('isinstance()\n' + func, 1, 2) - - -def test_strange_parentheses(): - src = dedent(""" - class X(): - a = (1 - if 1 else 2) - def x(): - pass - """) - check_fp(src, 2) - - -def test_backslash(): - src = dedent(r""" - a = 1\ - if 1 else 2 - def x(): - pass - """) - check_fp(src, 2) - - src = dedent(r""" - def x(): - a = 1\ - if 1 else 2 - def y(): - pass - """) - # The dangling if leads to not splitting where we theoretically could - # split. - check_fp(src, 2) - - src = dedent(r""" - def first(): - if foo \ - and bar \ - or baz: - pass - def second(): - pass - """) - check_fp(src, 2) - - - -def test_fake_parentheses(): - """ - The fast parser splitting counts parentheses, but not as correct tokens. - Therefore parentheses in string tokens are included as well. This needs to - be accounted for. - """ - src = dedent(r""" - def x(): - a = (')' - if 1 else 2) - def y(): - pass - def z(): - pass - """) - check_fp(src, 3, 2, 1) - - -def test_additional_indent(): - source = dedent('''\ - int( - def x(): - pass - ''') - - check_fp(source, 2) - - -def test_incomplete_function(): - source = '''return ImportErr''' - - script = jedi.Script(dedent(source), 1, 3) - assert script.completions() - - -def test_string_literals(): - """Simplified case of jedi-vim#377.""" - source = dedent(""" - x = ur''' - - def foo(): - pass - """) - - script = jedi.Script(dedent(source)) - script._get_module().end_pos == (6, 0) - assert script.completions() - - -def test_decorator_string_issue(): - """ - Test case from #589 - """ - source = dedent('''\ - """ - @""" - def bla(): - pass - - bla.''') - - s = jedi.Script(source) - assert s.completions() - assert s._get_module().get_code() == source - - -def test_round_trip(): - source = dedent(''' - def x(): - """hahaha""" - func''') - - f = FastParser(load_grammar(), u(source)) - assert f.get_parsed_node().get_code() == source - - -@pytest.mark.xfail() -def test_parentheses_in_string(): - code = dedent(''' - def x(): - '(' - - import abc - - abc.''') - check_fp(code, 2, 1, 1) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_get_code.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_get_code.py deleted file mode 100644 index 43202fb..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_get_code.py +++ /dev/null @@ -1,107 +0,0 @@ -import difflib - -import pytest - -from jedi._compatibility import u -from jedi.parser import ParserWithRecovery, load_grammar - -code_basic_features = u(''' -"""A mod docstring""" - -def a_function(a_argument, a_default = "default"): - """A func docstring""" - - a_result = 3 * a_argument - print(a_result) # a comment - b = """ -from -to""" + "huhu" - - - if a_default == "default": - return str(a_result) - else - return None -''') - - -def diff_code_assert(a, b, n=4): - if a != b: - diff = "\n".join(difflib.unified_diff( - a.splitlines(), - b.splitlines(), - n=n, - lineterm="" - )) - assert False, "Code does not match:\n%s\n\ncreated code:\n%s" % ( - diff, - b - ) - pass - - -@pytest.mark.skipif('True', reason='Refactor a few parser things first.') -def test_basic_parsing(): - """Validate the parsing features""" - - prs = ParserWithRecovery(load_grammar(), code_basic_features) - diff_code_assert( - code_basic_features, - prs.module.get_code() - ) - - -def test_operators(): - src = u('5 * 3') - prs = ParserWithRecovery(load_grammar(), src) - diff_code_assert(src, prs.module.get_code()) - - -def test_get_code(): - """Use the same code that the parser also generates, to compare""" - s = u('''"""a docstring""" -class SomeClass(object, mixin): - def __init__(self): - self.xy = 3.0 - """statement docstr""" - def some_method(self): - return 1 - def yield_method(self): - while hasattr(self, 'xy'): - yield True - for x in [1, 2]: - yield x - def empty(self): - pass -class Empty: - pass -class WithDocstring: - """class docstr""" - pass -def method_with_docstring(): - """class docstr""" - pass -''') - assert ParserWithRecovery(load_grammar(), s).module.get_code() == s - - -def test_end_newlines(): - """ - The Python grammar explicitly needs a newline at the end. Jedi though still - wants to be able, to return the exact same code without the additional new - line the parser needs. - """ - def test(source, end_pos): - module = ParserWithRecovery(load_grammar(), u(source)).module - assert module.get_code() == source - assert module.end_pos == end_pos - - test('a', (1, 1)) - test('a\n', (2, 0)) - test('a\nb', (2, 1)) - test('a\n#comment\n', (3, 0)) - test('a\n#comment', (2, 8)) - test('a#comment', (1, 9)) - test('def a():\n pass', (2, 5)) - - test('def a(', (1, 6)) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_param_splitting.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_param_splitting.py deleted file mode 100644 index f97c3dc..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_param_splitting.py +++ /dev/null @@ -1,34 +0,0 @@ -''' -To make the life of any analysis easier, we are generating Param objects -instead of simple parser objects. -''' - -from textwrap import dedent - -from jedi.parser import Parser, load_grammar - - -def assert_params(param_string, **wanted_dct): - source = dedent(''' - def x(%s): - pass - ''') % param_string - - parser = Parser(load_grammar(), dedent(source)) - funcdef = parser.get_parsed_node().subscopes[0] - dct = dict((p.name.value, p.default and p.default.get_code()) - for p in funcdef.params) - assert dct == wanted_dct - assert parser.get_parsed_node().get_code() == source - - -def test_split_params_with_separation_star(): - assert_params(u'x, y=1, *, z=3', x=None, y='1', z='3') - assert_params(u'*, x', x=None) - assert_params(u'*') - - -def test_split_params_with_stars(): - assert_params(u'x, *args', x=None, args=None) - assert_params(u'**kwargs', kwargs=None) - assert_params(u'*args, **kwargs', args=None, kwargs=None) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_parser.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_parser.py deleted file mode 100644 index 0ec75d0..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_parser.py +++ /dev/null @@ -1,238 +0,0 @@ -# -*- coding: utf-8 -*- -import sys -from textwrap import dedent - -import jedi -from jedi._compatibility import u, is_py3 -from jedi.parser import ParserWithRecovery, load_grammar -from jedi.parser import tree as pt - - -def test_user_statement_on_import(): - """github #285""" - s = u("from datetime import (\n" - " time)") - - for pos in [(2, 1), (2, 4)]: - p = ParserWithRecovery(load_grammar(), s) - stmt = p.module.get_statement_for_position(pos) - assert isinstance(stmt, pt.Import) - assert [str(n) for n in stmt.get_defined_names()] == ['time'] - - -class TestCallAndName(): - def get_call(self, source): - # Get the simple_stmt and then the first one. - simple_stmt = ParserWithRecovery(load_grammar(), u(source)).module.children[0] - return simple_stmt.children[0] - - def test_name_and_call_positions(self): - name = self.get_call('name\nsomething_else') - assert str(name) == 'name' - assert name.start_pos == (1, 0) - assert name.end_pos == (1, 4) - - leaf = self.get_call('1.0\n') - assert leaf.value == '1.0' - assert leaf.eval() == 1.0 - assert leaf.start_pos == (1, 0) - assert leaf.end_pos == (1, 3) - - def test_call_type(self): - call = self.get_call('hello') - assert isinstance(call, pt.Name) - - def test_literal_type(self): - literal = self.get_call('1.0') - assert isinstance(literal, pt.Literal) - assert type(literal.eval()) == float - - literal = self.get_call('1') - assert isinstance(literal, pt.Literal) - assert type(literal.eval()) == int - - literal = self.get_call('"hello"') - assert isinstance(literal, pt.Literal) - assert literal.eval() == 'hello' - - -class TestSubscopes(): - def get_sub(self, source): - return ParserWithRecovery(load_grammar(), u(source)).module.subscopes[0] - - def test_subscope_names(self): - name = self.get_sub('class Foo: pass').name - assert name.start_pos == (1, len('class ')) - assert name.end_pos == (1, len('class Foo')) - assert str(name) == 'Foo' - - name = self.get_sub('def foo(): pass').name - assert name.start_pos == (1, len('def ')) - assert name.end_pos == (1, len('def foo')) - assert str(name) == 'foo' - - -class TestImports(): - def get_import(self, source): - return ParserWithRecovery(load_grammar(), source).module.imports[0] - - def test_import_names(self): - imp = self.get_import(u('import math\n')) - names = imp.get_defined_names() - assert len(names) == 1 - assert str(names[0]) == 'math' - assert names[0].start_pos == (1, len('import ')) - assert names[0].end_pos == (1, len('import math')) - - assert imp.start_pos == (1, 0) - assert imp.end_pos == (1, len('import math')) - - -def test_module(): - module = ParserWithRecovery(load_grammar(), u('asdf'), 'example.py').module - name = module.name - assert str(name) == 'example' - assert name.start_pos == (1, 0) - assert name.end_pos == (1, 7) - - module = ParserWithRecovery(load_grammar(), u('asdf')).module - name = module.name - assert str(name) == '' - assert name.start_pos == (1, 0) - assert name.end_pos == (1, 0) - - -def test_end_pos(): - s = u(dedent(''' - x = ['a', 'b', 'c'] - def func(): - y = None - ''')) - parser = ParserWithRecovery(load_grammar(), s) - scope = parser.module.subscopes[0] - assert scope.start_pos == (3, 0) - assert scope.end_pos == (5, 0) - - -def test_carriage_return_statements(): - source = u(dedent(''' - foo = 'ns1!' - - # this is a namespace package - ''')) - source = source.replace('\n', '\r\n') - stmt = ParserWithRecovery(load_grammar(), source).module.statements[0] - assert '#' not in stmt.get_code() - - -def test_incomplete_list_comprehension(): - """ Shouldn't raise an error, same bug as #418. """ - # With the old parser this actually returned a statement. With the new - # parser only valid statements generate one. - assert ParserWithRecovery(load_grammar(), u('(1 for def')).module.statements == [] - - -def test_hex_values_in_docstring(): - source = r''' - def foo(object): - """ - \xff - """ - return 1 - ''' - - doc = ParserWithRecovery(load_grammar(), dedent(u(source))).module.subscopes[0].raw_doc - if is_py3: - assert doc == '\xff' - else: - assert doc == u('�') - - -def test_error_correction_with(): - source = """ - with open() as f: - try: - f.""" - comps = jedi.Script(source).completions() - assert len(comps) > 30 - # `open` completions have a closed attribute. - assert [1 for c in comps if c.name == 'closed'] - - -def test_newline_positions(): - endmarker = ParserWithRecovery(load_grammar(), u('a\n')).module.children[-1] - assert endmarker.end_pos == (2, 0) - new_line = endmarker.get_previous_leaf() - assert new_line.start_pos == (1, 1) - assert new_line.end_pos == (2, 0) - - -def test_end_pos_error_correction(): - """ - Source code without ending newline are given one, because the Python - grammar needs it. However, they are removed again. We still want the right - end_pos, even if something breaks in the parser (error correction). - """ - s = u('def x():\n .') - m = ParserWithRecovery(load_grammar(), s).module - func = m.children[0] - assert func.type == 'funcdef' - # This is not exactly correct, but ok, because it doesn't make a difference - # at all. We just want to make sure that the module end_pos is correct! - assert func.end_pos == (3, 0) - assert m.end_pos == (2, 2) - - -def test_param_splitting(): - """ - Jedi splits parameters into params, this is not what the grammar does, - but Jedi does this to simplify argument parsing. - """ - def check(src, result): - # Python 2 tuple params should be ignored for now. - grammar = load_grammar('%s.%s' % sys.version_info[:2]) - m = ParserWithRecovery(grammar, u(src)).module - if is_py3: - assert not m.subscopes - else: - # We don't want b and c to be a part of the param enumeration. Just - # ignore them, because it's not what we want to support in the - # future. - assert [str(param.name) for param in m.subscopes[0].params] == result - - check('def x(a, (b, c)):\n pass', ['a']) - check('def x((b, c)):\n pass', []) - - -def test_unicode_string(): - s = pt.String(None, u('bö'), (0, 0)) - assert repr(s) # Should not raise an Error! - - -def test_backslash_dos_style(): - grammar = load_grammar() - m = ParserWithRecovery(grammar, u('\\\r\n')).module - assert m - - -def test_started_lambda_stmt(): - p = ParserWithRecovery(load_grammar(), u'lambda a, b: a i') - assert p.get_parsed_node().children[0].type == 'error_node' - - -def test_python2_octal(): - parser = ParserWithRecovery(load_grammar(), u'0660') - first = parser.get_parsed_node().children[0] - if is_py3: - assert first.type == 'error_node' - else: - assert first.children[0].type == 'number' - - -def test_python3_octal(): - parser = ParserWithRecovery(load_grammar(), u'0o660') - module = parser.get_parsed_node() - if is_py3: - assert module.children[0].children[0].type == 'number' - else: - assert module.children[0].type == 'error_node' diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_parser_tree.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_parser_tree.py deleted file mode 100644 index 57ea825..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_parser_tree.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 # This file contains Unicode characters. - -from textwrap import dedent - -import pytest - -from jedi._compatibility import u, unicode -from jedi.parser import ParserWithRecovery, load_grammar -from jedi.parser import tree as pt - - -class TestsFunctionAndLambdaParsing(object): - - FIXTURES = [ - ('def my_function(x, y, z) -> str:\n return x + y * z\n', { - 'name': 'my_function', - 'call_sig': 'my_function(x, y, z)', - 'params': ['x', 'y', 'z'], - 'annotation': "str", - }), - ('lambda x, y, z: x + y * z\n', { - 'name': '', - 'call_sig': '(x, y, z)', - 'params': ['x', 'y', 'z'], - }), - ] - - @pytest.fixture(params=FIXTURES) - def node(self, request): - parsed = ParserWithRecovery(load_grammar(), dedent(u(request.param[0]))) - request.keywords['expected'] = request.param[1] - return parsed.module.subscopes[0] - - @pytest.fixture() - def expected(self, request, node): - return request.keywords['expected'] - - def test_name(self, node, expected): - assert isinstance(node.name, pt.Name) - assert unicode(node.name) == u(expected['name']) - - def test_params(self, node, expected): - assert isinstance(node.params, list) - assert all(isinstance(x, pt.Param) for x in node.params) - assert [unicode(x.name) for x in node.params] == [u(x) for x in expected['params']] - - def test_is_generator(self, node, expected): - assert node.is_generator() is expected.get('is_generator', False) - - def test_yields(self, node, expected): - # TODO: There's a comment in the code noting that the current implementation is incorrect. This returns an - # empty list at the moment (not e.g. False). - if expected.get('yields', False): - assert node.yields - else: - assert not node.yields - - def test_annotation(self, node, expected): - expected_annotation = expected.get('annotation', None) - if expected_annotation is None: - assert node.annotation() is None - else: - assert node.annotation().value == expected_annotation - - def test_get_call_signature(self, node, expected): - assert node.get_call_signature() == expected['call_sig'] - - def test_doc(self, node, expected): - assert node.doc == expected.get('doc') or (expected['call_sig'] + '\n\n') diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_pgen2.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_pgen2.py deleted file mode 100644 index 46f4938..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_pgen2.py +++ /dev/null @@ -1,279 +0,0 @@ -"""Test suite for 2to3's parser and grammar files. - -This is the place to add tests for changes to 2to3's grammar, such as those -merging the grammars for Python 2 and 3. In addition to specific tests for -parts of the grammar we've changed, we also make sure we can parse the -test_grammar.py files from both Python 2 and Python 3. -""" - -from textwrap import dedent - - -from jedi._compatibility import unicode, is_py3 -from jedi.parser import Parser, load_grammar, ParseError -import pytest - -from test.helpers import TestCase - - -def parse(code, version='3.4'): - code = dedent(code) + "\n\n" - grammar = load_grammar(version=version) - return Parser(grammar, unicode(code), 'file_input').get_parsed_node() - - -class TestDriver(TestCase): - - def test_formfeed(self): - s = """print 1\n\x0Cprint 2\n""" - t = parse(s, '2.7') - self.assertEqual(t.children[0].children[0].type, 'print_stmt') - self.assertEqual(t.children[1].children[0].type, 'print_stmt') - s = """1\n\x0C\x0C2\n""" - t = parse(s, '2.7') - - -class GrammarTest(TestCase): - def invalid_syntax(self, code, **kwargs): - try: - parse(code, **kwargs) - except ParseError: - pass - else: - raise AssertionError("Syntax shouldn't have been valid") - - -class TestMatrixMultiplication(GrammarTest): - @pytest.mark.skipif('sys.version_info[:2] < (3, 5)') - def test_matrix_multiplication_operator(self): - parse("a @ b", "3.5") - parse("a @= b", "3.5") - - -class TestYieldFrom(GrammarTest): - def test_yield_from(self): - parse("yield from x") - parse("(yield from x) + y") - self.invalid_syntax("yield from") - - -class TestAsyncAwait(GrammarTest): - @pytest.mark.skipif('sys.version_info[:2] < (3, 5)') - def test_await_expr(self): - parse("""async def foo(): - await x - """, "3.5") - - parse("""async def foo(): - - def foo(): pass - - def foo(): pass - - await x - """, "3.5") - - parse("""async def foo(): return await a""", "3.5") - - parse("""def foo(): - def foo(): pass - async def foo(): await x - """, "3.5") - - @pytest.mark.skipif('sys.version_info[:2] < (3, 5)') - @pytest.mark.xfail(reason="acting like python 3.7") - def test_await_expr_invalid(self): - self.invalid_syntax("await x", version="3.5") - self.invalid_syntax("""def foo(): - await x""", version="3.5") - - self.invalid_syntax("""def foo(): - def foo(): pass - async def foo(): pass - await x - """, version="3.5") - - @pytest.mark.skipif('sys.version_info[:2] < (3, 5)') - @pytest.mark.xfail(reason="acting like python 3.7") - def test_async_var(self): - parse("""async = 1""", "3.5") - parse("""await = 1""", "3.5") - parse("""def async(): pass""", "3.5") - - @pytest.mark.skipif('sys.version_info[:2] < (3, 5)') - def test_async_for(self): - parse("""async def foo(): - async for a in b: pass""", "3.5") - - @pytest.mark.skipif('sys.version_info[:2] < (3, 5)') - @pytest.mark.xfail(reason="acting like python 3.7") - def test_async_for_invalid(self): - self.invalid_syntax("""def foo(): - async for a in b: pass""", version="3.5") - - @pytest.mark.skipif('sys.version_info[:2] < (3, 5)') - def test_async_with(self): - parse("""async def foo(): - async with a: pass""", "3.5") - - @pytest.mark.skipif('sys.version_info[:2] < (3, 5)') - @pytest.mark.xfail(reason="acting like python 3.7") - def test_async_with_invalid(self): - self.invalid_syntax("""def foo(): - async with a: pass""", version="3.5") - - -class TestRaiseChanges(GrammarTest): - def test_2x_style_1(self): - parse("raise") - - def test_2x_style_2(self): - parse("raise E, V", version='2.7') - - def test_2x_style_3(self): - parse("raise E, V, T", version='2.7') - - def test_2x_style_invalid_1(self): - self.invalid_syntax("raise E, V, T, Z", version='2.7') - - def test_3x_style(self): - parse("raise E1 from E2") - - def test_3x_style_invalid_1(self): - self.invalid_syntax("raise E, V from E1") - - def test_3x_style_invalid_2(self): - self.invalid_syntax("raise E from E1, E2") - - def test_3x_style_invalid_3(self): - self.invalid_syntax("raise from E1, E2") - - def test_3x_style_invalid_4(self): - self.invalid_syntax("raise E from") - - -# Adapted from Python 3's Lib/test/test_grammar.py:GrammarTests.testFuncdef -class TestFunctionAnnotations(GrammarTest): - def test_1(self): - parse("""def f(x) -> list: pass""") - - def test_2(self): - parse("""def f(x:int): pass""") - - def test_3(self): - parse("""def f(*x:str): pass""") - - def test_4(self): - parse("""def f(**x:float): pass""") - - def test_5(self): - parse("""def f(x, y:1+2): pass""") - - def test_6(self): - self.invalid_syntax("""def f(a, (b:1, c:2, d)): pass""") - - def test_7(self): - self.invalid_syntax("""def f(a, (b:1, c:2, d), e:3=4, f=5, *g:6): pass""") - - def test_8(self): - s = """def f(a, (b:1, c:2, d), e:3=4, f=5, - *g:6, h:7, i=8, j:9=10, **k:11) -> 12: pass""" - self.invalid_syntax(s) - - -class TestExcept(GrammarTest): - def test_new(self): - s = """ - try: - x - except E as N: - y""" - parse(s) - - def test_old(self): - s = """ - try: - x - except E, N: - y""" - parse(s, version='2.7') - - -# Adapted from Python 3's Lib/test/test_grammar.py:GrammarTests.testAtoms -class TestSetLiteral(GrammarTest): - def test_1(self): - parse("""x = {'one'}""") - - def test_2(self): - parse("""x = {'one', 1,}""") - - def test_3(self): - parse("""x = {'one', 'two', 'three'}""") - - def test_4(self): - parse("""x = {2, 3, 4,}""") - - -class TestNumericLiterals(GrammarTest): - def test_new_octal_notation(self): - code = """0o7777777777777""" - if is_py3: - parse(code) - else: - self.invalid_syntax(code) - self.invalid_syntax("""0o7324528887""") - - def test_new_binary_notation(self): - parse("""0b101010""") - self.invalid_syntax("""0b0101021""") - - -class TestClassDef(GrammarTest): - def test_new_syntax(self): - parse("class B(t=7): pass") - parse("class B(t, *args): pass") - parse("class B(t, **kwargs): pass") - parse("class B(t, *args, **kwargs): pass") - parse("class B(t, y=9, *args, **kwargs): pass") - - -class TestParserIdempotency(TestCase): - """A cut-down version of pytree_idempotency.py.""" - def test_extended_unpacking(self): - parse("a, *b, c = x\n") - parse("[*a, b] = x\n") - parse("(z, *y, w) = m\n") - parse("for *z, m in d: pass\n") - - -class TestLiterals(GrammarTest): - # It's not possible to get the same result when using \xaa in Python 2/3, - # because it's treated differently. - @pytest.mark.skipif('sys.version_info[0] < 3') - def test_multiline_bytes_literals(self): - s = """ - md5test(b"\xaa" * 80, - (b"Test Using Larger Than Block-Size Key " - b"and Larger Than One Block-Size Data"), - "6f630fad67cda0ee1fb1f562db3aa53e") - """ - parse(s) - - def test_multiline_bytes_tripquote_literals(self): - s = ''' - b""" - - - """ - ''' - parse(s) - - @pytest.mark.skipif('sys.version_info[0] < 3') - def test_multiline_str_literals(self): - s = """ - md5test("\xaa" * 80, - ("Test Using Larger Than Block-Size Key " - "and Larger Than One Block-Size Data"), - "6f630fad67cda0ee1fb1f562db3aa53e") - """ - parse(s) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_tokenize.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_tokenize.py deleted file mode 100644 index e53f85a..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_tokenize.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 # This file contains Unicode characters. - -from io import StringIO -from textwrap import dedent - -import pytest - -from jedi._compatibility import u, is_py3 -from jedi.parser.token import NAME, OP, NEWLINE, STRING, INDENT -from jedi.parser import ParserWithRecovery, load_grammar, tokenize - - -from ..helpers import unittest - - -class TokenTest(unittest.TestCase): - def test_end_pos_one_line(self): - parsed = ParserWithRecovery(load_grammar(), dedent(u(''' - def testit(): - a = "huhu" - '''))) - tok = parsed.module.subscopes[0].statements[0].children[2] - assert tok.end_pos == (3, 14) - - def test_end_pos_multi_line(self): - parsed = ParserWithRecovery(load_grammar(), dedent(u(''' - def testit(): - a = """huhu - asdfasdf""" + "h" - '''))) - tok = parsed.module.subscopes[0].statements[0].children[2].children[0] - assert tok.end_pos == (4, 11) - - def test_simple_no_whitespace(self): - # Test a simple one line string, no preceding whitespace - simple_docstring = u('"""simple one line docstring"""') - simple_docstring_io = StringIO(simple_docstring) - tokens = tokenize.generate_tokens(simple_docstring_io.readline) - token_list = list(tokens) - _, value, _, prefix = token_list[0] - assert prefix == '' - assert value == '"""simple one line docstring"""' - - def test_simple_with_whitespace(self): - # Test a simple one line string with preceding whitespace and newline - simple_docstring = u(' """simple one line docstring""" \r\n') - simple_docstring_io = StringIO(simple_docstring) - tokens = tokenize.generate_tokens(simple_docstring_io.readline) - token_list = list(tokens) - assert token_list[0][0] == INDENT - typ, value, start_pos, prefix = token_list[1] - assert prefix == ' ' - assert value == '"""simple one line docstring"""' - assert typ == STRING - typ, value, start_pos, prefix = token_list[2] - assert prefix == ' ' - assert typ == NEWLINE - - def test_function_whitespace(self): - # Test function definition whitespace identification - fundef = dedent(u(''' - def test_whitespace(*args, **kwargs): - x = 1 - if x > 0: - print(True) - ''')) - fundef_io = StringIO(fundef) - tokens = tokenize.generate_tokens(fundef_io.readline) - token_list = list(tokens) - for _, value, _, prefix in token_list: - if value == 'test_whitespace': - assert prefix == ' ' - if value == '(': - assert prefix == '' - if value == '*': - assert prefix == '' - if value == '**': - assert prefix == ' ' - if value == 'print': - assert prefix == ' ' - if value == 'if': - assert prefix == ' ' - - def test_identifier_contains_unicode(self): - fundef = dedent(u(''' - def 我ã‚φ(): - pass - ''')) - fundef_io = StringIO(fundef) - tokens = tokenize.generate_tokens(fundef_io.readline) - token_list = list(tokens) - unicode_token = token_list[1] - if is_py3: - assert unicode_token[0] == NAME - else: - # Unicode tokens in Python 2 seem to be identified as operators. - # They will be ignored in the parser, that's ok. - assert unicode_token[0] == OP - - def test_quoted_strings(self): - - string_tokens = [ - 'u"test"', - 'u"""test"""', - 'U"""test"""', - "u'''test'''", - "U'''test'''", - ] - - for s in string_tokens: - parsed = ParserWithRecovery(load_grammar(), u('''a = %s\n''' % s)) - simple_stmt = parsed.module.children[0] - expr_stmt = simple_stmt.children[0] - assert len(expr_stmt.children) == 3 - string_tok = expr_stmt.children[2] - assert string_tok.type == 'string' - assert string_tok.value == s - assert string_tok.eval() == 'test' - - -def test_tokenizer_with_string_literal_backslash(): - import jedi - c = jedi.Script("statement = u'foo\\\n'; statement").goto_definitions() - assert c[0]._name.parent.obj == 'foo' - - -def test_ur_literals(): - """ - Decided to parse `u''` literals regardless of Python version. This makes - probably sense: - - - Python 3.2 doesn't support it and is still supported by Jedi, but might - not be. While this is incorrect, it's just incorrect for one "old" and in - the future not very important version. - - All the other Python versions work very well with it. - """ - def check(literal): - io = StringIO(u(literal)) - tokens = tokenize.generate_tokens(io.readline) - token_list = list(tokens) - typ, result_literal, _, _ = token_list[0] - assert typ == STRING - assert result_literal == literal - - check('u""') - check('ur""') - check('Ur""') - check('UR""') - check('bR""') - # Must be in the right order. - with pytest.raises(AssertionError): - check('Rb""') diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_user_context.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_user_context.py deleted file mode 100644 index 01aff79..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_parser/test_user_context.py +++ /dev/null @@ -1,6 +0,0 @@ -import jedi - - -def test_form_feed_characters(): - s = "\f\nclass Test(object):\n pass" - jedi.Script(s, line=2, column=18).call_signatures() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_regression.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_regression.py deleted file mode 100644 index abb1072..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_regression.py +++ /dev/null @@ -1,206 +0,0 @@ -""" -Unit tests to avoid errors of the past. These are also all tests that didn't -found a good place in any other testing module. -""" - -import os -import sys -import textwrap - -from .helpers import TestCase, cwd_at - -import pytest -import jedi -from jedi._compatibility import u -from jedi import Script -from jedi import api -from jedi import common -from jedi.evaluate import imports -from jedi.parser import ParserWithRecovery, load_grammar - -#jedi.set_debug_function() - - -class TestRegression(TestCase): - def test_goto_definition_cursor(self): - - s = ("class A():\n" - " def _something(self):\n" - " return\n" - " def different_line(self,\n" - " b):\n" - " return\n" - "A._something\n" - "A.different_line" - ) - - in_name = 2, 9 - under_score = 2, 8 - cls = 2, 7 - should1 = 7, 10 - diff_line = 4, 10 - should2 = 8, 10 - - def get_def(pos): - return [d.description for d in Script(s, *pos).goto_definitions()] - - in_name = get_def(in_name) - under_score = get_def(under_score) - should1 = get_def(should1) - should2 = get_def(should2) - - diff_line = get_def(diff_line) - - assert should1 == in_name - assert should1 == under_score - - assert should2 == diff_line - - assert get_def(cls) == [] - - @pytest.mark.skipif('True', reason='Skip for now, test case is not really supported.') - @cwd_at('jedi') - def test_add_dynamic_mods(self): - fname = '__main__.py' - api.settings.additional_dynamic_modules = [fname] - # Fictional module that defines a function. - src1 = "def r(a): return a" - # Other fictional modules in another place in the fs. - src2 = 'from .. import setup; setup.r(1)' - script = Script(src1, path='../setup.py') - imports.load_module(script._evaluator, os.path.abspath(fname), src2) - result = script.goto_definitions() - assert len(result) == 1 - assert result[0].description == 'class int' - - def test_os_nowait(self): - """ github issue #45 """ - s = Script("import os; os.P_").completions() - assert 'P_NOWAIT' in [i.name for i in s] - - def test_points_in_completion(self): - """At some point, points were inserted into the completions, this - caused problems, sometimes. - """ - c = Script("if IndentationErr").completions() - assert c[0].name == 'IndentationError' - self.assertEqual(c[0].complete, 'or') - - def test_no_statement_parent(self): - source = textwrap.dedent(""" - def f(): - pass - - class C: - pass - - variable = f if random.choice([0, 1]) else C""") - defs = Script(source, column=3).goto_definitions() - defs = sorted(defs, key=lambda d: d.line) - self.assertEqual([d.description for d in defs], - ['def f', 'class C']) - - def test_end_pos_line(self): - # jedi issue #150 - s = u("x()\nx( )\nx( )\nx ( )") - parser = ParserWithRecovery(load_grammar(), s) - for i, s in enumerate(parser.module.statements): - assert s.end_pos == (i + 1, i + 3) - - def check_definition_by_marker(self, source, after_cursor, names): - r""" - Find definitions specified by `after_cursor` and check what found - - For example, for the following configuration, you can pass - ``after_cursor = 'y)'``.:: - - function( - x, y) - \ - `- You want cursor to be here - """ - source = textwrap.dedent(source) - for (i, line) in enumerate(source.splitlines()): - if after_cursor in line: - break - column = len(line) - len(after_cursor) - defs = Script(source, i + 1, column).goto_definitions() - print(defs) - assert [d.name for d in defs] == names - - def test_backslash_continuation(self): - """ - Test that ModuleWithCursor.get_path_until_cursor handles continuation - """ - self.check_definition_by_marker(r""" - x = 0 - a = \ - [1, 2, 3, 4, 5, 6, 7, 8, 9, x] # <-- here - """, '] # <-- here', ['int']) - - # completion in whitespace - s = 'asdfxyxxxxxxxx sds\\\n hello' - assert Script(s, 2, 4).goto_assignments() == [] - - def test_backslash_continuation_and_bracket(self): - self.check_definition_by_marker(r""" - x = 0 - a = \ - [1, 2, 3, 4, 5, 6, 7, 8, 9, (x)] # <-- here - """, '(x)] # <-- here', ['int']) - - def test_generator(self): - # Did have some problems with the usage of generator completions this - # way. - s = "def abc():\n" \ - " yield 1\n" \ - "abc()." - assert Script(s).completions() - - def test_fake_subnodes(self): - """ - Test the number of subnodes of a fake object. - - There was a bug where the number of child nodes would grow on every - call to :func:``jedi.evaluate.compiled.fake.get_faked``. - - See Github PR#649 and isseu #591. - """ - def get_str_completion(values): - for c in values: - if c.name == 'str': - return c - limit = None - for i in range(2): - completions = Script('').completions() - c = get_str_completion(completions) - n = len(c._definition.subscopes[0].children[-1].children) - if i == 0: - limit = n - else: - assert n == limit - - def test_source_to_unicode_unicode_text(self): - source = ( - b"# vim: fileencoding=utf-8\n" - b"# \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\n" - ) - actual = common.source_to_unicode(source) - expected = source.decode('utf-8') - assert actual == expected - - -def test_loading_unicode_files_with_bad_global_charset(monkeypatch, tmpdir): - dirname = str(tmpdir.mkdir('jedi-test')) - filename1 = os.path.join(dirname, 'test1.py') - filename2 = os.path.join(dirname, 'test2.py') - if sys.version_info < (3, 0): - data = "# coding: latin-1\nfoo = 'm\xf6p'\n" - else: - data = "# coding: latin-1\nfoo = 'm\xf6p'\n".encode("latin-1") - - with open(filename1, "wb") as f: - f.write(data) - s = Script("from test1 import foo\nfoo.", - line=2, column=4, path=filename2) - s.completions() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_speed.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_speed.py deleted file mode 100644 index 4ea1656..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_speed.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Speed tests of Jedi. To prove that certain things don't take longer than they -should. -""" - -import time -import functools - -from .helpers import TestCase, cwd_at -import jedi - -class TestSpeed(TestCase): - def _check_speed(time_per_run, number=4, run_warm=True): - """ Speed checks should typically be very tolerant. Some machines are - faster than others, but the tests should still pass. These tests are - here to assure that certain effects that kill jedi performance are not - reintroduced to Jedi.""" - def decorated(func): - @functools.wraps(func) - def wrapper(self): - if run_warm: - func(self) - first = time.time() - for i in range(number): - func(self) - single_time = (time.time() - first) / number - print('\nspeed', func, single_time) - assert single_time < time_per_run - return wrapper - return decorated - - @_check_speed(0.2) - def test_os_path_join(self): - s = "from posixpath import join; join('', '')." - assert len(jedi.Script(s).completions()) > 10 # is a str completion - - @_check_speed(0.15) - def test_scipy_speed(self): - s = 'import scipy.weave; scipy.weave.inline(' - script = jedi.Script(s, 1, len(s), '') - script.call_signatures() - #print(jedi.imports.imports_processed) - - @_check_speed(0.8) - @cwd_at('test') - def test_precedence_slowdown(self): - """ - Precedence calculation can slow down things significantly in edge - cases. Having strange recursion structures increases the problem. - """ - with open('speed/precedence.py') as f: - line = len(f.read().splitlines()) - assert jedi.Script(line=line, path='speed/precedence.py').goto_definitions() diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_utils.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_utils.py deleted file mode 100644 index 2eb6e8c..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_utils.py +++ /dev/null @@ -1,111 +0,0 @@ -try: - import readline -except ImportError: - readline = False - -from jedi import utils - -from .helpers import unittest, cwd_at - - -@unittest.skipIf(not readline, "readline not found") -class TestSetupReadline(unittest.TestCase): - class NameSpace(object): - pass - - def __init__(self, *args, **kwargs): - super(type(self), self).__init__(*args, **kwargs) - - self.namespace = self.NameSpace() - utils.setup_readline(self.namespace) - - def completions(self, text): - completer = readline.get_completer() - i = 0 - completions = [] - while True: - completion = completer(text, i) - if completion is None: - break - completions.append(completion) - i += 1 - return completions - - def test_simple(self): - assert self.completions('list') == ['list'] - assert self.completions('importerror') == ['ImportError'] - s = "print(BaseE" - assert self.completions(s) == [s + 'xception'] - - def test_nested(self): - assert self.completions('list.Insert') == ['list.insert'] - assert self.completions('list().Insert') == ['list().insert'] - - def test_magic_methods(self): - assert self.completions('list.__getitem__') == ['list.__getitem__'] - assert self.completions('list().__getitem__') == ['list().__getitem__'] - - def test_modules(self): - import sys - import os - self.namespace.sys = sys - self.namespace.os = os - - try: - assert self.completions('os.path.join') == ['os.path.join'] - string = 'os.path.join("a").upper' - assert self.completions(string) == [string] - - c = set(['os.' + d for d in dir(os) if d.startswith('ch')]) - assert set(self.completions('os.ch')) == set(c) - finally: - del self.namespace.sys - del self.namespace.os - - def test_calls(self): - s = 'str(bytes' - assert self.completions(s) == [s, 'str(BytesWarning'] - - def test_import(self): - s = 'from os.path import a' - assert set(self.completions(s)) == set([s + 'ltsep', s + 'bspath']) - assert self.completions('import keyword') == ['import keyword'] - - import os - s = 'from os import ' - goal = set([s + el for el in dir(os)]) - # There are minor differences, e.g. the dir doesn't include deleted - # items as well as items that are not only available on linux. - assert len(set(self.completions(s)).symmetric_difference(goal)) < 20 - - @cwd_at('test') - def test_local_import(self): - s = 'import test_utils' - assert self.completions(s) == [s] - - def test_preexisting_values(self): - self.namespace.a = range(10) - assert set(self.completions('a.')) == set(['a.' + n for n in dir(range(1))]) - del self.namespace.a - - def test_colorama(self): - """ - Only test it if colorama library is available. - - This module is being tested because it uses ``setattr`` at some point, - which Jedi doesn't understand, but it should still work in the REPL. - """ - try: - # if colorama is installed - import colorama - except ImportError: - pass - else: - self.namespace.colorama = colorama - assert self.completions('colorama') - assert self.completions('colorama.Fore.BLACK') == ['colorama.Fore.BLACK'] - del self.namespace.colorama - - -def test_version_info(): - assert utils.version_info()[:2] > (0, 7) diff --git a/vim-plugins/bundle/jedi-vim/jedi/test/test_windows.py b/vim-plugins/bundle/jedi-vim/jedi/test/test_windows.py deleted file mode 100644 index e5d8cd0..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/test/test_windows.py +++ /dev/null @@ -1,8 +0,0 @@ -import jedi - -def test_path_issues(): - """ - See pull request #684 for details. - """ - source = '''from datetime import ''' - assert jedi.Script(source).completions() diff --git a/vim-plugins/bundle/jedi-vim/jedi/tox.ini b/vim-plugins/bundle/jedi-vim/jedi/tox.ini deleted file mode 100644 index 97b77a1..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi/tox.ini +++ /dev/null @@ -1,47 +0,0 @@ -[tox] -envlist = py26, py27, py33, py34, py35 -[testenv] -deps = - pytest>=2.3.5 - pytest-cache -# docopt for sith doctests - docopt -# coloroma for colored debug output - colorama -setenv = -# https://github.com/tomchristie/django-rest-framework/issues/1957 -# tox corrupts __pycache__, solution from here: - PYTHONDONTWRITEBYTECODE=1 -commands = - py.test {posargs:jedi test} -[testenv:py26] -deps = - unittest2 - {[testenv]deps} -[testenv:py27] -deps = -# for testing the typing module - typing - {[testenv]deps} -[testenv:py33] -deps = - typing - {[testenv]deps} -[testenv:py34] -deps = - typing - {[testenv]deps} -[testenv:py35] -deps = - {[testenv]deps} -[testenv:cov] -deps = - coverage - {[testenv]deps} -commands = - coverage run --source jedi -m py.test - coverage report -[testenv:sith] -commands = - {envpython} -c "import os; a='{envtmpdir}'; os.path.exists(a) or os.makedirs(a)" - {envpython} sith.py --record {envtmpdir}/record.json random {posargs:jedi} diff --git a/vim-plugins/bundle/jedi-vim/jedi_vim.py b/vim-plugins/bundle/jedi-vim/jedi_vim.py deleted file mode 100644 index 5ddd80a..0000000 --- a/vim-plugins/bundle/jedi-vim/jedi_vim.py +++ /dev/null @@ -1,723 +0,0 @@ -# -*- coding: utf-8 -*- -""" -The Python parts of the Jedi library for VIM. It is mostly about communicating -with VIM. -""" - -import traceback # for exception output -import re -import os -import sys -from shlex import split as shsplit -from contextlib import contextmanager -try: - from itertools import zip_longest -except ImportError: - from itertools import izip_longest as zip_longest # Python 2 - -import vim - -is_py3 = sys.version_info[0] >= 3 -if is_py3: - ELLIPSIS = "…" - unicode = str -else: - ELLIPSIS = u"…" - - -class PythonToVimStr(unicode): - """ Vim has a different string implementation of single quotes """ - __slots__ = [] - - def __new__(cls, obj, encoding='UTF-8'): - if not (is_py3 or isinstance(obj, unicode)): - obj = unicode.__new__(cls, obj, encoding) - - # Vim cannot deal with zero bytes: - obj = obj.replace('\0', '\\0') - return unicode.__new__(cls, obj) - - def __repr__(self): - # this is totally stupid and makes no sense but vim/python unicode - # support is pretty bad. don't ask how I came up with this... It just - # works... - # It seems to be related to that bug: http://bugs.python.org/issue5876 - if unicode is str: - s = self - else: - s = self.encode('UTF-8') - return '"%s"' % s.replace('\\', '\\\\').replace('"', r'\"') - - -class VimError(Exception): - def __init__(self, message, throwpoint, executing): - super(type(self), self).__init__(message) - self.message = message - self.throwpoint = throwpoint - self.executing = executing - - def __str__(self): - return self.message + '; created by: ' + repr(self.executing) - - -def _catch_exception(string, is_eval): - """ - Interface between vim and python calls back to it. - Necessary, because the exact error message is not given by `vim.error`. - """ - result = vim.eval('jedi#_vim_exceptions({0}, {1})'.format( - repr(PythonToVimStr(string, 'UTF-8')), int(is_eval))) - if 'exception' in result: - raise VimError(result['exception'], result['throwpoint'], string) - return result['result'] - - -def vim_command(string): - _catch_exception(string, False) - - -def vim_eval(string): - return _catch_exception(string, True) - - -def no_jedi_warning(error=None): - vim.command('echohl WarningMsg') - vim.command('echom "Please install Jedi if you want to use jedi-vim."') - if error: - vim.command('echom "The error was: {0}"'.format(error)) - vim.command('echohl None') - - -def echo_highlight(msg): - vim_command('echohl WarningMsg | echom "jedi-vim: {0}" | echohl None'.format( - str(msg).replace('"', '\\"'))) - - -try: - import jedi -except ImportError as e: - no_jedi_warning(str(e)) - jedi = None - jedi_import_error = str(e) -else: - try: - version = jedi.__version__ - except Exception as e: # e.g. AttributeError - echo_highlight( - "Error when loading the jedi python module ({0}). " - "Please ensure that Jedi is installed correctly (see Installation " - "in the README.".format(e)) - jedi = None - else: - if isinstance(version, str): - # the normal use case, now. - from jedi import utils - version = utils.version_info() - if version < (0, 7): - echo_highlight('Please update your Jedi version, it is too old.') - - -def catch_and_print_exceptions(func): - def wrapper(*args, **kwargs): - try: - return func(*args, **kwargs) - except (Exception, vim.error): - print(traceback.format_exc()) - return None - return wrapper - - -def _check_jedi_availability(show_error=False): - def func_receiver(func): - def wrapper(*args, **kwargs): - if jedi is None: - if show_error: - no_jedi_warning() - return - else: - return func(*args, **kwargs) - return wrapper - return func_receiver - - -@catch_and_print_exceptions -def get_script(source=None, column=None): - jedi.settings.additional_dynamic_modules = \ - [b.name for b in vim.buffers if b.name is not None and b.name.endswith('.py')] - if source is None: - source = '\n'.join(vim.current.buffer) - row = vim.current.window.cursor[0] - if column is None: - column = vim.current.window.cursor[1] - buf_path = vim.current.buffer.name - encoding = vim_eval('&encoding') or 'latin1' - return jedi.Script(source, row, column, buf_path, encoding) - - -@_check_jedi_availability(show_error=False) -@catch_and_print_exceptions -def completions(): - row, column = vim.current.window.cursor - # Clear call signatures in the buffer so they aren't seen by the completer. - # Call signatures in the command line can stay. - if int(vim_eval("g:jedi#show_call_signatures")) == 1: - clear_call_signatures() - if vim.eval('a:findstart') == '1': - count = 0 - for char in reversed(vim.current.line[:column]): - if not re.match('[\w\d]', char): - break - count += 1 - vim.command('return %i' % (column - count)) - else: - base = vim.eval('a:base') - source = '' - for i, line in enumerate(vim.current.buffer): - # enter this path again, otherwise source would be incomplete - if i == row - 1: - source += line[:column] + base + line[column:] - else: - source += line - source += '\n' - # here again hacks, because jedi has a different interface than vim - column += len(base) - try: - script = get_script(source=source, column=column) - completions = script.completions() - signatures = script.call_signatures() - - out = [] - for c in completions: - d = dict(word=PythonToVimStr(c.name[:len(base)] + c.complete), - abbr=PythonToVimStr(c.name_with_symbols), - # stuff directly behind the completion - menu=PythonToVimStr(c.description), - info=PythonToVimStr(c.docstring()), # docstr - icase=1, # case insensitive - dup=1 # allow duplicates (maybe later remove this) - ) - out.append(d) - - strout = str(out) - except Exception: - # print to stdout, will be in :messages - print(traceback.format_exc()) - strout = '' - completions = [] - signatures = [] - - show_call_signatures(signatures) - vim.command('return ' + strout) - - -@contextmanager -def tempfile(content): - # Using this instead of the tempfile module because Windows won't read - # from a file not yet written to disk - with open(vim_eval('tempname()'), 'w') as f: - f.write(content) - try: - yield f - finally: - os.unlink(f.name) - -@_check_jedi_availability(show_error=True) -@catch_and_print_exceptions -def goto(mode="goto", no_output=False): - """ - :param str mode: "related_name", "definition", "assignment", "auto" - :return: list of definitions/assignments - :rtype: list - """ - script = get_script() - try: - if mode == "goto": - definitions = [x for x in script.goto_definitions() - if not x.in_builtin_module()] - if not definitions: - definitions = script.goto_assignments() - elif mode == "related_name": - definitions = script.usages() - elif mode == "definition": - definitions = script.goto_definitions() - elif mode == "assignment": - definitions = script.goto_assignments() - except jedi.NotFoundError: - echo_highlight("Cannot follow nothing. Put your cursor on a valid name.") - definitions = [] - else: - if no_output: - return definitions - if not definitions: - echo_highlight("Couldn't find any definitions for this.") - elif len(definitions) == 1 and mode != "related_name": - d = list(definitions)[0] - if d.in_builtin_module(): - if d.is_keyword: - echo_highlight("Cannot get the definition of Python keywords.") - else: - echo_highlight("Builtin modules cannot be displayed (%s)." - % d.desc_with_module) - else: - using_tagstack = int(vim_eval('g:jedi#use_tag_stack')) == 1 - if d.module_path != vim.current.buffer.name: - result = new_buffer(d.module_path, - using_tagstack=using_tagstack) - if not result: - return [] - if d.module_path and using_tagstack: - tagname = d.name - with tempfile('{0}\t{1}\t{2}'.format(tagname, d.module_path, - 'call cursor({0}, {1})'.format(d.line, d.column + 1))) as f: - old_tags = vim.eval('&tags') - old_wildignore = vim.eval('&wildignore') - try: - # Clear wildignore to ensure tag file isn't ignored - vim.command('set wildignore=') - vim.command('let &tags = %s' % - repr(PythonToVimStr(f.name))) - vim.command('tjump %s' % tagname) - finally: - vim.command('let &tags = %s' % - repr(PythonToVimStr(old_tags))) - vim.command('let &wildignore = %s' % - repr(PythonToVimStr(old_wildignore))) - vim.current.window.cursor = d.line, d.column - else: - # multiple solutions - lst = [] - for d in definitions: - if d.in_builtin_module(): - lst.append(dict(text=PythonToVimStr('Builtin ' + d.description))) - else: - lst.append(dict(filename=PythonToVimStr(d.module_path), - lnum=d.line, col=d.column + 1, - text=PythonToVimStr(d.description))) - vim_eval('setqflist(%s)' % repr(lst)) - vim_eval('jedi#add_goto_window(' + str(len(lst)) + ')') - return definitions - - -@_check_jedi_availability(show_error=True) -@catch_and_print_exceptions -def show_documentation(): - script = get_script() - try: - definitions = script.goto_definitions() - except jedi.NotFoundError: - definitions = [] - except Exception: - # print to stdout, will be in :messages - definitions = [] - print("Exception, this shouldn't happen.") - print(traceback.format_exc()) - - if not definitions: - echo_highlight('No documentation found for that.') - vim.command('return') - else: - docs = ['Docstring for %s\n%s\n%s' % (d.desc_with_module, '=' * 40, d.docstring()) - if d.docstring() else '|No Docstring for %s|' % d for d in definitions] - text = ('\n' + '-' * 79 + '\n').join(docs) - vim.command('let l:doc = %s' % repr(PythonToVimStr(text))) - vim.command('let l:doc_lines = %s' % len(text.split('\n'))) - return True - - -@catch_and_print_exceptions -def clear_call_signatures(): - # Check if using command line call signatures - if int(vim_eval("g:jedi#show_call_signatures")) == 2: - vim_command('echo ""') - return - cursor = vim.current.window.cursor - e = vim_eval('g:jedi#call_signature_escape') - # We need two turns here to search and replace certain lines: - # 1. Search for a line with a call signature and save the appended - # characters - # 2. Actually replace the line and redo the status quo. - py_regex = r'%sjedi=([0-9]+), (.*?)%s.*?%sjedi%s'.replace( - '%s', re.escape(e)) - for i, line in enumerate(vim.current.buffer): - match = re.search(py_regex, line) - if match is not None: - # Some signs were added to minimize syntax changes due to call - # signatures. We have to remove them again. The number of them is - # specified in `match.group(1)`. - after = line[match.end() + int(match.group(1)):] - line = line[:match.start()] + match.group(2) + after - vim.current.buffer[i] = line - vim.current.window.cursor = cursor - - -@_check_jedi_availability(show_error=False) -@catch_and_print_exceptions -def show_call_signatures(signatures=()): - if int(vim_eval("has('conceal') && g:jedi#show_call_signatures")) == 0: - return - - if signatures == (): - signatures = get_script().call_signatures() - clear_call_signatures() - - if not signatures: - return - - if int(vim_eval("g:jedi#show_call_signatures")) == 2: - return cmdline_call_signatures(signatures) - - for i, signature in enumerate(signatures): - line, column = signature.bracket_start - # signatures are listed above each other - line_to_replace = line - i - 1 - # because there's a space before the bracket - insert_column = column - 1 - if insert_column < 0 or line_to_replace <= 0: - # Edge cases, when the call signature has no space on the screen. - break - - # TODO check if completion menu is above or below - line = vim_eval("getline(%s)" % line_to_replace) - - params = [p.description.replace('\n', '') for p in signature.params] - try: - # *_*PLACEHOLDER*_* makes something fat. See after/syntax file. - params[signature.index] = '*_*%s*_*' % params[signature.index] - except (IndexError, TypeError): - pass - - # This stuff is reaaaaally a hack! I cannot stress enough, that - # this is a stupid solution. But there is really no other yet. - # There is no possibility in VIM to draw on the screen, but there - # will be one (see :help todo Patch to access screen under Python. - # (Marko Mahni, 2010 Jul 18)) - text = " (%s) " % ', '.join(params) - text = ' ' * (insert_column - len(line)) + text - end_column = insert_column + len(text) - 2 # -2 due to bold symbols - - # Need to decode it with utf8, because vim returns always a python 2 - # string even if it is unicode. - e = vim_eval('g:jedi#call_signature_escape') - if hasattr(e, 'decode'): - e = e.decode('UTF-8') - # replace line before with cursor - regex = "xjedi=%sx%sxjedix".replace('x', e) - - prefix, replace = line[:insert_column], line[insert_column:end_column] - - # Check the replace stuff for strings, to append them - # (don't want to break the syntax) - regex_quotes = r'''\\*["']+''' - # `add` are all the quotation marks. - # join them with a space to avoid producing ''' - add = ' '.join(re.findall(regex_quotes, replace)) - # search backwards - if add and replace[0] in ['"', "'"]: - a = re.search(regex_quotes + '$', prefix) - add = ('' if a is None else a.group(0)) + add - - tup = '%s, %s' % (len(add), replace) - repl = prefix + (regex % (tup, text)) + add + line[end_column:] - - vim_eval('setline(%s, %s)' % (line_to_replace, repr(PythonToVimStr(repl)))) - - -@catch_and_print_exceptions -def cmdline_call_signatures(signatures): - def get_params(s): - return [p.description.replace('\n', '') for p in s.params] - - def escape(string): - return string.replace('"', '\\"').replace(r'\n', r'\\n') - - def join(): - return ', '.join(filter(None, (left, center, right))) - - def too_long(): - return len(join()) > max_msg_len - - if len(signatures) > 1: - params = zip_longest(*map(get_params, signatures), fillvalue='_') - params = ['(' + ', '.join(p) + ')' for p in params] - else: - params = get_params(signatures[0]) - - index = next(iter(s.index for s in signatures if s.index is not None), None) - - # Allow 12 characters for showcmd plus 18 for ruler - setting - # noruler/noshowcmd here causes incorrect undo history - max_msg_len = int(vim_eval('&columns')) - 12 - if int(vim_eval('&ruler')): - max_msg_len -= 18 - max_msg_len -= len(signatures[0].call_name) + 2 # call name + parentheses - - if max_msg_len < (1 if params else 0): - return - elif index is None: - text = escape(', '.join(params)) - if params and len(text) > max_msg_len: - text = ELLIPSIS - elif max_msg_len < len(ELLIPSIS): - return - else: - left = escape(', '.join(params[:index])) - center = escape(params[index]) - right = escape(', '.join(params[index + 1:])) - while too_long(): - if left and left != ELLIPSIS: - left = ELLIPSIS - continue - if right and right != ELLIPSIS: - right = ELLIPSIS - continue - if (left or right) and center != ELLIPSIS: - left = right = None - center = ELLIPSIS - continue - if too_long(): - # Should never reach here - return - - max_num_spaces = max_msg_len - if index is not None: - max_num_spaces -= len(join()) - _, column = signatures[0].bracket_start - spaces = min(int(vim_eval('g:jedi#first_col +' - 'wincol() - col(".")')) + - column - len(signatures[0].call_name), - max_num_spaces) * ' ' - - if index is not None: - vim_command(' echon "%s" | ' - 'echohl Function | echon "%s" | ' - 'echohl None | echon "(" | ' - 'echohl jediFunction | echon "%s" | ' - 'echohl jediFat | echon "%s" | ' - 'echohl jediFunction | echon "%s" | ' - 'echohl None | echon ")"' - % (spaces, signatures[0].call_name, - left + ', ' if left else '', - center, ', ' + right if right else '')) - else: - vim_command(' echon "%s" | ' - 'echohl Function | echon "%s" | ' - 'echohl None | echon "(%s)"' - % (spaces, signatures[0].call_name, text)) - - -@_check_jedi_availability(show_error=True) -@catch_and_print_exceptions -def rename(): - if not int(vim.eval('a:0')): - # Need to save the cursor position before insert mode - cursor = vim.current.window.cursor - changenr = vim.eval('changenr()') # track undo tree - vim_command('augroup jedi_rename') - vim_command('autocmd InsertLeave call jedi#rename' - '({}, {}, {})'.format(cursor[0], cursor[1], changenr)) - vim_command('augroup END') - - vim_command("let s:jedi_replace_orig = expand('')") - vim_command('normal! diw') - vim_command('startinsert') - - else: - # Remove autocommand. - vim_command('autocmd! jedi_rename InsertLeave') - - args = vim.eval('a:000') - cursor = tuple(int(x) for x in args[:2]) - changenr = args[2] - - # Get replacement, if there is something on the cursor. - # This won't be the case when the user ends insert mode right away, - # and `` would pick up the nearest word instead. - if vim_eval('getline(".")[getpos(".")[2]-1]') != ' ': - replace = vim_eval("expand('')") - else: - replace = None - - vim_command('undo {}'.format(changenr)) - - vim.current.window.cursor = cursor - - if replace: - return do_rename(replace) - - -def rename_visual(): - replace = vim.eval('input("Rename to: ")') - orig = vim.eval('getline(".")[(getpos("\'<")[2]-1):getpos("\'>")[2]]') - do_rename(replace, orig) - - -def do_rename(replace, orig=None): - if not len(replace): - echo_highlight('No rename possible without name.') - return - - if orig is None: - orig = vim_eval('s:jedi_replace_orig') - - # Save original window / tab. - saved_tab = int(vim_eval('tabpagenr()')) - saved_win = int(vim_eval('winnr()')) - - temp_rename = goto(mode="related_name", no_output=True) - # Sort the whole thing reverse (positions at the end of the line - # must be first, because they move the stuff before the position). - temp_rename = sorted(temp_rename, reverse=True, - key=lambda x: (x.module_path, x.line, x.column)) - buffers = set() - for r in temp_rename: - if r.in_builtin_module(): - continue - - if os.path.abspath(vim.current.buffer.name) != r.module_path: - result = new_buffer(r.module_path) - if not result: - echo_highlight("Jedi-vim: failed to create buffer window for {0}!".format(r.module_path)) - continue - - buffers.add(vim.current.buffer.name) - - # Save view. - saved_view = vim_eval('string(winsaveview())') - - # Replace original word. - vim.current.window.cursor = (r.line, r.column) - vim_command('normal! c{0:d}l{1}'.format(len(orig), replace)) - - # Restore view. - vim_command('call winrestview(%s)' % saved_view) - - # Restore previous tab and window. - vim_command('tabnext {0:d}'.format(saved_tab)) - vim_command('{0:d}wincmd w'.format(saved_win)) - - if len(buffers) > 1: - echo_highlight('Jedi did {0:d} renames in {1:d} buffers!'.format( - len(temp_rename), len(buffers))) - else: - echo_highlight('Jedi did {0:d} renames!'.format(len(temp_rename))) - - -@_check_jedi_availability(show_error=True) -@catch_and_print_exceptions -def py_import(): - # args are the same as for the :edit command - args = shsplit(vim.eval('a:args')) - import_path = args.pop() - text = 'import %s' % import_path - scr = jedi.Script(text, 1, len(text), '') - try: - completion = scr.goto_assignments()[0] - except IndexError: - echo_highlight('Cannot find %s in sys.path!' % import_path) - else: - if completion.in_builtin_module(): - echo_highlight('%s is a builtin module.' % import_path) - else: - cmd_args = ' '.join([a.replace(' ', '\\ ') for a in args]) - new_buffer(completion.module_path, cmd_args) - - -@catch_and_print_exceptions -def py_import_completions(): - argl = vim.eval('a:argl') - try: - import jedi - except ImportError: - print('Pyimport completion requires jedi module: https://github.com/davidhalter/jedi') - comps = [] - else: - text = 'import %s' % argl - script = jedi.Script(text, 1, len(text), '') - comps = ['%s%s' % (argl, c.complete) for c in script.completions()] - vim.command("return '%s'" % '\n'.join(comps)) - - -@catch_and_print_exceptions -def new_buffer(path, options='', using_tagstack=False): - # options are what you can to edit the edit options - if int(vim_eval('g:jedi#use_tabs_not_buffers')) == 1: - _tabnew(path, options) - elif not vim_eval('g:jedi#use_splits_not_buffers') in [1, '1']: - user_split_option = vim_eval('g:jedi#use_splits_not_buffers') - split_options = { - 'top': 'topleft split', - 'left': 'topleft vsplit', - 'right': 'botright vsplit', - 'bottom': 'botright split', - 'winwidth': 'vs' - } - if (user_split_option == 'winwidth' and - vim.current.window.width <= 2 * int(vim_eval( - "&textwidth ? &textwidth : 80"))): - split_options['winwidth'] = 'sp' - if user_split_option not in split_options: - print('Unsupported value for g:jedi#use_splits_not_buffers: {0}. ' - 'Valid options are: {1}.'.format( - user_split_option, ', '.join(split_options.keys()))) - else: - vim_command(split_options[user_split_option] + " %s" % escape_file_path(path)) - else: - if int(vim_eval("!&hidden && &modified")) == 1: - if vim_eval("bufname('%')") is None: - echo_highlight('Cannot open a new buffer, use `:set hidden` or save your buffer') - return False - else: - vim_command('w') - if using_tagstack: - return True - vim_command('edit %s %s' % (options, escape_file_path(path))) - # sometimes syntax is being disabled and the filetype not set. - if int(vim_eval('!exists("g:syntax_on")')) == 1: - vim_command('syntax enable') - if int(vim_eval("&filetype != 'python'")) == 1: - vim_command('set filetype=python') - return True - - -@catch_and_print_exceptions -def _tabnew(path, options=''): - """ - Open a file in a new tab or switch to an existing one. - - :param options: `:tabnew` options, read vim help. - """ - path = os.path.abspath(path) - if int(vim_eval('has("gui")')) == 1: - vim_command('tab drop %s %s' % (options, escape_file_path(path))) - return - - for tab_nr in range(int(vim_eval("tabpagenr('$')"))): - for buf_nr in vim_eval("tabpagebuflist(%i + 1)" % tab_nr): - buf_nr = int(buf_nr) - 1 - try: - buf_path = vim.buffers[buf_nr].name - except (LookupError, ValueError): - # Just do good old asking for forgiveness. - # don't know why this happens :-) - pass - else: - if buf_path == path: - # tab exists, just switch to that tab - vim_command('tabfirst | tabnext %i' % (tab_nr + 1)) - # Goto the buffer's window. - vim_command('exec bufwinnr(%i) . " wincmd w"' % (buf_nr + 1)) - break - else: - continue - break - else: - # tab doesn't exist, add a new one. - vim_command('tabnew %s' % escape_file_path(path)) - - -def escape_file_path(path): - return path.replace(' ', r'\ ') - - -def print_to_stdout(level, str_out): - print(str_out) diff --git a/vim-plugins/bundle/jedi-vim/plugin/jedi.vim b/vim-plugins/bundle/jedi-vim/plugin/jedi.vim deleted file mode 100644 index e224014..0000000 --- a/vim-plugins/bundle/jedi-vim/plugin/jedi.vim +++ /dev/null @@ -1,38 +0,0 @@ -"jedi-vim - Omni Completion for python in vim -" Maintainer: David Halter -" -" This part of the software is just the vim interface. The really big deal is -" the Jedi Python library. - -if get(g:, 'jedi#auto_vim_configuration', 1) - " jedi-vim doesn't work in compatible mode (vim script syntax problems) - if &compatible - " vint: -ProhibitSetNoCompatible - set nocompatible - " vint: +ProhibitSetNoCompatible - endif - - " jedi-vim really needs, otherwise jedi-vim cannot start. - filetype plugin on - - " Change completeopt, but only if it has Vim's default value. - let s:save_completeopt=&completeopt - set completeopt& - let s:default_completeopt=&completeopt - let &completeopt=s:save_completeopt - if s:default_completeopt == &completeopt - set completeopt=menuone,longest,preview - endif - - if len(mapcheck('', 'i')) == 0 - inoremap - endif -endif - -" Pyimport command -command! -nargs=1 -complete=custom,jedi#py_import_completions Pyimport :call jedi#py_import() - -command! -nargs=0 -bar JediDebugInfo call jedi#debug_info() -command! -nargs=0 -bang JediClearCache call jedi#clear_cache(0) - -" vim: set et ts=4: diff --git a/vim-plugins/bundle/jedi-vim/pytest.ini b/vim-plugins/bundle/jedi-vim/pytest.ini deleted file mode 100644 index 16700c3..0000000 --- a/vim-plugins/bundle/jedi-vim/pytest.ini +++ /dev/null @@ -1,3 +0,0 @@ -[pytest] -# Ignore all files -norecursedirs = * diff --git a/vim-plugins/bundle/jedi-vim/test/completions.vim b/vim-plugins/bundle/jedi-vim/test/completions.vim deleted file mode 100644 index 60cafbe..0000000 --- a/vim-plugins/bundle/jedi-vim/test/completions.vim +++ /dev/null @@ -1,63 +0,0 @@ -let g:jedi#completions_command = 'X' -source plugin/jedi.vim - -describe 'completions' - before - new - set filetype=python - end - - after - bd! - end - - it 'smart import' - exec "normal ifrom os " - Expect getline('.') == 'from os import ' - end - - it 'no smart import after space' - exec "normal! ifrom os " - exec "normal a " - Expect getline('.') == 'from os ' - end - - it 'import' - " X is the completion command - normal oimporX - Expect getline('.') == 'import' - normal a subproX - Expect getline('.') == 'import subprocess' - end - - it 'exception' - normal oIndentationErrX - Expect getline('.') == 'IndentationError' - normal a().filenaX - Expect getline('.') == 'IndentationError().filename' - end - - it 'dot_open' - normal oraisX ImpXErrX() - Expect getline('.') == 'raise ImportError()' - end - - it 'cycling through entries' - " testing select_first doesn't seem to work in ex mode - execute "normal oraise impX\\\" - Expect getline('.') == 'raise ImportWarning' - let g:jedi#popup_select_first = 0 - execute "normal oraise impX\\\" - Expect getline('.') == 'raise ImportWarning' - let g:jedi#popup_select_first = 1 - - " -longest completes the first one - set completeopt -=longest - execute "normal oraise baseX" - Expect getline('.') == 'raise BaseException' - set completeopt +=longest - - end -end - -" vim: et:ts=4:sw=4 diff --git a/vim-plugins/bundle/jedi-vim/test/completions_disabled.vim b/vim-plugins/bundle/jedi-vim/test/completions_disabled.vim deleted file mode 100644 index 37b7346..0000000 --- a/vim-plugins/bundle/jedi-vim/test/completions_disabled.vim +++ /dev/null @@ -1,21 +0,0 @@ -let g:jedi#completions_command = 'X' -let g:jedi#completions_enabled = 0 -source plugin/jedi.vim - -describe 'completions_disabled' - before - new - set filetype=python - end - - after - bd! - end - - it 'typing' - normal oraise ImportErrX - Expect getline('.') == 'raise ImportErrX' - end -end - -" vim: et:ts=4:sw=4 diff --git a/vim-plugins/bundle/jedi-vim/test/documentation.vim b/vim-plugins/bundle/jedi-vim/test/documentation.vim deleted file mode 100644 index 119e360..0000000 --- a/vim-plugins/bundle/jedi-vim/test/documentation.vim +++ /dev/null @@ -1,31 +0,0 @@ -source plugin/jedi.vim - -describe 'documentation docstrings' - before - set filetype=python - end - - after - bd! - bd! - end - - it 'simple' - put = 'ImportError' - normal GK - Expect bufname('%') == "'__doc__'" - Expect &filetype == 'rst' - let content = join(getline(1,'$'), "\n") - Expect stridx(content, "Import can't find module") > 0 - normal K - Expect bufname('%') == '' - end - - it 'no documentation' - put = 'x = 2' - normal oGK - Expect bufname('%') == '' - end -end - -" vim: et:ts=4:sw=4 diff --git a/vim-plugins/bundle/jedi-vim/test/goto.vim b/vim-plugins/bundle/jedi-vim/test/goto.vim deleted file mode 100644 index b65a1c7..0000000 --- a/vim-plugins/bundle/jedi-vim/test/goto.vim +++ /dev/null @@ -1,217 +0,0 @@ -let mapleader = '\' -source plugin/jedi.vim -source test/utils.vim - -describe 'goto_simple' - before - new " open a new split - set filetype=python - put =[ - \ 'def a(): pass', - \ 'b = a', - \ 'c = b', - \ ] - normal! ggdd - normal! G$ - Expect line('.') == 3 - end - - after - bd! - end - - it 'goto_definitions' - silent normal \d - Expect line('.') == 1 - "Expect col('.') == 5 " not working yet. - end - - it 'goto_assignments' - silent normal \g - Expect line('.') == 2 - Expect col('.') == 1 - - " cursor before `=` means that it stays there. - silent normal \g - Expect line('.') == 2 - Expect col('.') == 1 - - " going to the last line changes it. - normal! $ - silent normal \g - Expect line('.') == 1 - Expect col('.') == 5 - end -end - - -describe 'goto_with_tabs' - before - set filetype=python - let g:jedi#use_tabs_not_buffers = 1 - end - - after - bd! - bd! - end - - it 'follow_import' - put = ['import subprocess', 'subprocess'] - silent normal G\g - Expect getline('.') == 'import subprocess' - Expect line('.') == 2 - Expect col('.') == 8 - - silent normal G\d - Expect CurrentBufferIsModule('subprocess') == 1 - Expect line('.') == 1 - Expect col('.') == 1 - Expect tabpagenr('$') == 2 - Expect winnr('$') == 1 - tabprevious - Expect bufname('%') == '' - end - - it 'multi_definitions' - " This used to behave differently. Now we don't have any real multi - " definitions. - - " put = ['import tokenize'] - " silent normal G$\d - " Expect CurrentBufferIsModule('tokenize') == 1 - " Expect CurrentBufferIsModule('token') == 0 - " execute "normal \" - " Expect tabpagenr('$') == 2 - " Expect winnr('$') == 1 - " Expect CurrentBufferIsModule('token') == 1 - - " bd - " silent normal G$\d - " execute "normal j\" - " Expect tabpagenr('$') == 2 - " Expect winnr('$') == 1 - " Expect CurrentBufferIsModule('tokenize') == 1 - end -end - - -describe 'goto_with_buffers' - before - set filetype=python - let g:jedi#use_tabs_not_buffers = 0 - end - - after - bd! - bd! - set nohidden - end - - it 'no_new_tabs' - put = ['import os'] - normal G$ - call jedi#goto_assignments() - python jedi_vim.goto() - Expect CurrentBufferIsModule('os') == 0 - " Without hidden, it's not possible to open a new buffer, when the old - " one is not saved. - set hidden - call jedi#goto_assignments() - Expect CurrentBufferIsModule('os') == 1 - Expect winnr('$') == 1 - Expect tabpagenr('$') == 1 - Expect line('.') == 1 - Expect col('.') == 1 - end - - it 'multi_definitions' - " set hidden - " put = ['import tokenize'] - " silent normal G$\d - " Expect CurrentBufferIsModule('tokenize') == 0 - " Expect CurrentBufferIsModule('token') == 0 - " execute "normal \" - " Expect tabpagenr('$') == 1 - " Expect winnr('$') == 1 - " Expect CurrentBufferIsModule('token') == 1 - - " bd - " silent normal G$\d - " execute "normal j\" - " Expect tabpagenr('$') == 1 - " Expect winnr('$') == 1 - " Expect CurrentBufferIsModule('tokenize') == 1 - end -end - - - -describe 'goto_with_splits' - before - set filetype=python - let g:jedi#use_splits_not_buffers = 'left' - end - - after - bd! - bd! - end - - it 'follow_import' - put = ['import subprocess', 'subprocess'] - silent normal G\g - Expect getline('.') == 'import subprocess' - Expect line('.') == 2 - Expect col('.') == 8 - - silent normal G\d - Expect CurrentBufferIsModule('subprocess') == 1 - Expect line('.') == 1 - Expect col('.') == 1 - Expect winnr('$') == 2 - wincmd l - Expect bufname('%') == '' - end - -end - - -describe 'goto_wildignore' - before - set filetype=python - set wildignore=*,with\ spaces,*.pyc - set hidden - let g:jedi#use_tag_stack = 1 - let g:jedi#use_tabs_not_buffers = 0 - " Need to use splits for code coverage in new_buffer() - let g:jedi#use_splits_not_buffers = 1 - - put = ['from subprocess import Popen', 'Popen'] - Expect CurrentBufferIsModule('subprocess') == 0 - silent normal G - end - - after - bd! - bd! - set wildignore&vim - end - - it 'restores_wildignore' - let before = &wildignore - call jedi#goto() - Expect getline('.') =~ 'Popen' - Expect &wildignore == before - end - - it 'not_using_tagstack' - let g:jedi#use_tag_stack = 0 - call jedi#goto() - Expect CurrentBufferIsModule('subprocess') == 1 - Expect getline('.') =~ 'Popen' - end -end - - -" vim: et:ts=4:sw=4 diff --git a/vim-plugins/bundle/jedi-vim/test/pyimport.vim b/vim-plugins/bundle/jedi-vim/test/pyimport.vim deleted file mode 100644 index 098113c..0000000 --- a/vim-plugins/bundle/jedi-vim/test/pyimport.vim +++ /dev/null @@ -1,32 +0,0 @@ -source plugin/jedi.vim -source test/utils.vim - -describe 'pyimport' - before - let g:jedi#use_tabs_not_buffers = 1 - end - - after - bd! - bd! - end - - it 'open_tab' - Pyimport os - Expect CurrentBufferIsModule('os') == 1 - Pyimport subprocess - Expect CurrentBufferIsModule('subprocess') == 1 - " the empty tab is sometimes also a tab - Expect tabpagenr('$') >= 2 - end - - it 'completion' - " don't know how to test this directly - "execute "Pyimport subproc\" - "Expect CurrentBufferIsModule('subprocess') == 1 - - Expect jedi#py_import_completions('subproc', 0, 0) == 'subprocess' - Expect jedi#py_import_completions('subprocess', 0, 0) == 'subprocess' - Expect jedi#py_import_completions('zip', 0, 0) == "zipfile\nzipimport" - end -end diff --git a/vim-plugins/bundle/jedi-vim/test/signatures.vim b/vim-plugins/bundle/jedi-vim/test/signatures.vim deleted file mode 100644 index c1525f6..0000000 --- a/vim-plugins/bundle/jedi-vim/test/signatures.vim +++ /dev/null @@ -1,130 +0,0 @@ -source plugin/jedi.vim - -describe 'signatures' - before - set filetype=python - end - - after - bd! - bd! - end - - it 'simple' - normal oabs( - " equals doautocmd CursorMovedI - Python jedi_vim.show_call_signatures() - - Expect getline(1) == '=`=jedi=0, =`= (*_*number*_*) =`=jedi=`=' - - doautocmd InsertLeave - Expect getline(1) == '' - end - - it 'multiple buffers' - set hidden - new - setfiletype python - redir => autocmds - autocmd jedi_call_signatures * - redir END - Expect autocmds =~# 'jedi_call_signatures' - buffer # - redir => autocmds - autocmd jedi_call_signatures * - redir END - Expect autocmds =~# 'jedi_call_signatures' - bd! - end - - it 'simple after CursorHoldI with only parenthesis' - noautocmd normal o - doautocmd CursorHoldI - noautocmd normal iabs( - doautocmd CursorHoldI - Expect getline(1) == '=`=jedi=0, =`= (*_*number*_*) =`=jedi=`=' - end - - it 'no signature' - normal ostr - Python jedi_vim.show_call_signatures() - Expect getline(1, '$') == ['', 'str '] - end - - it 'signatures disabled' - let g:jedi#show_call_signatures = 0 - - normal ostr( - Python jedi_vim.show_call_signatures() - Expect getline(1, '$') == ['', 'str( '] - - let g:jedi#show_call_signatures = 1 - end - - it 'command line simple' - let g:jedi#show_call_signatures = 2 - call jedi#configure_call_signatures() - - normal oabs( - redir => msg - Python jedi_vim.show_call_signatures() - redir END - Expect msg == "\nabs(number)" - - redir => msg - doautocmd InsertLeave - redir END - Expect msg == "\n" - - normal Sdef foo(a, b): pass - normal ofoo(a, b, c, - redir => msg - Python jedi_vim.show_call_signatures() - redir END - Expect msg == "\nfoo(a, b)" - end - - it 'command line truncation' - let g:jedi#show_call_signatures = 2 - call jedi#configure_call_signatures() - - function! Signature() - redir => msg - Python jedi_vim.show_call_signatures() - redir END - return msg - endfunction - - let funcname = repeat('a', &columns - 30) - put = 'def '.funcname.'(arg1, arg2, arg3, a, b, c):' - put = ' pass' - execute "normal o".funcname."( " - Expect Signature() == "\n".funcname."(arg1, …)" - - normal sarg1, - Expect Signature() == "\n".funcname."(…, arg2, …)" - - normal sarg2, arg3, - Expect Signature() == "\n".funcname."(…, a, b, c)" - - normal sa, b, - Expect Signature() == "\n".funcname."(…, c)" - - g/^/d - put = 'def '.funcname.'('.repeat('b', 20).', arg2):' - put = ' pass' - execute "normal o".funcname."( " - Expect Signature() == "\n".funcname."(…)" - end - - it 'command line no signature' - let g:jedi#show_call_signatures = 2 - call jedi#configure_call_signatures() - - normal ostr - redir => msg - Python jedi_vim.show_call_signatures() - redir END - Expect msg == "\n" - end -end diff --git a/vim-plugins/bundle/jedi-vim/test/utils.vim b/vim-plugins/bundle/jedi-vim/test/utils.vim deleted file mode 100644 index 5ad2a1d..0000000 --- a/vim-plugins/bundle/jedi-vim/test/utils.vim +++ /dev/null @@ -1,11 +0,0 @@ -function! CurrentBufferIsModule(module_name) - return EndsWith(bufname('%'), a:module_name.'.py') -endfunction - - -function EndsWith(string, end) - let l:should = len(a:string) - strlen(a:end) - return l:should == stridx(a:string, a:end, should) -endfunction - -" vim: et:ts=4:sw=4 diff --git a/vim-plugins/bundle/jedi-vim/test_integration.py b/vim-plugins/bundle/jedi-vim/test_integration.py deleted file mode 100644 index d47e06b..0000000 --- a/vim-plugins/bundle/jedi-vim/test_integration.py +++ /dev/null @@ -1,2 +0,0 @@ -def test_integration(case, monkeypatch, pytestconfig): - case.run() diff --git a/vim-plugins/bundle/python-mode/pymode/__pycache__/rope.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/__pycache__/rope.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb4994beb0ab5ea969529d747fd52c4f9bc4c5d8 GIT binary patch literal 24837 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8cef52721255c396e9ae5d5b2701080e86f0af2e GIT binary patch literal 837 zcmaJ=&2G~`5Oz|l1xw|`1B^H|qP5c&kWedxiIUW)bt2oLN-owW9@h)D*IKVrxsSnH zAl@if-hvaeX$6Q%Sn_zh`|UU1{OsxezV-5}JOAD_j335dPlx>X^w!VGB*wx(W6?=E zi*C|g>?Av((KGK}NKxS-FsNFUi4r8HY^8+cibE zf`dU1PWs2Mj>x=*E2i)>46w?reqA7}d~sRVerCC#X19!XV zAwk7>UfX`p-0a11B35y{F+G1Y+3bB92BA0c7f%P1={)ep7tuFEnl!yz^V4-QQJ}Nt zUuZ%dd(8`HNj=EXxu4!6YPR;bADZ6U(bMh3G1Xhev0b&BC+D=;AK*Pr*VUxbjK?Eh9~c9$KmGH9|RdZr6q?#taw&!5Tq;=?>h1QvY& z7Nk1JJy8167@RVuyi3wJJkKZ}fwf+D7LcVzCMI*CL(r`5nNJPGsZFKR(-y2K9Tp+_ zH&AIznIuFN`eC^_3)qgUvB)ql{s1`8WHJB% literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/arguments.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/arguments.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5ac833b9be275c641b6bf575525ce05a1248805 GIT binary patch literal 3981 zcmb_f+m75s8g|+4Zrjt73`3HEKqM0oqy$u0X6HArQp#ItDJVcRyMU|SzPi)Rk9By+57r5Nz zEwp%+cj#g6aUX4m2Yd&u$Gh}^_K(EHbeN8mod4%2Oa`%(;rUpE>GOCnja4?f2q&?K zhp9@1L|4j`hiV+g;rVowsBAn6f)KxN#?vr~N8wbap}I`N(?q1PN~5^G{xm#~6EzmI z!!Z0*g_rS&4^kOs!^t2^GG#6~&xBNAbL6nRI&r`v{ir3rAEC%Qs0vnCkyY5JA$-&} zx4;!U?m61UHBz@^GM=Q`%SKYgqa>vTnGVhcDNwXf{nrv6nx8-EUyg@q|9SQlMD`D# zXT$#4lxXZvX6kZ0dUrVH)Hlr_JCl8ZoBL<6O#4fUCo}CuQ8vm{6z$?#*+yltHvaSd zqgob+^_GO#p&yY$>>1WRMCZb~wy*wDSUH$nu#c_p-n@1Shg(lQ@u0ACu)AQ)dbUUX z!pZGLHU1jns70`Ik*a7i8$o+gx8unq9dRAdsbSp~shkd!ZkOkb zY|6@~t-Ex(VRs)>5~cwTUAD(O*0uN9{9wuF+U|x~5<3;ctU`xd7fe}-5v!;zu)`Mi zEfT>K<&w4aV(34#rmO8E8rpc7Ah}5{4z0Jt+4lb5tPnI39E^C|m1`~bE zBs5+B2mlXJB%N5sL~bMAIb}FTTr2}|s|>@4i$1I*&^Ny@F0m2T8k*_iM|3g4q6|89 zpkZLR^sp6B#rxQ^!IOd0-{^u0qc3f|_B#QAj+%h*9@+O=FnEI?R0V@B^;d#Hcj@Vz zk}UGog5px;`d8f49xZK{78$_bQ5qlLt$qBxO$N4mdSaK{j}ac>pXe{c6EhUmLNo4i z<8`vU$0)VXUfK5MHs83euF4~>_`>Sxt!~hm`llxkEIM%<_Bb*i>G zkR^Xh-|-$cQwk?(%CkKOe!~$o`-egM#^>2p%9qHl{Smc|s7U>5=@jLk_WZ$VTqZ5@ zG|Xg(1g~a29G|cHmSbqrK!|Rw(M1#5uWnG%`14JSk)XanDZ`A7Fmtd@@2_oxh;H(S zS1}+|T~O>pm?;>CJ^ah27-WhqSd&AuxrM-x4MHPiP<>mW9RecWRUOBnD&`ZIp_HClU~>OUK2~TM;KDG zNh%1z;vOpPPiA8ihNSL%IeSDOV>d`^{Hyt8RGz^9tj zH$N(S^@*M%C>Dx$>2|NaebWScSmh|@o63TVcTsL3q2EW3T9*mhgD|;IDcd1sY=?Ei zX6V;`vruLU?UE6b6_`kEe45dZxod@n#u;kwgEBAskl^Rkz2$ZHZtorZ0&oae A>i_@% literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/ast.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/ast.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f341c7c85f4cd6174af6f7bbb8e115cb419aab7 GIT binary patch literal 1960 zcmZ8i&u<$=6rR~#uh$zpF;xht6l7IUYFgq#`6)$JLrbJeU=WE2i9p-U&N#8X-gRfj ztzE5qsQVXi;>4YQX|9|qapTq#-&?y;>00w<=DoMG^S<}J=bMd2c4haf~V}5W+!C_G`lGuImZrXvp~9>9kT3gk4bMBsvXYgCo9M95zCxkm}rWM z@SpKxUsOf#j2%}+O@x>O@rJ021}rtPE;gVE1>a}w3(xUQ)@^gkKY|E*I>|?)I1~Cs zu%nIYXQ#IkhkWpO7)^{j82V2L!wP2j!cm*X8Mp;o@Hwtuu%WMR6l~xLN4N_IGpBhD z??DACuD>Y|)|YI~W=-Q4tl+{k)j_cE_VE!@Ghxp`czhK z{m}jHDB9gWu(gBPSbnQiu59>ooK9Bjwf$LU;_1@hr~OQ3xee$$Sv-=~1@zV(>C?7n zeVtEKBGsF8D=uwC(rJG&^$rv-b~|VJNOm6fhbC8@?T7tQ=VX$JRCdNQbCzcxj}Q^o z<&^eMbVuc5**S@|?BKfFUb5C8gz2*Rpoa)}km$W38je z22n(CVpTnrCN@T?8m_4}AZ&PVG|rXTQ~AjHfM(fpuyEc-*7Cw|Kf4Q-h^1U)EOF>|&D-iEtXeu1$)Oj7yZn-|>IxnpWQIQ^klST>W zQ!JL{HE;me1;FL*vr{%Fh&{mo=acELv<6T=0qzRQ2%d8nZ@I?DJ7RjdaACa&7+K*N zKBz*wSMUKqU2s6UcSzrGSC*@#1?36L)k72|z~Pcz<`T(Zu82Tav15`fuz`{BP z{px^>h9bYcgvykj|Kau-6d)e8BDZkRhTJ++H>Q^e%aT-0puve$KnvaU!6nd&B6S{r zaj(}(;xs*plVM9qGf|mt-9JzhdA}rEncr5)i&m^azF{9>if-E}FJ#y0<*1jdC3jv% zAG|!%)|5;pO7|a1^(n4dBJnx|pTn?&q46&Pz61yx0h9KeCscChWp^8!6)VsH!HS*f zb+CdV@0aHe3eZI}e*eK1VqWnBS$2wLmbX?}_PS~l=h!gG(-dB}K=*auaHjiYn0tJIf-!MfIlX{eTBf-EqoN N4BhZTupTtS;6K?m$ol{Q literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/astutils.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/astutils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07ddb89b67232754c4a62f8a89927063d0f898ed GIT binary patch literal 2505 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 QN7Ue@-BZk^Q)>4A2Lbij-~a#s literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/change.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/change.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d6a604a96488927de4565a2db69fa4eaf80ccc1 GIT binary patch literal 16091 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 sGLF!zlPGT4@+b}U;qFB literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/codeanalyze.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/codeanalyze.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79882105d15b2d38fdc899a4d2d85df375eb5cbb GIT binary patch literal 11207 zcmbtaO>i4WdYwN2Ly#gNik2wZmSI}92(2tRUMH(KiX>ZWuU*kHUP)`o5M%^I4@r<9 zK=ur62s_-`3Y}!Lm84Rs9JYK)<&fGWmmHHrZhK7*Ii=>1OL9?F%Eug3sY>4adN2S% z(5_T~>YkpSo}TXS=Y2mj-#&4o_^m&C=M(o^mi6z}$j?Lj7E1UpsFbDbwpBGpyK2k1 zQ+4F%R^9Je%2DnYmU08{z^&$R?x`Hkb8?=?d0rK8UXb$w&V4n7^C>y^ab8r@IG>jD zDK(=`d|_3K=$}<{=%17RX;o4u(LaO!d36f?r=dq>Us47j`Qk8bsoo4%D!h+%1^N`Yo*D0@N?0)g%ZAoDzLau?9o;Z?sBnW?#Zrt zW-ry8axu?TGIx8U(OC~}ciZit8Fh8j!QK4v$Z{JcETM|+*s5FW7HUk5o9&f~lXy|k zi;_Z9W(nC52JJP?#r(CU^Ef>F@ajf)JGlB;YYX#Vz4BRW`|9dmN40~iJ5QpGZs+yw zu3}pb?bd2|Rd;uStE-JLxZ1>}MyJt!(hsieJW2d|z13+&_4*W7MJ`)*-tI4sZQ{yc z*h*8zU>J`qvYpFl#ICZoe0@5$Hn}zD_nfoVzKb(^)8TpSuDJ)c4XH6(b!AVQb0qo3 z&Q8!#6;J1QnhT?bjuIDLRlgH_UMEdt@1`nnP_dy@-H_=7&O?&MvVD8j?w=c9{%~m1 z<}mzx6h2JW|8q3B?y$(!v9)O%PAm71vF3Ga-&Wqf(|e28zH2?cgq^uHci-F3?dN0e z(AspdM~}OX^JgsXG|ufiyO$qWu@iZ`eqe7|Iv$Qz7Do$Ba+|r>KCt%-ae*VZT>a;9 z;hv#YekEHp7f(sJhZ4@nq7{^p(}1YX%2NuM(5PZ3c5j?y{`GcadsQ`VoaX%~R{!;J zQmqG3N>z2`db`_fw8I-{nENoRyA?dqTt{M6@`ig}*wvAy1PMzMw;gm6Z?oI#RD8qG z{7x%q24Quk-3YVklf2=cF7nRl?Do74!oBtpeov3AY#xKd7f?}JJ!jtb@Sm}Z_M!;D z0$N48|NPhNjmnm%_;(uHLA{<7>vgEhUYqTidVP1V(Kc5!1x1tAdXW{yY^0(nYEqpI zkwM?_y<$%Kn&``Z9CQmM`~cMuP5>nWmH-j~NdSp}V>NF;v05--SoKpFoH8I-EvgcD zelnTA*WJ_2;7+R(gzu=vP88_=C(;PZpr4G)@TOBVi~`cZWO#-zP}Na zn>uJjt!}5>T`NZ$t+3n#r@}HCK@XZ4wmu84$SsrMjFd5OrUcF)!_I*kP2HKAvU;=g2wsy}wupU^Q1<#7St)jkbW2d(D ziPdo)rn5ykp@7YMMZc+@-ipy1yZDs)1MNAFgVCE8(MocyjtY87@#98&FL+PuuGXhG zFeQrJ8Yjg|xOx>OTtG!tn6Vuwf@9Cy3&24T=F%j>5b=-F{t#y~WM9I>+&c<(uk1w& z_$KYM0G>rbFo7P;kyt8sA{!elJ5T<0x?^ike5x}q{RVDGEl+7OCkG=lPLh1&rf_l= zjY!sXAnQA{8q&|K#umvMUqv2JwH|HU#ITSvT6X{J1d^FihbTlC9(n$NLI)0>FNQq7 z+6v(T9HvEgZ7mFrK-=74hxN|h_G+Nt9a+xOgyoD4KYm@pxs+=obg@SlrC-C-#_2Mf zJwg=oy^#gI{B;YG(TCP^h)-rcMsog7>zT>c1D}8ZI^fnzU$+{JU8zj#v)tf0R?nkK z3iZ0`HtThR?9?HBk<~IQIKGyqJELD`H3{u$cP^la6X$!L z3nk<|L)=f@NLP7qCxQGbk7G{3=vVyY{>mw^2r-3b>-9QH78MLB*cdK_{xXBeEgR*KjYHfK)jl&439A z#-2YE5MnWZJaRFzkZWj&fWT7F6WFpfJZBGfMA_fLdh3GM@R+4%5jIjeXJ8{GhJu}3 z!u|SXRwq#*EciCtBFmzs|cQruw> z3+|zYr-T|&AZ7v&$vJU&-Ut84x@4-=fuE;ao%N)MfV2bmZm$z1GtF)%YIXL+0sSW2 z+QdXDSLyk|#W_2^?pdZ_bK7iO&R3%SqH zzyA>>);W$ zvnUf;VYH%udAU}*R9RlGUF1JrT3U*EsKl?twMTL7aa{XRT-%Rp%Wq6HG}JCPfEgq72PoGnLR-<^*gHM^D9t7K1j zR}j+clz0|97_q7lde<4KdwNqw`{<3pCPz)-zCRKG%cTI8lMzMq&ky>q5!lcVmf8B3 zxXVWv|4W4Xc{P229yNpc3!S_=!K0|jTncqeU_5g#UcC6s1!bPu7oXWnqCn5=SNiVq zqaXF%%H#cKcI`fu=>|q?x~%#Zt9MYrXPBvPH=tlqcMI`a;;$i?Xd&85a_hRgw__}$ zNCV{}@!=bVpSPk7k(El$ScKo?rJPKWF_Y6tqe=#h1d z2<{Lpe+^eRPy{Ssiu3++MMtyu5ZY(9bKp%J02T&#&(Xkpg4f71s2oYDDL7eQ9{}ZF zqBq5T{e83#fil7876*KU>NrqVr&K}tNGayjf|^oAv>-WZ27X~dolvtl`f5&9(< z2}ShwPtY)a8WVw_FSJu2H-e5zC>c8k0MRGV59p%Dp!*)2g(!#M`U~6I&)HW08o<&a z^y273FF%fRziY=ZW3hJz>E=aiKc77#Z=Uf0Avv;Rxc|qwht}?CmIo%KmWJZuXFMgy zR0_$wSR<2-APGBBXgGfn*AofRR*?_eGO3E>RNb7l4dvy&r1YWOD3;6w@UO|_M!SB6 z6BW|Ap=P=jgvs>iq;@bd8k-w^2vR41i;2QTRCH|^@6VzTiGBP%ob_Km%A~P5WbZ4P zA4wumN-4Gi_`UPs28G2raDcM2HD@0@irtUl>Fv&@bfj05lu{iC>N;3Q4k=90Bq>TX zXedLxF}8^^XtI5xteM7=#Nu=el0pB#r5Fzs&fA0?jg8OtLUYGNkL-ogM`<(C0b}k! z(pGyl><;PL0~>o=!QPn0&BaL9FsXqwEYrCKNyy^0#@3WxL1Na~%IOu@gM2p5N3V_E z^Emozj?f0K0g^+fnH<`r1pjn2JtU|!bV$;fSrZG;*b#ZU=(a=ximv zz%qSH{T_!iRt@P(1k#v*| zspsjbH}~3&2)Re2y_&&-1czzH+K`b7E3~W@!j0Bi6sRha)0FX%ob_QT)^~BwKcR%g zKMUmJ|1@hD$NsBFi8ld94$+T(w9xM-Xi$=$yw$q`3V=Eyy=6!*UPFMIIk>NvfS)<; zpL79bUHT)C#~YAGgkq4#&w!|TAZj_zBgILYg3_RyiJimSNruPA9|lNh%k z=vIOd&f4eg{)GvYJi^yQjwA)K$vHnj1wuN#8$ijT0jcrf*c?Pj}fxKFg7I+ z*E8xJdqP%cw=^^*OPEj7g_Cdx4jKtE0%yi0(|l}FSb6Wkoex*u8+cqopMY0Rq|v$Y z;3iUq)cy|?dG$l5s|2~4g@X3W6R45OwxDj9QG$Ri z(J>JLI-ld9M7{h^lyDZ6*>MTGCOAz3qH)lKUqj~Ly=reLL>XPl5EqcY0KaF&tFIOkKnlreEKnUt)&ZZ;d<@v{WoTmo( zuZK?OfAQ($re$lwE5$qeQQmK%goLDl(;2vH$Oj|&$T!z`Hy`B9YbVJCxK$tLk`ci9 zRQdv{n7)9ThVw}`)UM7*o~D#6-flEE5Y8VFz6`*)2Ch$}jfiNxPfFX!OK*eAQ-gg4 zqX{a$C@^lpxNP{C?!QrnS*n+hTTkYp9)6XYt&F}DV6X z<%M~wT;b$&kmT1LSRP5$SWXex)qm;O)tRX$3(GezEk|n}>Mr&$c{Pd00mZT9ym;(# zI67Ml@q$G-NJSaogy0|~X&r(10(z1E8MfWtWsIX)hm^y`dI3fXCZ8E17<%VAP!=uV z%5`h^Eg&fkw%5OMZ=<`{R(MT0ctKT8$zE=BR9W^}ZbWdLSNEbIG&+6%5Y}|CLcPPP zjcNcg*V!>NJ40n=pdyqjkvddN%V8>mCL6GN@mLximVyjjDes&`sKpfsx|V^J_LiqF zkRCB?3^4Qp@$*`SpOU1gKB4SE`am7JNDd75A`Cap_Cw=FLVs);V!UZ2V!JXHF1i@! z(Xi$|_I@4<(66w%z-kxOK(z#Rg(73bAdAnE81rZlap}7-h^O5JNtTZ#$*8>nd4xL| z5Kx3joF+<0TY&A;mrFMcBjfazB6x&pys-eIBLZ?3@9)y61D>_`&xkrqMo~PrB&Yeo zjd`V&8kM0tEW01uB9ZmZ6Mu(a-stFw zVTH&gxga8^Nor$uh6|LINaYr;K0`^Z%M4yL&E#49DSuk?>eG)C4 zDOG@L^$WyPFf_=c{XKk7Iur$*GvD?l&!HgrBnHZ1=`TOBcE5zHVa|Srv!7*WU+pf$ z-aTs<=~97`>He8_c0l`H3rVb?EFpGTP*z+t100FdT1(tDyk-AwP)mH5zVm3g?^GT? z{U7`)#bl9hphg1p`VP=1(4A0g+=9;;f`)Ex7zc;U;0F$p-_ExsFRNSZbhn`m^n@x! z;}yMzc6AP3a%+2U8>%A7hNO^AZt}7pa!f&HLD-R7)s1GD*qe#n9Jhl%z{txK=Qq%> zoV}M3f5xzU?gs>#X*}@uNmw_F^C&~zJX+2%v58g7FOcrl`NC~ z&Rm?Zh?d+y1G}^NSr>HU@;*!x@psi%CntPEHyKJ9&U-~*VAh8|xqW#)%ma0v~9Egc0Z4p_sh8Ed%cOudMekEThA7DFpuaLIap|)6XVWmH}Tw8s#_ru3GAL+Y~Z&q&h zmtGB#c1DK&O1!ju^W`O^}!bYXkTyajRrRnZ=ipxv9}Rj+z#R{;>|;E;34jz?e@Ke=;q@FZ#Q_S!MhFK zL%fen9!#Ge54n!>k;n{}B1S!od+oPlUnDOev|fU2D84 zuABvGyN$GSEZD4mBv-PW&qcZ_xS5+f+NEj&2`#E2O&Qh)%P=|m?(O@w<2KW33y)rl z-*1wkELk$jLUNvUQDu$+zxgI6hXKEPJ7 zi<%iyr|4h?{Sbv0b^Wftv>EzgJ8XpkO84`_POUo`px#ltxc0C2=H6WW-dv%<$1ZM7 zpZu?jX>OSMR}&xAJdyfB)4Uht)edfKuQq<-UH}7zK8?dudnk_fTlK+e<5FZ@z&boU PoL$WGnz8#&3E%$#g~C$3 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/evaluate.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/evaluate.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c915d1a030598d5d97b98d0f4648a0a7cad92b26 GIT binary patch literal 11603 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

b2OFzLOWGT{Us@ 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℞~$03*Y*W&G*ZLF$srcRyzg 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/occurrences.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/occurrences.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a857293ef5918634498658df41bb0463af953b5 GIT binary patch literal 14164 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 Ah5!Hn literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/patchedast.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/patchedast.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0f376d6c27d562347e6f54a20aa78d8f63abc82 GIT binary patch literal 26312 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/rename.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/rename.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fd5033717d5598254fc9eb739ff3dab589837d1 GIT binary patch literal 7933 zcmaJ`-H#jBb)Ojyhr`cZtv)O{NinIK#%%1B>J&vQyRKy^8@q5A*WOkst7dj~?&U7I zKDIbS^s5i{5<5}$D@CYL|DQeTYY*vV|(KCok^u%nYev- zQtekKUf-M4`n8GQ_b2s!-KKt(abwc#Hz%!rYtrtwxy~JTCR_b2+xo60s>1ui5}w>% zR{B>^t_dGypUXR9OEg963%h?+v_-t4QK8xiv8>Wda>eG38 zIFfOui`sOaL=<Mi%Ll<0uhhS@`la8qcCk7T(iT38{)^oC+Bw(RjW<^LThT%Z6j! ztrYbK7;_{)lUdO**#~Ko$pllkzL%cLPo++0DwbWlXr^&IQ%WYW)G=*q^;;9}F>0jM zw}sVrgx#-*9Z?Z34&|D|_p8FevH6kSsJ65Qp72E-J$%s+O&q%}TB412Lv+Lz-c7MB zuHfAg4#;t}@IIAv-o?-F2k|)4IvAuXm`a7$WSATU*dChk8booHDpWNZ0e&B4K^!Hk zW_c>rJUd3~Ju{8eZw7-|5;J|@3?`|Vjj3)L#V64bay-dIX2+>O^=YJr(II*SAb4;h z=S1cpQb)51k#5(l*^AwhL_{IVKft4Zg(SCgE3|S4shwAZeNtDCGiOxEtr5ygs&|pM zMpdd=+GlPCdgU&)J*HM4PaSP_jP=#OXN^%)I7|C)?c^YLMy;jQveYSZZBaRKIM+FI zvaQiJ%_`ibb5<3!2S2+q+R3ZABdX77-ntpB{*A_>>?Yehi!Ew@=iIWWh8fde-1}${ z9HfJRmf1lt)Il#z2N#_4(VFxc0_OSp}EG*dkXY%IvWe> zR^F!+K}uJq)A1=$JDB3mP%{)D@^CPeO7AY3VK_{NSs3n4=Y<6}^;fIEsDRKf{`bo- zzXadZrYa?gQQN3gH6%szNM<4JCycVfPsf4_MT@GZbHf6PZm#H%JcZ*lj)*_rE?U%i znCL8mEEEkY88K82b>IH~ZH>VJh+)EO~rST0M< zQgl9=OjDIf@jYh8u2;B3O?4HGe2&61^zXO9%X+=(en-qElli**FP8dk4EgnkcaGDE zymLA{fn?m-JsnQ&9L`8#+%bfG3yV{pU(gZyj!LKU&PtY$p}iBG{T0!#U|tPHYFUnF zd$wJ(a%vIW6PBz`^?KoaH~sO{cu&2L&-r% zrzo@1Lm#L+lY%EwR0_ry$hkVMyJbtA#?tzGTm2z&)zNE9YjksIopn&Um3w(->6C4+=N-&kUlMidxT3A- zmyomX%8W%nW^1B@L`nhiCFM-4xhdyHHr*5bj9D$Mb`G z!P8?|DsEEnQDC&NnRlgnu@I~hD`}cJ2(q+PHbDf{Gl{a8w0${N2g8K7yIy8J63dG; z)~jU?_SH-ttfpE?0?ouK%}B(0a1d;mNLnLKCu|VdOc)8*bRH#nc@ih6&W-V>Lp_A1 z+YJI(#Ab zgM>H%u6-8c7`V)hDOMJdrW%?p6QhK~?#(VsDx)g@noej7FAv{hJ$lz0@_k z?~-92>-Tmy#`G5VNsTbc*0}6966=*D3KrLSF%rUezoFkFuA+C>Ej+VQ;gYH-{1u}Y ztxe6f*m;mb9snsZfq~WlAMk+z8E?mkLI}gh{1ju+~nv9vRhp_H^ zN_7jv82}X92B#1r;&W=%pf<9Ws*R**$4Y`9(3n6h)J>`*AY%0Ax_Oiy0>TxQu}q34 zE|366h|0p9M%i((ZFC&qPKiy5MkGXNh_9M7X$vb1^>I1uI&GE*;b>vB9>u1Zy%uA( zS29*yr2%06^eJY@QVckiMaN7b%i-NEw*Q5n$fpLT)ynHtZ_$Ct_N#C430L##qDd}M zXnZ2orN&yxGlge}Qq*wJkd9v^Rtft}nm;xkkb#PXoD6r~rWqJCmb1{xdJlV9ugW zmjp{W76!>e0*w3DOS8QcSdrmuw_?B;?d4TOQh$nu6FjSPmyh~7G8v&0d*m#wtTKY@qHd52!VY1j2T7_H4VcZ++87D>6AV){Nzu7~2n`Hp zumsVs1d@s&(t@9dr>(Cw-gp*teBc zN8V<6R6~uwB*zv&w{CX+F{V%q|CQ*RT6k-{T%J8rMJKz4!6xw~<^3zBrWB4JhEft-k$?7O|U5n zh$4h`qd>=iPzKBI6YMu38YQRW2=M$jj|Ognh9OW4hymP}CgV9Hm{Qa7NS+*!I>{o~ zo7HAG0D(A-)&@n<4$;S;u2dNi^$7ERQzNWHcs2tX#%7W<10XmBPE6(jA;-7mU_dc7 zY-XSL!NDcohI|%HrU*c+>2Qe#@R<=YI-i*p2BUnQz%;)@i$jg12FKe*Ca;}-+B{;kU!XKYmlu-2A|)Y1C-9-@GaV*A)MyTYQm8k8?ouW46AR;~xkWvlFN7wtHBVXZGsfEI+ zVa&o)@(9YLs1na=d_GXaOzLiH!?zgY!0ceCZ&QxNkG+yVrXo#iEI6T67JzQUT-trA zNGN$i2@$R|=zNigfa2o&byJ|*B+yZ?fiDrce(8eQxc)18X>x8XM%XQ+gsFkX3339; zExva7dWkP$6RYZVD|`FlAqww#2bFo zb$s7)E2U?v0``CEWbfx&10h`TR!ECPK$ zMhMVVALI?_97}!htFn$At2uwI67!JsalL02%YfP!sJ!OLoFDQXw_#s|!Livjm+%UMUM7d(i zTwv)>Bc8rZ?pwIQ@x>1LkWit|;6tvMnd9nZAyo94%V-?dwx$fnAtWBh7cb`8P5(}G z+x?x5HC76m`Irq3Gkc01swpMsY<-Gif7>t^&cR^-Y`bwjn;Ovwa*|%=X%eGf;?V&T z%ca0Md5k;YYKJ%+;1xl3>8FZ+LRS!i{@-|hZPhv(HqZv u;bp+jYJ{(vx3qDPwFWBucg>OCBT+K`gYyPH#k4BhKeC+dyA%v)-1t8bEm(;F literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/restructure.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/restructure.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bbae9ff64828a36b95aec5cde26b9399ce84e2a GIT binary patch literal 10434 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/similarfinder.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/similarfinder.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4b21de5187919f9d1f6a9f63fe93bc1d64aebcc GIT binary patch literal 13202 zcmbVT+jAS&dEXm=1qfb5Q4}T13aZGeA={KJyH1)>WLmOir?p{MQmh!21A^Ek2@p4( zU0M_jritlJI;ov;FVm#ghqlvcUfQ?*3H=8;(`k45(&;gZYN*O%l%Bd(3z>ubc)rY)U)l`&RliQG+s5loacUM zc&?vo%^%p+1>DJd1>7n4$53BHea0)IUX=QA)Mvdp)aRtWg!;UePoRFxTSR@) zKY{O;Q9tf2p}r*blc=BYmQi1p_g7Fq>8+r?BK1?=Dev@$M)kD!n0E%}$2{w{QGR@I z`ObDTD0OfO?YU)l|Pue8}yrOjs7Yj(FvL9^3r*Hx*}^ZZXiF{4s8Be&h$ z*bSTQpzK65d{Xb$+YbkRRPgs2em`vXxugD`S8cAM?6*$v88ROr{k#Zt}hOMWIU)=+{X4!!|q8CAK*?Z z-5c9}V@E!&leA|a&CaEb-LBX6FZCaW+r92HXoJ^s0s(?cs@L}~DSxxx;1@BaNH|}u_8+POn&x-| z3kTPf`oyek++X7hU&CQED~MpxvpwfSv+6VrFXLI8wwLvCsAoLa%Y%hkui(w#oD){g zMzgmyn{GgyBS4ST}el(YS&-|&M{Z&P?&D3tKK?fa#0+b?x{As#imQd#GG zSCjeTA_&!PBivQ~dLl)XoK8>q(nzzr*<01^RT`Wte^fsbXty(?j{HQSnL&Ebpr*200gWxi~@ySQ%;(RyoUXt$0X7*~z^A^OP^DpCS zw;kS%^(xBtA2z^=DA!lLmft{w?4EKDrF8EprsN+Z<)I7U^5;eQcuvS|^ zEjWXNVY#M-zZG-NTrgcTE2V(zC2O!eG2_+bV@3UKWcW3H9Df!?L|_9KLUv>5cm^1^ z5`v8_>%iPceLn+MTP@qOn#O^(lT{V6_Y~~%DdV2CpWV+5vlNw9=D^so@HDrdK|R~b zK^W|zGt7AQ#}3SdQ^A~fn*GRtWyl0!U4@bDcRlrG^j~%(r>?eOvf6%EE#gjOgIGeJ zs7SIUyim)0IKx}oU=GYu!5}J9Fv`Z2)a(eE)l+zO z5hYl{!4R4jOb0Yw0F@oHXbw(IQg&s+Nt?LkZ5~uy+=;pjuczq|nb%=v(H2 z@ivs`{@h)7KTyW3lr8B$D(IPVuw_SPCG&}#od;eJWn{wB@^LI3NIcEp1@_LN80Mlm z_|oSLJ9#^`3ls=`B|>ov7aV#EL-))BYaarz@4!CTp&dG#)`6ui4{gsrW$ZgRJ2=~6 zrbSU8w|9d+^hrxcE)j!lECyZL0EcP@2dK6{JecHaE{H#x;`<4-NaG*y zz9GDxgFd<7`!vVLYzBGesu_HtXiC*A4pFX#HyX8?I>%cSDD^B4>|%^-G61T!TEKxN zpr3NHj#XG(D7uc^Z{Sw?qfD)#1h3;T;ieW7Hw7n^g*(b<YhxCNl(3UKQ6d@C~1fnB%&O=0KCj4>c8j2ZBGZ6S9dG+Q+9iSE#jsIT(yA`erXCzoDD5kzBv;{_Hg3%*Y~j?|2% z%EGy(%EEp^XnAP1EEJpSq4nBP&*Pb%j6*s`PKEa0*2*no`(?f{HMVQG_ZEr(7sDKU z`S6Gikz`_QDKDNzE84n?J2vU!snEf>&<5S9s-Qd0aP&fbtD>I4H|4B0!?UrO^+?zt z%5B$!dKfB|!#mZy;7LA_DNamFh(9&0HGFg%MFgHkHVdM|w3ZG}Pkdg=(ZlYG6Kt@l zE)EbaQwtk}iNa>@y)9yfYna{FV2d)uG_k|7hS?ocogLRmF zux)tHQS0~54l`n~&%$66@jCSxOkSkpO{U6_3}?zfViHzYc&W_&fk2RGoTT@Eu#=W388b z`9*nK(5AePkvuGo6c|mu)7zEDh%?eQ^vG7}Nx;h|%j+^LR1r69#W2((9<7HZ2tYg( zuT)Q4*lND#cS{h5&{y3Ua&mMP;hcI7OoCQEiIWzqW3|+6`C7EpD&Nt*Tv2LAUR)r8 zLKq2uF0-l$e5mGig&<-|&}e+CC;_F=$Wyl$AZS2HI9lf5%prjr4JT+={0KiPc&g-A zQK6c&jGdgiLOIiB4GLwnY^oUXGGS1RZ1MJ0@u5RNC2bC}>IPbg=4%b*!-m#kdI65U zbo`g6R-%_ z&jyM%B-qIiLk}|tCJ`}$oile~v|xXo0~!>diA*$GyM=(_?Ye5#Hvo8wH!y`eKKvde zCCXDiMb&i>^Ily=gPxjz_qiL#!%W6~y|&OI*xMfg(lPXh1}trq*~6XhbnpWQJn@V_Xtd7JPIZ z4_-zI2$C=;tB`kXH&;0Bx^7W`O9KzmAJujZCAf#f2qk$I&<>y~!g-_W9KuPG7XnI> zd=OBQw}HBzd3ejL!E|i{1(FYgrLEOn@JDF1m6a7vfH}+l5}hwOXM>)HUdU zI9kb@41T0t2+TJl{RtDAMEn%~5{$!`NtIhj8^LAZ0o(yBGhtb5Op;84-$bKo;;o)a z?e)kjp$+;Js7v~=0&)6POaqatHt5>U5Rj;E^8SJtUIfsMdb_<*Z|o$9i(jd4@$h+w z>mxkW?mtWSPhlG@jhVj@)JlRXo@tGQx)*UlOQfOX7OrcwHQENl0yBm9u?;|jcf``% zL3S&z{Kl>d;G$qK#ALF)XpW<=Az@O})mhWZn#sMK@qW0WFi-E0n7+D5;B-t!Ie$hVH({6u7S*WJ;K9+BZaaI@1kSz zFh^KCy*09h2rEl?SwrBdNl-`r3?-l?GvF1A*5Ks$6vpU~&VZv&9U@r)J4e#XJOoSH z>H_Mpb#MxTEhlDy+@E&Yn&2`W@*~Q^Ji(1e^EB={))03%fhh0d%`rP6CgR(;_m?Q~ zG#IcC9zS9lBce=9CY39Ki@l3UumY2P2FBbPLT}?}w}@%Mh;uski=)6jtFgVLC>qPQ@zLmJFp|!&MlJ?ojDCFvZXz0%5&Pn4p;nVlUt>F$ccMgPh4%bNh zgbd_R7ut*^HF8l#)w^51cHU%m%Ksqjgn?GYb>5%5oy3%y?b@%aH~B2XjOt!A3l#=& zLtsCCdxS7lj~$}!-=Klmtu30%_>)Y|q<~CwBsJ>=e4G;R49rjx<6-Jgk_^;R06tS{ zSs|HyVBb#O%OT3T%DX#=2AM7e25@(5^*VzHe4iJr;K&uTZJDq@Jb)wG#Csv%+xzoy zhM3{Nf>8dx4qz~jEQ}u7SAUJKi^#wslsT}2zv377zbnsY!#T#GpP0%;Jr~CHq7nQP zddNyYIqBzLq@Nei589D_PNN@pKQC>&!@RWpQ)&CBchNrI!}z|ddxJ7C+O;b;@0909 z@vgcK@@aRGZ3Z>s5vvIek1ap~^&%S%D9VF#%s*gxU{)|`s!I$RB74y6s~X!&wW?eY z+ZMUdY~+G~g}=(@6pLy;`TE(><&|ny?miozuS8bkS(Gc&7KPpX9ZGNo2O7pX{1xG* ziUc4MNH`Kk%)#z6J-7g&TEaU8q-EjECj7v-xl5IjRy2hRE2t!9XCJ9HqLm?dEx6Dg zT)w5FNGt=C))AYn(vTs|4fMYkVpSnFITBvdsII5ENcKSWzl|bkV>-)sm-fw(6bF#s z-?8okk_!=FibmOr;&?|`R3Q=i*oni^prEMgCD;)2A0 zDu@FUWmpzvxX3gK#2<+gs2$aTu?sC95gf9c!Fdt>^W(xF$G76u`e<7uHV#o#lQ$@x z$b!Rwsr#%?8Tw7!`)8EYVmYu_%tjt5RAL8HW5rpeu9*l0qm>v{C-OP&IBsREO6$Ff zGv;$uavD@&e8JfvV>@KBABIfehh4dI6SENDCo32m^}ts<=t8~20~IEoWmV#?XZ7id zw$VpL9Bq8^uPABKmDj}eg~V7?%Cpn)#W@av^HoGNig-ZLVan>Iwi%QZ zMcOL%J4SRNzrYB>`5&MJOE|ceTXeJd%izy-AIFue0Y4t5KkC;Sisbnp9c{oux=}{F zTWSc{1dB)`y$xlqmV!Q02$+DlBOIQ@RsX>;uoc4`%t`x4LukTi>4;K7;VoN(C2d{e zgicAXj8ud|pM!l@@$rA61SrN}LHEblRDU}$HQG7pk#tVPk-10d`?=V%G4z39({aq9 z3=>1y5`2fm#8~RHv`}%CAR)|A0!B9e7m6l~HJBX@6n!zinZeUh?p{ZzoSfpPN6N?m z5B?oRU>Ib?c5TIb4V3i9IrBFm72h{D5eCAtyQ4Vt`_R^E29y9s!uzR(VgpGDPNO1t z4NGr`aRgzBjMzzF;9x0jx9=-yM9+ejATgo5)>34uF0aW7z2J2YSO0^e?I&^b$}5xL z`w?>F;$zKK%tF?%q&G<(A00T6zCUA^vACX|?r;J@4HN@~fhm)iiBKk2-3KMWQ{c)CSD8W@69&L-cHwY_a`D)I0^)`+J6B(a8C{R?t zh9)M=7==|x$Xv3v&>$TaaYx~~rQXIfq;Vzgmo!~so%mohv61S{Co|$Q$l%0yvhOe_ zsaPyB4EiZq%Q5!8!_>zCVF_Hf1az%^CY%_R7+9-c!BrL(7n^mkz`+_eZXB3^GXOOF zhHLpJxqM=;=nxMXNy-JFLYH_Ekv#x{KFdNbAOoTb2Ei+F5Db~21^$#|(s}+o(yv^U z5KT%@G;71Ul;1yJ{VcCCG`P`Pf>(QRe1_)@aRmo@y{yD)SBM$cj~%R(vw z`!b-z*qVeRc3PYQU;|e!AU*?U@J1H-=<5CL^Z2&imDUM-`HlL zexuiJBbMrE<|vtR2F&UNQK9a62$cDj-h832y>dshGG7hA~%FM554e`vA zOcNprdlD891yYYl2+0e=e}XQ4A=LTI91c!D`Qlqw$*ybn&fk0g*S~!)zlt#lUSj(UVx1mf>V_dlq5+8+Xs2qyYsYqt^2@cpY$Y{IcV^^K0*wYwCMnj+} zoaGRTxB%jD+!>&rf@5hTiJR$<)L%mh-ojyIfq{1{;m$+*INIG6O z|IB<5Tbl|KTMfb=`|ZczZxG+cvN0O>w)4M$nB+vx1;BzYDW%qKjjbBbv1d~;lmA5n_(ME@b8G-pGfu>GqW5&h z)P5=er72miwA7Dr_mLAP+is2ZyD~NLR2=``JwIy36pL?;^*p6SvG5;}P#}bqc?nS! z6;e?T6lF(|lZw>T63JeUG@Z0pUt#xDNG@G6w}C{0Erp>Y-$-Xop-REP2dL=06kL?7 zZE^dQP7PwU9l(u%?PKi6+q*tA0SUggpV@nU=wS5=iDK@^#l3TM{)B-554nA&o|z`U`xX!WE7+)$MImwg^T*b#j|9MfO*o&)yM_mPVXb68}+!h*<)-NH`n){KX}8MIZRxlUz(=sEe1 zfLd);uwZ1aBJg>hGo;&zir4kO4BQ|{i00$k&E0N;|5u>C#CNjTng{nAWwqZ`6p<*0 zo%w`KdZ(?^>NUH_PxRYOEOSNq{zL5gY<7Jw$^lJsnJ=1&|0_T~nxgKpTKYjP>=8z7 zlf)Y0L!FqG2ay**=AxaP5nRu`YWEcNah2B2Ca4X&t4%jFE3nBk^5M_HC+yySXJGGF$%Kn%_ z(%G9WUJ-MNZ4i->X^n~9NcP;TnsnDd6C*f>gJS}sffOs|f>pE^orUKYZZ2#r%q|r0 KcX8pIJO95DF=&+l literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/sourceutils.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/sourceutils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b65b0dede870995fd31f374241282caba46801d9 GIT binary patch literal 2678 zcmZ8jO>Y}T7@pZLuh)*9xKTqZpjJT@3vEK-fCNnbv%#~CALND;Vv#}GhtDWz!_j#Z9nf-WeE&AZMFTVe^#n?aW+T)=7 zIll61B!US(W)nW(oC!y`KeK@&JmDjEMIai;JrRl~a$iKEg**^#v4*@MI--j_6zgIG zc~kVBv-s8pR%J0atzjW#k|*P{b2+3v>7m@k_Y7aTj-+B4*DP~1U*N@jz8kxWhMC^5 znB~>pIL+l=nhTj%r3nvZ-4Z*-r=HRTl;y>rOf@j;^;bJb#YFDBOpmKV?QFkHCp!nT zT#V(;^sG86@<$UK3uT*)(}QwH6;rvRRX}vX=g#T-+WC_Gcz^C{H{%N?++#;QIN7XVb>(KBc450S z=O>#lm?jLo-3#)K;gMmnZ~SsPPAg=UN~gx1q`3u15s+awLvX>Y#NuGxQTANZnvy0dl+2aMZ$P!aV2cq_#D(De&4yx z)m!LYAxs`6GFgOgqfh}?qEH1oX|A0&fC~l5`Qv9tNq#8%)sgJiTP9UnrK01>>7_o4O-Vm3|b(?a`;WVx})^;vd?bx4h~n+QJE8Rbr1QF z4o^>nZxs!{qe9dG_Yvu!1J9fVgR^<&E|_{)=fb-K4Y2JV;=zZ>0o2IJe2oa&V)I57 z=tkAhG(TJbgsO@4qO3)|h@B9mYwBj!)~;YW_{F(nDPvngB2V3?1HqPkppCDamNx$G z1<~f*i6YCKi+}ONYu5dBBsE9|Ko}EIp&UXoO4DA75%s7$Siu5ewZSy)z$#HyJ*Re( z38rVmLP^t@sv?uaN|Bf2$b?prW@8E694BR2?=k33Bt%P~YGtXsI?|w%=A~5RbW66u z`c=IcjY?UW#^q${BKedE`+7M`aBJ9C#rFLSk{U2=qg@PW_H`MqysHB)(imM_oRAI@5D!ZbGU{5L4%#l83;dMxSDq22RhG3n;RNV zK0|v+635&SfvP@2X=NTs{>r?+QCXTt%!Zkcb}|@<8klW`&jZg{=0oxMaj2e>m?CE+Qm2 zy-RI6z#1Jy)*s-y`w7}lUcF#d7i+F#oekP=i(zk!wYN^F109aY3I6%xODB-1ShV^{ zF8TlrvO?yylBfxgj&>uvEbdbpw`ZH}A~)!wwy}a$==&&;{)IL~0x+h7mjoWE+e4tV z`J3F1U$KaUhLqASKz9+bD8ogHe+BY_yK7o?2<(;Vxx668(a+8le<-DKfm6&C1=r0} zJwV$4-|`QI>bp>uCjH-RA0!Y9`ggJFbafNdF+*W&$!^c8XzI1)ZM4*Z@}v&Er(}iw Te`~v;7e?Vm7=*nr47dIRRL^{) literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/suites.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/suites.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..827efddc734207d1a80d283091160445f90133f9 GIT binary patch literal 5228 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 KZ+qU-`~L>~H34z} literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/topackage.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/topackage.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9d8bea1086a4cc4488adb6ef412282deec490b7 GIT binary patch literal 1467 zcmah}&5qV8VQ8Zju1N+ax}P12-GlqP<2*z*0||2bs>L}My+)v-Skk)(#mgDBc!g-eK!J7p29SrfRH|w zA`nyrFG&#&mlsS#B8Gh=61YBfZ#`3D-NaMA}L zp+<0~M_J&Kl~%Q^tV{Ja!7Oyl$mT>R;G|O!e-S-~<<$@QnQCQzu{^g*=ktqYn=jU# zXk@;6Vb4_ed8-8Kerc8qlWVn-xt1qog&tO|h9u{!7cS*|*)1*Sc!NPC2#x9H!JT^M zJF|+S2@FgN&3$2if?@%;OZs^tZzc)8G*+e6p z9uUV?r9E>qZg(-cmQ87w7t(O6c)2jDSzGDGr4YRG#MBtx#j8>SCmrj`R_X`?dYG}H zS)xa1lMD{VO*;82uLc(DchL4-d_NgtaGyhpHmG@u3}WJ~PNm&mZKiNwJ_bQ3qf>ZN zdLQOKJYxVI&-UPC^TA#4Z^fvvdK{SQYhr&28|XIT>hZQg9oDQyq>&3DU={=7hyl<& z@x{6+hV?WB1RO(>BK-%Jy2-L#DQ(ww*+2`v_nTv-U~}-sCYy};z75Evuj5XKIDiNE z-sz6M4|#tC)5IVM)W1(RU)-(!|KL5!V*HE{O3vMw^MO;KPdWc(T{goTjqTU(qrhu# zrGj6zMzl1hfz#)c1}RJ5_Gj71J;eUZckP+q>W=;pJc@n)eo-1Z-!jef6zQfBE6*|) bs|EgMe9$*#;L^uK_D}FT_y2>GK4AX=xu$$q literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/usefunction.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/usefunction.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..598618e1494d33642857c5ebd834802a04564817 GIT binary patch literal 6642 zcmbtYTaVku73Po>MNyZP*Us8bY=?H@#!3@yf&@vMI&M-s?gh;zaGV4YnlfC??5?zw zD9=#qU6p!?f;K?m0_{uD0xb#@D3HIz*FO0#({TpnPMJ{~ z6K&j%tKY4tGVnUypxUVpYMmN0er#}?m%cK1Nz`Xnr@tdAahF%{Y;uoR@jSz8 zypHEO+Bf(b+OO&MXL<7@qjlynq%m6M%<1lh!(EYiNvQVm$|I4v;vkI1VS-X|*cGFs z7Y|id86CyjebG%+RvsM$|(f5QES~GK6N=w|>cjfCzsqb($V_&kg zM5{#)H>spX-%Y%Jb!OHK^+o>Ouc4$)C9D4_eLZ77Og?)q3oVv#n7PGUBk1ml z?tUNzfI3tyC$q5yJFK8HhIQGBX^25edKGBvV?P-<45 z14jcP&#t0YUP5*eNi~rfP#F|wx;kHHFuY?%X|E!1t4lhgA0eC!MCpoR5i z9ri6wW^VUOGh@Sm_CPCrXldV(capN!CupVbQt6B_=c%)WQW_`CtSvHI1t zM70m@e@Y0+`~UgyhHi`RT}GJT)+6hbK3}7c1wyg6CTBl}f$kRM;NQHiZrz1raAK%K zs#Z3+Rgz&o_;=7jkzx&K(u4Um zv|elMoPKK{Z?MVvW!*0IE^Ly3Pf6>QOdPwcZ4!IPwpylMynGoIEv8p+Ql>LB>Vh!z z2EB>KiuTZ8lglUPUuk*2@Jm&+E+c6%MtC7HKnymXECs9{u_^q})JZM*A~#WL62x}d z)X~1m0OZ)T%yYn%cg!A}y4+4(JS$0ALymw}N-L?uOOHxZFZKE!yr0RPMA!NieD8FaC7}3f}LHGNWZ?b|`ldXXI51d-ECum9HafRbiKda9;$YFiC_QW?ufe z8;23lk@J2IA6ja*M!U8h^CJLfmz)oAK~C|cgiiI|aln$({~LOmTm{9v@Eum4z|!Cyj|2}WeiHHrR9ioWD@^2sO64nP@)nXp*a#)MV0s(>hFJroT+;^MJ8W`c zS+&dfU%?jfhgK?4PeN)XhJf;BwCO;Ym3b6<1z^&V$}O@IEOzG!n5)827hQgaaTjP? zLHkmh6^RNDRMQg8I zQptS05|wNisZFC|v>LUdv66bfk)lLv!`UK2qtGL>N1;-a((}K%uBH?3y7J%l^Y_}^ zx9P9eTF#9c&4_ryfrhw}cd$4~Kqi+oib8})ZTfP=VIqcHzDFOmfX713y<64@5Yvdm z5s;~15csCBWL_&cQEdLL#u11&9F1ro(qUFxw!Bs;Ct8ZY!U4>e3?ZvL>_xmAN)Fnc zOGJ+QB=Xd zAY6*W^ocGt?*Mf(mg5O+;oBw0)0r8Fy*Ss%OznBSt*JC)?TK?;-MFq=6Z0j%*btJ9 z7(r3m&@#d2Ba%qjhVcm;(F0%~BbamOZD|F8dd>DL85^BY*SD3M6vF{CxAtj38r?P~ zt(A?@iXmQX-=s)CQn%VguZgE&3~)nGH|OA=Vi4``w1H=KKkg0X[%U4DRU4l(&X zD!7L%tFO2<`6H_Ei%iF0x9};D6a{qzErL=L=>q5!o_gbSsf(?nZ7axw;7Ll`-#4_kmR)`1w`7ZYTnbhlEgH*9tapG04BGn%wNqkis~q% zI7v~Z%WTtKbL%E+HeJg@!haoaRk!3?Hj~u4-~;Mb0Epv*vxK}c`5F^;k26>w;S-{C zb87B_2U4?dLqV{2Ze4^gIcy_#ht-oGLact}7q}ci_~oWfQt5j$Q{GyN-ESSo;T0}+ z{GA)Ex4g$Rza%su_}0uGj3QP^-klT9Pb zXK6&g$g~n}<1?F#Y<7*wdkDYDvlBcUJ&S85jx+H~!FtsMQ2 z|Ak-6)|k(iAMht$|z|Oh;tK78@TL&5IUX! zfx!H9EOsu)C;C8sMu*Y6`c@2=WJ!pq_+c3BLo1o152_RZlQ3EN05>5xMxT`GIx2sQ zH0KI(o|4M`C&}ak^puja7P9%=GNA&$$h3OsWb}Ka<$0;Bi&Xq*N8UkF6fGZL?r{@W zZt#BG#uNUJJ9w7#wVu&&=GS^JKp!_nnDr%k}r zE0GFqp1^L`Q1vGyMRr5iE|bfr>F4;Sg(jvSJqy^8!%1QK033T0RS;$_#&f8_)bkCc zi-gnQm6hj{{sj#dM0@FUL2~pIob%twp?AW}k2t5mJaYmK%D*j%@yzLB=yoeo(2i>h zpsm#FXN%zC$rILsyYnm6J7VYWOVeIGecGkg|NrEb;5Ke}6lVU%(#%&*pLx-=n3k4F zNw1mQe#&rIHsN?#0(%ErU&0gdAKkGXUZ5!N^XAk-8LoZ73npT*Yo9K53K5T{R?S7# zrDf&^+3p^q>wvDH5N{JpfWQhgWu?5Lq+6XdRvM@NB>b~%zZCwF0W-DPp3st-ci-Q~v>C%;VA-dTGK&DWY5CGk{F jbw0fvXC!Rq-pr4cw+PMJ`#g^``8lgOcB_!wah-ny5!@l7 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/wildcards.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/wildcards.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c36625b5d77b6b13bf5a460d25631ccda7c4358 GIT binary patch literal 6474 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 K!p0B6#s32A2dB^g literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..553e2a045e4c59734cd81769765b8598d3d26e40 GIT binary patch literal 9920 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 N)cCRWwqN!O{|i!nBfJ0r literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/actions.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/actions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1aa9d3f128c31041eaaa3de40c2d9e0e302374b GIT binary patch literal 11994 zcmb_i%aa?&eVzv}7+|qWaJgJ^NtuF3S|TiYX-k&lC^Su)5*69fnh_aF+>$fIVrIF( zVu5APEVYZm`Vh#EawR?_7yk)~4>{zXN|h^>TyjkLFb7|fix0Wwkjg3F_v?9J@z5jA zpt{lB^XmRRzTczgwZ+BC%YSwI(U1PXF#g>bI|^vuLJ9u^m2dcF*Vr>RO_Oa4ZEMro zvp4O%!e&9n>~3+-*>t2`=$7`}P1iKuHvFRRd}8=cP#)Qv74%EKi@qCF&|g5m>{rmQ zNWY5yf?q|yD*Z+D7yTvlm!!Xh{wcqPeogwP&_C@jqrWWu8v1Aa74%o6e;WO>{wn&b z(qBgZoPQqu^U^=#ulW}~F*aBHi}#JjbHBq%jfNS!-S*Z&)b552J1*}Z^|v}fD+=RE zaM%j=qjtX+#-%Xw_xgT_s~7sM)`3z%uNAOcY47d#Rn+cn_gj2kdRS=OLJ40%6&RbQ zZ){q=>05Ze?c06<{{>C0&7!8#rsJ0}uS$IS9eL(Ec;>@)*pB+D#mDg=n-);+poF(j z9bNU!q1iDyX2&{b99xk+G=|p5I<|-QP|l33`?xJCbc(wb^@eHi_sHm3AA+@bowX4c zpYbgXCtlEt@wl3}?0KzjGYma1c0I4x+zZeuJqe;_6e-1t#An{?`v=`%qaWSvAN2gU zlPtxjPmBUl*iMXG`kIjgG` zUQiR#zO}a>9qD(T#%L(qGzXWbr!jf?7n+V*bzR%FWweEX?D&1ucWaK+Aczv~A| zadq*crs*-CI+>p*i6j|!e(HI&;Ez}kkXO3WMo*2jW;e(;ovEMX)_`Q#;#BQ0yHmn=aT|A=#?woY+bIv7k$GH_Go}2@2SCJ51$c-jkF4+~(L$#> zv`0WkZ!y8ZhN+&%oEl4ttBf5GE9m+0B@cM#sf3RnNS@N$>$bxvK250$y=Kq%n%#CY z3_?xPh3z(mw1~=sW2d>lk0&Y$R9wOt-WfmdHC3RoHG76UIrIVwwPs>f)z?^^R1WoJjJ=8y5_%0GnG14}Y$TeC*5F(7N%raD zmFW&?M-wEv^IbHsX6g^LhIU?PbDokMLBc87pr!@bD1bgUqax^2fR|u(N+b9Lo}0+L zqIqkSz%%|Ce1xam!qTs5FtSHAC{>h&CHsCp&WG}@f?BGv4L+c585 ztJ(A5e$fzA^0wfJs`C!AwNcPaBK&J@KsYcZ+a%-nQN}R8Y7W*WSCm6N3B`lUN=sNn z=cmTDDZa0J46w%n?2QZ?cp-13VueJZA+TWxcNthv8=A+~&*;yZvTD&j*se@5V>gvs zD0{vJv0H2T@+T1XeZGqJhzd)g8@w~Us97XkztQctn%(f``rK!yQxr6j8T}#Nqeqh| zivRIVjQ$BqDDq%di-Q+G-yAYfaBz193OCRZ^Z5#)0ib$0GoL1nPT8YDP6V8zxbaYGm;i1+tpsaU8vGStT57FuwQVB1YD9M}h+fz||zei4f<;yiqZHG_V_J>%(%9~iy$ zLlVk4K`7iKgnB6Vq5~DgOK65sQzdvB zFQ33xVrQs#$Ea-kwvJ+4rqa-$*l1=$umY~PAYWSxWAJk{F zA&2vMm`b7j48QtyT=EX*K>dPW?ZC4xDUP;KvLnM(qV4?f7<6{xQ|||R{bzF^G}8cL z**Jto01!j+7TX{pP1lmMC6k1@J`MYB1-3% z1{{beV0QttH9fSoHrk4|QO7f4Sary$h^Ol7tcaMp5=3F-bBL16jOKKDW@(ta0Xxk| zYSL;-_>@0bTJrRpxcDibPJ)B4Ma7ZXJf)+Q^Azb0%eN)nfrJPCks|U-_;-BQFXO-D zSFq%Tc=5LH=Ug8A`gUFN4|UkJdQ(o-HQI-jN*%}B2(5bcW}TjRy}w<5tYaOfO&)&~ zzEW>T^+>gYupae!e?4fnc9JJ>DB20+G1{-G!~d?U07~2o>yIC(gW$0YJ;6)D`oVtv z;~l=Nmp%XnpuQFGxq&Z_!4oC!s`q{rHn=L$#$aNusibB!q!Ua!-r=49 zj0y&UIt1`XP`AvvA^8QjcVsdNh7ba+0&dy0`mg%duGK48$mpnF@fzP=L$Il@l6C=Z zw6$iyY@kl=+M#2e-G!{(n!!+%|9;^d%!&G$U%bzI^clG#IrA%-n+fjn3eLvidy{!t z>en0>U3WI_{?5d5#GJ(D`h!LZS;es3gB?MVQRj1*^Na0n&=VUSS7>9R@Z)y0qsX=? zuY0qcI!0g5o3Boa4DIw^ql9%-1_Hf;<(iiew^Yr#xe8OUO83Zi&_d|<{7GS&Z@N!} zD}RqCk8?`>9q6DbZ|_>tOQ@3ciZJTmBsYat?7f@OQjaDQU4p1 z@G2_uh(8@Ev0j4mxZn=Qz&~a;zchnSoPod49j;c{*?s6F|wBA2{8@*&m^Z zf9IAUHAT1No>d%gp=3v9<~jM?B+Sc#!wk6b@>_@d0OR|R@Nibpl;IT}Cyk>KENN!z z=Vi=v0^oJrq%EtsTy=K8SV;7bxFy5bC3A3bdcHZ(60msiKQjOXMu=zP0B{RMn|v!b z`6-6dR%nTvz)&*ipHR{q?$sHyn6II9UNSoR=s*t)XxambAugjQi8*nom!Us4G!_nZ zl47|4-C-Jri5Dals5_FVLjn%A46z0@snTN_$A!L0YA;=4RjUfa73~L~RE#l|67Pq? zua{4${1ksUt}y?lHFcH-{R?iFP}C6JSr$il$y&Asm*){~TxFaIl^IJh$P{ztNK5ST zdwAtP@UT$kVAWU^DEv&$|xHMlUf#%bN67eSLFi~R{2BE*ae>BxMT2f`Bmra48OM=q;} z$Ri?Ngz2e^_4F5bTOKixj@`8xF zwUK5Zt6~Z?DPO__b9yS~0Ad?%q!LY_G0)>}5&fxLuNaH5;9DsAE#5dmR$|0&Q6#OR z!*DJ5VmPcMqkCnV#PflJ?pzf`X#L-4aP^?mR3?%_)`8QdUd2CXLMDbl_^0M#ixlxkHzfh5Px-A>f2UE6@Gq&^ay-OTw+64@+np z9U63)f79qK4U3&6aJHl&>jUHI_pk?gs#C)r=)dYc(34j@!WAE)$X>zep@18>`d`s< z=M3hzf^rtnMkir41+#OCsb7s_q8t|z1VR)eDJP@_u+znS+_v@(s!RvSZYK7ww0}_H zklu6F{sr|mcJCd%C;8S`Zpo6e6c=@$m52*5JYKzx4OwnspWKKQ$56`>5nv2j$;3uw zGNmIcaI?t~kj8{eBFvnj1S_|I|&CA^7h+~P!**cvT55aXLuhxXGG=@3;fb-!h{$g$9|mZrt$gfvspts7QqRjbKP3-0X@$mP zXR$&PNO=X1Unb-9Rs;S8Xfj>Hnk z@Yg36Jl`5n9W#}zqr){r?X)%E9)>CQF<&8EiozIbHgS&tQ<{9s{oPqJCe~c$j7f5h zHG@mDW;+HSoF5N*2$=`2&>?(qpG+*sHO!nYuL+BFEddU3TzhvTgpUX{Z(_6vIMJhD zgExSj@(3UFtVwowWb8U>3)hshYv=%1(w+!4_)Gmr635!H74CW*6}Dvq{LvLl14s~Gxh|5yUZ)9?0sPfq&9 zBqEO!LO@?jd|_m8bf!zAlpq%b17k(WDCe7Q*tu^W`h9#IRz?Hqm?ucU5Sz5|5NIJo zB&L>t@eHe6zSTIL(lPn=>wY{$3hfNfjb z<_J$iRwd0177{`KE+(O+y{x?*mwP2$@Mp~0I@lidgG1Hk#p2d*5waUH?fYhsw&~*I zvm6 zUp~a!b^2Gi^B|-4ZUF*`jUwKH@8XIrd?goY?!Sd05rKxK9WhzhggA6?(c7H8fEaT- zv&0~w=mzkgVl$c2CkYgvG)9|T54UmRHNJw73O#h)isD!cB|Et6TPTu)`kY#LMm9x) zdq*1x3)A>?Tn}wLP-sbo5pC1js58#kwUkH{SqJS66xAlKi=F+W>1!nUv!poI!k8TV&(=!9Ge;i5MI2fE6^IT# zd}2nMpXcIZN4>l3d2o~7#I+Mq9nuT|NArou9Nxg#6V5@SN7Ymu*=U@N%lwFTeGA{K z=?{E35&5E5dmD>#I{n60iCnFn7+cpahJ1G`lZl-qgcWvhQ&+ZEWs^|dV)s2(KVU^8 zFBl^fkx7kBJ)>dl-q2ffH%Y6I&#b~tK`?38R%+|DYqiDNcWUQqH)>aEYqg923#nY6 A^8f$< literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/importinfo.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/importinfo.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..922647422a2bb7491ee522c0c4f9a5045a583609 GIT binary patch literal 7686 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/module_imports.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/importutils/__pycache__/module_imports.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3516213109786ae9424fe07558a28c0bb5396ba GIT binary patch literal 17057 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 Ur>sv|$4aH@eDz{=p?duP0rU9Q`Tzg` literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/vim-lion/README.md b/vim-plugins/temp-unloaded-plugins/vim-lion/README.md similarity index 100% rename from vim-plugins/bundle/vim-lion/README.md rename to vim-plugins/temp-unloaded-plugins/vim-lion/README.md diff --git a/vim-plugins/bundle/vim-lion/doc/lion.txt b/vim-plugins/temp-unloaded-plugins/vim-lion/doc/lion.txt similarity index 100% rename from vim-plugins/bundle/vim-lion/doc/lion.txt rename to vim-plugins/temp-unloaded-plugins/vim-lion/doc/lion.txt diff --git a/vim-plugins/bundle/vim-lion/doc/tags b/vim-plugins/temp-unloaded-plugins/vim-lion/doc/tags similarity index 100% rename from vim-plugins/bundle/vim-lion/doc/tags rename to vim-plugins/temp-unloaded-plugins/vim-lion/doc/tags diff --git a/vim-plugins/bundle/vim-lion/plugin/lion.vim b/vim-plugins/temp-unloaded-plugins/vim-lion/plugin/lion.vim similarity index 100% rename from vim-plugins/bundle/vim-lion/plugin/lion.vim rename to vim-plugins/temp-unloaded-plugins/vim-lion/plugin/lion.vim

hK<-jPmoN<5$80Bf2A%XOiX2u5 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 Rl*)&?RhODezh!;%e*hWaLfHTS literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/exceptions.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/exceptions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd853a2cd0aef8c41e88f53abd512775adfca29d GIT binary patch literal 2803 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 LF^`nlN@4A{4pWtk literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/history.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/history.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c442edf6b05461166eae6fc8355fd8e2208ab212 GIT binary patch literal 8338 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 D$?{cp literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/libutils.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/libutils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e44c8b43f00ab7cd8f317676a75ebb7f30e05bb GIT binary patch literal 3787 zcmb_fTW=f372X@kB}K_pY|Dx3q=U4m%EX}p2MJoB2<%>52WVNtauI|;v0Uv8#a%6T znVF$13e*$b$G-Gmv_ENpKK03eAwc1NXO^TTM+o{*0=qkxGc#w-`ObF^Kil4Jef;-F z-%M{f&cB^YKOgOfc+@}f;?BU~F86YG;MuP~2<*3JzkXhyGzJZqWCFCqL1^1Gw3~w_ z+CSoT-gxN_T0G>#I zHYz0s)8d%Paw=G?Sj_VDNXByh3U_q+UDvdy^YSPYiB?>U(67yOnkzI~I#ws+xZt@+ z$Tai|@KF0Vc+?0l?JS&yyYw#nh0ooSP~O*W=4E~sVAQ?vSH0TOxo{RRBqY9EI9Yw+ zFWo~L@lHJX6eEqzh>wvYjD*z)hg>&^|KK{#?}cW1ESMCkoXG?i(rg;*ajV7f`=*?+ zvdHJG5P~yZGBp)RI-0Ygo=?S)r6V>Z=^^8#P^>656KAQ?J;uJ$EQt%d%aLFr#UYaI zkJ4Q1GnjCHROVdBeUcnm4QNM}DmLtw1#PXV6Du{F2yVC0W9W8O*IbI2&#N<4uhO|+ zY5_4TiyhXUBTr)Ur?Mo+^p1s&)_4AScX;2PaAlTMr5OfyU0qkHjyX0FdR+3&$tIvh zrd|njo92Bo4$jGAot}zFm(jF3KaypsO+XMb!BMP)X{=^U6Y_CR3(XE`S!@=W_GPV2 zNIiRC%eJgRyMb&0Lng2r1Y}geadjw-{lk$rA@JSfgK;?#2dC+YF6BY*G@TqA%?OwW z(>X3xd@?CHwe1H0R|ll*0qJ^xu0?cjIyW7AMciy{%`L+59$wB?%MINfw~aTosz=_& zOybcze)Qddzl{!oKXVEGfT-K=dL~?(&opAraf<4C_Kvaxd3%}ab&I+Uyncd5*%Msb zzy7o;)G`}d3$RBP=vr3K8k|B8daPy;a#v=c+rmLOJtUr3xCklm)g7!yfVsL!J8}OG zxbCmsd(I)g6l(qN+ymphLcBTMmJCVJCcVg2k_=`VQcUwW5ymT(y_oTpn3|T-vDE4X z!pHczC}0nOrqtKoos9l7Jc=8kn-P5>f z<}KadI)B-@2o^yGLRz}6^X-RUlb3?5Ci@x|Lkm_|_zQ386Jz7X-udF0n3j?Pb``Zr zS!hvc#mW&Q)DqLI$m0cAGyyFhBhqakJ_jQeVBhbpK|o8PWhzd=M@MsXVoqF4v_PA# zIiTCLI5R;GHZslfNC|l=q%xf~OrzC-raqk~r4(j6p6POeKusc5#&4X2AQlp=KcV5M zEY=Gnl^`HgxAq2%gDu2hv{IUYTXCuh*XO^5Rm5xAVaXwctVp*`5Re@ePBQ2~AS4?p& zlTOm(v1TB1;wR(;olXRK2n-Du^sM6$u=1x+$?Vvp&P4?NnB`&}viq2O%Lwu#j6K9t zg>23CH00;oQK8e{=MRo4K_VClJlXI5W2 z0PhE1J2u7p=jZ=}k@EbqnH2j!+39@u5xL@=u=_`AA=U3TOoxcPa*JhlWwsMoTZ5TI-Uk}X$0!06+In1p`xt>dw%Bq}BbCH??kdQ`~#EwH@suV+HfBnqh*Np=1w zTP6+H_@v^BLirfkvH-TYsE~*fVTidzL_*3^DwGGv<@poC#t}iK6P55+Psb-^Nlcec}l?Oh9)LVgJb_op%Y*!qw!sySCQr6-j zSm6uwHmvTWLo?R?#0nLw6DMcxlCqF{{_!Q-9};{0fZ-9bw7+RuB}f=|vH9wA3||Wy zi{6#KmK%={558+2l|icvu7Gn#LFa#OrumiD)!_(hzxeA9PCj!*jq({O__tvrSU4U zHa8#!9wiTLbaWR!50n>3?tk{faGlALZ&+_~^SnP@Y-(+dWLeoM@lAo>8 vmo7~Ot|SgJ;jbzyeMv}A46ncqz0hXWw%hhw?}mP-6?Vd~v)yX9YGLqSK|kKY literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/prefs.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/prefs.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a8ca722df584bcf38108bc10d3d537a7f3b5388 GIT binary patch literal 1678 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pycore.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pycore.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2ab89b7509c24322ca7ae6bbf69ed20366bb6cf5 GIT binary patch literal 13381 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 TXp?{0E&ts5VfjLNsj%|@6WzfN literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pynames.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pynames.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..776e419bf01d4551dc7103027174fb1794f26cad GIT binary patch literal 7705 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 H+j9R8b9^(w literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pyobjectsdef.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pyobjectsdef.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0aac4808510112f606df25eb5041456f3b5fd05 GIT binary patch literal 20322 zcmb_kdu(J^dB3lDkH_}d>-BCn8)x%cZ-O@@kOJMNS+dzY2xiGHc}$Z|#&fTCXLdZ} zJ@QiqujBgpKUm5xPaQSaG4Z}5Dvt!gu zxm(fQj_yu$&qVjE+^tS-Enh3F6>G({QmwRBu9ep&Y7=XfT4imrHn}!cn=;w2-I-pi z)~cqlmG@>$;|ZfX?-<_f<)V7tH2CKosLecObgd_i2MyP8GtV1t#+zu*?b@|Dlw{o; zN^&SUh?0XS$-4!V6i_mcl6jOA-4aSlC^>|ZLntY`6DXPR4&(VcJXhRFJWtB=5j;=1 z(|Dftj^O?Ec&@rLc%G5xqj;Wm58(NLJl}xlIrku*4|><3{sNxo-9vajB>mm!n&*wh z!!HxK%ZvH2xW3hGta-lct%gN!v+1n|tzOp;?S>zOc_bS_tK)}-^{w7Y+iM1XSX}j+ zy|uMQ*F|wdUEEmnx+u;_#YHpBuW#Y~dLw9ZjQD3Gb004My+}OSy_)5kuJyc8vt8SD za0fiyEbbXM=jL(Gx&^n0d(OR4U}V zdETr|y4Sl$(btqW?cU%nJa6opwW?bJEN%*m=eEvnbemjw)4}xk<2{4xeq8>uNCKm6 zwyn0^cKT>*#?Ki(_szc5w|5=W=o{^9JJ&br`Jm7);;DqIylb>4c8y&N<&~&>a@WMu zl#3SiY1hC!%;m*u=&0Vh7dk5q-&0wPTAMn(;s>hH4B{Dv`Fg$8Z3XpuIC*aCjJMkA zdhXj~Z)Csf-JXjcura>MqlYjT?QpG7f4IBqDdoB0G`c{xzTQyS{J>M#){9jPw%j5<ur%)B^^6(oomq@w<oHZ-v_RL`0mtvSU!C&OZJ1^OP zB122>kxX*YREJR{d7T`^V|abNsk}zu)v;q6O#r0PsW*Z^wN^F)&*$oV3yEQFA5Rax zU!zwwpCj>n20J;J&O&NBw~d+3xHdzxAy5Q5v&h8M0c;071esl1V{}%Lb*l*^WDMXO z>z*G@#K?S}&+0n9ovO!$kGK35_Wl|`o`@GEecgnnzR)apbbib_q*^j@!k?E+oSPO; zT$A+vBk|$Avy6KiKgCDUH~?ICO{Bt3cg@R|dPwrNTI!o^ zC&-Y2w)0?@+ymAspvK@$QNM{%v_j2(0HctE0jA3`NbeO`ziJ`#>=!myfhk4sjwV^2{=*2a1m)a(gNkiLG^BnZ` zNa9(Hq4RKt-N%$1@r8#t7j_Qeb#w$;BUKZu84{tS8O{f)P&}J3$AO??s=M*>8th(3 zl^gpO)QM-1mfY-v?=K{9;5H>&^%x$snyI022Aj15j8x0=Y^l5YQ0f8)T%XXgb~W#3 zK8rf(ciHG2*{Z#qER#^7rg$EgPpZC%g+6n5hxlOz&>43v<=}2}BYxGo;+)s}4sECi zN!Rs*Mz`rH0w^p48k89IU<+!X&_Y~-(nTw@mhJ?eLjxK?o$nS;k)KiVzV{p_LUPR- zmbtw&vRf(IS~}I~H5(oOUS#6Ni@5?itg7XJW0G^un%imlkzll@`UJRK1}_nDZDjN=?t<$CP^a5QU<16Xn~xyx zfcMIwxY(q{%=Y$!Ua+tl znFb5olVWip`aK*hXvFsydR=d!x4Lj!T=TX&7H)%9eW~X%hy4v&&FFcdr;;9SYjzsG zAHM(@_)CNC!*aS^SW49mv${=~j|W^Vsw03+SRfch;ZbkmbMD;M{Tw4Kx*inn2DB~SQZuo74txfoRYD8>WSus#TgoBgb$3f zVm-2^kT2KkS2h|Q{YI=3bp!fT3ruciLM>1fEG_Go`1m>|l-uejn7ok*;i9NVL7S%C zqk=7&Xo~KH0;$?6LX!;M=TqLw7xOm$oP4He=X3c?zJNSRiluy2>NZg=`H`*Nhs!6` z|HuY=$t}a!&bt$!ql$U}T{KC?{PCVx)@Sg*y{v;(uCsDgMZ#geuhPSge6BLgCwxT-CQx)9F*@wH_=5nI;MM(@fbrX!@Jh{Ngt5_IZs z0MOEh=SQR=Hj7}Bu0F!{$n7?8MXE+NGCiScOhqI)-r^+C1^=lt#H>yft)ucpmS-ob zF+}NZ`?!qh$?ZP{uQi6Stf zo*2DERS_j2CJpKVVS)Y27K-sd3dAQ+=a+H$RPPM{kr+}6g+1Sat^m*D_bFwv>i`!xz z=HOeu3o;#Zg;c+!rMgS*Zuhh5@pl^CitB(1;0kaZsO&lIb%z`<>IG`p^2x6ikHQ_ z=IY`+%j%)X;-Xx6wTF4elh5jZHxG#SXX7-NYo)Ix;UeF+)Y+;RFgIF;QtcATw;`q1LwO1J~h zkY_s?a?8%GRt8WJB3|h*kiQ?M-)WX%j8en)-C?xROlcKa;a97Jzd#?6IgHZEbEF_ zy&m-H8{HOBBvRRod^) zT~9ESPLqb;>!#61k*BC06DlphRYCH)p79im%u$0=c_{uYE{z}H;Ev!&9z48kLH7rK zRDmJKaNR0uvnH0MG#NF~KKUhz1Q93gZBNOLgms4bQ=P`zircvNi>OT=YNT*5ewT<0 z!iU%WxO}=lMSC~`zF|PxYP|v6NxQHhHOm9N!B#EQS2ZNszTzJHX)U2vO3`*|vWd1J zQzRJ}07@BP*}i2!E|K?tUv=RXO1xT0bD1AX4j&{3m!cRjPy^tjdjGCo?T3NqhZwoEgRiNXKUN5Rrl5w#2hcC!weDK|A%DO z&UPi4wY>U~XZvXHVhipNneJJ-6o+T4p2t|V`THBqOQ85vWnEWMC%nd7Cpx-o*rb^A zKc(h8fb>um_?MQ?!f+a=VUX}t0ZBLwQFRreGdSy-8_GxcQZ4Z1%}ma-M%Hg!^;&_< zP5mNECL&(n^g5lG-;=5^b5fBKqNeORccD%uP%3Y&!LWE3StOjn;d$RWf_W~-qjdd^Heis8T}U%_iY8z&E1fw$(1 zuJgM4EBg_o&Uh4ePED@Q^N4)bhH85(>7wQ$xi)HkzXQG!ffxv1Gf*L zhM|pZvw-5FdjrXd(C{+D2(sIm$V(7ezgb0VOM5MdvFg1{DAd%?AW55U>ID?kG(KwE zZ=6i~UsQ^`8+7T?fP)%%>)yrfE7-U;UV@rWBO`M8F|Lke3Nlt;=?lgY))XaOnaPtS_}Agv%^%+c*}mU5caqczBuoMAU@K*%D z$`VaU@PS-JdK#eXcqw)Q9TG^w?`MOIp%c_ZU#%|^1I zNg;(1#3uS=!BHZwhd6gFy6}f4pJHM|6DKQ@Jtm!Vx^xo7zAH;R+s@$CH3q*KuO>J+ z=>Tq`gQ;O-8lqXBjLCWl%}}K2F+n$29r9Wz2$1@T2WL*vFGL1Z)q%GYp-G{{?(V!jOjK?#ms zTZBy$?~)&p{61X6@_F?1RaMTfnK*wXr`B-(O3tdmcOWO!#+<&&Kt9jFnmz6NurMQQ zHVMQH?E+;Q=n>&xIrD_bH`>B&Zow$!-qj;#En{Hp49AWT`ieK;gJ?av0hFePxB=uK z1|;G3!QqJvL?LIwAK}2-f{VwIq2~f~GB*!XQ2@W0g3p10YY4<$3zonX0z%PDGhv4D z5>NdW8iqO8^VnfuoBYmmjn3uRD7csJi<*$f#OlIaG|lTddFnBSu!QZo(dlcjE;l)C z{&?pl)2||K*9n9e=P~^>HqQOT-Z)VYz}g8CLcqO(SYE zZpqpDg^l%&cRSZiuF3-q706+x+XqJ1Ep?NHlN``a;}Pj0!W;o>OmYJ35jYp?N$BkE z6rLO!9WJT$;~4V%#){umt@YrZ{f10xz4{@u_4A!p(|coTxIF-s8suN&+4@HSRM}hg zN#;Jy#OAk)f;2Nq7Up>HyXue-Gi`Mr1@H7T`LxReLSt7UY!h?=`5pvLt z?O0~f2hQV*?d&Ov26{+g6AT1HLE;M93J@q!hJ>Z)5HWe9B3y;}s6Swiie{So)^M6w zBB3JyhOm(!3A%dAV08@sLnsdeIj)y1j`k^`Aqeq@$c!#-^Ziu!!H%!uR2hsLTJLZP z&(lhE8T6V*sS)H^#^cp(+MG0o90muZWU@UapdxdJ)3~2mwOq@!pEq~1s59M1khxvu z(XIB3>%4$4M0*zb1E-90#+CUe4AhxpkArgL4z}l0;LR+H%OzPA@rK)W9+&9;Xkmyv zG%sQn@tG{UCdaMfV1A6=MAO>j+g2EoI31s{hpv=i1g?(L`Rd~64rJ;)#PJlNPgG%0 zZF_M9_VE#0Y}4TIkF*2Ve-VvTAIah&IS!D*le2vFCMN7UbOcpC!RHH1D1UUA?{?&B z`E&8n1mah%^p5UI4@bDA5jPqYw)E0!6Aw_OLKs%RC3VOYQg}#=NFifnsZ%=D@bN-? z1V%l=YJbe+Pni5ElVK)+5Ke0S=Ljf@U7oou!!p<6vuagr$2@FiEuikT?v70L6Bi@LMb)NmsV zseU@Hl#Iv~C#zca7Id~q>{ZxnQZUeHreB+P1^J9JnZUrF@btuTv_UI$-Ga5jp-jSX|rUxb~# z#8)G@;MC9dREulY5}^!vfE}-n02-AN?VBTzqJ>Wp@405K7>AJLoSFE-Zk6yAJY%~E zbiDwFOaS$eW#CTdB-B+O{4n;!3A>T+~ytq9Ps02sM`6Rf^O9> z47JMZR##5JkwcRcYFAE&%WTBo1ULh2TJ&!9JD3lgwj^-%+er9rj5aIrnUm%@@a;th z-{e?>`2GY~0(ODjr`UW1Y=4QeO@eI>8Af!909oFwzzs_f5{TP3jG)mdCJ)gO?F7N8 zN7?g<*a!hkj%eqXf(MoEJvrJ!r z!b@8z`k05fzGgi+rjUtoBqbuo+o(1|H^owDCAo zYA(s%$NZT4i?2(3+Ua4&U+*BkMmJ{d7eVkky=0)%%={Uv*2x;;<1I$|=$>33{EG`D) zd52G6SP$1N$Ag{*sw?N@+Xmd~*aDas+Lwc)b$Et@3^JaS1nCAR{9U9HO?BK9=;Z6D z1?~Khfdf1?pMwJFE+~N_KgC?T+@1(<2t=Q%@1ELx6I)=b?_~6@o#(c;C$T+Q+1wZV zSx6TXdOYL_=^B0H`rN9`VH#CexdrBl#c9Nd>2n#`9j)j7Gb*X$Oa|PZM5_(BXPJ|@ z{|V&6;&~_@8eZxvEGX*-Es4`xtG>?HldUMa6#0K^6G;KFMuqJDt4v1rvlQ*;S=C$n zH23soRH7!&J%z1^KgT?(g*0fJrSv<)lszfFO7(fEmOsZc z@UW%8O>wXg5`{6pU8_t7sJ&dPYLv#Q(ip4#vyic3bg!U4)np?2ih%MNK9cKe+dx$R zN_^@z3cN*M#(k5uhJm5DMPDEgw1&oWwgZJxsl zO<>wtvJ=6sN4H=x_H8f|2S(PY zA^mHVBB;Z;#1ppM3(nFC(&xm4VSIsgDcTTvBJs+3ERCKbM8+s>pm=?z<4XjL=J!fcJ)P!advTLY#c)7{YRX{pELOglfPi{c_traBC_l6nWG#~UuMDx zg!)$|LQvmgZm^A#JIb=(NAgpg@&Yn&Y-RD6$%k=TWupUNM|XQeiADftnW z{E5FPc67@OmHCs*#@S_b|wNWq8+1W6@L}3eHgHyIcmm2Y!+d5Fs<~mTXKXMsZ z!EyLyuqw*QuW(h7kUKbhtS@mWVSmrD+qW}$EFM7Z6W!q~z8v?QxAdY=mi!WkkVA}v zNc>H`K!!?lMr`$00htRJ=|_Rg*W&p@{Lc-Y%ufI_M5_+^zaN($AQ3GXl7`j-Y-w1M zu%JwMdmNE0BK|?GpkDC_$yYy+EDr_v_#U=}IKC3Atf1C6kIIMlP#Hk?Q}7HGhWW+R=E@>bc_h{NIIUxIxUBl}@r{2v_z3$wt&oVp23#$(|zyxB{ikuw-nTZfv5E*MPB zXkukwf|B7x@)aWN8vJ95iyoZC{NO3}UW%0Z9O{oJDAOkFgwE#tQp0a@)2J$B5eznzyP)qTAh&IzB;U}Jo0oNqM1fPFQ{-whI#2dl* z4m`zsW~HkogfuiM0`!`bB0#l|-CDi?r^$yntz>TMKk>MquAi+x)$%&-{|(?Kk*9-u zXDIcs@#ApuWe)mnCi@^Hclq1#I6%lu-qBcu^5kbnIiKkJ!=U7ze=>57c!;1b|53=a z`Zshv9(5_c)2PdBmxzXjFjNCaV=TMS7+c`K!Vs-LM$r%Q-G3n&kD}inpu&LeQ|xCi zh7u+uV!_bgK!)C#wtQ-}Yxz~t*;(R1+uNBOst~Jdx37 z5m5a82QH1s4Z+V+$@+jtSuKaYgHE*5;lG*tcP1Z3GPJChSUSvDBosNxWofON%i*_P zW0vvbi5W`(^Z*CM1vtXBI4U=nBzm6!i}ir&8f%HZ(b8ol`>-StmGh~Qj*b~A=AVdw zy!rvDFJG4$@VYSr?g@9j;^loFqa96+7U@(&9Dx364#3|l9*8>rjj4gg?HGM^(38gT z^v|HVj(C5PIZ-#nvfu)g7!dm~dosxHk<(2f17`2!E3gn~Colxgw@qBhkBhty*N|nP zKlo4oUn$T|R(%8YhM>d7!W*g8F__B3Nt(<|^-Yw;*v9-QAyN6iEd`~Sfs``0dC#F9e9WxPE7UpKd(wt3B&W2_kI?y-Kk$MJ6 zSmY-NfgDWK?v8&!X&ea=&vwYVVpfhYgk8Ki!FAA9rmsQ!8E{l}Hnk#pjOn}Zm#<;W zu$vT!WRRmQBh+tU|6D&zKU+!`kJYM-5-#yO!KL^=vxv8#c3|*g=mUX4apb}G!c-se zx#8N>pkA-F#Q)Zls+If?qC!$j5e+odZ00ym9Yml$C|~U8|A|n*V{I~Nwp>r)U8uLZycP;PEF(Q#Qy_P%`71R literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pyscopes.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/pyscopes.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4730489976791bf3449283ff0e45fa3b87691043 GIT binary patch literal 12222 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 LwEp(Gv%d8U$jniw literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/simplify.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/simplify.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4ef96cdfffc34172c01c968949cbb0071d65991 GIT binary patch literal 1750 zcmZuyUvC>l5Z}GO_BsEQnotBtt5%U>5H&Yzu|nVb2|`peDD;L|^z{`RMb(7)); z;{g9XEE&T_Q5R86tps;5P&=_EcGsRbT?ZrPj9uz1FmQ!>fuEMY`tgoTokD5H#oX_#C~E`#8C%;l{K za4{3cG-k<^$ZRH}dvCOZ8~6hBQ_CtF+LiG%XQew+Jdrm(oJCk$z*C3i!a9Z};oFcx zW1K^x1-|-OS(-aR{ga+mScRRV-1-2@a$$+DsFmBf^$;~t;iOG!-^$d{x;@b5cnlU` ziVQvV4m zT##!Z|D)xvE4dC?y#d+1aDeLAe(qEMeMBu2|IIr7e>#4S#&sId#=-&$tuS53eTl^L$V2vvgE#% z$>e#=Aa6NKz}2Y28z3trNv1ReITIR;E8q}5B$oh4fE`a2pie4Bjhie@u0cn#;ZQOq z+eW#>kC&Ltok#of(TxST5*loC`{4E2O~ti}eu;y*)q_RI64#gb+g2d7ZFl=P4$~1k z&Y&of%0#)%M`5fD; zo0k5nRjqpIRV^*+P@yW2*n#k+%~D!6R(86JrMGhGPC^yMCFUiL{zl?MuwMSqiL(jo zyy6#-X{Y^)PdewblqRe*y;gCSeg=cBc|#I@E;}Ndvd%dSc}K3$)t+9Lb-}`9pl3Az zxAFisv=!i8yn(l@rlA3L@D8rs`R(96I2Rv-?RuPbeQj7~oSVStJM8Ux*iK-a0p9lf zyJt+zL`qh*1uU4_l7wF{4N5>o1)?>Uq08$rSclUc)7R!HEcp>^Bbcjxv%oNaXrbpF z>x=Jq>!ovAm8@l%I*a$f815&l{keDutSM);X*bK@FyT@`@afSPAWI#{L-WV?u+TnC zvM5aC5iqy*;MEzxCx~r$r-j7>Aotvh4bXL98NbLj^4#5*`M#WQo%If0_s)9#qSxxB z{njSnYCyASFeoj-pjFVpw(g+8tI*Xhy(o-gMolk_v(neO^MrLD7=%_g0^m~tD%0++ rR#s)c)d>QQ#FpMPwC-%WAZ6{a`j0r$<(Asa!8L2g-re8z03`T-r9sve literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/stdmods.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/stdmods.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2fee1894f24b71eb32d6cbb8606e121571768412 GIT binary patch literal 1760 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 GUHLB_RMyh~ literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/worder.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/__pycache__/worder.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4fdc9c609bc89861eb0a83e508e4b11ae486b37f GIT binary patch literal 18355 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30b29ac6a396a83e0f979a79275481d482830065 GIT binary patch literal 1848 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/docstrings.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/docstrings.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc6abff1f77f831706c190eb03583f6e0e3269e5 GIT binary patch literal 6654 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 Q;>n_2oG6|zo<_UyAGFoV1^@s6 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/memorydb.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/memorydb.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c45d9e2cfd2a8d0852ad29cb33e3ca099d76fa4 GIT binary patch literal 5288 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 ZFeo-rZm}+3wmTnnRy);By|dhD{TDs6SQ`KU literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/objectinfo.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/objectinfo.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..931a4b02e1d7429bc700e8ad36740a7a1f11d1ec GIT binary patch literal 9100 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 P8}^pF@#ogd8&CWXrz0E5 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/soa.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/soa.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ceba8886cce0fe1423070d3cd576533a3f51d44 GIT binary patch literal 5049 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/transform.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/oi/__pycache__/transform.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01fdc61b69cc6b0f7d7004f630f89a8888a205ba GIT binary patch literal 12117 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/utils/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/utils/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..260fd5690ab91ae62e4034ce24ee817197d508cf GIT binary patch literal 3196 zcma)8PjA~c6elU!R#ZE6v#x)JEz`PmgRw2fFl48$XxDB7iorW{Kv$!KqKI_jSdm>) zP8z{EIY7L_de{fpecxoCLD!x76?WQtq$N3VJ5&ZKniSvTd%qvwdtWsg?q`48fBLsW z$UkJ^v0;1N=c0Caue_KpyFY6kqT#Xx6-`_hG>4jO>%^e3rDy`h3b z(N8w-M8hzM)ZNYe!xn{2J|4#RTTJhh4cI0xL6=XsI8lc#s~R~-2_xQe*{Urs!~epm z=WuMo${DzjQ_fCv?5y z$}ezPfF)Mv`=7y)6_6&;Z!JqAFtUan+%=fUYI6gP|Fyf(|HkLFSR5f|uEUH%6bP-; zDl|r$EZrJOaVX-%FZ@!1TwITGYA&lqFPy5OWpQb5^mYlWx3? z?wm;|T&`iKsb#bo3$HB6!S57$i?DiKBCbndPJ&!N1`911 zD1Z>dOHb(=@0J2?!&?B?L>39X=cQO?JO8dk5#Yw&Lg`v>?5 zVvn~^!$Rk2!Adt4vF|}@-~#9s28rNB4p1Rth7Ym`n+_d_-HdWFaOB!T2w6-%kOwgN zbkgQ+<@MEq@DMiZ2Swv;*K~Lf1_{}xGn#1r{0?CQlZqh+1cz7nIYePsB|$id;4ViH z5S*hx#t@w#ZQv+ddpI`&i2KAW!9`sljz%o29SEg@U7@|K@0P}O3slU3Ytpn`I;5mT ziE=r2Ay!z16_}Z|)EryQ6+Mf1YLvf3g@&OHg$!Y(>;JDbm!-uNJSok{+;V@ru!hwg z`2qY};s+x7rr5A~U)KrX+=cQ1^C|a+u{R1NIr>us%G;Y zls6BROnUIIU?PllRdo;Ex}p+Lv2g+w8%8p$*eq`Aimd`hR3)a)5N*T<-+0Ui&=lUn z3B)v?>;idxI)N(4XF9)O6=c{~(Fc-v!aT`oZs;TH5LU!7EILft@*RrDgh(K#RcYFs zdvP=Wpa2)yj)(dQn%agA4#axw#CowlfjaRa`St2Ec4D7YCicV{Fxi}dRnMDG;K2J( z!eIe-QpGR#*~FSudu&RfoU?Fd3a0Jb16w}Bf1G|pCROkV>qtbsRgoXT%NSY3`YPs` z6^YoGTDy?XGixA@yRJdU$8lpmh6DsvOjb2-!;5n+!J5SPAAvH3X@^jUHlaC??3;SD z=pOTN2Tq5nJac^?io|gQg`D*{wHkDdF>=UZPDRfkrB~!l z+=Rtlx28?#Cps7Fpsa76=37=ZcSUb}osP`8V~%zg-Kp@nj^$jkE$50;cNi_@% literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/utils/__pycache__/datastructures.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/utils/__pycache__/datastructures.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa733011b2a02508ee9562c4ac0abb16d040e918 GIT binary patch literal 2553 zcmb_eU2hvj6rI^w+nbH!CT(e(7OGIGsHUx50TKwTD5xMF5UxZj5Ef|V>`a8b1`rv-(_w0HGEhZg%j^4qy};aLM4k zY1i|Ckglwqv4Jb=vVpNCJ-LFhE`7O*u_2ps4WlPp@(RWkxh^*_`tr8CCa<6I!K!>q z-oTTlyeV&CT(g@ebd$giEGdAPT*eS|Kk-Xn_a-kBLi_vi07P*_Lct7_dqx5huR+@tR!897l-hA6V zNJpysGCDG;?si^Aqwd}$k+JHIPs~A@JRYTz?(Gmqds$bfW7XXoW~w_eQJi(<&fGbgYv*NmmVO~8A6zt2D{T3+(4b7{@Y+#bvrt<043lZ(lWxvVgLckeEKz39w0`el3V`Jsw zNS#~`*bIU&P0TP#vLLu#iF)%w)N`LQG*wYT-NR%Nx}iUznl0dblbs4Y7X&+qAf(eH zLV(RZ>I~NO3eZLWH8t-w71MTX+7{=wTlA@k=k`JFh7+wXmm!8y-h@j=T_m(DR;@}6 za41u!Ae1^0DZ2q<*e`6KOD>%=Z^pi0^8zx_FOgj?xkgKF!Ms5JKdqmF!oQ;3+MV&= zoMU&lf+$$*be`lccspwIyp|~w?44u%#_z>ZX2Ntd-lnZ@;jXjk!%EUo0?ubDG*Oy# zdT|;K<7^u@%XMJUqG6Uygr5z7=l0%ms#$%@JIhFnPpc4Deab#9dt~YS1S^;9(vJwd zLli&fKZ;X;4VVG4h1DrwwtHFh^%Y901+#!P7vpqXg*A7_TD{EOM7=VXac#&b3x`^6 zVSS11RoaKuU9oT~!6IC#FCncW6{2hjDoKQNUfqQbap=w?WbACR@33zvclzyk{re>$ zi_D3YXeYh0EebBuyJ8O2IttE|BROFyQBuxW+^sV(zG+Tm_Z}hA&!JO zCjcN>wf?k;ZL$?*TWT~mCzdz1APWZ00`F^e@}<_PwutE4h_`?xcVp6VD-;)T(WDF? zQF?`zyMSbiAgSsDNLivm9W14dutZ5$rB&8LzRz#ql#-M>3NskzeBYsGZPA~)_p=A> zX&v^yZX@3n=qvJqxDq>(;Yi`mr49TqCjh*(8iPZhQNnc?#$DdJ%%8%i1cBI2K$IZh z;NgbP9sPchAuIqna?%GzP{y!!zRQej=MXUZy*M{&xgTXX63j3Om6aGxt<&$qpOJ!HW>n1-y=h)Rko)k1gW7dhGtgxJ;(Pvflu9j8(zb2 sc(p=PMZOxQaa@RRmiymK4E_7S-<_f%=Nv0vo_oEbfNf%r6?9Mh1=NQ57XSbN literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/base/utils/__pycache__/pycompat.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/base/utils/__pycache__/pycompat.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4446a85f72c8d0380b9f85ba3e323c868365317c GIT binary patch literal 1248 zcma)4OK%e~5cYVz$#(N-8y?nKL`_X5*HW`&%`${UYkd%o&buGxYw17O?8(i`@c?cj>lc;5^4K@GdYi*l+8Umuo}sm_%b zMrG2}@bYfx`Ka)Xab6CxJUz^e^>JPfk9`<p=hw%|rJ2QP#x$?s&l5BP%w^o4K|_ctGz1yz6WdrHe5jq8*e;k$ z7&u?1b6n=Vc6(`+c@5Jnseyr^s=kq?gPG2qF4FW&$^Rq3bnp^GYQ9_{EYPKm5i!( zSLDVd!<8z0oThp*EsaZ4FX+xwuSH5Xl`^8oDCAkLo)9PY7Mcj6pbZ_s$vH&O<^pQC Q)_5F7VLPmR5IhQh1I&sG8~^|S literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..063b24771bd2fa8834e37963ea18162aa358ff17 GIT binary patch literal 330 zcmX|7u};G<5Oun=vebXLwL-)LE2=<(Aqz`kfW?jD6FJrKMX^&o0ZXFPN~4 znv>q$JL&ZF-rX#h^6KmU^(ch+Ntmig>@FcJQnTVs*kU7Av(N8=dxYxY5hAk-(AUkb zen%;vTbed#*vFcDfR63xFhFeU2uv{fBg7^cc2xUM3 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/autoimport.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/autoimport.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..736337a8a0f06d5d0d499536b232c790057380f8 GIT binary patch literal 7362 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/codeassist.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/codeassist.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..522f34d58280ef16c86ee141955d2ec951c4674f GIT binary patch literal 23230 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 mZBG^o__WuWpgj+ZO literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/findit.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/findit.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1d50cbb468f5c3d7af429bf63ba01168f29ebe6 GIT binary patch literal 4184 zcmaJ^OOxBi5yp!k2!dShN{(bZabP7@!dT%}#d%eta#?b+lByiWiBzRBODPb`87_eZ z0crrQc3I%XR3-937aw!TJ-1x*C;S8Env?%RPWgJk$I4NHsu>Js2955X?yo<5&}zBw ze|hJ#JNugUFYVH0Vf+zV{v|r5F+I@+y1EE zjjhC;HU~|NYfNV~UW>hzHny0}>d*B-i|OkbgE_2$nKs*JP3B>=cTZz2)_$(BHt(#= z!9Lq#o#)!%fawpl?!nj4OY3({=@wyrItf#jaOv{%5uX)NmgdramI=m1SC@@(be>Y?R@O_mY?igM!OWNT(km@yojT$Pc&?j-n{Ib>}oAKUpnDgFdTkj}JIE?U% zNmwWe`6Qbsj9$!nD4;X*$CYH+cWPJAa*Fd88oaLe|Bg<&JM-{lS2ha@lYiekoMcmecov-&nKd1Syc397t)FHK%LE7q=A7>(-${r zJ=lFc@7+#t;7R^rZ?nB?iU#&dFG_<+#09yEq@{TgBAok+D@XK=^u+)DF2-R+ZIsQ^ zqT3Q=tZbg}B1pq255huv^q^FpBYiAVSXy*i(&1-eG7k$b+cXMD8H&E22%Ds|MuKB8 zAg#HOok|WJ3Z`%<+YNDcoby7O2~Xvo+P)Q)ciXbQJ~8QR!b95Gc#KynTN|6{TzE=* z%JyKL?iQILTg3z(+8P0g(KHkn(w<$=x@gjS_FB<8^a)5h9cfor9}zC?=zQ}4$k#a? zk>+{2t2?@9c!q^LjUCv_zjo4ioo|Zo<>v40XG2_$}apA=+X0G(l_0&~kfXL@SR%SofmW~3W zI&%O<4S-amXvcey-&h$Z=F-Je2k=xYUFNJQDpRI^(H7oIqxp`-| zJDScCKILh_89=GRJd(Nwy$WA00bhkUeQ8%B7Oj4UWM6;&-Nic}hiQr#3Yz4MtFJ~- zrHIDJmv{dQ0v_U!@(wz9KwD|KN413!92os0LIVUA;|L7S5Gzz5RNPb@MUD6Yx?iFx zAkh#Oiyx{u+8U;k=GA0gOMFEeLIDLx-^QTQCe~Mo4eCz~as3s|4Cz)0rxHMovtt6j zwU)TufSjG4(t%qL_sRJ7PT8ya;^zNXcJtCB_@a)yF1W}S*XTqEWgct}ud)#zr83%m zL*b0rBL&E}0^C9q2h@>;vh@m{h%U{+(Hj_(joC$IOfKC|FOKHvh;TE}z`_!%RM7dqz$<^1n_9nLG)M<6Xl#W7@10acKxQ1hS zrlq&nvkG5+hMiwivD$(Rxp)gQf5U?U84X+o>ASL)wXz1bVt}pKrLBPFuizWzN&{P| zgTW~N64!~(fUD3x0L6M=JqF~I&PxA6Q$S)c6F}k?&Dbk#>}+Dx0)RA#-<%jLbLpMG zReEu|tTXGS{u}L2F1XAdcns3$F<=deR9pOWO=SoIROm-^p8lqw5Vuk2P?dCwXg@6c zVO0f&Rq?*FBPc_^iVgys4XYt`@V~@Yltdv3@xX3Ir$J@hV+dLUhpR8%QvtK{(2f9H zeg~O|XavVV!R~ehg@SAxMduF{!KLIO4^nNvMhUYMw=KJu@=*~2`>`U*6)_;vOfT0G zxG9%yl0n0uGDOvW@6(GuzELHY_y8KHIw+kDPP_W&zZ?Y28r?bfd%*HFPt zs@|@Cpo{z1GeX;5gux%7WFSr;;!PTxn6=bw4I>*f_PW#v%J6Pofl%dgbqpd*Pq?%NKS91IH_8SI(wdVJ zJrVclMMGMI?60d&(g}hnjfx;3OLOuS6)6{pgNWPT99VC&tKYTg6%|5(bc3Ken;?*0 z5ImiSNwp$=2RWBYA%UMd2<4v;Pm0z$M&&OP6LeAZP{1mGeS*OWNXPlzl91z9_%AZx zJqw=Gb?w|I&(R+e)((JbW^5K#SzD>qr#ByK*j-zJ$Uk*4ro++uU0XI)oN^X`=Sgc8 z7LzJA?Qk~Zs2y~E(nGXFIes%}SJ$orOW{62Ie9#vCq-2gw(+(rrmAq9VrNcZtm&5W zX9qC_MyQI4(HB3*O83g(jotqbB}15o$;E=J6qEiJiB^S|P2Z@F9g~Da%oww0$xYs-Ge*p2dP|5%R literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/fixsyntax.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/contrib/__pycache__/fixsyntax.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad7881373746b2b363bf60383eefaf6704c7e633 GIT binary patch literal 6162 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 literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/__init__.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a86ca5ad9e25ab79cd82a52d9d0cff8c7a8fa8fc GIT binary patch literal 2248 zcmZ`*O>^5e5S464c4)bdlg@N{!%>R;%oZ$Z(fG_F0CK@iw|`}Xawo}8UUpZxLV`^P7}-rv2>&pFm#;Lm-9 z57A3{qAw0~zc@$^`m{dOhs9BHg!PfQBL?DFoQS(35~pG)&cp}eT-*~E;{M`1xg#FD z>y1C;e-3&*YbwdCob${Z%PO8N`9em~Wv*QN#4=NQu1d!WBWf)j^Evmdl6G!v!K$^- zO?hoYl?xX~Z?_il#4^pD!>#s0>y1t_RkEkdd0DyVQS>-wuZ-3*^URq-GQmA(aME5S zYd*ihOV7L%tag(2i-w+ z;33{PQ`<~FWM)2h(vPF)vzWajU^^i!)Jn3osR_os)(DAs;a-6iJ~Oo^Y~-wSi}AUK zQ@l|21}|>x!>g<+{b&m^UPzxBEmDF!8UxUin0-g?_gM*?BVShD0w*_DpotK*DcQeH zq{3G)o8`P*grq|f-4K)`6AKfvVpzeK66k|+a8j63ve}wtTx&WpCG1;UQ&vcbMu6Dc zxC!9*iD+TG0EUpUK*n}=RLZMB3MhFRv-e0w#!C=e6ly1meXHAK$HI)ZreNVRmk?AC zCF5XFLob1fX6yCW-#FyDMqq1%xi3&2bw~OJQsg@|B%F303Q&K`JXe)hfOBkB138nHeN%(&%GmfHf z;g3zHpT^IMXVWQ2(~>v+Z>Ppa<8GCOcIs6jA4Sw1>!Qi(H6iHfC|{DLsi<*r&89RO z;u&nm9+9F82#rKuV*PzsPr-`?duU|PRab^{yUZy5&Alc)sZ)!RBSA8`kY&az zS8MKNI#*JQ|+O+F48XuC<=!DNW12s%yw>e(|qhmU`MnB$q{s<$U*5RL4GdCe0lNQ4yO%>9Yrg632oP6GVA9y)|c{jwzQGeJU9uE5h G{Qd{l?*QZg literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/change_signature.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/change_signature.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d27c8e7f5e42435970d0b293ae833a43263df359 GIT binary patch literal 12975 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 b>5g6ffnir)sFtd^>c#5W>T>mR_3Hlt>t4xi literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/extract.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/extract.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23807f02514f0db4eb5d67a105450e6d9818d287 GIT binary patch literal 27661 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 T`;7ahW~N?qD>!-ttmFJ&T%rnZ literal 0 HcmV?d00001 diff --git a/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/functionutils.cpython-36.pyc b/vim-plugins/bundle/python-mode/pymode/libs/rope/refactor/__pycache__/functionutils.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c75a18d9872e158c35824db7a2439183e42fb2f GIT binary patch literal 7169 zcmb_h-H#hr6`ya9$KK6$vu!se&@@d-oVJ@tg;Lt2-8LbmrECKQk{T-GcxDrOy|!~_ zHr-v#N|hX>iYKV}8xTl5^1us1;tBD{3(}SP#8du-yuj~w?s&ZGIDNvad*^=5oqIm+ zIlpuEm4$`q#V_9e_{&q4^&jid&qI41CGDe%t=R5cOYv|XcUyJRJtVaC-zG!VUY#n^i z-o6#L+4^*-;zV^gGx@n_tfQoFqDtg+O((Wv=f2f+V>kBj^x_3Mf!*|zz4X$?gnez1&u})7Gcm>`p6AHrqS>EY+cmq0;rO zWRKLQE%X|J_R^%kseF7{@hqysDr8kf^+!w9@Ob#)g*(IT)5hNI+y!uLCTV{+J?tlLl5MteGJwaAWEi(g42RF)Ii z=5PP$qs&^HtnJubhaaDmk8o`njTl_(St$0{+H{^Gmz<6L;B0#CY}#lzLZ3bkig&h? zL6)|%VJpp4cW}F5D}G$4G*um4T`d8oZihno_lQD*4;YCa@VwPkSa&k-jub_jGptf ztVGLI0~v*;^jtFS~*Hr4j|edj#NOQ#yX$XW;O(I^?j zQ<-b8H|!2DO~y2%O*Pzxtm0%>2cx!XZ>QR&B2^0Inqi$<#9J#UDJ#qN>?J$2SDZyV zLMuSoKRv_7Ibtb!N$sOv3NQbR2I#cL;Af7zxCKt)>EP*QHf|2MICc;G-0wMK3w#a^ zDzSACqEz!h{W1^Y>Iv{E_QtmKq7$$shEH4(*DhOF_c>a1Sr=d(dka|S7VARv7cax+ z#NmCcz6uT>M0o_BS17TJUk}C>&JyKeULE`3|FI1n6t^?zi_v*NjiD$WP;1l@s#3c- zLi_j;ig58ZsQ#pW019Jh_ivrMo>&3le8bVs+C}Zr3e1S&VRWhAO|#B$d-Uc-?!}D* zYyaE~|63|)$7`4R!%n-OzKO=SZn zbzw}k2MvOan^?A~DjRD?9XfQkeWCX`42r?EoDd2c+I9SS_*)h=H8qtsviDc!F{~69 z)w484KSQTbQ9HAHxQ0DkWT>mv^Tt-shr-&upjYAbhSG+)l~u=%TE``hpuF~hKZww- znRZt1E#y}2j~x*>{76J@!OHIR6UC3};D)#^T}y{Ms*|*YSrx8or^m9Jm^eT&!=S zN}s}8&}!+ZRqzPydaHGJr`nQ0>RF6Xri4V&Y+=umO255^l5$xc{)i{#z5aYGDF6}DX z3-O|~qxcxqVM&Kqz(PS2^w<3HNjY9YN!L()HJZo+U123!dtV%4P z>)q{9zuSS=rv0yVhEN@~L;v0gjTaRdG3Qma&Yj+7HRY@@mGZcXl2RN~2tXjP|HOp8 zM*#pW2a6E;7c_Y1U?2ei)G5?(4lvnplN^59