diff --git a/Doc/conf.py b/Doc/conf.py index 16fd8bf257179e..364bb6a2a2c928 100644 --- a/Doc/conf.py +++ b/Doc/conf.py @@ -68,6 +68,9 @@ # Minimum version of sphinx required needs_sphinx = '3.2' +# Hide versionadded and versionchanged in the output older than this version +min_version_show_changes = '3.6' + # Ignore any .rst files in the includes/ directory; # they're embedded in pages but not rendered individually. # Ignore any .rst files in the venv/ directory. diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py index 3cf4d236604bcb..0d1f62cb39442a 100644 --- a/Doc/tools/extensions/pyspecific.py +++ b/Doc/tools/extensions/pyspecific.py @@ -695,7 +695,21 @@ def patch_pairindextypes(app, _env) -> None: pairindextypes.clear() +def hide_old_versionmodified(app, doctree, fromdocname): + """Remove versionmodified nodes (added/changed) older than the minimum.""" + min_version = app.config.min_version_show_changes + if not min_version: + return + min_version = [int(part) for part in min_version.split(".")] + for node in list(doctree.findall(addnodes.versionmodified)): + if node['type'] in ('versionadded', 'versionchanged'): + node_version = [int(part) for part in node['version'].split(".")] + if node_version < min_version: + node.parent.remove(node) + + def setup(app): + app.add_config_value('min_version_show_changes', '', 'html') app.add_role('issue', issue_role) app.add_role('gh', gh_issue_role) app.add_role('source', source_role) @@ -717,6 +731,7 @@ def setup(app): app.add_directive('miscnews', MiscNews) app.connect('env-check-consistency', patch_pairindextypes) app.connect('doctree-resolved', process_audit_events) + app.connect('doctree-resolved', hide_old_versionmodified) app.connect('env-merge-info', audit_events_merge) app.connect('env-purge-doc', audit_events_purge) return {'version': '1.0', 'parallel_read_safe': True}