swyddfa / esbonio

A language server for working with Sphinx projects.
https://docs.esbon.io/
132 stars 21 forks source link

Error when a section's title contains only a code role #685

Closed fau-st closed 10 months ago

fau-st commented 10 months ago

Hello,

While working on a document, I encountered an error with esbonio in VSCode.

Here's a short sample to reproduce it:

:code:`my_function`
-------------------

I think it might be related to this other issue : vscode-restructuredtext/vscode-restructuredtext/issues/431#issuecomment-1776645535

I'm not sure putting a single code role in a section's title is supported but sphinx doesn't seem to complain about it.

pip list ``` Package Version ----------------------------- ---------- alabaster 0.7.13 attrs 23.1.0 Babel 2.13.1 cattrs 23.2.2 certifi 2023.11.17 charset-normalizer 3.3.2 docutils 0.20.1 esbonio 0.16.2 idna 3.6 imagesize 1.4.1 Jinja2 3.1.2 lsprotocol 2023.0.0 MarkupSafe 2.1.3 packaging 23.2 pip 23.3.1 platformdirs 4.0.0 pygls 1.2.0 Pygments 2.17.2 pyspellchecker 0.7.2 requests 2.31.0 setuptools 65.5.0 snowballstemmer 2.2.0 Sphinx 7.2.6 sphinxcontrib-applehelp 1.0.7 sphinxcontrib-devhelp 1.0.5 sphinxcontrib-htmlhelp 2.0.4 sphinxcontrib-jsmath 1.0.1 sphinxcontrib-qthelp 1.0.6 sphinxcontrib-serializinghtml 1.1.9 urllib3 2.1.0 ```
Console output ``` Cancel notification for unknown message id "59" Failed to handle request 61 textDocument/documentSymbol DocumentSymbolParams(text_document=TextDocumentIdentifier(uri='file:///local/home/redacted/temp/esbonio-error/file.rst'), work_done_token=None, partial_result_token=None) Traceback (most recent call last): File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/pygls/protocol/json_rpc.py", line 265, in _handle_request self._execute_request(msg_id, handler, params) File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/pygls/protocol/json_rpc.py", line 187, in _execute_request self._send_response(msg_id, handler(params)) ^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/esbonio/lsp/__init__.py", line 350, in on_document_symbol doctree.walkabout(visitor) File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/docutils/nodes.py", line 186, in walkabout if child.walkabout(visitor): ^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/docutils/nodes.py", line 186, in walkabout if child.walkabout(visitor): ^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/docutils/nodes.py", line 178, in walkabout visitor.dispatch_visit(self) File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/docutils/nodes.py", line 2006, in dispatch_visit return method(node) ^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/esbonio/lsp/symbols.py", line 81, in visit_title symbol.range.end.character = len(name) - 1 ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/attr/_make.py", line 1068, in __setattr__ nval = hook(self, a, val) ^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/attr/setters.py", line 23, in wrapped_pipe rv = setter(instance, attrib, rv) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/attr/setters.py", line 52, in validate v(instance, attrib, new_value) File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/lsprotocol/validators.py", line 44, in uinteger_validator raise ValueError( ValueError: Position.character should be in range [0:2147483647], but was -1. Error sending data Traceback (most recent call last): File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/pygls/protocol/json_rpc.py", line 265, in _handle_request self._execute_request(msg_id, handler, params) File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/pygls/protocol/json_rpc.py", line 187, in _execute_request self._send_response(msg_id, handler(params)) ^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/esbonio/lsp/__init__.py", line 350, in on_document_symbol doctree.walkabout(visitor) File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/docutils/nodes.py", line 186, in walkabout if child.walkabout(visitor): ^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/docutils/nodes.py", line 186, in walkabout if child.walkabout(visitor): ^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/docutils/nodes.py", line 178, in walkabout visitor.dispatch_visit(self) File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/docutils/nodes.py", line 2006, in dispatch_visit return method(node) ^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/esbonio/lsp/symbols.py", line 81, in visit_title symbol.range.end.character = len(name) - 1 ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/attr/_make.py", line 1068, in __setattr__ nval = hook(self, a, val) ^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/attr/setters.py", line 23, in wrapped_pipe rv = setter(instance, attrib, rv) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/attr/setters.py", line 52, in validate v(instance, attrib, new_value) File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/lsprotocol/validators.py", line 44, in uinteger_validator raise ValueError( ValueError: Position.character should be in range [0:2147483647], but was -1. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/pygls/protocol/json_rpc.py", line 385, in _send_data body = json.dumps(data, default=self._serialize_message) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/.pyenv/versions/3.11.4/lib/python3.11/json/__init__.py", line 238, in dumps **kw).encode(obj) ^^^^^^^^^^^ File "/local/home/redacted/.pyenv/versions/3.11.4/lib/python3.11/json/encoder.py", line 200, in encode chunks = self.iterencode(o, _one_shot=True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/.pyenv/versions/3.11.4/lib/python3.11/json/encoder.py", line 258, in iterencode return _iterencode(o, 0) ^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/pygls/protocol/json_rpc.py", line 308, in _serialize_message return self._converter.unstructure(data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/cattrs/converters.py", line 238, in unstructure return self._unstructure_func.dispatch( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "", line 3, in unstructure_ResponseErrorMessage 'error': __c_unstr_error(instance.error), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/local/home/redacted/temp/esbonio-error/.venv/lib/python3.11/site-packages/cattrs/converters.py", line 965, in unstructure_optional return None if val is None else _handler(val) ^^^^^^^^^^^^^ File "", line 3, in unstructure_ResponseError 'code': instance.code, ^^^^^^^^^^^^^ AttributeError: 'dict' object has no attribute 'code' ```
alcarney commented 10 months ago

Thank you for the example! It looks like server wasn't able to convert roles in titles to a simple string correctly. All being well there should be a fix out for this soon :crossed_fingers:

alcarney commented 10 months ago

v0.16.3 is available on PyPi with the fix, feel free to re-open this if the issue persists

fau-st commented 10 months ago

Thank you very much, I tested your new version and everything seems to be working as expected :+1: