usse/scrape/venv/lib/python3.10/site-packages/esbonio/lsp/rst/roles.py
2023-12-22 15:26:01 +01:00

51 lines
1.3 KiB
Python

import json
from typing import Any
from typing import Dict
from typing import Optional
import docutils.parsers.rst.roles as docutils_roles
from esbonio.lsp.roles import RoleLanguageFeature
from esbonio.lsp.roles import Roles
from esbonio.lsp.rst import RstLanguageServer
from esbonio.lsp.util import resources
class Docutils(RoleLanguageFeature):
"""Support for docutils' built-in roles."""
def __init__(self) -> None:
self._roles: Optional[Dict[str, Any]] = None
"""Cache for known roles."""
@property
def roles(self) -> Dict[str, Any]:
if self._roles is not None:
return self._roles
found_roles = {**docutils_roles._roles, **docutils_roles._role_registry}
self._roles = {
k: v
for k, v in found_roles.items()
if v != docutils_roles.unimplemented_role
}
return self._roles
def get_implementation(self, role: str, domain: str):
if domain:
return None
return self.roles.get(role, None)
def index_roles(self) -> Dict[str, Any]:
return self.roles
def esbonio_setup(rst: RstLanguageServer, roles: Roles):
documentation = resources.read_string("esbonio.lsp.rst", "roles.json")
roles.add_documentation(json.loads(documentation))
roles.add_feature(Docutils())