executablebooks / MyST-Parser

An extended commonmark compliant parser, with bridges to docutils/sphinx
https://myst-parser.readthedocs.io
MIT License
755 stars 197 forks source link

sphinx.ext.autosectionlabel and myst_parser not compatible #627

Open torbsorb opened 2 years ago

torbsorb commented 2 years ago

Describe the bug

context When I use sphinx.ext.autosectionlabel and myst_parser for an rst project it triggers an exception:

See also https://github.com/sphinx-doc/sphinx/issues/10902.

sphinx.ext.autosectionlabel configuration:

autosectionlabel_prefix_document = True
autosectionlabel_maxdepth = 2

expectation I expected no exceptions to be raised.

bug

Extension error (sphinx.ext.autosectionlabel):
Handler <function register_sections_as_label at 0x7fcf255cf910> for event 'doctree-read' threw an exception (exception: 'NoneType' object has no attribute 'parent')

problem When sphinx.ext.autosectionlabel is trying to find node depth it looks for cur_node.parent == node.document. However, with myst_parser the parent node of the document where this is included is not the parent. Instead the top-level parent is set to None. This is what triggers the exception. If the plan was to have None as the top-level parent, then https://github.com/sphinx-doc/sphinx/issues/10902 must be fixed. However, I believe myst_parser should attempt to set parent node to the document where the markdown is included.

Reproduce the bug

Enable sphinx.ext.autosectionlabel and use myst_parser

.. include:: a_markdown_file.md
   :parser: myst_parser.sphinx_

List your environment

Ubuntu 20.04 in WSL2 on Windows 11 Python 3.10.6 docutils 0.17.1 myst_parser 0.18.0

welcome[bot] commented 2 years ago

Thanks for opening your first issue here! Engagement like this is essential for open source projects! :hugs:
If you haven't done so already, check out EBP's Code of Conduct. Also, please try to follow the issue template as it helps other community members to contribute more effectively.
If your issue is a feature request, others may react to it, to raise its prominence (see Feature Voting).
Welcome to the EBP community! :tada:

jhj0411jhj commented 1 year ago

I also encountered this bug when autosectionlabel_maxdepth is not None, and I write the 'including markdown file in rst file' syntax:

.. include:: ../../../CHANGELOG.md
   :parser: myst_parser.sphinx_

When the parser is parsing this rst file, the error raises.

To avoid it, I set autosectionlabel_maxdepth=None. Or remove the include syntax.