swyddfa / esbonio

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

Test on Vim9 with yegappan/lsp: Unsupported notification message received from the LSP server (esbonio), #927

Open ubaldot opened 4 days ago

ubaldot commented 4 days ago

Expected behavior

No errors or warnings.

Actual behavior

The server returns a number of errors and a warning.

Log output

This is what I get from the LSP logs. Not sure how to enable `esbonio.logging.level = debug`

E684: List index out of range: 0
E684: List index out of range: 0
E684: List index out of range: 0
....
E684: List index out of range: 0

Warn: Unsupported notification message received from the LSP server (esbonio), 
message = {'method': 'esbonio/buildComplete', 'jsonrpc': '2.0', 'params': 
{'error': false, 'config': {'sphinx': {'doctreeDir': 
'/home/yt75534/.cache/esbonio/50c846034b3983d9cd4079f7cf552c8a/doctrees', 
'version': '8.1.3', 'confDir': '/home/yt75534/dymoval/docs/source', 
'buildDir': 
'/home/yt75534/.cache/esbonio/50c846034b3983d9cd4079f7cf552c8a/html', 
'srcDir': '/home/yt75534/dymoval/docs/source', 'command': ['sphinx-build', 
'-M', 'html', '/home/yt75534/dymoval/docs/source', 
'/home/yt75534/.cache/esbonio/50c846034b3983d9cd4079f7cf552c8a/html', '-d', 
'/home/yt75534/.cache/esbonio/50c846034b3983d9cd4079f7cf552c8a/doctrees']}, 
'server': {}}, 'warnings': 0}}

(Optional) Settings from conf.py

No response

ubaldot commented 4 days ago

Some other info:

'python' Language Server Messages
=================================
11/21/24 15:20:58: [Log]: Running Sphinx v8.1.3
11/21/24 15:20:58: [Log]: loading translations [en]...
11/21/24 15:20:58: [Log]: done
11/21/24 15:20:58: [Log]: loading pickled environment...
11/21/24 15:20:58: [Log]: The configuration has changed (1 option: 'pygments_dark_style')
11/21/24 15:20:58: [Log]: done
11/21/24 15:20:59: [Log]: [autosummary] generating autosummary for: api.rst, api_index/api.rst, getting_started.rst, index.rst, installation.rst, reference.rst, reference_index/dataset.rst, reference_index/validation.rst, some_theory.rst, some_theory_index/create_dataset.rst, some_theory_index/doe.rst, some_theory_index/model_validation.rst, some_theory_index/more_on_model_validation.rst, some_theory_index/simulate_model.rst, some_theory_index/validation_session.rst
11/21/24 15:21:00: [Log]: building [mo]: targets for 0 po files that are out of date
11/21/24 15:21:00: [Log]: writing output...
11/21/24 15:21:01: [Log]: building [html]: targets for 0 source files that are out of date
11/21/24 15:21:01: [Log]: updating environment:
11/21/24 15:21:01: [Log]: 0 added, 0 changed, 0 removed
11/21/24 15:21:01: [Log]: reading sources...
11/21/24 15:21:01: [Log]: looking for now-outdated files...
11/21/24 15:21:01: [Log]: none found
11/21/24 15:21:01: [Log]: no targets are out of date.
11/21/24 15:21:01: [Log]: build succeeded.
11/21/24 15:21:01: [Log]: The HTML pages are in ../.cache/esbonio/50c846034b3983d9cd4079f7cf552c8a/html.
'python' Language Server Capabilities
=====================================
codeActionProvider: true
completionProvider: {'resolveProvider': true, 'triggerCharacters': ['>', '.', ':', '`', '<', '/']}
definitionProvider: true
documentLinkProvider: {}
documentSymbolProvider: true
executeCommandProvider: {'commands': ['esbonio.server.build', 'esbonio.server.configuration', 'esbonio.server.preview']}
hoverProvider: true
implementationProvider: {}
positionEncoding: 'utf-16'
textDocumentSync: {'save': true, 'willSave': false, 'change': 2, 'openClose': true}
workspace: {'workspaceFolders': {'changeNotifications': true, 'supported': true}, 'fileOperations': {}}
~additionalInitResult_serverInfo: {'version': '0.16.5', 'name': 'esbonio'}
'python' Language Server Initialize Request
===========================================
capabilities: {'workspace': {'workspaceFolders': true, 'configuration': true, 'workspaceEdit': {'resourceOperations': ['rename', 'create', 'delete']}, 'symbol': {'dynamicRegistration': false}, 'applyEdit': true}, 'offsetEncoding': ['utf-32', 'utf-16', 'utf-8'], 'window': {}, 'general': {'positionEncodings': ['utf-32', 'utf-16', 'utf-8']}, 'textDocument': {'callHierarchy': {'dynamicRegistration': false}, 'rename': {'prepareSupport': false, 'dynamicRegistration': false}, 'codeAction': {'isPreferredSupport': true, 'disabledSupport': true, 'codeActionLiteralSupport': {'codeActionKind': {'valueSet': ['', 'quickfix', 'refactor', 'refactor.extract', 'refactor.inline', 'refactor.rewrite', 'source', 'source.organizeImports']}}, 'dynamicRegistration': false}, 'completion': {'completionItem': {'insertReplaceSupport': false, 'snippetSupport': false, 'resolveSupport': {'properties': ['detail', 'documentation']}, 'documentationFormat': ['markdown', 'plaintext']}, 'dynamicRegistration': false, 'completionItemKind': {'valueSet': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]}}, 'formatting': {'dynamicRegistration': false}, 'codeLens': {'dynamicRegistration': false}, 'inlayHint': {'dynamicRegistration': false}, 'hover': {'dynamicRegistration': false, 'contentFormat': ['markdown', 'plaintext']}, 'rangeFormatting': {'dynamicRegistration': false}, 'declaration': {'dynamicRegistration': false, 'linkSupport': true}, 'references': {'dynamicRegistration': false}, 'selectionRange': {'dynamicRegistration': false}, 'typeHierarchy': {'dynamicRegistration': false}, 'foldingRange': {'rangeLimit': 5000, 'foldingRange': {'collapsedText': true}, 'dynamicRegistration': false, 'foldingRangeKind': {'valueSet': ['comment', 'imports', 'region']}, 'lineFoldingOnly': true}, 'documentSymbol': {'symbolKind': {'valueSet': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]}, 'dynamicRegistration': false, 'labelSupport': false, 'hierarchicalDocumentSymbolSupport': true}, 'publishDiagnostics': {'dataSupport': true, 'relatedInformation': false, 'codeDescriptionSupport': true, 'versionSupport': true}, 'synchronization': {'didSave': true, 'WillSaveWaitUntil': false, 'willSave': false, 'dynamicRegistration': false}, 'documentHighlight': {'dynamicRegistration': false}, 'implementation': {'dynamicRegistration': false, 'linkSupport': true}, 'typeDefinition': {'dynamicRegistration': false, 'linkSupport': true}, 'semanticTokens': {'serverCancelSupport': false, 'requests': {'full': {'delta': true}, 'range': false}, 'multilineTokenSupport': false, 'dynamicRegistration': false, 'overlappingTokenSupport': false, 'tokenTypes': ['type', 'class', 'enum', 'interface', 'struct', 'typeParameter', 'parameter', 'variable', 'property', 'enumMember', 'event', 'function', 'method', 'macro', 'keyword', 'modifier', 'comment', 'string', 'number', 'regexp', 'operator'], 'tokenModifiers': ['declaration', 'definition', 'readonly', 'static', 'deprecated', 'abstract', 'async', 'modification', 'documentation', 'defaultLibrary'], 'formats': ['relative'], 'augmentsSyntaxTokens': true}, 'signatureHelp': {'signatureInformation': {'activeParameterSupport': true, 'documentationFormat': ['markdown', 'plaintext']}, 'dynamicRegistration': false}, 'definition': {'dynamicRegistration': false, 'linkSupport': true}}}
clientInfo: {'version': '9010793', 'name': 'Vim'}
initializationOptions: {}
processId: 118085
rootPath: '/home/yt75534/dymoval'
rootUri: 'file:///home/yt75534/dymoval/'
trace: 'off'
workspaceFolders: [{'uri': 'file:///home/yt75534/dymoval/', 'name': 'dymoval'}]
ubaldot commented 4 days ago

Not sure if I managed to enable esbonio.logging.level = debug, but I got also the following info:

11/21/24 15:33:05: Sent {'method': 'shutdown', 'params': {}}
11/21/24 15:33:05: Received {'id': 2, 'jsonrpc': '2.0', 'result': null}
11/21/24 15:33:06: Sent {'method': 'initialize', 'params': {'rootUri': 'file:///home/yt75534/dymoval/', 'initializationOptions': {}, 'workspaceFolders': [{'uri': 'file:///home/yt75534/dymoval/', 'name': 'dymoval'}], 'rootPath': '/home/yt75534/dymoval', 'clientInfo': {'version': '9010793', 'name': 'Vim'}, 'processId': 121111, 'trace': 'off', 'capabilities': {'workspace': {'workspaceFolders': true, 'configuration': true, 'workspaceEdit': {'resourceOperations': ['rename', 'create', 'delete']}, 'symbol': {'dynamicRegistration': false}, 'applyEdit': true}, 'offsetEncoding': ['utf-32', 'utf-16', 'utf-8'], 'window': {}, 'general': {'positionEncodings': ['utf-32', 'utf-16', 'utf-8']}, 'textDocument': {'callHierarchy': {'dynamicRegistration': false}, 'rename': {'prepareSupport': false, 'dynamicRegistration': false}, 'codeAction': {'isPreferredSupport': true, 'disabledSupport': true, 'codeActionLiteralSupport': {'codeActionKind': {'valueSet': ['', 'quickfix', 'refactor', 'refactor.extract', 'refactor.inline', 'refactor.rewrite', 'source', 'source.organizeImports']}}, 'dynamicRegistration': false}, 'completion': {'completionItem': {'insertReplaceSupport': false, 'snippetSupport': false, 'resolveSupport': {'properties': ['detail', 'documentation']}, 'documentationFormat': ['markdown', 'plaintext']}, 'dynamicRegistration': false, 'completionItemKind': {'valueSet': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]}}, 'formatting': {'dynamicRegistration': false}, 'codeLens': {'dynamicRegistration': false}, 'inlayHint': {'dynamicRegistration': false}, 'hover': {'dynamicRegistration': false, 'contentFormat': ['markdown', 'plaintext']}, 'rangeFormatting': {'dynamicRegistration': false}, 'declaration': {'dynamicRegistration': false, 'linkSupport': true}, 'references': {'dynamicRegistration': false}, 'selectionRange': {'dynamicRegistration': false}, 'typeHierarchy': {'dynamicRegistration': false}, 'foldingRange': {'rangeLimit': 5000, 'foldingRange': {'collapsedText': true}, 'dynamicRegistration': false, 'foldingRangeKind': {'valueSet': ['comment', 'imports', 'region']}, 'lineFoldingOnly': true}, 'documentSymbol': {'symbolKind': {'valueSet': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]}, 'dynamicRegistration': false, 'labelSupport': false, 'hierarchicalDocumentSymbolSupport': true}, 'publishDiagnostics': {'dataSupport': true, 'relatedInformation': false, 'codeDescriptionSupport': true, 'versionSupport': true}, 'synchronization': {'didSave': true, 'WillSaveWaitUntil': false, 'willSave': false, 'dynamicRegistration': false}, 'documentHighlight': {'dynamicRegistration': false}, 'implementation': {'dynamicRegistration': false, 'linkSupport': true}, 'typeDefinition': {'dynamicRegistration': false, 'linkSupport': true}, 'semanticTokens': {'serverCancelSupport': false, 'requests': {'full': {'delta': true}, 'range': false}, 'multilineTokenSupport': false, 'dynamicRegistration': false, 'overlappingTokenSupport': false, 'tokenTypes': ['type', 'class', 'enum', 'interface', 'struct', 'typeParameter', 'parameter', 'variable', 'property', 'enumMember', 'event', 'function', 'method', 'macro', 'keyword', 'modifier', 'comment', 'string', 'number', 'regexp', 'operator'], 'tokenModifiers': ['declaration', 'definition', 'readonly', 'static', 'deprecated', 'abstract', 'async', 'modification', 'documentation', 'defaultLibrary'], 'formats': ['relative'], 'augmentsSyntaxTokens': true}, 'signatureHelp': {'signatureInformation': {'activeParameterSupport': true, 'documentationFormat': ['markdown', 'plaintext']}, 'dynamicRegistration': false}, 'definition': {'dynamicRegistration': false, 'linkSupport': true}}}}}
11/21/24 15:33:06: Received {'id': 1, 'jsonrpc': '2.0', 'result': {'capabilities': {'executeCommandProvider': {'commands': ['esbonio.server.build', 'esbonio.server.configuration', 'esbonio.server.preview']}, 'hoverProvider': true, 'documentLinkProvider': {}, 'implementationProvider': {}, 'documentSymbolProvider': true, 'definitionProvider': true, 'workspace': {'workspaceFolders': {'changeNotifications': true, 'supported': true}, 'fileOperations': {}}, 'positionEncoding': 'utf-16', 'textDocumentSync': {'save': true, 'willSave': false, 'change': 2, 'openClose': true}, 'codeActionProvider': true, 'completionProvider': {'resolveProvider': true, 'triggerCharacters': ['>', '.', ':', '`', '<', '/']}}, 'serverInfo': {'version': '0.16.5', 'name': 'esbonio'}}}
11/21/24 15:33:06: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'Running Sphinx v8.1.3', 'type': 4}}
11/21/24 15:33:06: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'loading translations [en]...', 'type': 4}}
11/21/24 15:33:06: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'done', 'type': 4}}
11/21/24 15:33:06: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'loading pickled environment...', 'type': 4}}
11/21/24 15:33:06: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'The configuration has changed (1 option: ''pygments_dark_style'')', 'type': 4}}
11/21/24 15:33:06: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'done', 'type': 4}}
11/21/24 15:33:06: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': '[autosummary] generating autosummary for: api.rst, api_index/api.rst, getting_started.rst, index.rst, installation.rst, reference.rst, reference_index/dataset.rst, reference_index/validation.rst, some_theory.rst, some_theory_index/create_dataset.rst, some_theory_index/doe.rst, some_theory_index/model_validation.rst, some_theory_index/more_on_model_validation.rst, some_theory_index/simulate_model.rst, some_theory_index/validation_session.rst', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'esbonio/buildStart', 'jsonrpc': '2.0', 'params': {}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'building [mo]: targets for 0 po files that are out of date', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'writing output...', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': '', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'building [html]: targets for 0 source files that are out of date', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'updating environment:', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': '0 added, 0 changed, 0 removed', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'reading sources...', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': '', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'looking for now-outdated files...', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'none found', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'no targets are out of date.', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'build succeeded.', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': '', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'The HTML pages are in ../.cache/esbonio/50c846034b3983d9cd4079f7cf552c8a/html.', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'esbonio/buildComplete', 'jsonrpc': '2.0', 'params': {'error': false, 'config': {'sphinx': {'doctreeDir': '/home/yt75534/.cache/esbonio/50c846034b3983d9cd4079f7cf552c8a/doctrees', 'version': '8.1.3', 'confDir': '/home/yt75534/dymoval/docs/source', 'buildDir': '/home/yt75534/.cache/esbonio/50c846034b3983d9cd4079f7cf552c8a/html', 'srcDir': '/home/yt75534/dymoval/docs/source', 'command': ['sphinx-build', '-M', 'html', '/home/yt75534/dymoval/docs/source', '/home/yt75534/.cache/esbonio/50c846034b3983d9cd4079f7cf552c8a/html', '-d', '/home/yt75534/.cache/esbonio/50c846034b3983d9cd4079f7cf552c8a/doctrees']}, 'server': {}}, 'warnings': 0}}

and I also got this error:

Ignoring notification for unknown method "workspace/didChangeConfiguration"

alcarney commented 2 days ago

Thank you for all the effort you put into collecting the log information - it's very much appreciated! :smile:

Unfortunately, even with all the information, I'm not too sure what the

E684: List index out of range: 0
E684: List index out of range: 0
E684: List index out of range: 0
....
E684: List index out of range: 0

errors could be about - have you noticed if they occur after a particular message is sent from esbonio?

This error is expected

Ignoring notification for unknown method "workspace/didChangeConfiguration"

The version of esbonio you are running does not support that particular notification from the client.

Warning messages like the following are also to be expected

Warn: Unsupported notification message received from the LSP server (esbonio), 
message = {'method': 'esbonio/buildComplete'

esbonio does send some messages that are outside the LSP specification to make it possible for a client to provide additional information about the Sphinx processes managed by the server. They aren't necessary for the server to function correctly though so can be safely ignored.

ubaldot commented 2 days ago

Thank you for all the effort you put into collecting the log information - it's very appreciated

I just have to copy and paste. The LSP client I am using rocks! :)

have you noticed if they occur after a particular message is sent from esbonio?

That happens at startup.

If the LSP server send "out-of-spec" messages, then the client obviously cannot interpret them. However, the client says that the LSP is up and running, but I cannot see any diagnostic, etc. The only feature that seems work-ish is the completion but it is not very usable. For example, say that I want to .. figure::, the I type .. and a popup menu appears with all the options. Fine, but then, every key I hit, the popup disappear.

ubaldot commented 2 days ago

Another issue: I am working on macos today and look here:

11/23/24 19:22:11: [Log]: [esbonio.lsp] Traceback (most recent call last): File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/config.py", line 332, in eval_config_file exec(code, namespace) File "/Users/ubaldot/Documents/FreeRTOSv202212.01/FreeRTOS-Plus/ThirdParty/wolfSSL/wrapper/python/wolfcrypt/docs/conf.py", line 17, in import sphinx_rtd_theme ModuleNotFoundError: No module named 'sphinx_rtd_theme'

Missing dependency? I installed esbonio via conda.

ubaldot commented 2 days ago

Som more logs:

'python' Language Server Messages
=================================
11/23/24 19:24:55: [Log]: Running Sphinx v8.1.3
11/23/24 19:24:55: [Log]: loading translations [en]...
11/23/24 19:24:55: [Log]: done
11/23/24 19:24:55: [Log]: loading pickled environment...
11/23/24 19:24:55: [Log]: failed: Can't get attribute '_stable_repr_object' on <module 'sphinx.builders.html' from '/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/builders/html/__init__.py'>
11/23/24 19:24:55: [Log]: done
11/23/24 19:24:55: [Log]: [autosummary] generating autosummary for: api.rst, api_index/api.rst, getting_started.rst, index.rst, installation.rst, reference.rst, reference_index/dataset.rst, reference_index/validation.rst, some_theory.rst, some_theory_index/create_dataset.rst, some_theory_index/doe.rst, some_theory_index/model_validation.rst, some_theory_index/more_on_model_validation.rst, some_theory_index/simulate_model.rst, some_theory_index/validation_session.rst
11/23/24 19:24:56: [Log]: building [mo]: targets for 0 po files that are out of date
11/23/24 19:24:56: [Log]: writing output...
11/23/24 19:24:57: [Log]: building [html]: build_info mismatch, copying .buildinfo to .buildinfo.bak
11/23/24 19:24:57: [Log]: building [html]: targets for 15 source files that are out of date
11/23/24 19:24:57: [Log]: updating environment:
11/23/24 19:24:57: [Log]: [new config]
11/23/24 19:24:57: [Log]: 15 added, 0 changed, 0 removed
11/23/24 19:24:57: [Log]: reading sources... [  7%]
11/23/24 19:24:57: [Log]: api
11/23/24 19:24:57: [Log]: reading sources... [ 13%]
11/23/24 19:24:57: [Log]: api_index/api
11/23/24 19:24:57: [Log]: reading sources... [ 20%]
11/23/24 19:24:57: [Log]: getting_started
11/23/24 19:24:57: [Log]: reading sources... [ 27%]
11/23/24 19:24:57: [Log]: index
11/23/24 19:24:57: [Log]: reading sources... [ 33%]
11/23/24 19:24:57: [Log]: installation
11/23/24 19:24:57: [Log]: reading sources... [ 40%]
11/23/24 19:24:57: [Log]: reference
11/23/24 19:24:57: [Log]: reading sources... [ 47%]
11/23/24 19:24:57: [Log]: reference_index/dataset
11/23/24 19:24:57: [Log]: reading sources... [ 53%]
11/23/24 19:24:57: [Log]: reference_index/validation
11/23/24 19:24:57: [Log]: reading sources... [ 60%]
11/23/24 19:24:57: [Log]: some_theory
11/23/24 19:24:57: [Log]: reading sources... [ 67%]
11/23/24 19:24:57: [Log]: some_theory_index/create_dataset
11/23/24 19:24:57: [Log]: reading sources... [ 73%]
11/23/24 19:24:57: [Log]: some_theory_index/doe
11/23/24 19:24:57: [Log]: reading sources... [ 80%]
11/23/24 19:24:57: [Log]: some_theory_index/model_validation
11/23/24 19:24:57: [Log]: reading sources... [ 87%]
11/23/24 19:24:57: [Log]: some_theory_index/more_on_model_validation
11/23/24 19:24:57: [Log]: reading sources... [ 93%]
11/23/24 19:24:57: [Log]: some_theory_index/simulate_model
11/23/24 19:24:57: [Log]: reading sources... [100%]
11/23/24 19:24:57: [Log]: some_theory_index/validation_session
11/23/24 19:24:57: [Log]: looking for now-outdated files...
11/23/24 19:24:57: [Log]: none found
11/23/24 19:24:57: [Log]: pickling environment...
11/23/24 19:24:57: [Log]: done
11/23/24 19:24:57: [Log]: checking consistency...
11/23/24 19:24:57: [Log]: done
11/23/24 19:24:57: [Log]: preparing documents...
11/23/24 19:24:57: [Log]: done
11/23/24 19:24:57: [Log]: copying assets...
11/23/24 19:24:57: [Log]: copying static files...
11/23/24 19:24:57: [Log]: Writing evaluated template result to /Users/ubaldot/Library/Caches/esbonio/26c393f94e7d1e4a84c496f6cfabc2f5/html/_static/basic.css
11/23/24 19:24:57: [Log]: Writing evaluated template result to /Users/ubaldot/Library/Caches/esbonio/26c393f94e7d1e4a84c496f6cfabc2f5/html/_static/language_data.js
11/23/24 19:24:57: [Log]: Writing evaluated template result to /Users/ubaldot/Library/Caches/esbonio/26c393f94e7d1e4a84c496f6cfabc2f5/html/_static/documentation_options.js
11/23/24 19:24:57: [Log]: copying static files: done
11/23/24 19:24:57: [Log]: copying extra files...
11/23/24 19:24:57: [Log]: copying extra files: done
11/23/24 19:24:57: [Log]: copying assets: done
11/23/24 19:24:57: [Log]: writing output... [  7%]
11/23/24 19:24:57: [Log]: api
11/23/24 19:24:57: [Log]: ====================== slowest reading durations =======================
11/23/24 19:24:57: [Log]: 0.365 api_index/api
11/23/24 19:24:57: [Log]: 0.088 reference_index/dataset
11/23/24 19:24:57: [Log]: 0.054 reference_index/validation
11/23/24 19:24:57: [Log]: 0.052 reference
11/23/24 19:24:57: [Log]: 0.008 api
11/23/24 19:24:57: [Log]: [esbonio.lsp] Traceback (most recent call last):
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/events.py", line 404, in emit
    results.append(listener.handler(self.app, *args))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/furo/__init__.py", line 183, in _html_page_context
    _add_asset_hashes(
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/furo/__init__.py", line 161, in _add_asset_hashes
    static[index].filename = _asset_hash(asset)  # type: ignore
    ^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/builders/html/_assets.py", line 64, in __setattr__
    raise AttributeError(msg)
AttributeError: _CascadingStyleSheet is immutable

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/esbonio/lsp/sphinx/__init__.py", line 235, in build
    self.app.build(force_all, filenames)
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/application.py", line 381, in build
    self.builder.build_update()
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 358, in build_update
    self.build(
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 437, in build
    self.write(docnames, list(updated_docnames), method)
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 711, in write
    self.write_documents(docnames)
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 725, in write_documents
    self._write_serial(sorted_docnames)
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/builders/__init__.py", line 744, in _write_serial
    self.write_doc(docname, doctree)
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/builders/html/__init__.py", line 659, in write_doc
    self.handle_page(docname, ctx, event_arg=doctree)
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/builders/html/__init__.py", line 1162, in handle_page
    newtmpl = self.app.emit_firstresult(
              ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/application.py", line 836, in emit_firstresult
    return self.events.emit_firstresult(event, *args,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/events.py", line 433, in emit_firstresult
    for result in self.emit(name, *args, allowed_exceptions=allowed_exceptions):
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/events.py", line 415, in emit
    raise ExtensionError(
sphinx.errors.ExtensionError: Handler <function _html_page_context at 0x104fea200> for event 'html-page-context' threw an exception (exception: _CascadingStyleSheet is immutable)
alcarney commented 2 days ago

I hadn't seen your latest couple of messages when I wrote this

That happens at startup.

From the logs you've shared the only message sent multiple times during startup is window/logMessage...

If we compare the logs of the messages received

11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'reading sources...', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': '', 'type': 4}}
11/21/24 15:33:07: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'looking for now-outdated files...', 'type': 4}}

With the message log reported by the client

11/21/24 15:21:01: [Log]: reading sources...
11/21/24 15:21:01: [Log]: looking for now-outdated files...

The empty message ({'message': '', 'type': 4}) is not there.

Now I should say I have zero knowledge of Vim9Script and perhaps the client is simply ignoring the empty message, but I am wondering if there could be a bug on this line of code where the client tries to reference msgs[0]?

However, the client says that the LSP is up and running, but I cannot see any diagnostic, etc. I am bit puzzled...

Me too... from the logs you've shared I'm not seeing anything to suggest that the server isn't working. Does the server respond at all when you edit an .rst file and save it? I would expect a fresh Sphinx build to be triggered.

Would you mind sharing your client side config for esbonio?

ubaldot commented 2 days ago

Sure thing! :)

var lspServers = [
  {
    name: 'esbonio',
    filetype: ['rst'],
    path: 'python',
    args: ['-m', 'esbonio'],
    workspaceConfig: {esbonio: {logging: {level: "debug"}}}
  },]

autocmd VimEnter * g:LspAddServer(lspServers)

var lspOpts = {'showDiagOnStatusLine': true, 'noNewlineInCompletion': true}
autocmd VimEnter * g:LspOptionsSet(lspOpts)

... and I add some more logs:

11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'writing output... [100%]', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'symmetric', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': '', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': '', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'generating indices...', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'genindex', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'py-modindex', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'done', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'highlighting module code...', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': '', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'writing additional pages...', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'search', 'type': 4}}
11/23/24 19:29:51: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'done', 'type': 4}}
11/23/24 19:29:52: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'dumping search index in English (code: en)...', 'type': 4}}
11/23/24 19:29:52: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'done', 'type': 4}}
11/23/24 19:29:52: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'dumping object inventory...', 'type': 4}}
11/23/24 19:29:52: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'done', 'type': 4}}
11/23/24 19:29:52: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'build succeeded.', 'type': 4}}
11/23/24 19:29:52: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': '', 'type': 4}}
11/23/24 19:29:52: Received {'method': 'window/logMessage', 'jsonrpc': '2.0', 'params': {'message': 'The HTML pages are in Library/Caches/esbonio/96def0404aa8f794ab670c28502f494d/html.', 'type': 4}}
....
11/23/24 19:30:01: Sent {'method': 'textDocument/completion', 'params': {'context': {'triggerCharacter': '.', 'triggerKind': 2}, 'textDocument': {'uri': 'file:///Users/ubaldot/Documents/dymoval/docs/source/getting_started.rst'}, 'position': {'character': 2, 'line': 8}}}
11/23/24 19:30:01: Sent {'method': 'textDocument/completion', 'params': {'context': {'triggerCharacter': '.', 'triggerKind': 2}, 'textDocument': {'uri': 'file:///Users/ubaldot/Documents/dymoval/docs/source/getting_started.rst'}, 'position': {'character': 2, 'line': 8}}}
11/23/24 19:30:01: Received {'id': 20, 'jsonrpc': '2.0', 'result': {'isIncomplete': false, 'items': [{'label': 'attention', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. attention::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. attention::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Attention'}, {'label': 'caution', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. caution::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. caution::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Caution'}, {'label': 'code', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. code::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. code::'}, 'detail': 'sphinx.directives.patches.Code'}, {'label': 'danger', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. danger::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. danger::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Danger'}, {'label': 'error', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. error::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. error::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Error'}, {'label': 'important', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. important::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. important::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Important'}, {'label': 'note', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. note::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. note::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Note'}, {'label': 'tip', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. tip::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. tip::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Tip'}, {'label': 'hint', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. hint::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. hint::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Hint'}, {'label': 'warning', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. warning::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. warning::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Warning'}, {'label': 'admonition', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. admonition::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. admonition::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Admonition'}, {'label': 'sidebar', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. sidebar::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. sidebar::'}, 'detail': 'docutils.parsers.rst.directives.body.Sidebar'}, {'label': 'topic', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. topic::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. topic::'}, 'detail': 'docutils.parsers.rst.directives.body.Topic'}, {'label': 'line-block', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. line-block::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. line-block::'}, 'detail': 'docutils.parsers.rst.directives.body.LineBlock'}, {'label': 'parsed-literal', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. parsed-literal::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. parsed-literal::'}, 'detail': 'docutils.parsers.rst.directives.body.ParsedLiteral'}, {'label': 'math', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. math::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. math::'}, 'detail': 'sphinx.directives.patches.MathDirective'}, {'label': 'rubric', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. rubric::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. rubric::'}, 'detail': 'sphinx.directives.patches.Rubric'}, {'label': 'epigraph', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. epigraph::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. epigraph::'}, 'detail': 'docutils.parsers.rst.directives.body.Epigraph'}, {'label': 'highlights', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. highlights::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. highlights::'}, 'detail': 'docutils.parsers.rst.directives.body.Highlights'}, {'label': 'pull-quote', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. pull-quote::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. pull-quote::'}, 'detail': 'docutils.parsers.rst.directives.body.PullQuote'}, {'label': 'compound', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. compound::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. compound::'}, 'detail': 'docutils.parsers.rst.directives.body.Compound'}, {'label': 'container', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. container::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. container::'}, 'detail': 'docutils.parsers.rst.directives.body.Container'}, {'label': 'table', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. table::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. table::'}, 'detail': 'docutils.parsers.rst.directives.tables.RSTTable'}, {'label': 'csv-table', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. csv-table::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. csv-table::'}, 'detail': 'sphinx.directives.patches.CSVTable'}, {'label': 'list-table', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. list-table::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. list-table::'}, 'detail': 'docutils.parsers.rst.directives.tables.ListTable'}, {'label': 'image', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. image::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. image::'}, 'detail': 'docutils.parsers.rst.directives.images.Image'}, {'label': 'figure', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. figure::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. figure::'}, 'detail': 'sphinx.directives.patches.Figure'}, {'label': 'contents', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. contents::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. contents::'}, 'detail': 'docutils.parsers.rst.directives.parts.Contents'}, {'label': 'sectnum', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. sectnum::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. sectnum::'}, 'detail': 'docutils.parsers.rst.directives.parts.Sectnum'}, {'label': 'header', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. header::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. header::'}, 'detail': 'docutils.parsers.rst.directives.parts.Header'}, {'label': 'footer', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. footer::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. footer::'}, 'detail': 'docutils.parsers.rst.directives.parts.Footer'}, {'label': 'target-notes', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. target-notes::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. target-notes::'}, 'detail': 'docutils.parsers.rst.directives.references.TargetNotes'}, {'label': 'meta', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. meta::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. meta::'}, 'detail': 'docutils.parsers.rst.directives.misc.Meta'}, {'label': 'raw', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. raw::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. raw::'}, 'detail': 'docutils.parsers.rst.directives.misc.Raw'}, {'label': 'include', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. include::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. include::'}, 'detail': 'sphinx.directives.other.Include'}, {'label': 'replace', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. replace::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. replace::'}, 'detail': 'docutils.parsers.rst.directives.misc.Replace'}, {'label': 'unicode', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. unicode::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. unicode::'}, 'detail': 'docutils.parsers.rst.directives.misc.Unicode'}, {'label': 'class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. class::'}, 'detail': 'docutils.parsers.rst.directives.misc.Class'}, {'label': 'role', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. role::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. role::'}, 'detail': 'docutils.parsers.rst.directives.misc.Role'}, {'label': 'default-role', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. default-role::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. default-role::'}, 'detail': 'sphinx.directives.DefaultRole'}, {'label': 'title', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. title::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. title::'}, 'detail': 'docutils.parsers.rst.directives.misc.Title'}, {'label': 'date', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. date::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. date::'}, 'detail': 'docutils.parsers.rst.directives.misc.Date'}, {'label': 'deprecated', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. deprecated::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. deprecated::'}, 'detail': 'sphinx.domains.changeset.VersionChange'}, {'label': 'versionadded', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. versionadded::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. versionadded::'}, 'detail': 'sphinx.domains.changeset.VersionChange'}, {'label': 'versionchanged', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. versionchanged::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. versionchanged::'}, 'detail': 'sphinx.domains.changeset.VersionChange'}, {'label': 'versionremoved', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. versionremoved::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. versionremoved::'}, 'detail': 'sphinx.domains.changeset.VersionChange'}, {'label': 'index', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. index::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. index::'}, 'detail': 'sphinx.domains.index.IndexDirective'}, {'label': 'default-domain', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. default-domain::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. default-domain::'}, 'detail': 'sphinx.directives.DefaultDomain'}, {'label': 'describe', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. describe::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. describe::'}, 'detail': 'sphinx.directives.ObjectDescription'}, {'label': 'object', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. object::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. object::'}, 'detail': 'sphinx.directives.ObjectDescription'}, {'label': 'highlight', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. highlight::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. highlight::'}, 'detail': 'sphinx.directives.code.Highlight'}, {'label': 'code-block', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. code-block::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. code-block::'}, 'detail': 'sphinx.directives.code.CodeBlock'}, {'label': 'sourcecode', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. sourcecode::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. sourcecode::'}, 'detail': 'sphinx.directives.code.CodeBlock'}, {'label': 'literalinclude', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. literalinclude::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. literalinclude::'}, 'detail': 'sphinx.directives.code.LiteralInclude'}, {'label': 'toctree', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. toctree::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. toctree::'}, 'detail': 'sphinx.directives.other.TocTree'}, {'label': 'sectionauthor', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. sectionauthor::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. sectionauthor::'}, 'detail': 'sphinx.directives.other.Author'}, {'label': 'moduleauthor', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. moduleauthor::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. moduleauthor::'}, 'detail': 'sphinx.directives.other.Author'}, {'label': 'codeauthor', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. codeauthor::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. codeauthor::'}, 'detail': 'sphinx.directives.other.Author'}, {'label': 'seealso', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. seealso::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. seealso::'}, 'detail': 'sphinx.directives.other.SeeAlso'}, {'label': 'tabularcolumns', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. tabularcolumns::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. tabularcolumns::'}, 'detail': 'sphinx.directives.other.TabularColumns'}, {'label': 'centered', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. centered::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. centered::'}, 'detail': 'sphinx.directives.other.Centered'}, {'label': 'acks', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. acks::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. acks::'}, 'detail': 'sphinx.directives.other.Acks'}, {'label': 'hlist', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. hlist::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. hlist::'}, 'detail': 'sphinx.directives.other.HList'}, {'label': 'only', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. only::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. only::'}, 'detail': 'sphinx.directives.other.Only'}, {'label': 'cssclass', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cssclass::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cssclass::'}, 'detail': 'docutils.parsers.rst.directives.misc.Class'}, {'label': 'rst-class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. rst-class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. rst-class::'}, 'detail': 'docutils.parsers.rst.directives.misc.Class'}, {'label': 'automodule', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. automodule::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. automodule::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autoclass', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autoclass::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autoclass::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autoexception', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autoexception::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autoexception::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autodata', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autodata::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autodata::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autofunction', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autofunction::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autofunction::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autodecorator', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autodecorator::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autodecorator::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'automethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. automethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. automethod::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autoattribute', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autoattribute::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autoattribute::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autoproperty', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autoproperty::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autoproperty::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'testsetup', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. testsetup::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. testsetup::'}, 'detail': 'sphinx.ext.doctest.TestsetupDirective'}, {'label': 'testcleanup', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. testcleanup::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. testcleanup::'}, 'detail': 'sphinx.ext.doctest.TestcleanupDirective'}, {'label': 'doctest', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. doctest::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. doctest::'}, 'detail': 'sphinx.ext.doctest.DoctestDirective'}, {'label': 'testcode', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. testcode::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. testcode::'}, 'detail': 'sphinx.ext.doctest.TestcodeDirective'}, {'label': 'testoutput', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. testoutput::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. testoutput::'}, 'detail': 'sphinx.ext.doctest.TestoutputDirective'}, {'label': 'c:member', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:member::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:member::'}, 'detail': 'sphinx.domains.c.CMemberObject'}, {'label': 'c:var', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:var::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:var::'}, 'detail': 'sphinx.domains.c.CMemberObject'}, {'label': 'c:function', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:function::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:function::'}, 'detail': 'sphinx.domains.c.CFunctionObject'}, {'label': 'c:macro', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:macro::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:macro::'}, 'detail': 'sphinx.domains.c.CMacroObject'}, {'label': 'c:struct', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:struct::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:struct::'}, 'detail': 'sphinx.domains.c.CStructObject'}, {'label': 'c:union', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:union::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:union::'}, 'detail': 'sphinx.domains.c.CUnionObject'}, {'label': 'c:enum', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:enum::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:enum::'}, 'detail': 'sphinx.domains.c.CEnumObject'}, {'label': 'c:enumerator', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:enumerator::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:enumerator::'}, 'detail': 'sphinx.domains.c.CEnumeratorObject'}, {'label': 'c:type', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:type::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:type::'}, 'detail': 'sphinx.domains.c.CTypeObject'}, {'label': 'c:namespace', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:namespace::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:namespace::'}, 'detail': 'sphinx.domains.c.CNamespaceObject'}, {'label': 'c:namespace-push', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:namespace-push::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:namespace-push::'}, 'detail': 'sphinx.domains.c.CNamespacePushObject'}, {'label': 'c:namespace-pop', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:namespace-pop::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:namespace-pop::'}, 'detail': 'sphinx.domains.c.CNamespacePopObject'}, {'label': 'c:alias', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:alias::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:alias::'}, 'detail': 'sphinx.domains.c.CAliasObject'}, {'label': 'cpp:class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:class::'}, 'detail': 'sphinx.domains.cpp.CPPClassObject'}, {'label': 'cpp:struct', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:struct::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:struct::'}, 'detail': 'sphinx.domains.cpp.CPPClassObject'}, {'label': 'cpp:union', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:union::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:union::'}, 'detail': 'sphinx.domains.cpp.CPPUnionObject'}, {'label': 'cpp:function', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:function::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:function::'}, 'detail': 'sphinx.domains.cpp.CPPFunctionObject'}, {'label': 'cpp:member', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:member::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:member::'}, 'detail': 'sphinx.domains.cpp.CPPMemberObject'}, {'label': 'cpp:var', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:var::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:var::'}, 'detail': 'sphinx.domains.cpp.CPPMemberObject'}, {'label': 'cpp:type', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:type::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:type::'}, 'detail': 'sphinx.domains.cpp.CPPTypeObject'}, {'label': 'cpp:concept', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:concept::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:concept::'}, 'detail': 'sphinx.domains.cpp.CPPConceptObject'}, {'label': 'cpp:enum', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:enum::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:enum::'}, 'detail': 'sphinx.domains.cpp.CPPEnumObject'}, {'label': 'cpp:enum-struct', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:enum-struct::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:enum-struct::'}, 'detail': 'sphinx.domains.cpp.CPPEnumObject'}, {'label': 'cpp:enum-class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:enum-class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:enum-class::'}, 'detail': 'sphinx.domains.cpp.CPPEnumObject'}, {'label': 'cpp:enumerator', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:enumerator::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:enumerator::'}, 'detail': 'sphinx.domains.cpp.CPPEnumeratorObject'}, {'label': 'cpp:namespace', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:namespace::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:namespace::'}, 'detail': 'sphinx.domains.cpp.CPPNamespaceObject'}, {'label': 'cpp:namespace-push', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:namespace-push::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:namespace-push::'}, 'detail': 'sphinx.domains.cpp.CPPNamespacePushObject'}, {'label': 'cpp:namespace-pop', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:namespace-pop::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:namespace-pop::'}, 'detail': 'sphinx.domains.cpp.CPPNamespacePopObject'}, {'label': 'cpp:alias', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:alias::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:alias::'}, 'detail': 'sphinx.domains.cpp.CPPAliasObject'}, {'label': 'js:function', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:function::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:function::'}, 'detail': 'sphinx.domains.javascript.JSCallable'}, {'label': 'js:method', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:method::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:method::'}, 'detail': 'sphinx.domains.javascript.JSCallable'}, {'label': 'js:class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:class::'}, 'detail': 'sphinx.domains.javascript.JSConstructor'}, {'label': 'js:data', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:data::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:data::'}, 'detail': 'sphinx.domains.javascript.JSObject'}, {'label': 'js:attribute', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:attribute::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:attribute::'}, 'detail': 'sphinx.domains.javascript.JSObject'}, {'label': 'js:module', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:module::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:module::'}, 'detail': 'sphinx.domains.javascript.JSModule'}, {'label': 'py:function', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:function::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:function::'}, 'detail': 'sphinx.domains.python.PyFunction'}, {'label': 'py:data', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:data::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:data::'}, 'detail': 'sphinx.domains.python.PyVariable'}, {'label': 'py:class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:class::'}, 'detail': 'sphinx.domains.python.PyClasslike'}, {'label': 'py:exception', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:exception::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:exception::'}, 'detail': 'sphinx.domains.python.PyClasslike'}, {'label': 'py:method', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:method::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:method::'}, 'detail': 'sphinx.domains.python.PyMethod'}, {'label': 'py:classmethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:classmethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:classmethod::'}, 'detail': 'sphinx.domains.python.PyClassMethod'}, {'label': 'py:staticmethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:staticmethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:staticmethod::'}, 'detail': 'sphinx.domains.python.PyStaticMethod'}, {'label': 'py:attribute', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:attribute::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:attribute::'}, 'detail': 'sphinx.domains.python.PyAttribute'}, {'label': 'py:property', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:property::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:property::'}, 'detail': 'sphinx.domains.python.PyProperty'}, {'label': 'py:type', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:type::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:type::'}, 'detail': 'sphinx.domains.python.PyTypeAlias'}, {'label': 'py:module', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:module::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:module::'}, 'detail': 'sphinx.domains.python.PyModule'}, {'label': 'py:currentmodule', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:currentmodule::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:currentmodule::'}, 'detail': 'sphinx.domains.python.PyCurrentModule'}, {'label': 'py:decorator', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:decorator::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:decorator::'}, 'detail': 'sphinx.domains.python.PyDecoratorFunction'}, {'label': 'py:decoratormethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:decoratormethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:decoratormethod::'}, 'detail': 'sphinx.domains.python.PyDecoratorMethod'}, {'label': 'rst:directive', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. rst:directive::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. rst:directive::'}, 'detail': 'sphinx.domains.rst.ReSTDirective'}, {'label': 'rst:directive:option', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. rst:directive:option::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. rst:directive:option::'}, 'detail': 'sphinx.domains.rst.ReSTDirectiveOption'}, {'label': 'rst:role', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. rst:role::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. rst:role::'}, 'detail': 'sphinx.domains.rst.ReSTRole'}, {'label': 'std:program', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:program::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:program::'}, 'detail': 'sphinx.domains.std.Program'}, {'label': 'std:cmdoption', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:cmdoption::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:cmdoption::'}, 'detail': 'sphinx.domains.std.Cmdoption'}, {'label': 'std:option', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:option::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:option::'}, 'detail': 'sphinx.domains.std.Cmdoption'}, {'label': 'std:confval', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:confval::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:confval::'}, 'detail': 'sphinx.domains.std.ConfigurationValue'}, {'label': 'std:envvar', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:envvar::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:envvar::'}, 'detail': 'sphinx.domains.std.EnvVar'}, {'label': 'std:glossary', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:glossary::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:glossary::'}, 'detail': 'sphinx.domains.std.Glossary'}, {'label': 'std:productionlist', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:productionlist::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:productionlist::'}, 'detail': 'sphinx.domains.std.ProductionList'}, {'label': 'function', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. function::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. function::'}, 'detail': 'sphinx.domains.python.PyFunction'}, {'label': 'data', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. data::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. data::'}, 'detail': 'sphinx.domains.python.PyVariable'}, {'label': 'class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. class::'}, 'detail': 'sphinx.domains.python.PyClasslike'}, {'label': 'exception', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. exception::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. exception::'}, 'detail': 'sphinx.domains.python.PyClasslike'}, {'label': 'method', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. method::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. method::'}, 'detail': 'sphinx.domains.python.PyMethod'}, {'label': 'classmethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. classmethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. classmethod::'}, 'detail': 'sphinx.domains.python.PyClassMethod'}, {'label': 'staticmethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. staticmethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. staticmethod::'}, 'detail': 'sphinx.domains.python.PyStaticMethod'}, {'label': 'attribute', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. attribute::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. attribute::'}, 'detail': 'sphinx.domains.python.PyAttribute'}, {'label': 'property', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. property::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. property::'}, 'detail': 'sphinx.domains.python.PyProperty'}, {'label': 'type', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. type::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. type::'}, 'detail': 'sphinx.domains.python.PyTypeAlias'}, {'label': 'module', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. module::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. module::'}, 'detail': 'sphinx.domains.python.PyModule'}, {'label': 'currentmodule', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. currentmodule::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. currentmodule::'}, 'detail': 'sphinx.domains.python.PyCurrentModule'}, {'label': 'decorator', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. decorator::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. decorator::'}, 'detail': 'sphinx.domains.python.PyDecoratorFunction'}, {'label': 'decoratormethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. decoratormethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. decoratormethod::'}, 'detail': 'sphinx.domains.python.PyDecoratorMethod'}, {'label': 'program', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. program::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. program::'}, 'detail': 'sphinx.domains.std.Program'}, {'label': 'cmdoption', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cmdoption::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cmdoption::'}, 'detail': 'sphinx.domains.std.Cmdoption'}, {'label': 'option', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. option::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. option::'}, 'detail': 'sphinx.domains.std.Cmdoption'}, {'label': 'confval', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. confval::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. confval::'}, 'detail': 'sphinx.domains.std.ConfigurationValue'}, {'label': 'envvar', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. envvar::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. envvar::'}, 'detail': 'sphinx.domains.std.EnvVar'}, {'label': 'glossary', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. glossary::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. glossary::'}, 'detail': 'sphinx.domains.std.Glossary'}, {'label': 'productionlist', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. productionlist::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. productionlist::'}, 'detail': 'sphinx.domains.std.ProductionList'}]}}
11/23/24 19:30:01: Received {'id': 21, 'jsonrpc': '2.0', 'result': {'isIncomplete': false, 'items': [{'label': 'attention', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. attention::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. attention::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Attention'}, {'label': 'caution', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. caution::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. caution::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Caution'}, {'label': 'code', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. code::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. code::'}, 'detail': 'sphinx.directives.patches.Code'}, {'label': 'danger', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. danger::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. danger::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Danger'}, {'label': 'error', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. error::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. error::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Error'}, {'label': 'important', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. important::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. important::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Important'}, {'label': 'note', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. note::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. note::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Note'}, {'label': 'tip', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. tip::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. tip::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Tip'}, {'label': 'hint', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. hint::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. hint::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Hint'}, {'label': 'warning', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. warning::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. warning::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Warning'}, {'label': 'admonition', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. admonition::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. admonition::'}, 'detail': 'docutils.parsers.rst.directives.admonitions.Admonition'}, {'label': 'sidebar', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. sidebar::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. sidebar::'}, 'detail': 'docutils.parsers.rst.directives.body.Sidebar'}, {'label': 'topic', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. topic::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. topic::'}, 'detail': 'docutils.parsers.rst.directives.body.Topic'}, {'label': 'line-block', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. line-block::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. line-block::'}, 'detail': 'docutils.parsers.rst.directives.body.LineBlock'}, {'label': 'parsed-literal', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. parsed-literal::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. parsed-literal::'}, 'detail': 'docutils.parsers.rst.directives.body.ParsedLiteral'}, {'label': 'math', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. math::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. math::'}, 'detail': 'sphinx.directives.patches.MathDirective'}, {'label': 'rubric', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. rubric::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. rubric::'}, 'detail': 'sphinx.directives.patches.Rubric'}, {'label': 'epigraph', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. epigraph::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. epigraph::'}, 'detail': 'docutils.parsers.rst.directives.body.Epigraph'}, {'label': 'highlights', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. highlights::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. highlights::'}, 'detail': 'docutils.parsers.rst.directives.body.Highlights'}, {'label': 'pull-quote', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. pull-quote::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. pull-quote::'}, 'detail': 'docutils.parsers.rst.directives.body.PullQuote'}, {'label': 'compound', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. compound::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. compound::'}, 'detail': 'docutils.parsers.rst.directives.body.Compound'}, {'label': 'container', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. container::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. container::'}, 'detail': 'docutils.parsers.rst.directives.body.Container'}, {'label': 'table', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. table::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. table::'}, 'detail': 'docutils.parsers.rst.directives.tables.RSTTable'}, {'label': 'csv-table', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. csv-table::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. csv-table::'}, 'detail': 'sphinx.directives.patches.CSVTable'}, {'label': 'list-table', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. list-table::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. list-table::'}, 'detail': 'docutils.parsers.rst.directives.tables.ListTable'}, {'label': 'image', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. image::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. image::'}, 'detail': 'docutils.parsers.rst.directives.images.Image'}, {'label': 'figure', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. figure::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. figure::'}, 'detail': 'sphinx.directives.patches.Figure'}, {'label': 'contents', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. contents::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. contents::'}, 'detail': 'docutils.parsers.rst.directives.parts.Contents'}, {'label': 'sectnum', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. sectnum::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. sectnum::'}, 'detail': 'docutils.parsers.rst.directives.parts.Sectnum'}, {'label': 'header', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. header::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. header::'}, 'detail': 'docutils.parsers.rst.directives.parts.Header'}, {'label': 'footer', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. footer::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. footer::'}, 'detail': 'docutils.parsers.rst.directives.parts.Footer'}, {'label': 'target-notes', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. target-notes::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. target-notes::'}, 'detail': 'docutils.parsers.rst.directives.references.TargetNotes'}, {'label': 'meta', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. meta::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. meta::'}, 'detail': 'docutils.parsers.rst.directives.misc.Meta'}, {'label': 'raw', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. raw::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. raw::'}, 'detail': 'docutils.parsers.rst.directives.misc.Raw'}, {'label': 'include', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. include::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. include::'}, 'detail': 'sphinx.directives.other.Include'}, {'label': 'replace', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. replace::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. replace::'}, 'detail': 'docutils.parsers.rst.directives.misc.Replace'}, {'label': 'unicode', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. unicode::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. unicode::'}, 'detail': 'docutils.parsers.rst.directives.misc.Unicode'}, {'label': 'class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. class::'}, 'detail': 'docutils.parsers.rst.directives.misc.Class'}, {'label': 'role', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. role::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. role::'}, 'detail': 'docutils.parsers.rst.directives.misc.Role'}, {'label': 'default-role', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. default-role::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. default-role::'}, 'detail': 'sphinx.directives.DefaultRole'}, {'label': 'title', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. title::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. title::'}, 'detail': 'docutils.parsers.rst.directives.misc.Title'}, {'label': 'date', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. date::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. date::'}, 'detail': 'docutils.parsers.rst.directives.misc.Date'}, {'label': 'deprecated', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. deprecated::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. deprecated::'}, 'detail': 'sphinx.domains.changeset.VersionChange'}, {'label': 'versionadded', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. versionadded::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. versionadded::'}, 'detail': 'sphinx.domains.changeset.VersionChange'}, {'label': 'versionchanged', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. versionchanged::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. versionchanged::'}, 'detail': 'sphinx.domains.changeset.VersionChange'}, {'label': 'versionremoved', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. versionremoved::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. versionremoved::'}, 'detail': 'sphinx.domains.changeset.VersionChange'}, {'label': 'index', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. index::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. index::'}, 'detail': 'sphinx.domains.index.IndexDirective'}, {'label': 'default-domain', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. default-domain::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. default-domain::'}, 'detail': 'sphinx.directives.DefaultDomain'}, {'label': 'describe', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. describe::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. describe::'}, 'detail': 'sphinx.directives.ObjectDescription'}, {'label': 'object', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. object::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. object::'}, 'detail': 'sphinx.directives.ObjectDescription'}, {'label': 'highlight', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. highlight::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. highlight::'}, 'detail': 'sphinx.directives.code.Highlight'}, {'label': 'code-block', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. code-block::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. code-block::'}, 'detail': 'sphinx.directives.code.CodeBlock'}, {'label': 'sourcecode', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. sourcecode::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. sourcecode::'}, 'detail': 'sphinx.directives.code.CodeBlock'}, {'label': 'literalinclude', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. literalinclude::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. literalinclude::'}, 'detail': 'sphinx.directives.code.LiteralInclude'}, {'label': 'toctree', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. toctree::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. toctree::'}, 'detail': 'sphinx.directives.other.TocTree'}, {'label': 'sectionauthor', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. sectionauthor::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. sectionauthor::'}, 'detail': 'sphinx.directives.other.Author'}, {'label': 'moduleauthor', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. moduleauthor::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. moduleauthor::'}, 'detail': 'sphinx.directives.other.Author'}, {'label': 'codeauthor', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. codeauthor::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. codeauthor::'}, 'detail': 'sphinx.directives.other.Author'}, {'label': 'seealso', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. seealso::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. seealso::'}, 'detail': 'sphinx.directives.other.SeeAlso'}, {'label': 'tabularcolumns', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. tabularcolumns::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. tabularcolumns::'}, 'detail': 'sphinx.directives.other.TabularColumns'}, {'label': 'centered', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. centered::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. centered::'}, 'detail': 'sphinx.directives.other.Centered'}, {'label': 'acks', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. acks::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. acks::'}, 'detail': 'sphinx.directives.other.Acks'}, {'label': 'hlist', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. hlist::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. hlist::'}, 'detail': 'sphinx.directives.other.HList'}, {'label': 'only', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. only::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. only::'}, 'detail': 'sphinx.directives.other.Only'}, {'label': 'cssclass', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cssclass::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cssclass::'}, 'detail': 'docutils.parsers.rst.directives.misc.Class'}, {'label': 'rst-class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. rst-class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. rst-class::'}, 'detail': 'docutils.parsers.rst.directives.misc.Class'}, {'label': 'automodule', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. automodule::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. automodule::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autoclass', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autoclass::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autoclass::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autoexception', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autoexception::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autoexception::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autodata', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autodata::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autodata::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autofunction', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autofunction::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autofunction::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autodecorator', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autodecorator::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autodecorator::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'automethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. automethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. automethod::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autoattribute', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autoattribute::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autoattribute::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'autoproperty', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. autoproperty::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. autoproperty::'}, 'detail': 'sphinx.ext.autodoc.directive.AutodocDirective'}, {'label': 'testsetup', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. testsetup::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. testsetup::'}, 'detail': 'sphinx.ext.doctest.TestsetupDirective'}, {'label': 'testcleanup', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. testcleanup::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. testcleanup::'}, 'detail': 'sphinx.ext.doctest.TestcleanupDirective'}, {'label': 'doctest', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. doctest::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. doctest::'}, 'detail': 'sphinx.ext.doctest.DoctestDirective'}, {'label': 'testcode', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. testcode::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. testcode::'}, 'detail': 'sphinx.ext.doctest.TestcodeDirective'}, {'label': 'testoutput', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. testoutput::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. testoutput::'}, 'detail': 'sphinx.ext.doctest.TestoutputDirective'}, {'label': 'c:member', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:member::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:member::'}, 'detail': 'sphinx.domains.c.CMemberObject'}, {'label': 'c:var', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:var::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:var::'}, 'detail': 'sphinx.domains.c.CMemberObject'}, {'label': 'c:function', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:function::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:function::'}, 'detail': 'sphinx.domains.c.CFunctionObject'}, {'label': 'c:macro', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:macro::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:macro::'}, 'detail': 'sphinx.domains.c.CMacroObject'}, {'label': 'c:struct', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:struct::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:struct::'}, 'detail': 'sphinx.domains.c.CStructObject'}, {'label': 'c:union', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:union::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:union::'}, 'detail': 'sphinx.domains.c.CUnionObject'}, {'label': 'c:enum', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:enum::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:enum::'}, 'detail': 'sphinx.domains.c.CEnumObject'}, {'label': 'c:enumerator', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:enumerator::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:enumerator::'}, 'detail': 'sphinx.domains.c.CEnumeratorObject'}, {'label': 'c:type', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:type::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:type::'}, 'detail': 'sphinx.domains.c.CTypeObject'}, {'label': 'c:namespace', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:namespace::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:namespace::'}, 'detail': 'sphinx.domains.c.CNamespaceObject'}, {'label': 'c:namespace-push', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:namespace-push::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:namespace-push::'}, 'detail': 'sphinx.domains.c.CNamespacePushObject'}, {'label': 'c:namespace-pop', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:namespace-pop::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:namespace-pop::'}, 'detail': 'sphinx.domains.c.CNamespacePopObject'}, {'label': 'c:alias', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. c:alias::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. c:alias::'}, 'detail': 'sphinx.domains.c.CAliasObject'}, {'label': 'cpp:class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:class::'}, 'detail': 'sphinx.domains.cpp.CPPClassObject'}, {'label': 'cpp:struct', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:struct::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:struct::'}, 'detail': 'sphinx.domains.cpp.CPPClassObject'}, {'label': 'cpp:union', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:union::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:union::'}, 'detail': 'sphinx.domains.cpp.CPPUnionObject'}, {'label': 'cpp:function', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:function::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:function::'}, 'detail': 'sphinx.domains.cpp.CPPFunctionObject'}, {'label': 'cpp:member', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:member::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:member::'}, 'detail': 'sphinx.domains.cpp.CPPMemberObject'}, {'label': 'cpp:var', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:var::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:var::'}, 'detail': 'sphinx.domains.cpp.CPPMemberObject'}, {'label': 'cpp:type', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:type::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:type::'}, 'detail': 'sphinx.domains.cpp.CPPTypeObject'}, {'label': 'cpp:concept', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:concept::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:concept::'}, 'detail': 'sphinx.domains.cpp.CPPConceptObject'}, {'label': 'cpp:enum', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:enum::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:enum::'}, 'detail': 'sphinx.domains.cpp.CPPEnumObject'}, {'label': 'cpp:enum-struct', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:enum-struct::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:enum-struct::'}, 'detail': 'sphinx.domains.cpp.CPPEnumObject'}, {'label': 'cpp:enum-class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:enum-class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:enum-class::'}, 'detail': 'sphinx.domains.cpp.CPPEnumObject'}, {'label': 'cpp:enumerator', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:enumerator::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:enumerator::'}, 'detail': 'sphinx.domains.cpp.CPPEnumeratorObject'}, {'label': 'cpp:namespace', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:namespace::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:namespace::'}, 'detail': 'sphinx.domains.cpp.CPPNamespaceObject'}, {'label': 'cpp:namespace-push', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:namespace-push::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:namespace-push::'}, 'detail': 'sphinx.domains.cpp.CPPNamespacePushObject'}, {'label': 'cpp:namespace-pop', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:namespace-pop::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:namespace-pop::'}, 'detail': 'sphinx.domains.cpp.CPPNamespacePopObject'}, {'label': 'cpp:alias', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cpp:alias::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cpp:alias::'}, 'detail': 'sphinx.domains.cpp.CPPAliasObject'}, {'label': 'js:function', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:function::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:function::'}, 'detail': 'sphinx.domains.javascript.JSCallable'}, {'label': 'js:method', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:method::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:method::'}, 'detail': 'sphinx.domains.javascript.JSCallable'}, {'label': 'js:class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:class::'}, 'detail': 'sphinx.domains.javascript.JSConstructor'}, {'label': 'js:data', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:data::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:data::'}, 'detail': 'sphinx.domains.javascript.JSObject'}, {'label': 'js:attribute', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:attribute::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:attribute::'}, 'detail': 'sphinx.domains.javascript.JSObject'}, {'label': 'js:module', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. js:module::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. js:module::'}, 'detail': 'sphinx.domains.javascript.JSModule'}, {'label': 'py:function', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:function::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:function::'}, 'detail': 'sphinx.domains.python.PyFunction'}, {'label': 'py:data', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:data::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:data::'}, 'detail': 'sphinx.domains.python.PyVariable'}, {'label': 'py:class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:class::'}, 'detail': 'sphinx.domains.python.PyClasslike'}, {'label': 'py:exception', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:exception::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:exception::'}, 'detail': 'sphinx.domains.python.PyClasslike'}, {'label': 'py:method', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:method::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:method::'}, 'detail': 'sphinx.domains.python.PyMethod'}, {'label': 'py:classmethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:classmethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:classmethod::'}, 'detail': 'sphinx.domains.python.PyClassMethod'}, {'label': 'py:staticmethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:staticmethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:staticmethod::'}, 'detail': 'sphinx.domains.python.PyStaticMethod'}, {'label': 'py:attribute', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:attribute::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:attribute::'}, 'detail': 'sphinx.domains.python.PyAttribute'}, {'label': 'py:property', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:property::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:property::'}, 'detail': 'sphinx.domains.python.PyProperty'}, {'label': 'py:type', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:type::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:type::'}, 'detail': 'sphinx.domains.python.PyTypeAlias'}, {'label': 'py:module', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:module::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:module::'}, 'detail': 'sphinx.domains.python.PyModule'}, {'label': 'py:currentmodule', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:currentmodule::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:currentmodule::'}, 'detail': 'sphinx.domains.python.PyCurrentModule'}, {'label': 'py:decorator', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:decorator::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:decorator::'}, 'detail': 'sphinx.domains.python.PyDecoratorFunction'}, {'label': 'py:decoratormethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. py:decoratormethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. py:decoratormethod::'}, 'detail': 'sphinx.domains.python.PyDecoratorMethod'}, {'label': 'rst:directive', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. rst:directive::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. rst:directive::'}, 'detail': 'sphinx.domains.rst.ReSTDirective'}, {'label': 'rst:directive:option', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. rst:directive:option::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. rst:directive:option::'}, 'detail': 'sphinx.domains.rst.ReSTDirectiveOption'}, {'label': 'rst:role', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. rst:role::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. rst:role::'}, 'detail': 'sphinx.domains.rst.ReSTRole'}, {'label': 'std:program', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:program::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:program::'}, 'detail': 'sphinx.domains.std.Program'}, {'label': 'std:cmdoption', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:cmdoption::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:cmdoption::'}, 'detail': 'sphinx.domains.std.Cmdoption'}, {'label': 'std:option', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:option::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:option::'}, 'detail': 'sphinx.domains.std.Cmdoption'}, {'label': 'std:confval', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:confval::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:confval::'}, 'detail': 'sphinx.domains.std.ConfigurationValue'}, {'label': 'std:envvar', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:envvar::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:envvar::'}, 'detail': 'sphinx.domains.std.EnvVar'}, {'label': 'std:glossary', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:glossary::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:glossary::'}, 'detail': 'sphinx.domains.std.Glossary'}, {'label': 'std:productionlist', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. std:productionlist::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. std:productionlist::'}, 'detail': 'sphinx.domains.std.ProductionList'}, {'label': 'function', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. function::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. function::'}, 'detail': 'sphinx.domains.python.PyFunction'}, {'label': 'data', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. data::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. data::'}, 'detail': 'sphinx.domains.python.PyVariable'}, {'label': 'class', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. class::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. class::'}, 'detail': 'sphinx.domains.python.PyClasslike'}, {'label': 'exception', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. exception::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. exception::'}, 'detail': 'sphinx.domains.python.PyClasslike'}, {'label': 'method', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. method::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. method::'}, 'detail': 'sphinx.domains.python.PyMethod'}, {'label': 'classmethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. classmethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. classmethod::'}, 'detail': 'sphinx.domains.python.PyClassMethod'}, {'label': 'staticmethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. staticmethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. staticmethod::'}, 'detail': 'sphinx.domains.python.PyStaticMethod'}, {'label': 'attribute', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. attribute::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. attribute::'}, 'detail': 'sphinx.domains.python.PyAttribute'}, {'label': 'property', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. property::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. property::'}, 'detail': 'sphinx.domains.python.PyProperty'}, {'label': 'type', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. type::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. type::'}, 'detail': 'sphinx.domains.python.PyTypeAlias'}, {'label': 'module', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. module::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. module::'}, 'detail': 'sphinx.domains.python.PyModule'}, {'label': 'currentmodule', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. currentmodule::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. currentmodule::'}, 'detail': 'sphinx.domains.python.PyCurrentModule'}, {'label': 'decorator', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. decorator::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. decorator::'}, 'detail': 'sphinx.domains.python.PyDecoratorFunction'}, {'label': 'decoratormethod', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. decoratormethod::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. decoratormethod::'}, 'detail': 'sphinx.domains.python.PyDecoratorMethod'}, {'label': 'program', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. program::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. program::'}, 'detail': 'sphinx.domains.std.Program'}, {'label': 'cmdoption', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. cmdoption::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. cmdoption::'}, 'detail': 'sphinx.domains.std.Cmdoption'}, {'label': 'option', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. option::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. option::'}, 'detail': 'sphinx.domains.std.Cmdoption'}, {'label': 'confval', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. confval::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. confval::'}, 'detail': 'sphinx.domains.std.ConfigurationValue'}, {'label': 'envvar', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. envvar::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. envvar::'}, 'detail': 'sphinx.domains.std.EnvVar'}, {'label': 'glossary', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. glossary::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. glossary::'}, 'detail': 'sphinx.domains.std.Glossary'}, {'label': 'productionlist', 'data': {'completion_type': 'directive', 'source_feature': 'esbonio.lsp.directives.Directives'}, 'insertTextFormat': 1, 'kind': 7, 'filterText': '.. productionlist::', 'textEdit': {'range': {'end': {'character': 3, 'line': 8}, 'start': {'character': 0, 'line': 8}}, 'newText': '.. productionlist::'}, 'detail': 'sphinx.domains.std.ProductionList'}]}}
11/23/24 19:30:02: Sent {'method': 'textDocument/completion', 'params': {'context': {'triggerCharacter': '.', 'triggerKind': 2}, 'textDocument': {'uri': 'file:///Users/ubaldot/Documents/dymoval/docs/source/getting_started.rst'}, 'position': {'character': 1, 'line': 8}}}
11/23/24 19:30:02: Sent {'method': 'textDocument/completion', 'params': {'context': {'triggerCharacter': '.', 'triggerKind': 2}, 'textDocument': {'uri': 'file:///Users/ubaldot/Documents/dymoval/docs/source/getting_started.rst'}, 'position': {'character': 1, 'line': 8}}}
11/23/24 19:30:02: Received {'id': 22, 'jsonrpc': '2.0', 'result': {'isIncomplete': false, 'items': []}}
11/23/24 19:30:02: Received {'id': 23, 'jsonrpc': '2.0', 'result': {'isIncomplete': false, 'items': []}}

Other LSP server such as TexLab,, pylsp, clangd ... work well!

alcarney commented 2 days ago

Other LSP server such as TexLab,, pylsp, clangd ... work well!

The unfortunate thing with esbonio is that I still haven't managed to get a nice first time setup experience... The version of esbonio you are using requires you to install it into the same Python environment as the one you are using to build your documentation so that it uses the correct dependencies with your project.

I would suggest trying the 1.0bx version at this point as it removes this restriction (and 0.16.x hasn't been worked on in over a year now) however it's not available on conda and I am mid-upgrade to pygls v2 so I think you would have to go back to 1.0b6 to get a stable installation at the moment...

11/23/24 19:24:57: [Log]: [esbonio.lsp] Traceback (most recent call last):
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/events.py", line 404, in emit
    results.append(listener.handler(self.app, *args))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/furo/__init__.py", line 183, in _html_page_context
    _add_asset_hashes(
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/furo/__init__.py", line 161, in _add_asset_hashes
    static[index].filename = _asset_hash(asset)  # type: ignore
    ^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Caskroom/miniconda/base/envs/dymoval_dev/lib/python3.11/site-packages/sphinx/builders/html/_assets.py", line 64, in __setattr__
    raise AttributeError(msg)
AttributeError: _CascadingStyleSheet is immutable

Unfortunately, it looks like the version of the furo, theme esbonio has picked up is incompatible with the version of Sphinx it is using.

The only feature that seems work-ish is the completion but it is not very usable. For example, say that I want to .. figure::, the I type .. and a popup menu appears with all the options. Fine, but then, every key I hit, the popup disappear.

Sorry to hear that :/

esbonio actually offers two completion modes, I wonder if the other mode will work any better for you

var lspServers = [
  {
    name: 'esbonio',
    filetype: ['rst'],
    path: 'python',
    args: ['-m', 'esbonio'],
    initializationOptions: {server: {logLevel: "debug", completion: {preferredInsertBehavior: 'insert'}}}}
  },]

The 0.16.x version only supports configuration via initializationOptions. Just in case you need them, you can find the other supported options for this version here

ubaldot commented 2 days ago

Mmmm it seems there is still some work to be carried out. I think I will wait for a newer version, but thanks for your effort.