Skip to content

Ignore unknown directives when parsing docstrings - #135

Open
Boulea7 wants to merge 1 commit into
anntzer:mainfrom
Boulea7:ln-cx/defopt-unknown-directives-v47
Open

Boulea7 wants to merge 1 commit into
anntzer:mainfrom
Boulea7:ln-cx/defopt-unknown-directives-v47

Conversation

@Boulea7

@Boulea7 Boulea7 commented Oct 1, 2026

Copy link
Copy Markdown

Fixes #133. Related: #134.

Unknown reStructuredText directives can prevent CLI help and argument conversion from working when they appear in function or parameter-type docstrings. Discard the entire unknown directive block, including its arguments, options, and indented body, while preserving following content and errors for malformed RST.

Use parser-local states for this behavior, including nested parsing, so ordinary Docutils parsers keep their existing unknown-directive errors. Clean docstrings once to preserve indentation when a directive appears on the first line, including subcommand help.

Validated locally: all 169 tests pass with Docutils 0.23 on Python 3.13 and with Docutils 0.12 on Python 3.12; the latter coverage run reports 96%. The HTML documentation build also passes. Tests cover CLI help, constructible parameter types, nested parameter documentation, known directives, and malformed RST.

The implementation and tests were generated with OpenAI Codex assistance.

Discard unknown directive blocks, including their options and contents,
using parser-local states. Preserve following content, known directives,
and errors for malformed reStructuredText. Clean docstrings once to retain
indentation when a directive appears on the first line.

The implementation and tests were generated with OpenAI Codex assistance.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

defopt.run aborts with a docutils SystemMessage when an introspected docstring contains a Sphinx directive (e.g. .. versionchanged::)

1 participant