Skip to content

Commit 19b10c4

Browse files
authored
Support again Jedi 0.14.1 (#683)
1 parent f619d3a commit 19b10c4

File tree

7 files changed

+47
-38
lines changed

7 files changed

+47
-38
lines changed

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_completion.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ def test_rope_import_completion(config, workspace):
4545
assert items is None
4646

4747

48-
@pytest.mark.skipif(LooseVersion(jedi.__version__) < LooseVersion('0.14.0'),
49-
reason='This test fails with previous versions of Jedi')
5048
def test_jedi_completion(config):
5149
# Over 'i' in os.path.isabs(...)
5250
com_position = {'line': 1, 'character': 15}

test/plugins/test_definitions.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
# Copyright 2017 Palantir Technologies, Inc.
2-
from distutils.version import LooseVersion
3-
import jedi
4-
import pytest
5-
62
from pyls import uris
73
from pyls.plugins.definition import pyls_definitions
84
from pyls.workspace import Document
@@ -38,8 +34,6 @@ def test_definitions(config):
3834
assert [{'uri': DOC_URI, 'range': def_range}] == pyls_definitions(config, doc, cursor_pos)
3935

4036

41-
@pytest.mark.skipif(LooseVersion(jedi.__version__) < LooseVersion('0.14.0'),
42-
reason='This test fails with previous versions of jedi')
4337
def test_builtin_definition(config):
4438
# Over 'i' in dict
4539
cursor_pos = {'line': 8, 'character': 24}

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)

test/plugins/test_symbols.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
# Copyright 2017 Palantir Technologies, Inc.
2-
from distutils.version import LooseVersion
3-
import jedi
4-
import pytest
5-
62
from pyls import uris
73
from pyls.plugins.symbols import pyls_document_symbols
84
from pyls.lsp import SymbolKind
@@ -25,8 +21,6 @@ def main(x):
2521
"""
2622

2723

28-
@pytest.mark.skipif(LooseVersion(jedi.__version__) < LooseVersion('0.14.0'),
29-
reason='This test fails with previous versions of jedi')
3024
def test_symbols(config):
3125
doc = Document(DOC_URI, DOC)
3226
config.update({'plugins': {'jedi_symbols': {'all_scopes': False}}})

0 commit comments

Comments
 (0)