デバッグ

vscode

launch.json

https://srbrnote.work/archives/4231

{
    "name": "Sphinx",
    "type": "python",
    "request": "launch",
    "module": "sphinx",
    "args": [
        ".",
        "build"
    ],
    "justMyCode": false
}

とすることで F5 で sphinx を実行できる。 "justMyCode": false がみそで、これがあると外部ライブラリの中でもブレイクできる。

problemMatcher


venv

sphinx のソースをステップ実行したり、ブレイクポイントを置いたりするので、 .venv があった方がやりやすい。 .venv/Lib/site-packages/sphinx 内に潜ってゆく。

> py -m venv .venv
> .\.venv\Scripts\Activate.ps1
(.venv) > pip install sphinx-autobuild myst-parser

.venv も search 対象に入れる。

.vscode/settings.json

 "search.useIgnoreFiles": false

mod

phase

    @property
    def phase(self):
        return self._phase

    @phase.setter
    def phase(self, value: BuildPhase):
        from .util.console import colorize
        color_phase = colorize('yellow', value.name)
        logger.info(f'phase: {color_phase}')
        self._phase = value
    def emit(self, name: str, *args: Any,
             allowed_exceptions: Tuple[Type[Exception], ...] = ()) -> List:
        """Emit a Sphinx event."""
        try:            
            from .util.console import colorize
            logger.debug(f'[app] emitting event: {colorize("green", name)}{repr(args)[:100]}')
        except Exception:
            # not every object likes to be repr()'d (think
            # random stuff coming via autodoc)
            pass