pyls crashes after invalid path exception on Windows
See original GitHub issueI am evaluating the new LSP package for Sublime Text 3 together with python-language-server at the moment.
Sublime Text freezes frequently with LSP connected to pyls, which is discussed in https://github.com/tomv564/LSP/issues/12
After some investigation I found a crash of pyls to cause LSP to hang while reading from stdout/stderr, which might be the reason for the troubles.
I configured pyls to write a logfile instead of writing errors to stderr, which seems to prevent ST from freezing so far. The log shows following errors at some point.
It looks like pyls to not translate the file uri correctly at some point, which causes invalid path exceptions on file evaluation. I haven’t located the issue nor did I try to fix it yet, so I am not quite sure whether it is an issue caused by LSP or pyls. As LSP sends an uri like file://C:/...
I consider pyls to not translate the file path correctly.
2017-08-18 18:14:03,293 UTC - ERROR - pyls.language_server - CAUGHT
Traceback (most recent call last):
File "c:\apps\python36\lib\site-packages\pyls\language_server.py", line 67, in wrapped
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 137, in m_text_document__hover
return self.hover(textDocument['uri'], position)
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 88, in hover
return self._hook(self._hooks.pyls_hover, doc_uri, position=position) or {'contents': ''}
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 57, in _hook
return hook(config=self.config, workspace=self.workspace, document=doc, **kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 745, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 339, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 302, in __call__
return outcome.get_result()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 279, in get_result
raise ex[1].with_traceback(ex[2])
File "c:\apps\python36\lib\site-packages\pluggy.py", line 265, in __init__
self.result = func()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 300, in <lambda>
outcome = _CallOutcome(lambda: self.oldcall(hook, hook_impls, kwargs))
File "c:\apps\python36\lib\site-packages\pluggy.py", line 334, in <lambda>
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 614, in execute
res = hook_impl.function(*args)
File "c:\apps\python36\lib\site-packages\pyls\plugins\hover.py", line 10, in pyls_hover
definitions = document.jedi_script(position).goto_definitions()
File "c:\apps\python36\lib\site-packages\jedi\api\__init__.py", line 203, in goto_definitions
definitions = helpers.evaluate_goto_definition(self._evaluator, context, leaf)
File "c:\apps\python36\lib\site-packages\jedi\api\helpers.py", line 198, in evaluate_goto_definition
return evaluator.goto_definitions(context, leaf)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 452, in goto_definitions
return self.eval_statement(context, def_, name)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 135, in eval_statement
return self._eval_stmt(context, stmt, seek_name)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 151, in _eval_stmt
types = self.eval_element(context, rhs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 252, in eval_element
return self._eval_element_if_evaluated(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 264, in _eval_element_if_evaluated
return self._eval_element_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 268, in _eval_element_cached
return self._eval_element_not_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 289, in _eval_element_not_cached
types = self.eval_atom(context, first_child)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 347, in eval_atom
search_global=True
File "c:\apps\python36\lib\site-packages\jedi\_compatibility.py", line 213, in <lambda>
return lambda *args, **kwargs: self.func(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 52, in py__getattribute__
self, name_or_str, name_context, position, search_global, is_goto)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 130, in find_types
return f.find(filters, attribute_lookup=not search_global)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 64, in find
types = self._names_to_types(names, attribute_lookup)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in _names_to_types
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in <genexpr>
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 117, in infer
return self.get_param().infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\param.py", line 224, in infer
return self._lazy_context.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\instance.py", line 384, in infer
return self._param.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 51, in infer
return unite(p.infer() for p in self._executed_params)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 51, in <genexpr>
return unite(p.infer() for p in self._executed_params)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\param.py", line 224, in infer
return self._lazy_context.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 120, in infer
return self._context.eval_node(self.data)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 37, in eval_node
return self.evaluator.eval_element(self, node)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 252, in eval_element
return self._eval_element_if_evaluated(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 264, in _eval_element_if_evaluated
return self._eval_element_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 268, in _eval_element_cached
return self._eval_element_not_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 276, in _eval_element_not_cached
types = self.eval_atom(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 347, in eval_atom
search_global=True
File "c:\apps\python36\lib\site-packages\jedi\_compatibility.py", line 213, in <lambda>
return lambda *args, **kwargs: self.func(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 52, in py__getattribute__
self, name_or_str, name_context, position, search_global, is_goto)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 130, in find_types
return f.find(filters, attribute_lookup=not search_global)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 64, in find
types = self._names_to_types(names, attribute_lookup)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in _names_to_types
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in <genexpr>
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 101, in infer
return self.get_param().infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 104, in get_param
params = self.parent_context.get_params()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\representation.py", line 407, in get_params
return search_params(self.evaluator, self.parent_context, self.tree_node)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 78, in search_params
funcdef
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 196, in wrapper
return list(func(*args, **kwargs))
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 114, in _search_function_executions
evaluator, [module_context], func_string_name):
File "c:\apps\python36\lib\site-packages\jedi\evaluate\imports.py", line 530, in get_modules_containing_name
for file_name in os.listdir(d):
OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'C:\\C:\\Apps\\Sublime\\Data\\Packages\\LSP'
2017-08-18 18:14:03,302 UTC - ERROR - jsonrpc.manager - API Exception: {'type': 'OSError', 'args': (22, 'Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch'), 'message': "[WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'C:\\\\C:\\\\Apps\\\\Sublime\\\\Data\\\\Packages\\\\LSP'"}
Traceback (most recent call last):
File "c:\apps\python36\lib\site-packages\jsonrpc\manager.py", line 108, in _get_responses
result = method(*request.args, **request.kwargs)
File "c:\apps\python36\lib\site-packages\pyls\language_server.py", line 67, in wrapped
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 137, in m_text_document__hover
return self.hover(textDocument['uri'], position)
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 88, in hover
return self._hook(self._hooks.pyls_hover, doc_uri, position=position) or {'contents': ''}
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 57, in _hook
return hook(config=self.config, workspace=self.workspace, document=doc, **kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 745, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 339, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 302, in __call__
return outcome.get_result()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 279, in get_result
raise ex[1].with_traceback(ex[2])
File "c:\apps\python36\lib\site-packages\pluggy.py", line 265, in __init__
self.result = func()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 300, in <lambda>
outcome = _CallOutcome(lambda: self.oldcall(hook, hook_impls, kwargs))
File "c:\apps\python36\lib\site-packages\pluggy.py", line 334, in <lambda>
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 614, in execute
res = hook_impl.function(*args)
File "c:\apps\python36\lib\site-packages\pyls\plugins\hover.py", line 10, in pyls_hover
definitions = document.jedi_script(position).goto_definitions()
File "c:\apps\python36\lib\site-packages\jedi\api\__init__.py", line 203, in goto_definitions
definitions = helpers.evaluate_goto_definition(self._evaluator, context, leaf)
File "c:\apps\python36\lib\site-packages\jedi\api\helpers.py", line 198, in evaluate_goto_definition
return evaluator.goto_definitions(context, leaf)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 452, in goto_definitions
return self.eval_statement(context, def_, name)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 135, in eval_statement
return self._eval_stmt(context, stmt, seek_name)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 151, in _eval_stmt
types = self.eval_element(context, rhs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 252, in eval_element
return self._eval_element_if_evaluated(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 264, in _eval_element_if_evaluated
return self._eval_element_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 268, in _eval_element_cached
return self._eval_element_not_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 289, in _eval_element_not_cached
types = self.eval_atom(context, first_child)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 347, in eval_atom
search_global=True
File "c:\apps\python36\lib\site-packages\jedi\_compatibility.py", line 213, in <lambda>
return lambda *args, **kwargs: self.func(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 52, in py__getattribute__
self, name_or_str, name_context, position, search_global, is_goto)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 130, in find_types
return f.find(filters, attribute_lookup=not search_global)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 64, in find
types = self._names_to_types(names, attribute_lookup)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in _names_to_types
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in <genexpr>
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 117, in infer
return self.get_param().infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\param.py", line 224, in infer
return self._lazy_context.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\instance.py", line 384, in infer
return self._param.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 51, in infer
return unite(p.infer() for p in self._executed_params)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 51, in <genexpr>
return unite(p.infer() for p in self._executed_params)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\param.py", line 224, in infer
return self._lazy_context.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 120, in infer
return self._context.eval_node(self.data)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 37, in eval_node
return self.evaluator.eval_element(self, node)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 252, in eval_element
return self._eval_element_if_evaluated(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 264, in _eval_element_if_evaluated
return self._eval_element_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 268, in _eval_element_cached
return self._eval_element_not_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 276, in _eval_element_not_cached
types = self.eval_atom(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 347, in eval_atom
search_global=True
File "c:\apps\python36\lib\site-packages\jedi\_compatibility.py", line 213, in <lambda>
return lambda *args, **kwargs: self.func(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 52, in py__getattribute__
self, name_or_str, name_context, position, search_global, is_goto)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 130, in find_types
return f.find(filters, attribute_lookup=not search_global)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 64, in find
types = self._names_to_types(names, attribute_lookup)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in _names_to_types
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in <genexpr>
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 101, in infer
return self.get_param().infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 104, in get_param
params = self.parent_context.get_params()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\representation.py", line 407, in get_params
return search_params(self.evaluator, self.parent_context, self.tree_node)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 78, in search_params
funcdef
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 196, in wrapper
return list(func(*args, **kwargs))
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 114, in _search_function_executions
evaluator, [module_context], func_string_name):
File "c:\apps\python36\lib\site-packages\jedi\evaluate\imports.py", line 530, in get_modules_containing_name
for file_name in os.listdir(d):
OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'C:\\C:\\Apps\\Sublime\\Data\\Packages\\LSP'
2017-08-18 18:14:10,134 UTC - ERROR - pyls.language_server - CAUGHT
Traceback (most recent call last):
File "c:\apps\python36\lib\site-packages\pyls\language_server.py", line 67, in wrapped
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 137, in m_text_document__hover
return self.hover(textDocument['uri'], position)
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 88, in hover
return self._hook(self._hooks.pyls_hover, doc_uri, position=position) or {'contents': ''}
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 57, in _hook
return hook(config=self.config, workspace=self.workspace, document=doc, **kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 745, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 339, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 302, in __call__
return outcome.get_result()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 279, in get_result
raise ex[1].with_traceback(ex[2])
File "c:\apps\python36\lib\site-packages\pluggy.py", line 265, in __init__
self.result = func()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 300, in <lambda>
outcome = _CallOutcome(lambda: self.oldcall(hook, hook_impls, kwargs))
File "c:\apps\python36\lib\site-packages\pluggy.py", line 334, in <lambda>
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 614, in execute
res = hook_impl.function(*args)
File "c:\apps\python36\lib\site-packages\pyls\plugins\hover.py", line 10, in pyls_hover
definitions = document.jedi_script(position).goto_definitions()
File "c:\apps\python36\lib\site-packages\jedi\api\__init__.py", line 203, in goto_definitions
definitions = helpers.evaluate_goto_definition(self._evaluator, context, leaf)
File "c:\apps\python36\lib\site-packages\jedi\api\helpers.py", line 198, in evaluate_goto_definition
return evaluator.goto_definitions(context, leaf)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 462, in goto_definitions
return helpers.evaluate_call_of_leaf(context, name)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\helpers.py", line 53, in evaluate_call_of_leaf
return context.eval_node(leaf)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 37, in eval_node
return self.evaluator.eval_element(self, node)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 252, in eval_element
return self._eval_element_if_evaluated(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 264, in _eval_element_if_evaluated
return self._eval_element_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 268, in _eval_element_cached
return self._eval_element_not_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 276, in _eval_element_not_cached
types = self.eval_atom(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 347, in eval_atom
search_global=True
File "c:\apps\python36\lib\site-packages\jedi\_compatibility.py", line 213, in <lambda>
return lambda *args, **kwargs: self.func(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 52, in py__getattribute__
self, name_or_str, name_context, position, search_global, is_goto)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 130, in find_types
return f.find(filters, attribute_lookup=not search_global)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 64, in find
types = self._names_to_types(names, attribute_lookup)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in _names_to_types
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in <genexpr>
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 117, in infer
return self.get_param().infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\param.py", line 224, in infer
return self._lazy_context.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\instance.py", line 384, in infer
return self._param.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 51, in infer
return unite(p.infer() for p in self._executed_params)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 51, in <genexpr>
return unite(p.infer() for p in self._executed_params)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\param.py", line 224, in infer
return self._lazy_context.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 120, in infer
return self._context.eval_node(self.data)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 37, in eval_node
return self.evaluator.eval_element(self, node)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 252, in eval_element
return self._eval_element_if_evaluated(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 264, in _eval_element_if_evaluated
return self._eval_element_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 268, in _eval_element_cached
return self._eval_element_not_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 276, in _eval_element_not_cached
types = self.eval_atom(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 347, in eval_atom
search_global=True
File "c:\apps\python36\lib\site-packages\jedi\_compatibility.py", line 213, in <lambda>
return lambda *args, **kwargs: self.func(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 52, in py__getattribute__
self, name_or_str, name_context, position, search_global, is_goto)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 130, in find_types
return f.find(filters, attribute_lookup=not search_global)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 64, in find
types = self._names_to_types(names, attribute_lookup)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in _names_to_types
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in <genexpr>
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 101, in infer
return self.get_param().infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 104, in get_param
params = self.parent_context.get_params()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\representation.py", line 407, in get_params
return search_params(self.evaluator, self.parent_context, self.tree_node)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 78, in search_params
funcdef
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 196, in wrapper
return list(func(*args, **kwargs))
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 114, in _search_function_executions
evaluator, [module_context], func_string_name):
File "c:\apps\python36\lib\site-packages\jedi\evaluate\imports.py", line 530, in get_modules_containing_name
for file_name in os.listdir(d):
OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'C:\\C:\\Apps\\Sublime\\Data\\Packages\\LSP'
2017-08-18 18:14:10,136 UTC - ERROR - jsonrpc.manager - API Exception: {'type': 'OSError', 'args': (22, 'Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch'), 'message': "[WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'C:\\\\C:\\\\Apps\\\\Sublime\\\\Data\\\\Packages\\\\LSP'"}
Traceback (most recent call last):
File "c:\apps\python36\lib\site-packages\jsonrpc\manager.py", line 108, in _get_responses
result = method(*request.args, **request.kwargs)
File "c:\apps\python36\lib\site-packages\pyls\language_server.py", line 67, in wrapped
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 137, in m_text_document__hover
return self.hover(textDocument['uri'], position)
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 88, in hover
return self._hook(self._hooks.pyls_hover, doc_uri, position=position) or {'contents': ''}
File "c:\apps\python36\lib\site-packages\pyls\python_ls.py", line 57, in _hook
return hook(config=self.config, workspace=self.workspace, document=doc, **kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 745, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 339, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "c:\apps\python36\lib\site-packages\pluggy.py", line 302, in __call__
return outcome.get_result()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 279, in get_result
raise ex[1].with_traceback(ex[2])
File "c:\apps\python36\lib\site-packages\pluggy.py", line 265, in __init__
self.result = func()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 300, in <lambda>
outcome = _CallOutcome(lambda: self.oldcall(hook, hook_impls, kwargs))
File "c:\apps\python36\lib\site-packages\pluggy.py", line 334, in <lambda>
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File "c:\apps\python36\lib\site-packages\pluggy.py", line 614, in execute
res = hook_impl.function(*args)
File "c:\apps\python36\lib\site-packages\pyls\plugins\hover.py", line 10, in pyls_hover
definitions = document.jedi_script(position).goto_definitions()
File "c:\apps\python36\lib\site-packages\jedi\api\__init__.py", line 203, in goto_definitions
definitions = helpers.evaluate_goto_definition(self._evaluator, context, leaf)
File "c:\apps\python36\lib\site-packages\jedi\api\helpers.py", line 198, in evaluate_goto_definition
return evaluator.goto_definitions(context, leaf)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 462, in goto_definitions
return helpers.evaluate_call_of_leaf(context, name)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\helpers.py", line 53, in evaluate_call_of_leaf
return context.eval_node(leaf)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 37, in eval_node
return self.evaluator.eval_element(self, node)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 252, in eval_element
return self._eval_element_if_evaluated(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 264, in _eval_element_if_evaluated
return self._eval_element_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 268, in _eval_element_cached
return self._eval_element_not_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 276, in _eval_element_not_cached
types = self.eval_atom(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 347, in eval_atom
search_global=True
File "c:\apps\python36\lib\site-packages\jedi\_compatibility.py", line 213, in <lambda>
return lambda *args, **kwargs: self.func(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 52, in py__getattribute__
self, name_or_str, name_context, position, search_global, is_goto)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 130, in find_types
return f.find(filters, attribute_lookup=not search_global)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 64, in find
types = self._names_to_types(names, attribute_lookup)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in _names_to_types
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in <genexpr>
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 117, in infer
return self.get_param().infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\param.py", line 224, in infer
return self._lazy_context.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\instance.py", line 384, in infer
return self._param.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 51, in infer
return unite(p.infer() for p in self._executed_params)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 51, in <genexpr>
return unite(p.infer() for p in self._executed_params)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\param.py", line 224, in infer
return self._lazy_context.infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 120, in infer
return self._context.eval_node(self.data)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 37, in eval_node
return self.evaluator.eval_element(self, node)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 252, in eval_element
return self._eval_element_if_evaluated(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 264, in _eval_element_if_evaluated
return self._eval_element_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 268, in _eval_element_cached
return self._eval_element_not_cached(context, element)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 276, in _eval_element_not_cached
types = self.eval_atom(context, element)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 347, in eval_atom
search_global=True
File "c:\apps\python36\lib\site-packages\jedi\_compatibility.py", line 213, in <lambda>
return lambda *args, **kwargs: self.func(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\context.py", line 52, in py__getattribute__
self, name_or_str, name_context, position, search_global, is_goto)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\__init__.py", line 130, in find_types
return f.find(filters, attribute_lookup=not search_global)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 64, in find
types = self._names_to_types(names, attribute_lookup)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in _names_to_types
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in unite
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 191, in <genexpr>
return set(typ for types in iterable for typ in types)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\finder.py", line 147, in <genexpr>
types = unite(name.infer() for name in names)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 101, in infer
return self.get_param().infer()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\filters.py", line 104, in get_param
params = self.parent_context.get_params()
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\representation.py", line 407, in get_params
return search_params(self.evaluator, self.parent_context, self.tree_node)
File "c:\apps\python36\lib\site-packages\jedi\debug.py", line 81, in wrapper
return func(*args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 78, in search_params
funcdef
File "c:\apps\python36\lib\site-packages\jedi\evaluate\cache.py", line 41, in wrapper
rv = function(obj, *args, **kwargs)
File "c:\apps\python36\lib\site-packages\jedi\common.py", line 196, in wrapper
return list(func(*args, **kwargs))
File "c:\apps\python36\lib\site-packages\jedi\evaluate\dynamic.py", line 114, in _search_function_executions
evaluator, [module_context], func_string_name):
File "c:\apps\python36\lib\site-packages\jedi\evaluate\imports.py", line 530, in get_modules_containing_name
for file_name in os.listdir(d):
OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'C:\\C:\\Apps\\Sublime\\Data\\Packages\\LSP'
- Windows 10 x64 1703
- python 3.6.2
- pyls 0.4.1 installed using pip
Issue Analytics
- State:
- Created 6 years ago
- Comments:8 (8 by maintainers)
You shouldn’t assume “file” is the scheme of the URI
From: deathaxe notifications@github.com Sent: Friday, August 18, 2017 4:34:51 PM To: palantir/python-language-server Cc: Nicholas Gates; Comment Subject: Re: [palantir/python-language-server] pyls crashes after invalid path exception on Windows (#94)
Yep, the unquote(urlparse(uri)) constructs result in /C:/Apps/… path instead of C:\Apps.. which causes jedi to add another C:\ to the path as it interprets the leading slash as relative path.
I was able to fix the issue by using the following function from LSP package as replacement for unquote(urlparse(uri)) in workspace.py
def uri_to_filename(uri: str) -> str: if os.name == ‘nt’: path = url2pathname(uri.replace(“file://”, “”)) else: path = url2pathname(uri).replace(“file://”, “”) # debug(uri, path) return path
— You are receiving this because you commented. Reply to this email directly, view it on GitHubhttps://github.com/palantir/python-language-server/issues/94#issuecomment-323454587, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AB1rdO5DUArHtu4c994tRgV95vEAJy8qks5sZfVrgaJpZM4O7xX5.
Works like a charm so far 👍