Parsing¶
The [parse] section extends ubCode’s built-in reStructuredText parser
with custom directives and roles from your Sphinx extensions.
Use this when ubCode warns about unknown directives or roles
that are provided by third-party packages.
Minimal example¶
[parse]
ignore_directives = ["my-custom-directive"]
[parse.extend_directives.my-admonition]
argument = true
content = true
parse_content = true
description = "A custom admonition"
extension = "my-extension"
[parse.extend_roles.my-role]
description = "A custom inline role"
extension = "my-extension"
Core options¶
- ignore_directives
Type:
array(default:[])List of directive names that won’t trigger warnings when encountered but not recognised by the parser. Useful for custom directives from external extensions.
ignore_directives = [ "my-custom-directive", "experimental-feature", "legacy-directive" ]
Extending directives¶
The extend_directives section allows you to define custom directives
or override built-in directive behaviour.
Each directive is configured as a subsection:
[parse.extend_directives.my-directive]
argument = true
options = true
content = true
content_required = false
parse_content = true
description = "My custom directive"
extension = "my-package"
# Define named options
[parse.extend_directives.my-directive.named_options]
title = { description = "The title of the element" }
class = { description = "CSS classes to apply" }
Directive configuration options:
- argument
Type:
boolean(default:false)Whether the directive accepts an argument (text on the same line as the directive name).
.. my-directive:: This is the argument Content here.
- options
Type:
boolean(default:false)Whether the directive accepts options (field list immediately after the directive line).
.. my-directive:: :option1: value1 :option2: value2 Content here.
- content
Type:
boolean(default:false)Whether the directive can have content (indented text block after options).
- content_required
Type:
boolean(default:false)When
true, emit a warning if the directive has no content when content is expected.- parse_content
Type:
boolean(default:false)When
true, parse the directive content as reStructuredText instead of treating it as literal text.- description
Type:
string(default:"")Human-readable description of what the directive does.
- extension
Type:
string(default:"")Name of the extension or package that provides this directive.
- named_options
Type:
object(default:{})Map defining the specific options this directive accepts. Each option supports the following properties:
- description
Type:
string(default:"")A short, human-readable description of the option.
- choices
Type:
array | null(default:null)A list of valid string values for the option. When set, ubCode can validate option values and offer autocompletion.
- flag
Type:
boolean(default:false)When
true, the option is a flag that takes no value. It is either present or absent.
[parse.extend_directives.figure.named_options] width = { description = "Width of the figure" } height = { description = "Height of the figure" } alt = { description = "Alternative text for accessibility" } align = { description = "Alignment", choices = ["left", "center", "right"] } figclass = { description = "CSS class for the figure" } nofooter = { description = "Hide footer", flag = true }
Extending roles¶
The extend_roles section allows you to define custom inline roles:
[parse.extend_roles.api]
description = "Reference to an API endpoint"
extension = "my-api-docs"
[parse.extend_roles.issue]
description = "Reference to a GitHub issue"
extension = "github-integration"
Role configuration options:
- description
Type:
string(default:"")Human-readable description of what the role does.
- extension
Type:
string | null(default:null)Name of the extension or package that provides this role.
Example usage¶
Once defined in configuration, you can use custom directives and roles in your RST files:
This is a paragraph with a :api:`/users/create` endpoint reference
and an :issue:`123` issue reference.
.. my-admonition:: Important Notice
:class: warning highlight
:name: security-note
This is custom admonition content that will be parsed as RST.
Common patterns¶
Sphinx extension integration: Define directives from Sphinx extensions you use:
[parse.extend_directives.automodule]
argument = true
options = true
description = "Automatically document a Python module"
extension = "sphinx.ext.autodoc"
[parse.extend_directives.automodule.named_options]
members = { description = "Include module members" }
undoc-members = { description = "Include undocumented members" }
Custom documentation patterns: Define project-specific directives:
[parse.extend_directives.api-endpoint]
argument = true
options = true
content = true
description = "Document an API endpoint"
extension = "project-docs"
[parse.extend_directives.api-endpoint.named_options]
method = { description = "HTTP method (GET, POST, etc.)" }
path = { description = "URL path pattern" }
deprecated = { description = "Mark as deprecated" }