import pydoc from contextlib import suppress from typing import Dict, Optional from jedi.inference.names import AbstractArbitraryName try: from pydoc_data import topics pydoc_topics: Optional[Dict[str, str]] = topics.topics except ImportError: # Python 3.6.8 embeddable does not have pydoc_data. pydoc_topics = None class KeywordName(AbstractArbitraryName): api_type = 'keyword' def py__doc__(self): return imitate_pydoc(self.string_name) def imitate_pydoc(string): """ It's not possible to get the pydoc's without starting the annoying pager stuff. """ if pydoc_topics is None: return '' h = pydoc.help with suppress(KeyError): # try to access symbols string = h.symbols[string] string, _, related = string.partition(' ') def get_target(s): return h.topics.get(s, h.keywords.get(s)) while isinstance(string, str): string = get_target(string) try: # is a tuple now label, related = string except TypeError: return '' try: return pydoc_topics[label].strip() if pydoc_topics else '' except KeyError: return ''