Skip to content

Commit c3bb2f2

Browse files
dalthvizccordoba12
authored andcommitted
Handle AttributeError for jedi completions (missing CompiledObject attribute) (#706)
1 parent b08891f commit c3bb2f2

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

pyls/plugins/jedi_completion.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,16 @@
4545

4646
@hookimpl
4747
def pyls_completions(config, document, position):
48-
definitions = document.jedi_script(position).completions()
48+
try:
49+
definitions = document.jedi_script(position).completions()
50+
except AttributeError as e:
51+
if 'CompiledObject' in str(e):
52+
# Needed to handle missing CompiledObject attribute
53+
# 'sub_modules_dict'
54+
definitions = None
55+
else:
56+
raise e
57+
4958
if not definitions:
5059
return None
5160

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@
6767
'rope': ['rope>0.10.5'],
6868
'yapf': ['yapf'],
6969
'test': ['versioneer', 'pylint', 'pytest', 'mock', 'pytest-cov',
70-
'coverage', 'numpy', 'pandas', 'matplotlib'],
70+
'coverage', 'numpy', 'pandas', 'matplotlib',
71+
'pyqt5;python_version>="3"'],
7172
},
7273

7374
# To provide executable scripts, use entry points in preference to the

test/plugins/test_completion.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,18 @@ def test_jedi_method_completion(config):
124124
assert everyone_method['insertText'] == 'everyone'
125125

126126

127+
@pytest.mark.skipif(PY2 or LooseVersion(jedi.__version__) >= LooseVersion('0.16.0'),
128+
reason='Test only with Jedi <0.16 in Python 3. Check for a fix in future Jedi versions')
129+
def test_pyqt_completion(config):
130+
# Over 'QA' in 'from PyQt5.QtWidgets import QApplication'
131+
doc_pyqt = "from PyQt5.QtWidgets import QA"
132+
com_position = {'line': 0, 'character': len(doc_pyqt)}
133+
doc = Document(DOC_URI, doc_pyqt)
134+
135+
# Test we don't throw importing elements from PyQt5
136+
assert pyls_jedi_completions(config, doc, com_position) is None
137+
138+
127139
@pytest.mark.skipif(LooseVersion('0.15.0') <= LooseVersion(jedi.__version__) < LooseVersion('0.16.0'),
128140
reason='This test fails with Jedi 0.15')
129141
def test_numpy_completions(config):

0 commit comments

Comments
 (0)