Skip to content

Commit

Permalink
Fix parsing of options with enabled option_emphasise_placeholders
Browse files Browse the repository at this point in the history
If the option is enabled, the current code wrongly uses

if not args:
  continue

which skips adjustment of signode and firstname
at the very of the loop.

Fixes: sphinx-doc#10366.
  • Loading branch information
marxin committed Jun 17, 2022
1 parent c40bb72 commit bad6fb9
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 17 deletions.
33 changes: 16 additions & 17 deletions sphinx/domains/std.py
Expand Up @@ -186,23 +186,22 @@ def handle_signature(self, sig: str, signode: desc_signature) -> str:
signode += addnodes.desc_name(optname, optname)
if self.env.config.option_emphasise_placeholders:
add_end_bracket = False
if not args:
continue
if args[0] == '[' and args[-1] == ']':
add_end_bracket = True
signode += addnodes.desc_sig_punctuation('[', '[')
args = args[1:-1]
if args[0] == ' ':
signode += addnodes.desc_sig_space()
args = args.strip()
if args[0] == '=':
signode += addnodes.desc_sig_punctuation('=', '=')
args = args[1:]
for part in samp_role.parse(args):
if isinstance(part, nodes.Text):
signode += nodes.Text(part.astext())
else:
signode += part
if args:
if args[0] == '[' and args[-1] == ']':
add_end_bracket = True
signode += addnodes.desc_sig_punctuation('[', '[')
args = args[1:-1]
elif args[0] == ' ':
signode += addnodes.desc_sig_space()
args = args.strip()
elif args[0] == '=':
signode += addnodes.desc_sig_punctuation('=', '=')
args = args[1:]
for part in samp_role.parse(args):
if isinstance(part, nodes.Text):
signode += nodes.Text(part.astext())
else:
signode += part
if add_end_bracket:
signode += addnodes.desc_sig_punctuation(']', ']')
else:
Expand Down
4 changes: 4 additions & 0 deletions tests/test_build_html.py
Expand Up @@ -1748,6 +1748,8 @@ def test_option_emphasise_placeholders(app, status, warning):
'<span class="pre">-</span>'
'<em><span class="pre">COUNT</span></em>' in content)
assert '<span class="pre">{{value}}</span>' in content
assert ('<span class="pre">--plugin.option</span></span>'
'<a class="headerlink" href="#cmdoption-perl-plugin.option" title="Permalink to this definition">¶</a></dt>') in content


@pytest.mark.sphinx('html', testroot='root')
Expand All @@ -1757,3 +1759,5 @@ def test_option_emphasise_placeholders_default(app, status, warning):
assert '<span class="pre">={TYPE}</span>' in content
assert '<span class="pre">={WHERE}-{COUNT}</span></span>' in content
assert '<span class="pre">{client_name}</span>' in content
assert ('<span class="pre">--plugin.option</span></span>'
'<a class="headerlink" href="#cmdoption-perl-plugin.option" title="Permalink to this definition">¶</a></dt>') in content

0 comments on commit bad6fb9

Please sign in to comment.