Merge pull request #1452 from terencehonles/fix-rst-directives-with-unknown-options

fix unknown directive options removing the directive entirely
This commit is contained in:
Aaron Harpole 2021-04-02 17:32:20 -07:00 коммит произвёл GitHub
Родитель b8642441b2 7a19485f98
Коммит 46908504f5
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
4 изменённых файлов: 40 добавлений и 2 удалений

2
.github/workflows/ci.yml поставляемый
Просмотреть файл

@ -1,5 +1,5 @@
name: CI
on: push
on: [push, pull_request]
env:
JRUBY_OPTS: -Xcext.enabled=true

Просмотреть файл

@ -47,7 +47,7 @@ except:
import codecs
import io
from docutils import nodes
from docutils import nodes, utils
from docutils.parsers.rst import directives, roles
from docutils.parsers.rst.directives.body import CodeBlock, Directive
from docutils.core import publish_parts
@ -76,6 +76,35 @@ from docutils import nodes
original_behavior = False # Documents original docutils behavior
github_display = True
def extract_extension_options(field_list, option_spec):
"""
Overrides `utils.extract_extension_options` and inlines
`utils.assemble_option_dict` to make it ignore unknown options passed to
directives (i.e. ``:caption:`` for ``.. code-block:``).
"""
dropped = set()
options = {}
for name, value in utils.extract_options(field_list):
convertor = option_spec.get(name)
if name in options or name in dropped:
raise utils.DuplicateOptionError('duplicate option "%s"' % name)
# silently drop unknown options as long as they are not duplicates
if convertor is None:
dropped.add(name)
continue
# continue as before
try:
options[name] = convertor(value)
except (ValueError, TypeError) as detail:
raise detail.__class__('(option: "%s"; value: %r)\n%s'
% (name, value, ' '.join(detail.args)))
return options
utils.extract_extension_options = extract_extension_options
def unknown_directive(self, type_name):
lineno = self.state_machine.abs_line_number()
indented, indent, offset, blank_finish = \

Просмотреть файл

@ -39,6 +39,12 @@ The UTF-8 quote character in this table used to cause python to go boom. Now doc
python.code('hooray')
.. code:: python
:caption: An ignored Sphinx option
:made-up-option: An ignored made up option
python.code('hello world')
.. doctest:: ignored
>>> some_function()

Просмотреть файл

@ -64,6 +64,9 @@ A block of code
python.code('hooray')
</pre>
<pre lang="python">
python.code('hello world')
</pre>
<pre lang="python">
&gt;&gt;&gt; some_function()
'result'
</pre>