mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 22:14:27 +08:00
Attribute docstrings work now, fixes #138
This commit is contained in:
@@ -3,7 +3,7 @@ from abc import abstractmethod
|
|||||||
from parso.tree import search_ancestor
|
from parso.tree import search_ancestor
|
||||||
|
|
||||||
from jedi._compatibility import Parameter
|
from jedi._compatibility import Parameter
|
||||||
from jedi.parser_utils import clean_scope_docstring
|
from jedi.parser_utils import clean_scope_docstring, find_statement_documentation
|
||||||
from jedi.inference.utils import unite
|
from jedi.inference.utils import unite
|
||||||
from jedi.inference.base_value import ValueSet, NO_VALUES
|
from jedi.inference.base_value import ValueSet, NO_VALUES
|
||||||
from jedi.inference import docstrings
|
from jedi.inference import docstrings
|
||||||
@@ -324,10 +324,12 @@ class TreeNameDefinition(AbstractTreeName):
|
|||||||
if self.api_type in ('function', 'class'):
|
if self.api_type in ('function', 'class'):
|
||||||
return clean_scope_docstring(self.tree_name.get_definition())
|
return clean_scope_docstring(self.tree_name.get_definition())
|
||||||
|
|
||||||
|
if self.api_type == 'statement' and self.tree_name.is_definition():
|
||||||
|
return find_statement_documentation(self.tree_name.get_definition())
|
||||||
|
|
||||||
if self.api_type == 'module':
|
if self.api_type == 'module':
|
||||||
names = self.goto()
|
names = self.goto()
|
||||||
if self not in names:
|
if self not in names:
|
||||||
print('la', _merge_name_docs(names))
|
|
||||||
return _merge_name_docs(names)
|
return _merge_name_docs(names)
|
||||||
return super(TreeNameDefinition, self).py__doc__(include_signatures)
|
return super(TreeNameDefinition, self).py__doc__(include_signatures)
|
||||||
|
|
||||||
@@ -578,7 +580,6 @@ class ImportName(AbstractNameDefinition):
|
|||||||
return 'module'
|
return 'module'
|
||||||
|
|
||||||
def py__doc__(self, include_signatures=False):
|
def py__doc__(self, include_signatures=False):
|
||||||
print('la', (self.goto()))
|
|
||||||
return _merge_name_docs(self.goto())
|
return _merge_name_docs(self.goto())
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -109,6 +109,21 @@ def clean_scope_docstring(scope_node):
|
|||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
def find_statement_documentation(tree_node):
|
||||||
|
if tree_node.type == 'expr_stmt':
|
||||||
|
tree_node = tree_node.parent # simple_stmt
|
||||||
|
maybe_string = tree_node.get_next_sibling()
|
||||||
|
if maybe_string is not None:
|
||||||
|
if maybe_string.type == 'simple_stmt':
|
||||||
|
maybe_string = maybe_string.children[0]
|
||||||
|
if maybe_string.type == 'string':
|
||||||
|
cleaned = cleandoc(safe_literal_eval(maybe_string.value))
|
||||||
|
# Since we want the docstr output to be always unicode, just
|
||||||
|
# force it.
|
||||||
|
return force_unicode(cleaned)
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
def safe_literal_eval(value):
|
def safe_literal_eval(value):
|
||||||
first_two = value[:2].lower()
|
first_two = value[:2].lower()
|
||||||
if first_two[0] == 'f' or first_two in ('fr', 'rf'):
|
if first_two[0] == 'f' or first_two in ('fr', 'rf'):
|
||||||
|
|||||||
@@ -52,3 +52,26 @@ def test_lambda(Script):
|
|||||||
)
|
)
|
||||||
def test_help_no_returns(Script, code, kwargs):
|
def test_help_no_returns(Script, code, kwargs):
|
||||||
assert not Script(code).help(**kwargs)
|
assert not Script(code).help(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def test_attribute_docstrings(goto_or_help):
|
||||||
|
code = dedent('''\
|
||||||
|
class X:
|
||||||
|
"ha"
|
||||||
|
x = 3
|
||||||
|
""" Yeah """
|
||||||
|
y = 5
|
||||||
|
"f g "
|
||||||
|
z = lambda: 1
|
||||||
|
''')
|
||||||
|
|
||||||
|
d, = goto_or_help(code + 'X.x')
|
||||||
|
assert d.docstring() == 'Yeah '
|
||||||
|
d, = goto_or_help(code + 'X().x')
|
||||||
|
assert d.docstring() == 'Yeah '
|
||||||
|
|
||||||
|
d, = goto_or_help(code + 'X.y')
|
||||||
|
assert d.docstring() == 'f g '
|
||||||
|
|
||||||
|
d, = goto_or_help(code + 'X.z')
|
||||||
|
assert d.docstring() == ''
|
||||||
|
|||||||
Reference in New Issue
Block a user