missinglinkelectronics / sphinxcontrib-globalsubs

Sphinx global substitutions extension
Other
8 stars 3 forks source link

Occasionally panic with `TypeError: 'NoneType' object is not subscriptable` #3

Open SilverRainZ opened 2 weeks ago

SilverRainZ commented 2 weeks ago

Hi dear sphinxcontrib-globalsubs maintainer, thanks for your awesome project!

I suffered this when building a complex document so I can not provide a minimal reproducible demo now. I will try to do it and leave this issue first.

# Traceback:
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/sphinx/cmd/build.py", line 298, in build_main
    app.build(args.force_all, args.filenames)
  File "/usr/local/lib/python3.12/site-packages/sphinx/application.py", line 355, in build
    self.builder.build_update()
  File "/usr/local/lib/python3.12/site-packages/sphinx/builders/__init__.py", line 293, in build_update
    self.build(to_build,
  File "/usr/local/lib/python3.12/site-packages/sphinx/builders/__init__.py", line 313, in build
    updated_docnames = set(self.read())
                           ^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/sphinx/builders/__init__.py", line 420, in read
    self._read_serial(docnames)
  File "/usr/local/lib/python3.12/site-packages/sphinx/builders/__init__.py", line 441, in _read_serial
    self.read_doc(docname)
  File "/usr/local/lib/python3.12/site-packages/sphinx/builders/__init__.py", line 498, in read_doc
    publisher.publish()
  File "/usr/local/lib/python3.12/site-packages/docutils/core.py", line 236, in publish
    self.apply_transforms()
  File "/usr/local/lib/python3.12/site-packages/docutils/core.py", line 216, in apply_transforms
    self.document.transformer.apply_transforms()
  File "/usr/local/lib/python3.12/site-packages/sphinx/transforms/__init__.py", line 83, in apply_transforms
    super().apply_transforms()
  File "/usr/local/lib/python3.12/site-packages/docutils/transforms/__init__.py", line 182, in apply_transforms
    transform.apply(**kwargs)
  File "/usr/local/lib/python3.12/site-packages/sphinxcontrib/globalsubs.py", line 58, in apply
    ref.replace_self(substitution)
  File "/usr/local/lib/python3.12/site-packages/docutils/nodes.py", line 997, in replace_self
    update = new[0]
             ~~~^^^
TypeError: 'NoneType' object is not subscriptable
SilverRainZ commented 1 week ago

I have reproduced this issue, my substitution definitions contain some third-party roles, and when parse fails the role function returns an empty nodes list.

See: https://github.com/SilverRainZ/sphinxcontrib-globalsubs-demos/blob/master/conf.py#L34

I will file a PR to fix this.