A user reported this error using Jedi 0.9.0:
Traceback
Traceback (most recent call last):
File "/home/user/.emacs.d/elpa/elpy-20150226.1148/elpy/rpc.py", line 100, in handle_request
result = method(*params)
File "/home/user/.emacs.d/elpa/elpy-20150226.1148/elpy/server.py", line 86, in rpc_get_calltip
get_source(source), offset)
File "/home/user/.emacs.d/elpa/elpy-20150226.1148/elpy/server.py", line 48, in _call_backend
return meth(*args, **kwargs)
File "/home/user/.emacs.d/elpa/elpy-20150226.1148/elpy/jedibackend.py", line 126, in rpc_get_calltip
"index": call.index,
File "/home/user/.local/lib/python2.7/site-packages/jedi/api/classes.py", line 653, in index
if self._index >= len(self.params):
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "/home/user/.local/lib/python2.7/site-packages/jedi/api/classes.py", line 348, in params
sub = followed.get_subscope_by_name('__init__')
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/representation.py", line 466, in get_subscope_by_name
for s in self.py__mro__(self._evaluator):
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/representation.py", line 429, in py__mro__
for cls_new in mro_method(evaluator):
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/representation.py", line 409, in py__mro__
for cls in self.py__bases__(self._evaluator):
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/representation.py", line 438, in py__bases__
return list(chain.from_iterable(args.eval_args()))
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/param.py", line 151, in eval_args
return [self._evaluator.eval_element(el) for stars, el in self._split()]
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/__init__.py", line 169, in eval_element
return self._eval_atom(element)
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/__init__.py", line 230, in _eval_atom
return self.find_types(scope, atom, stmt.start_pos, search_global=True)
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/__init__.py", line 120, in find_types
return f.find(scopes, search_global)
File "/home/user/.local/lib/python2.7/site-packages/jedi/debug.py", line 52, in wrapper
result = func(*args, **kwargs)
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/finder.py", line 86, in find
names = self.filter_name(scopes)
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/finder.py", line 177, in filter_name
names = self.names_dict_lookup(names_dict, position)
File "/home/user/.local/lib/python2.7/site-packages/jedi/evaluate/finder.py", line 119, in names_dict_lookup
names = names_dict[search_str]
File "/home/user/.local/lib/python2.7/site-packages/jedi/parser/fast.py", line 78, in __getitem__
return list(chain.from_iterable(dct.get(value, []) for dct in self.dicts))
File "/home/user/.local/lib/python2.7/site-packages/jedi/parser/fast.py", line 78, in <genexpr>
return list(chain.from_iterable(dct.get(value, []) for dct in self.dicts))
AttributeError: 'MergedNamesDict' object has no attribute 'get'
Original report with some reproduction code (using numpy) at jorgenschaefer/elpy#563
Confirmed similar bug here. Jedi 0.9.0 + Python 2.7.3 (running with ycmd).
Same bug confirmed in python3.4 as well.
Confirmed — have seen this several times recently.
Not sure it helps, but I can confirm this is happening as well, happy to do any additional debugging needed.
Virtualenv........: None
RPC Python........: 2.7.10 (/Users/kpurdon/miniconda/bin/python)
Interactive Python: python (/Users/kpurdon/miniconda/bin/python)
Emacs.............: 24.5.1
Elpy..............: 1.8.1
Jedi..............: 0.9.0
Rope..............: Not found (0.10.2 available)
Importmagic.......: 0.1.3
Syntax checker....: flake8 (/Users/kpurdon/miniconda/bin/flake8)
Just adding one more voice, this affects YouCompleteMe's Jedi-based completion engine on Python 3.4 in Vim.
Code to reproduce (Which makes me think that it's heavily linked to strange import mechanisms, have a look at email/__init__.py in the stdlib..):
import jedi
# works
s = jedi.Script(u'import email', 1, 10, None, 'utf-8')
s.goto_assignments()
# fails
s = jedi.Script(u'from email import message', 1, 22, None, 'utf-8')
s.goto_assignments()
Is there any fix/update on this?
No, not yet. Nobody has really tried to fix it, yet. (Solution might even be easy).
because this makes my life hard when developing some files I just temp. quickfixed by:
def getitem(self, value):
try:
return list(chain.from_iterable(dct.get(value, []) for dct in self.dicts))
except:
return []
in line 77 of fast.py but more correct fix is required here
It's a fast parser issue. Should be fairly easy to fix once we have a test case that is as small as possible.
Either we need to implement that get method or MergedNamesDicts shouldn't even be nested.
If this hasn't already been fixed satisfactorily by #644, you can get a tiny test case in this issue I submitted against YCM before I realized it was a Jedi issue. Specifically, the test case is:
#!/bin/env python3
import sys
sys.
(Trigger YCM completion at the .).
I actually cannot confirm this one @thirtythreeforty. Can you try again with the latest commits?
in my install http://scr.ua2web.com/avk/1103_a2cb4.png (this is after my fix above)
@davidhalter everything seems to be working now. Can't reproduce this any more, at least from my test case.
"""
@t"""
class Test:
pass
Here's a simple test case to reproduce this. Error appears when trying to complete Test.
Even like this..
"""
@"""
def bla():
pass
@sadovnychyi Where do ou use the Test. completion?
@davidhalter It may have a classmethod or something Test.blabla()
@sadovnychyi I don't understand. Could you provide a full test that would fail with Jedi?
Sure.
import jedi
s = jedi.Script('''"""
@"""
def bla():
pass
bla.''', 6, 4)
s.completions()
Will work if you will remove "@" or indentation before it.
Thanks! This is actually exactly what we needed. It looks like this is a fast parser issue.
Having this issue too, python2, YCM.
Same here with gnome-builder 3.18 and python3-jedi 0.9.0:
Exception in thread Thread-69:
Traceback (most recent call last):
File "/usr/lib64/python3.4/threading.py", line 920, in _bootstrap_inner
self.run()
File "/usr/lib64/gnome-builder/plugins/jedi_plugin.py", line 160, in run
for info in script.completions():
File "/usr/lib/python3.4/site-packages/jedi/api/__init__.py", line 188, in completions
completion_names = get_completions(user_stmt, b)
File "/usr/lib/python3.4/site-packages/jedi/api/__init__.py", line 174, in get_completions
completion_names += self._simple_complete(path, dot, like)
File "/usr/lib/python3.4/site-packages/jedi/api/__init__.py", line 250, in _simple_complete
scopes = list(self._prepare_goto(path, True))
File "/usr/lib/python3.4/site-packages/jedi/api/__init__.py", line 294, in _prepare_goto
scopes = self._evaluator.eval_element(eval_stmt)
File "/usr/lib/python3.4/site-packages/jedi/evaluate/cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "/usr/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 169, in eval_element
return self._eval_atom(element)
File "/usr/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 230, in _eval_atom
return self.find_types(scope, atom, stmt.start_pos, search_global=True)
File "/usr/lib/python3.4/site-packages/jedi/evaluate/__init__.py", line 120, in find_types
return f.find(scopes, search_global)
File "/usr/lib/python3.4/site-packages/jedi/debug.py", line 52, in wrapper
result = func(*args, **kwargs)
File "/usr/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 86, in find
names = self.filter_name(scopes)
File "/usr/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 177, in filter_name
names = self.names_dict_lookup(names_dict, position)
File "/usr/lib/python3.4/site-packages/jedi/evaluate/finder.py", line 119, in names_dict_lookup
names = names_dict[search_str]
File "/usr/lib/python3.4/site-packages/jedi/parser/fast.py", line 78, in __getitem__
return list(chain.from_iterable(dct.get(value, []) for dct in self.dicts))
File "/usr/lib/python3.4/site-packages/jedi/parser/fast.py", line 78, in <genexpr>
return list(chain.from_iterable(dct.get(value, []) for dct in self.dicts))
AttributeError: 'MergedNamesDict' object has no attribute 'get'
I'm getting the same issue on YCM w/ Neovim on python 2.7.6:
Traceback (most recent call last):
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/bottle/bottle.py", line 862, in _handle
return route.call(**args)
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/bottle/bottle.py", line 1732, in wrapper
rv = callback(*a, **ka)
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/jedihttp/hmac_plugin.py", line 58, in wrapper
body = callback( *args, **kwargs )
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/jedihttp/handlers.py", line 71, in gotodefinition
return _JsonResponse( _FormatDefinitions( script.goto_definitions() ) )
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/api/__init__.py", line 362, in goto_definitions
definitions = set(self._prepare_goto(goto_path))
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/api/__init__.py", line 294, in _prepare_goto
scopes = self._evaluator.eval_element(eval_stmt)
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/evaluate/cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/evaluate/__init__.py", line 169, in eval_element
return self._eval_atom(element)
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/evaluate/__init__.py", line 230, in _eval_atom
return self.find_types(scope, atom, stmt.start_pos, search_global=True)
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/evaluate/__init__.py", line 120, in find_types
return f.find(scopes, search_global)
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/debug.py", line 52, in wrapper
result = func(*args, **kwargs)
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/evaluate/finder.py", line 86, in find
names = self.filter_name(scopes)
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/evaluate/finder.py", line 177, in filter_name
names = self.names_dict_lookup(names_dict, position)
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/evaluate/finder.py", line 119, in names_dict_lookup
names = names_dict[search_str]
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/parser/fast.py", line 78, in __getitem__
return list(chain.from_iterable(dct.get(value, []) for dct in self.dicts))
File "/home/davidoc/.config/nvim/bundle/YouCompleteMe/third_party/ycmd/third_party/JediHTTP/vendor/jedi/jedi/parser/fast.py", line 78, in <genexpr>
return list(chain.from_iterable(dct.get(value, []) for dct in self.dicts))
AttributeError: 'MergedNamesDict' object has no attribute 'get'
I have fixed this issue in a branch. However I still need to merge it into dev. Might take a while.
This would make Jedi usable again! I am now at the point where Ctrl-. works only about half the time for me, which means I am falling back to ag a little more often than I am able to use Jedi. Good luck getting this merged!
Half the time seems very odd. I've barely experienced it ever. Are you working with a lot of @ in your docstrings?
@davidhalter this test case is still broken in dev branch. This patch did fix it (I've applied it manually for autocomplete-python), but looks like this code didn't end up merged. Any updates?
import jedi
s = jedi.Script('''"""
@"""
def bla():
pass
bla.''', 6, 4)
s.completions()
I'm sorry, wrong version. Everything works in dev branch.
Sorry!
Most helpful comment
I have fixed this issue in a branch. However I still need to merge it into dev. Might take a while.