Date: Saturday, September 21, 2019 @ 00:20:10 Author: anthraxx Revision: 511288
upgpkg: python-jedi 0.15.1-1 (using git for submodule dep + pytest fix) - upstream release - includes fix for pytest expecting str params to skip() Added: python-jedi/trunk/jedi-fix-pytest5.1.2.patch Modified: python-jedi/trunk/PKGBUILD Deleted: python-jedi/trunk/fix-environment-cache.patch -----------------------------+ PKGBUILD | 77 +++++++++++----- fix-environment-cache.patch | 21 ---- jedi-fix-pytest5.1.2.patch | 197 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 252 insertions(+), 43 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2019-09-20 23:22:18 UTC (rev 511287) +++ PKGBUILD 2019-09-21 00:20:10 UTC (rev 511288) @@ -1,4 +1,5 @@ # Maintainer: Jelle van der Waa <je...@archlinux.org> +# Maintainer: Levente Polyak <anthraxx[at]archlinux[dot]org> # Contributor: Danilo Bargen <gez...@gmail.com> # Contributor: Simon Conseil <contact+aur at saimon dot org> # Contributor: Jesus Alvarez @@ -5,39 +6,71 @@ pkgbase=python-jedi pkgname=('python2-jedi' 'python-jedi') -pkgver=0.13.3 +_gitcommit=005f69390c4b1a3b864e7373cfcbdaf95e65411d +pkgver=0.15.1 pkgrel=1 +pkgdesc="Awesome autocompletion for python" +url="https://github.com/davidhalter/jedi" arch=('any') -url="https://github.com/davidhalter/jedi" license=('MIT') -makedepends=('python2-setuptools' 'python-setuptools') +makedepends=('git' 'python2-setuptools' 'python-setuptools') checkdepends=('python-pytest' 'python2-pytest' 'python-parso' 'python2-parso') -source=("$pkgbase-$pkgver.tar.gz::https://github.com/davidhalter/jedi/archive/v$pkgver.tar.gz") -sha256sums=('e82c4933b4c9717276fa6528b91d7c667463ac2773ccecd076e6b068c70a6e0e') +source=("git+https://github.com/davidhalter/jedi#commit=${_gitcommit}" + git+https://github.com/davidhalter/typeshed + jedi-fix-pytest5.1.2.patch) +sha256sums=('SKIP' + 'SKIP' + 'a02b616a3cdd178de894abb6212f6ce86432915dc5c12cd156da043433e6b153') +pkgver() { + cd jedi + git describe --tags --match 'v*' | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' +} + +prepare() { + (cd jedi + git submodule init + git config submodule."jedi/third_party/typeshed".url "${srcdir}/typeshed" + git submodule update --recursive + patch -Np1 < ../jedi-fix-pytest5.1.2.patch + ) + cp -a jedi{,-py2} +} + +build() { + (cd jedi + python setup.py build + ) + (cd jedi-py2 + python2 setup.py build + ) +} + check() { - cd "$srcdir/jedi-${pkgver}" - pytest test || warning 'Ignoring test_pyc failure' + (cd jedi + pytest test + ) + (cd jedi-py2 + pytest2 test + ) } package_python-jedi() { - pkgdesc="Awesome autocompletion for python" - depends=('python' 'python-parso') - conflicts=('python3-jedi-git') - cd "$srcdir/jedi-${pkgver}" - python3 setup.py install --root="$pkgdir/" --optimize=1 - - install -D -m644 "$srcdir/jedi-${pkgver}/LICENSE.txt" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + pkgdesc="Awesome autocompletion for python" + depends=('python' 'python-parso') + cd jedi + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm 644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname" + install -Dm 644 CHANGELOG.rst README.rst -t "$pkgdir/usr/share/doc/$pkgname" } package_python2-jedi() { - pkgdesc="Awesome autocompletion for python2" - depends=('python2' 'python2-parso') - conflicts=('jedi-git' 'python2-jedi-git') - cd "$srcdir/jedi-${pkgver}" - python2 setup.py install --root="$pkgdir/" --optimize=1 - - install -D -m644 "$srcdir/jedi-${pkgver}/LICENSE.txt" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + pkgdesc="Awesome autocompletion for python2" + depends=('python2' 'python2-parso') + cd jedi-py2 + python2 setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm 644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname" + install -Dm 644 CHANGELOG.rst README.rst -t "$pkgdir/usr/share/doc/$pkgname" } -# vim:set ts=2 sw=2 et +# vim: ts=2 sw=2 et: Deleted: fix-environment-cache.patch =================================================================== --- fix-environment-cache.patch 2019-09-20 23:22:18 UTC (rev 511287) +++ fix-environment-cache.patch 2019-09-21 00:20:10 UTC (rev 511288) @@ -1,21 +0,0 @@ -diff -u -r jedi-0.13.1/jedi/api/environment.py jedi-0.13.1-fix/jedi/api/environment.py ---- jedi-0.13.1/jedi/api/environment.py 2018-10-02 17:07:35.000000000 +0000 -+++ jedi-0.13.1-fix/jedi/api/environment.py 2018-11-23 15:03:25.989461415 +0000 -@@ -190,15 +190,11 @@ - - - def get_cached_default_environment(): -- environment = _get_cached_default_environment() -- if environment.path != os.environ.get('VIRTUAL_ENV'): -- _get_cached_default_environment.clear_cache() -- return _get_cached_default_environment() -- return environment -+ return _get_cached_default_environment(os.environ.get('VIRTUAL_ENV')) - - - @time_cache(seconds=10 * 60) # 10 Minutes --def _get_cached_default_environment(): -+def _get_cached_default_environment(_venv): - return get_default_environment() - - Added: jedi-fix-pytest5.1.2.patch =================================================================== --- jedi-fix-pytest5.1.2.patch (rev 0) +++ jedi-fix-pytest5.1.2.patch 2019-09-21 00:20:10 UTC (rev 511288) @@ -0,0 +1,197 @@ +From f57a0b3469159954253b3be6d3147bc902095029 Mon Sep 17 00:00:00 2001 +From: Levente Polyak <leve...@leventepolyak.net> +Date: Fri, 20 Sep 2019 18:34:39 +0200 +Subject: [PATCH] fix static analysis test skips with latest pytest + +Latest pytest ensures pytest.skip is being called with a str parameter. +However, test_static_analysis passed over the skip parameter which +contains a tuple returned from skip_python_version leading to test +regression. +Unify the version skip reasons for both, static analysis and integration +tests by using a shared BaseTestCase parent to avoid code duplication. +Furthermore handle test_static_analysis skip_reason extraction +orthogonal to test_completion. +--- + test/conftest.py | 42 +------------------------ + test/run.py | 67 ++++++++++++++++++++++++++++++++++------ + test/test_integration.py | 5 +-- + 3 files changed, 61 insertions(+), 53 deletions(-) + +diff --git a/test/conftest.py b/test/conftest.py +index 45bb48e0..389c7c98 100644 +--- a/test/conftest.py ++++ b/test/conftest.py +@@ -10,7 +10,6 @@ from . import refactor + + import jedi + from jedi.api.environment import InterpreterEnvironment +-from jedi.evaluate.analysis import Warning + + + def pytest_addoption(parser): +@@ -85,46 +84,7 @@ def collect_static_analysis_tests(base_dir, test_files): + 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 +- self.name = os.path.basename(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, environment): +- analysis = jedi.Script( +- self._source, +- path=self._path, +- environment=environment, +- )._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)) ++ yield run.StaticAnalysisCase(path) + + + @pytest.fixture(scope='session') +diff --git a/test/run.py b/test/run.py +index 9e87be27..a42549c6 100755 +--- a/test/run.py ++++ b/test/run.py +@@ -127,6 +127,7 @@ from jedi.api.completion import get_user_scope + from jedi import parser_utils + from jedi.api.environment import get_default_environment, get_system_environment + from jedi.evaluate.gradual.conversion import convert_contexts ++from jedi.evaluate.analysis import Warning + + + TEST_COMPLETIONS = 0 +@@ -138,16 +139,8 @@ TEST_USAGES = 3 + grammar36 = parso.load_grammar(version='3.6') + + +-class IntegrationTestCase(object): +- def __init__(self, test_type, correct, line_nr, column, start, line, +- path=None, skip_version_info=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 ++class BaseTestCase(object): ++ def __init__(self, skip_version_info=None): + self._skip_version_info = skip_version_info + self._skip = None + +@@ -175,6 +168,19 @@ class IntegrationTestCase(object): + operator_, min_version[0], min_version[1] + ) + ++ ++class IntegrationTestCase(BaseTestCase): ++ def __init__(self, test_type, correct, line_nr, column, start, line, ++ path=None, skip_version_info=None): ++ super(IntegrationTestCase, self).__init__(skip_version_info) ++ 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 ++ + @property + def module_name(self): + return os.path.splitext(os.path.basename(self.path))[0] +@@ -277,6 +283,47 @@ class IntegrationTestCase(object): + return compare_cb(self, compare, sorted(wanted)) + + ++class StaticAnalysisCase(BaseTestCase): ++ """ ++ 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 ++ self.name = os.path.basename(path) ++ with open(path) as f: ++ self._source = f.read() ++ ++ skip_version_info = None ++ for line in self._source.splitlines(): ++ skip_version_info = skip_python_version(line) or skip_version_info ++ ++ super(StaticAnalysisCase, self).__init__(skip_version_info) ++ ++ 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, environment): ++ analysis = jedi.Script( ++ self._source, ++ path=self._path, ++ environment=environment, ++ )._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)) ++ ++ + def skip_python_version(line): + # check for python minimal version number + match = re.match(r" *# *python *([<>]=?|==) *(\d+(?:\.\d+)?)$", line) +diff --git a/test/test_integration.py b/test/test_integration.py +index 04fbd48e..64239048 100644 +--- a/test/test_integration.py ++++ b/test/test_integration.py +@@ -45,8 +45,9 @@ def test_completion(case, monkeypatch, environment, has_typing): + + + def test_static_analysis(static_analysis_case, environment): +- if static_analysis_case.skip is not None: +- pytest.skip(static_analysis_case.skip) ++ skip_reason = static_analysis_case.get_skip_reason(environment) ++ if skip_reason is not None: ++ pytest.skip(skip_reason) + else: + static_analysis_case.run(assert_static_analysis, environment) + +-- +2.23.0 +