diff --git a/.travis.yml b/.travis.yml index 8bd67fff..7916832e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,11 +8,14 @@ python: - 3.5 - 3.6 - pypy + - "3.7-dev" + matrix: allow_failures: - python: pypy - env: TOXENV=cov - env: TOXENV=sith + - python: 3.7-dev include: - python: 3.5 env: TOXENV=cov @@ -27,4 +30,3 @@ after_script: pip install --quiet coveralls; coveralls; fi - diff --git a/AUTHORS.txt b/AUTHORS.txt index 52204a8b..29f46765 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -44,6 +44,7 @@ Mathias Rav (@Mortal) Daniel Fiterman (@dfit99) Simon Ruggier (@sruggier) Élie Gouzien (@ElieGouzien) - +Robin Roth (@robinro) +Malte Plath (@langsamer) Note: (@user) means a github user name. diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 1d52dc52..d9873229 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,6 +3,12 @@ Changelog --------- +0.11.1 (2017-12-14) ++++++++++++++++++++ + +- Parso update - the caching layer was broken +- Better usages - a lot of internal code was ripped out and improved. + 0.11.0 (2017-09-20) +++++++++++++++++++ diff --git a/deploy-master.sh b/deploy-master.sh old mode 100644 new mode 100755 diff --git a/docs/docs/features.rst b/docs/docs/features.rst index f00e4203..aef32708 100644 --- a/docs/docs/features.rst +++ b/docs/docs/features.rst @@ -222,7 +222,7 @@ 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 :-). +`_ of Monty Python Jedis :-). But actually the name hasn't so much to do with Star Wars. It's part of my second name. diff --git a/jedi/__init__.py b/jedi/__init__.py index 2eebb4fc..739fe4c3 100644 --- a/jedi/__init__.py +++ b/jedi/__init__.py @@ -36,7 +36,7 @@ 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.11.0' +__version__ = '0.12.0' from jedi.api import Script, Interpreter, set_debug_function, \ preload_module, names diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 33d88f34..d67b34e2 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -258,6 +258,8 @@ class Evaluator(object): else: i = trailer.parent.children.index(trailer) to_evaluate = trailer.parent.children[:i] + if to_evaluate[0] == 'await': + to_evaluate.pop(0) context_set = context.eval_node(to_evaluate[0]) for trailer in to_evaluate[1:]: context_set = eval_trailer(context, context_set, trailer) diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index 66c1a37a..84c8a668 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -58,8 +58,11 @@ def evaluate_call_of_leaf(context, leaf, cut_own_trailer=False): 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? + We use this function for two purposes. Given an expression ``bar.foo``, + we may want to + - infer the type of ``foo`` to offer completions after foo + - infer the type of ``bar`` to be able to jump to the definition of foo + The option ``cut_own_trailer`` must be set to true for the second purpose. """ trailer = leaf.parent # The leaf may not be the last or first child, because there exist three @@ -89,6 +92,10 @@ def evaluate_call_of_leaf(context, leaf, cut_own_trailer=False): base = power.children[0] trailers = power.children[1:cut] + if base == 'await': + base = trailers[0] + trailers = trailers[1:] + values = context.eval_node(base) from jedi.evaluate.syntax_tree import eval_trailer for trailer in trailers: diff --git a/requirements.txt b/requirements.txt index 2c72b5f4..2af26c8c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -parso==0.1.0 +parso==0.1.1 diff --git a/setup.py b/setup.py index 21db855a..3f3b7e54 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ from setuptools import setup, find_packages import ast - +import sys __AUTHOR__ = 'David Halter' __AUTHOR_EMAIL__ = 'davidhalter88@gmail.com' @@ -11,7 +11,10 @@ __AUTHOR_EMAIL__ = 'davidhalter88@gmail.com' # Get the version from within jedi. It's defined in exactly one place now. with open('jedi/__init__.py') as f: tree = ast.parse(f.read()) -version = tree.body[1].value.s +if sys.version_info > (3, 7): + version = tree.body[0].value.s +else: + version = tree.body[1].value.s readme = open('README.rst').read() + '\n\n' + open('CHANGELOG.rst').read() with open('requirements.txt') as f: @@ -31,6 +34,7 @@ setup(name='jedi', long_description=readme, packages=find_packages(exclude=['test']), install_requires=install_requires, + extras_require={'dev': ['docopt']}, package_data={'jedi': ['evaluate/compiled/fake/*.pym']}, platforms=['any'], classifiers=[ @@ -46,6 +50,8 @@ setup(name='jedi', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Text Editors :: Integrated Development Environments (IDE)', 'Topic :: Utilities', diff --git a/test/completion/async_.py b/test/completion/async_.py index c6035e37..b2202137 100644 --- a/test/completion/async_.py +++ b/test/completion/async_.py @@ -23,3 +23,14 @@ async def x2(): async with open('asdf') as f: #? ['readlines'] f.readlines + +class A(): + @staticmethod + async def b(c=1, d=2): + return 1 + +#! 9 ['def b'] +await A.b() + +#! 11 ['param d=2'] +await A.b(d=3) diff --git a/test/run.py b/test/run.py index 00b0c651..a3b0c0df 100755 --- a/test/run.py +++ b/test/run.py @@ -158,7 +158,7 @@ class IntegrationTestCase(object): return self.line_nr - 1 def __repr__(self): - return '<%s: %s:%s:%s>' % (self.__class__.__name__, self.module_name, + return '<%s: %s:%s %r>' % (self.__class__.__name__, self.path, self.line_nr_test, self.line.rstrip()) def script(self): diff --git a/tox.ini b/tox.ini index 5e0c74a7..7b0a537d 100644 --- a/tox.ini +++ b/tox.ini @@ -1,8 +1,8 @@ [tox] -envlist = py26, py27, py33, py34, py35, py36 +envlist = py27, py33, py34, py35, py36 [testenv] deps = - pytest>=2.3.5 + pytest>=2.3.5, < 3.3 pytest-cache # docopt for sith doctests docopt