Skip to content

Commit

Permalink
Merge pull request #9987 from tk0miya/9968_ivar_not_shown
Browse files Browse the repository at this point in the history
Fix #9968: autodoc: ivars are not shown if __init__ has posonlyargs
  • Loading branch information
tk0miya committed Dec 19, 2021
2 parents ed571ee + e7e08d2 commit cacbca6
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CHANGES
Expand Up @@ -41,6 +41,8 @@ Bugs fixed
* #9883: autodoc: doccomment for the alias to mocked object was ignored
* #9908: autodoc: debug message is shown on building document using NewTypes
with Python 3.10
* #9968: autodoc: instance variables are not shown if __init__ method has
position-only-arguments
* #9947: i18n: topic directive having a bullet list can't be translatable
* #9878: mathjax: MathJax configuration is placed after loading MathJax itself
* #9857: Generated RFC links use outdated base url
Expand Down
4 changes: 4 additions & 0 deletions sphinx/pycode/parser.py
Expand Up @@ -312,6 +312,10 @@ def get_self(self) -> Optional[ast.arg]:
"""Returns the name of the first argument if in a function."""
if self.current_function and self.current_function.args.args:
return self.current_function.args.args[0]
elif (self.current_function and
getattr(self.current_function.args, 'posonlyargs', None)):
# for py38+
return self.current_function.args.posonlyargs[0] # type: ignore
else:
return None

Expand Down
15 changes: 15 additions & 0 deletions tests/test_pycode.py
Expand Up @@ -191,3 +191,18 @@ def test_ModuleAnalyzer_find_attr_docs():
'Qux': 15,
'Qux.attr1': 16,
'Qux.attr2': 17}


@pytest.mark.skipif(sys.version_info < (3, 8),
reason='posonlyargs are available since python3.8.')
def test_ModuleAnalyzer_find_attr_docs_for_posonlyargs_method():
code = ('class Foo(object):\n'
' def __init__(self, /):\n'
' self.attr = None #: attribute comment\n')
analyzer = ModuleAnalyzer.for_string(code, 'module')
docs = analyzer.find_attr_docs()
assert set(docs) == {('Foo', 'attr')}
assert docs[('Foo', 'attr')] == ['attribute comment', '']
assert analyzer.tagorder == {'Foo': 0,
'Foo.__init__': 1,
'Foo.attr': 2}

0 comments on commit cacbca6

Please sign in to comment.