|
9 | 9 |
|
10 | 10 | from sphinx import addnodes |
11 | 11 | from sphinx.addnodes import (desc, desc_addname, desc_annotation, desc_content, desc_name, |
12 | | - desc_optional, desc_parameter, desc_parameterlist, desc_returns, |
13 | | - desc_sig_keyword, desc_sig_literal_number, |
14 | | - desc_sig_literal_string, desc_sig_name, desc_sig_operator, |
15 | | - desc_sig_punctuation, desc_sig_space, desc_signature, |
16 | | - pending_xref) |
| 12 | + desc_optional, desc_parameter, desc_parameter_line, |
| 13 | + desc_parameterlist, desc_returns, desc_sig_keyword, |
| 14 | + desc_sig_literal_number, desc_sig_literal_string, |
| 15 | + desc_sig_name, desc_sig_operator, desc_sig_punctuation, desc_sig_space, desc_signature, pending_xref) |
17 | 16 | from sphinx.domains import IndexEntry |
18 | 17 | from sphinx.domains.python import (PythonDomain, PythonModuleIndex, _parse_annotation, |
19 | 18 | _pseudo_parse_arglist, py_sig_re) |
@@ -1439,3 +1438,71 @@ def test_signature_line_number(app, include_options): |
1439 | 1438 | source, line = docutils.utils.get_source_line(xrefs[0]) |
1440 | 1439 | assert 'index.rst' in source |
1441 | 1440 | assert line == 1 |
| 1441 | + |
| 1442 | + |
| 1443 | +@pytest.mark.sphinx( |
| 1444 | + 'html', |
| 1445 | + confoverrides={'python_maximum_signature_line_length': len("hello(name: str) -> str")} |
| 1446 | +) |
| 1447 | +def test_pyfunction_signature_with_python_maximum_signature_line_length(app): |
| 1448 | + text = ".. py:function:: hello(name: str) -> str" |
| 1449 | + doctree = restructuredtext.parse(app, text) |
| 1450 | + expected_doctree = (addnodes.index, |
| 1451 | + [desc, ([desc_signature, ([desc_name, "hello"], |
| 1452 | + desc_parameterlist, |
| 1453 | + [desc_returns, pending_xref, "str"])], |
| 1454 | + desc_content)]) |
| 1455 | + assert_node(doctree, expected_doctree) |
| 1456 | + assert_node(doctree[1], addnodes.desc, desctype="function", |
| 1457 | + domain="py", objtype="function", noindex=False) |
| 1458 | + signame_node = [desc_sig_name, "name"] |
| 1459 | + expected_sig = [desc_parameterlist, desc_parameter, (signame_node, |
| 1460 | + [desc_sig_punctuation, ":"], |
| 1461 | + desc_sig_space, |
| 1462 | + [nodes.inline, pending_xref, "str"])] |
| 1463 | + assert_node(doctree[1][0][1], expected_sig) |
| 1464 | + |
| 1465 | + |
| 1466 | + text = (".. py:function:: hello(names: str) -> str\n" |
| 1467 | + " :single-line-signature:") |
| 1468 | + signame_node[1] = "names" |
| 1469 | + doctree = restructuredtext.parse(app, text) |
| 1470 | + assert_node(doctree, expected_doctree) |
| 1471 | + assert_node(doctree[1], addnodes.desc, desctype="function", |
| 1472 | + domain="py", objtype="function", noindex=False) |
| 1473 | + assert_node(doctree[1][0][1], expected_sig) |
| 1474 | + |
| 1475 | + text = ".. py:function:: hello(names: str) -> str" |
| 1476 | + doctree = restructuredtext.parse(app, text) |
| 1477 | + assert_node(doctree, expected_doctree) |
| 1478 | + assert_node(doctree[1], addnodes.desc, desctype="function", |
| 1479 | + domain="py", objtype="function", noindex=False) |
| 1480 | + expected_sig.insert(1, desc_parameter_line) |
| 1481 | + |
| 1482 | + assert_node(doctree[1][0][1], expected_sig) |
| 1483 | + |
| 1484 | + |
| 1485 | +@pytest.mark.sphinx( |
| 1486 | + 'html', testroot='domain-py-python_maximum_signature_line_length', |
| 1487 | +) |
| 1488 | +def test_python_python_maximum_signature_line_length(app, status, warning): |
| 1489 | + app.build() |
| 1490 | + content = (app.outdir / 'index.html').read_text(encoding='utf8') |
| 1491 | + expected = '\n'.join(( |
| 1492 | + '<dl>', |
| 1493 | + ( |
| 1494 | + '<dd><em class="sig-param"><span class="n"><span class="pre">name</span></span>' |
| 1495 | + '<span class="p"><span class="pre">:</span></span><span class="w"> </span>' |
| 1496 | + '<span class="n"><span class="pre">str</span></span></em>, </dd>' |
| 1497 | + ), |
| 1498 | + '</dl>', |
| 1499 | + '', |
| 1500 | + ( |
| 1501 | + '<span class="sig-paren">)</span> <span class="sig-return">' |
| 1502 | + '<span class="sig-return-icon">→</span> <span class="sig-return-typehint">' |
| 1503 | + '<span class="pre">str</span></span></span>' |
| 1504 | + '<a class="headerlink" href="#hello" title="Permalink to this definition">¶</a>' |
| 1505 | + '</dt>' |
| 1506 | + ), |
| 1507 | + )) |
| 1508 | + assert expected in content |
0 commit comments