usse/scrape/venv/lib/python3.10/site-packages/esbonio/lsp/sphinx/roles.py

45 lines
1.4 KiB
Python
Raw Normal View History

2023-12-22 14:26:01 +00:00
"""Extra support for roles added by sphinx."""
import json
import os.path
from typing import List
from typing import Optional
import pygls.uris as Uri
from lsprotocol.types import CompletionItem
from esbonio.lsp.roles import Roles
from esbonio.lsp.rst import CompletionContext
from esbonio.lsp.sphinx import SphinxLanguageServer
from esbonio.lsp.util import resources
from esbonio.lsp.util.filepaths import complete_sphinx_filepaths
from esbonio.lsp.util.filepaths import path_to_completion_item
class Downloads:
def __init__(self, rst: SphinxLanguageServer):
self.rst = rst
self.logger = rst.logger.getChild(self.__class__.__name__)
def complete_targets(
self, context: CompletionContext, name: str, domain: Optional[str]
) -> List[CompletionItem]:
if domain or name != "download":
return []
if not self.rst.app:
return []
srcdir = self.rst.app.srcdir
partial = context.match.group("label")
base = os.path.dirname(Uri.to_fs_path(context.doc.uri))
items = complete_sphinx_filepaths(srcdir, base, partial) # type: ignore[arg-type]
return [path_to_completion_item(context, p) for p in items]
def esbonio_setup(rst: SphinxLanguageServer, roles: Roles):
sphinx_docs = resources.read_string("esbonio.lsp.sphinx", "roles.json")
roles.add_documentation(json.loads(sphinx_docs))
roles.add_target_completion_provider(Downloads(rst))