Skip to content

Commit ceaab09

Browse files
authored
Merge pull request #688 from alcarney/fix-symbols
Implement `astext()` for `a_role`
2 parents 07f83fd + 3bd22f4 commit ceaab09

File tree

7 files changed

+69
-46
lines changed

7 files changed

+69
-46
lines changed

lib/esbonio/changes/685.fix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix ``ValueError`` thrown when building the document symbol for a title node that only contains a role.

lib/esbonio/esbonio/lsp/rst/io.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ class a_directive(nodes.Element, nodes.Inline):
3232
class a_role(nodes.Element):
3333
"""Represents a role."""
3434

35+
def astext(self):
36+
return self["text"]
37+
3538

3639
def dummy_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
3740
node = a_role()

lib/esbonio/esbonio/lsp/symbols.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ def visit_title(self, node: nodes.Node) -> None:
7373
symbol = self.push_symbol()
7474

7575
name = node.astext()
76+
if len(name) == 0:
77+
name = "title_node"
78+
7679
line = (node.line or 1) - 1
7780

7881
symbol.name = name
@@ -93,6 +96,9 @@ def visit_a_directive(self, node: nodes.Element):
9396
symbol = self.push_symbol()
9497

9598
name = node["text"] # type: ignore
99+
if len(name) == 0:
100+
name = "a_directive"
101+
96102
line = (node.line or 1) - 1
97103

98104
symbol.name = name

lib/esbonio/tests/sphinx-default/test_sd_directives.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ async def test_insert_range(
481481
),
482482
(
483483
"theorems/pythagoras.rst",
484-
53,
484+
56,
485485
9,
486486
"sphinx/domains/python.py",
487487
),

lib/esbonio/tests/sphinx-default/test_sd_roles.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ async def test_role_target_insert_range(
430430
),
431431
pytest.param(
432432
"theorems/pythagoras.rst",
433-
50,
433+
53,
434434
19,
435435
"docutils/parsers/rst/roles.py",
436436
marks=pytest.mark.skipif(
@@ -440,7 +440,7 @@ async def test_role_target_insert_range(
440440
),
441441
pytest.param(
442442
"theorems/pythagoras.rst",
443-
50,
443+
53,
444444
19,
445445
"sphinx/roles.py",
446446
marks=pytest.mark.skipif(

lib/esbonio/tests/sphinx-default/test_sd_symbols.py

Lines changed: 53 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,58 @@ def symbol(
5151
)
5252

5353

54+
CODE_TRIANGLE = symbol(
55+
name=":code:`Triangle`",
56+
kind=SymbolKind.String,
57+
range="33:0-33:15",
58+
children=[
59+
symbol(
60+
name=".. class:: Triangle(a: float, b: float, c: float)",
61+
kind=SymbolKind.Class,
62+
range="35:0-35:48",
63+
children=[
64+
symbol(
65+
name=".. attribute:: a",
66+
kind=SymbolKind.Class,
67+
range="39:0-39:15",
68+
),
69+
symbol(
70+
name=".. attribute:: b",
71+
kind=SymbolKind.Class,
72+
range="43:0-43:15",
73+
),
74+
symbol(
75+
name=".. attribute:: c",
76+
kind=SymbolKind.Class,
77+
range="47:0-47:15",
78+
),
79+
symbol(
80+
name=".. method:: is_right_angled() -> bool",
81+
kind=SymbolKind.Class,
82+
range="51:0-51:36",
83+
children=[],
84+
),
85+
],
86+
),
87+
symbol(
88+
name=".. function:: calc_hypotenuse(a: float, b: float) -> float",
89+
kind=SymbolKind.Class,
90+
range="56:0-56:57",
91+
),
92+
symbol(
93+
name=".. function:: calc_side(c: float, b: float) -> float",
94+
kind=SymbolKind.Class,
95+
range="65:0-65:51",
96+
),
97+
symbol(
98+
name=".. |rhs| replace:: right hand side",
99+
kind=SymbolKind.Class,
100+
range="74:0-74:33",
101+
),
102+
],
103+
)
104+
105+
54106
@pytest.mark.parametrize(
55107
"filepath,expected",
56108
[
@@ -98,49 +150,7 @@ def symbol(
98150
kind=SymbolKind.Class,
99151
range="28:0-28:16",
100152
),
101-
symbol(
102-
name=".. class:: Triangle(a: float, b: float, c: float)",
103-
kind=SymbolKind.Class,
104-
range="32:0-32:48",
105-
children=[
106-
symbol(
107-
name=".. attribute:: a",
108-
kind=SymbolKind.Class,
109-
range="36:0-36:15",
110-
),
111-
symbol(
112-
name=".. attribute:: b",
113-
kind=SymbolKind.Class,
114-
range="40:0-40:15",
115-
),
116-
symbol(
117-
name=".. attribute:: c",
118-
kind=SymbolKind.Class,
119-
range="44:0-44:15",
120-
),
121-
symbol(
122-
name=".. method:: is_right_angled() -> bool",
123-
kind=SymbolKind.Class,
124-
range="48:0-48:36",
125-
children=[],
126-
),
127-
],
128-
),
129-
symbol(
130-
name=".. function:: calc_hypotenuse(a: float, b: float) -> float",
131-
kind=SymbolKind.Class,
132-
range="53:0-53:57",
133-
),
134-
symbol(
135-
name=".. function:: calc_side(c: float, b: float) -> float",
136-
kind=SymbolKind.Class,
137-
range="62:0-62:51",
138-
),
139-
symbol(
140-
name=".. |rhs| replace:: right hand side",
141-
kind=SymbolKind.Class,
142-
range="71:0-71:33",
143-
),
153+
CODE_TRIANGLE,
144154
],
145155
),
146156
],

lib/esbonio/tests/sphinx-default/workspace/theorems/pythagoras.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ length of a missing side of a right angled triangle when the other two are known
3030

3131
Used to represent an unknown value.
3232

33+
:code:`Triangle`
34+
^^^^^^^^^^^^^^^^
35+
3336
.. class:: Triangle(a: float, b: float, c: float)
3437

3538
Represents a triangle

0 commit comments

Comments
 (0)