From 8195f20e36ccfea9027e7caf95e8a22f4e5adf67 Mon Sep 17 00:00:00 2001 From: immerrr Date: Mon, 13 Aug 2018 12:23:12 +0300 Subject: [PATCH 1/9] jediepcserver: replace deprecated Param.get_code --- jediepcserver.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/jediepcserver.py b/jediepcserver.py index fc6b6aa..73ad212 100755 --- a/jediepcserver.py +++ b/jediepcserver.py @@ -96,16 +96,16 @@ def get_in_function_call(*args): sig = jedi_script(*args).call_signatures() call_def = sig[0] if sig else None - if call_def: - return dict( - # p.get_code(False) should do the job. But jedi-vim use replace. - # So follow what jedi-vim does... - params=[p.get_code().replace('\n', '') for p in call_def.params], - index=call_def.index, - call_name=call_def.call_name, - ) - else: - return [] # nil + if not call_def: + return [] + + return dict( + # p.description should do the job. But jedi-vim use replace. + # So follow what jedi-vim does... + params=[p.description.replace('\n', '') for p in call_def.params], + index=call_def.index, + call_name=call_def.call_name, + ) def _goto(method, *args): From 92a8131e939e74832e91f150124378ce70052e41 Mon Sep 17 00:00:00 2001 From: immerrr Date: Mon, 13 Aug 2018 12:23:45 +0300 Subject: [PATCH 2/9] jediepcserver.get_module_version: prioritize versions from pkgs themselves --- jediepcserver.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/jediepcserver.py b/jediepcserver.py index 73ad212..1f6c22d 100755 --- a/jediepcserver.py +++ b/jediepcserver.py @@ -180,6 +180,11 @@ def defined_names(*args): def get_module_version(module): + notfound = object() + for key in ['__version__', 'version']: + version = getattr(module, key, notfound) + if version is not notfound: + return version try: from pkg_resources import get_distribution, DistributionNotFound try: @@ -189,11 +194,6 @@ def get_module_version(module): except ImportError: pass - notfound = object() - for key in ['__version__', 'version']: - version = getattr(module, key, notfound) - if version is not notfound: - return version def get_jedi_version(): From c525351bc34122c01ebd4122b661795f0c0739d6 Mon Sep 17 00:00:00 2001 From: immerrr Date: Mon, 13 Aug 2018 13:17:31 +0300 Subject: [PATCH 3/9] jediepcserver: replace deprecated defined_names -> names --- jediepcserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jediepcserver.py b/jediepcserver.py index 1f6c22d..806b6f0 100755 --- a/jediepcserver.py +++ b/jediepcserver.py @@ -176,7 +176,7 @@ def get_names_recursively(definition, parent=None): def defined_names(*args): - return list(map(get_names_recursively, jedi.api.defined_names(*args))) + return list(map(get_names_recursively, jedi.api.names(*args))) def get_module_version(module): From 102b80231f88e0e792767d11cc97ab3b66fb6079 Mon Sep 17 00:00:00 2001 From: immerrr Date: Mon, 13 Aug 2018 14:38:10 +0300 Subject: [PATCH 4/9] jediepcserver: replace deprecated call_name -> name --- jediepcserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jediepcserver.py b/jediepcserver.py index 806b6f0..881498d 100755 --- a/jediepcserver.py +++ b/jediepcserver.py @@ -104,7 +104,7 @@ def get_in_function_call(*args): # So follow what jedi-vim does... params=[p.description.replace('\n', '') for p in call_def.params], index=call_def.index, - call_name=call_def.call_name, + call_name=call_def.name, ) From b202292718e06b760272d3391e20085ca56b073e Mon Sep 17 00:00:00 2001 From: immerrr Date: Tue, 14 Aug 2018 09:24:55 +0300 Subject: [PATCH 5/9] Fix travis build --- .travis.yml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index c3cbccb..284f3f4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,22 +1,31 @@ sudo: false language: python +git: + depth: 3 python: - - "2.7" - - "3.4" + # First python version in this list is the default for matrix.include + # - "3.7" + - "3.6" - "3.5" + - "3.4" + - "2.7" env: matrix: - - EVM_EMACS=emacs-24.3-travis - - EVM_EMACS=emacs-24.4-travis - - EVM_EMACS=emacs-24.5-travis + - EVM_EMACS=emacs-26.1-travis global: # Turn on --use-mirrors option everywhere (even in tox): - PIP_USE_MIRRORS=t # Use Python version of the one used for running tox - TOXENV=py matrix: - allow_failures: - - python: "3.5" + include: + - env: EVM_EMACS=emacs-24.3-travis + - env: EVM_EMACS=emacs-24.4-travis + - env: EVM_EMACS=emacs-24.5-travis + - env: EVM_EMACS=emacs-25.1-travis + - env: EVM_EMACS=emacs-25.2-travis + - env: EVM_EMACS=emacs-25.3-travis + before_install: - pip install -q virtualenv tox - curl -fsSkL https://gist.github.com/rejeep/ebcd57c3af83b049833b/raw > x.sh && source ./x.sh From 56a4cbf9819b2182adbb30d3fb65393a9e226126 Mon Sep 17 00:00:00 2001 From: immerrr Date: Tue, 14 Aug 2018 16:31:27 +0300 Subject: [PATCH 6/9] jediepcserver: strip "param " prefix --- jediepcserver.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/jediepcserver.py b/jediepcserver.py index 881498d..cf0d91f 100755 --- a/jediepcserver.py +++ b/jediepcserver.py @@ -35,7 +35,6 @@ jedi = None # I will load it later - PY3 = (sys.version_info[0] >= 3) NEED_ENCODE = not PY3 @@ -92,6 +91,9 @@ def complete(*args): return reply +PARAM_PREFIX_RE = re.compile(r'^param\s+') +"""RE to strip unwanted "param " prefix returned by param.description.""" + def get_in_function_call(*args): sig = jedi_script(*args).call_signatures() call_def = sig[0] if sig else None @@ -102,7 +104,8 @@ def get_in_function_call(*args): return dict( # p.description should do the job. But jedi-vim use replace. # So follow what jedi-vim does... - params=[p.description.replace('\n', '') for p in call_def.params], + params=[PARAM_PREFIX_RE.sub('', p.description).replace('\n', '') + for p in call_def.params], index=call_def.index, call_name=call_def.name, ) From c5ff105c93a0423ed768478d80d28c53e8158d7b Mon Sep 17 00:00:00 2001 From: immerrr Date: Tue, 14 Aug 2018 21:59:50 +0300 Subject: [PATCH 7/9] test-jedi.el: don't use isinstance for param tests Its params have different names between Py2 and Py3. --- test-jedi.el | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test-jedi.el b/test-jedi.el index 340b767..bb11bfe 100644 --- a/test-jedi.el +++ b/test-jedi.el @@ -68,14 +68,16 @@ json.l (ert-deftest jedi:get-in-function-call-request () (with-python-temp-buffer " -isinstance(obj, +def foobar(qux, quux): + pass +foobar(obj, " (goto-char (1- (point-max))) (destructuring-bind (&key params index call_name) (jedi-testing:sync (jedi:call-deferred 'get_in_function_call)) - (should (equal params '("object" "class_or_type_or_tuple"))) + (should (equal params '("qux" "quux"))) (should (equal index 1)) - (should (equal call_name "isinstance"))))) + (should (equal call_name "foobar"))))) (ert-deftest jedi:goto-request () (with-python-temp-buffer From db5b1c52a6d324ef00488962bea64da4daccbefb Mon Sep 17 00:00:00 2001 From: immerrr Date: Tue, 23 Oct 2018 09:37:52 +0300 Subject: [PATCH 8/9] defined_names: ensure only module-level definitions are at 1st level --- jediepcserver.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/jediepcserver.py b/jediepcserver.py index cf0d91f..5db5f6a 100755 --- a/jediepcserver.py +++ b/jediepcserver.py @@ -179,7 +179,17 @@ def get_names_recursively(definition, parent=None): def defined_names(*args): - return list(map(get_names_recursively, jedi.api.names(*args))) + # XXX: there's a bug in Jedi that returns returns definitions from inside + # classes or functions even though all_scopes=False is set by + # default. Hence some additional filtering is in order. + # + # See https://github.com/davidhalter/jedi/issues/1202 + top_level_names = [ + defn + for defn in jedi.api.names(*args) + if defn.parent().type == 'module' + ] + return list(map(get_names_recursively, top_level_names)) def get_module_version(module): From 1a70b6dc01cff8772d2478d4508d1d59c2439819 Mon Sep 17 00:00:00 2001 From: immerrr Date: Tue, 23 Oct 2018 09:43:46 +0300 Subject: [PATCH 9/9] travis.yml: disable tests for emacs=24.3 Looks like one of emacs-level dependencies require emacs>=24.4. --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 284f3f4..ccb2b8d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,6 @@ env: - TOXENV=py matrix: include: - - env: EVM_EMACS=emacs-24.3-travis - env: EVM_EMACS=emacs-24.4-travis - env: EVM_EMACS=emacs-24.5-travis - env: EVM_EMACS=emacs-25.1-travis