forked from VimPlug/jedi
This includes updating the ignore comments for things which mypy now knows about or now complains about, as well as pulling in some typeshed packages for things outside the standard library.
52 lines
1.2 KiB
Python
52 lines
1.2 KiB
Python
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 ''
|