Skip to content

Commit 96cd3cf

Browse files
committed
Add support for Jedi 0.14.1 again
1 parent f619d3a commit 96cd3cf

4 files changed

Lines changed: 47 additions & 24 deletions

File tree

pyls/_utils.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
# Copyright 2017 Palantir Technologies, Inc.
2+
from distutils.version import LooseVersion
23
import functools
34
import inspect
45
import logging
56
import os
67
import sys
78
import threading
89

10+
import jedi
11+
912
PY2 = sys.version_info.major == 2
13+
JEDI_VERSION = jedi.__version__
1014

1115
if PY2:
1216
import pathlib2 as pathlib
@@ -136,6 +140,8 @@ def format_docstring(contents):
136140
"""
137141
contents = contents.replace('\t', u'\u00A0' * 4)
138142
contents = contents.replace(' ', u'\u00A0' * 2)
143+
if LooseVersion(JEDI_VERSION) < LooseVersion('0.15.0'):
144+
contents = contents.replace('*', '\\*')
139145
return contents
140146

141147

pyls/plugins/hover.py

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Copyright 2017 Palantir Technologies, Inc.
2+
from distutils.version import LooseVersion
23
import logging
4+
35
from pyls import hookimpl, _utils
46

57
log = logging.getLogger(__name__)
@@ -10,26 +12,34 @@ def pyls_hover(document, position):
1012
definitions = document.jedi_script(position).goto_definitions()
1113
word = document.word_at_position(position)
1214

13-
# Find first exact matching definition
14-
definition = next((x for x in definitions if x.name == word), None)
15-
16-
if not definition:
17-
return {'contents': ''}
15+
if LooseVersion(_utils.JEDI_VERSION) >= LooseVersion('0.15.0'):
16+
# Find first exact matching definition
17+
definition = next((x for x in definitions if x.name == word), None)
18+
19+
if not definition:
20+
return {'contents': ''}
21+
22+
# raw docstring returns only doc, without signature
23+
doc = _utils.format_docstring(definition.docstring(raw=True))
24+
25+
# Find first exact matching signature
26+
signature = next((x.to_string() for x in definition.get_signatures() if x.name == word), '')
27+
28+
contents = []
29+
if signature:
30+
contents.append({
31+
'language': 'python',
32+
'value': signature,
33+
})
34+
if doc:
35+
contents.append(doc)
36+
if not contents:
37+
return {'contents': ''}
38+
return {'contents': contents}
39+
else:
40+
# Find an exact match for a completion
41+
for d in definitions:
42+
if d.name == word:
43+
return {'contents': _utils.format_docstring(d.docstring()) or ''}
1844

19-
# raw docstring returns only doc, without signature
20-
doc = _utils.format_docstring(definition.docstring(raw=True))
21-
22-
# Find first exact matching signature
23-
signature = next((x.to_string() for x in definition.get_signatures() if x.name == word), '')
24-
25-
contents = []
26-
if signature:
27-
contents.append({
28-
'language': 'python',
29-
'value': signature,
30-
})
31-
if doc:
32-
contents.append(doc)
33-
if not contents:
3445
return {'contents': ''}
35-
return {'contents': contents}

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
'configparser; python_version<"3.0"',
3636
'future>=0.14.0; python_version<"3"',
3737
'backports.functools_lru_cache; python_version<"3.2"',
38-
'jedi>=0.15.0,<0.16',
38+
'jedi>=0.14.1,<0.16',
3939
'python-jsonrpc-server>=0.1.0',
4040
'pluggy'
4141
],

test/plugins/test_hover.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Copyright 2017 Palantir Technologies, Inc.
2-
from pyls import uris
2+
from distutils.version import LooseVersion
3+
4+
from pyls import uris, _utils
35
from pyls.plugins.hover import pyls_hover
46
from pyls.workspace import Document
57

@@ -20,8 +22,13 @@ def test_hover():
2022

2123
doc = Document(DOC_URI, DOC)
2224

25+
if LooseVersion(_utils.JEDI_VERSION) >= LooseVersion('0.15.0'):
26+
contents = [{'language': 'python', 'value': 'main()'}, 'hello world']
27+
else:
28+
contents = 'main()\n\nhello world'
29+
2330
assert {
24-
'contents': [{'language': 'python', 'value': 'main()'}, 'hello world']
31+
'contents': contents
2532
} == pyls_hover(doc, hov_position)
2633

2734
assert {'contents': ''} == pyls_hover(doc, no_hov_position)

0 commit comments

Comments
 (0)