Skip to content

Commit 5d4ca7b

Browse files
authored
Move the xref kind arg onto a field of the TypeXRefInternal (#160)
This field is always None unless the argument is a TypeXRefInternal so it makes more sense to put it as a field.
1 parent d878a1a commit 5d4ca7b

File tree

5 files changed

+20
-14
lines changed

5 files changed

+20
-14
lines changed

sphinx_js/ir.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class TypeXRefInternal:
4545
name: str
4646
path: list[str]
4747
type: Literal["internal"] = "internal"
48+
kind: str | None = None
4849

4950

5051
@define

sphinx_js/js/convertType.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,15 +297,14 @@ class TypeConverter implements TypeVisitor<Type> {
297297
}
298298

299299
reference(type: ReferenceType): Type {
300-
let res;
301300
if (type.isIntentionallyBroken()) {
302301
// If it's intentionally broken, don't add an xref. It's probably a type
303302
// parameter.
304303
return this.addTypeArguments(type, [type.name]);
305304
} else {
306305
// if we got a reflection use that. It's not all that clear how to deal
307306
// with type arguments here though...
308-
res = this.convertPrivateReferenceToReflection(type);
307+
const res = this.convertPrivateReferenceToReflection(type);
309308
// else use convertReferenceToXRef
310309
if (res) {
311310
return res;

sphinx_js/renderers.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class HasDepPath(Protocol):
175175

176176

177177
class Renderer:
178-
_type_xref_formatter: Callable[[TypeXRef, str | None], str]
178+
_type_xref_formatter: Callable[[TypeXRef], str]
179179
# We turn the <span class="sphinx_js-type"> in the analyzer tests because it
180180
# makes a big mess.
181181
_add_span: bool
@@ -235,13 +235,13 @@ def from_directive(cls: type[R], directive: Directive, app: Sphinx) -> R:
235235
)
236236

237237
def _set_type_xref_formatter(
238-
self, formatter: Callable[[Config, TypeXRef, str | None], str] | None
238+
self, formatter: Callable[[Config, TypeXRef], str] | None
239239
) -> None:
240240
if formatter:
241241
self._type_xref_formatter = partial(formatter, self._app.config)
242242
return
243243

244-
def default_type_xref_formatter(xref: TypeXRef, _: str | None) -> str:
244+
def default_type_xref_formatter(xref: TypeXRef) -> str:
245245
return xref.name
246246

247247
self._type_xref_formatter = default_type_xref_formatter
@@ -453,11 +453,13 @@ def strs() -> Iterator[str]:
453453

454454
def render_xref(self, s: TypeXRef, escape: bool = False) -> str:
455455
obj = None
456-
kind = None
457-
if isinstance(s, TypeXRefInternal | TypeXRefInternal):
456+
if isinstance(s, TypeXRefInternal):
458457
obj = self.lookup_object(s.path)
459-
kind = type(obj).__name__.lower()
460-
result = self._type_xref_formatter(s, kind)
458+
# Stick the kind on the xref so that the formatter will know what
459+
# xref role to emit. I'm not sure how to compute this earlier. It's
460+
# convenient to do it here.
461+
s.kind = type(obj).__name__.lower()
462+
result = self._type_xref_formatter(s)
461463
if escape:
462464
result = rst.escape(result)
463465
return result

tests/test_build_ts/source/docs/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
from sphinx_js.ir import TypeXRef, TypeXRefInternal
1515

1616

17-
def ts_type_xref_formatter(config, xref: TypeXRef, kind: str) -> str:
17+
def ts_type_xref_formatter(config, xref: TypeXRef) -> str:
1818
if isinstance(xref, TypeXRefInternal):
1919
name = rst.escape(xref.name)
20-
return f":js:{kind}:`{name}`"
20+
return f":js:{xref.kind}:`{name}`"
2121
else:
2222
return xref.name

tests/test_renderers.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,10 @@ def test_render_description():
6060
)
6161

6262

63-
def ts_xref_formatter(config, xref, kind):
63+
def ts_xref_formatter(config, xref):
6464
if isinstance(xref, TypeXRefInternal):
6565
name = rst.escape(xref.name)
66-
return f":js:{kind}:`{name}`"
66+
return f":js:{xref.kind}:`{name}`"
6767
else:
6868
return xref.name
6969

@@ -339,8 +339,12 @@ def test_render_xref(function_renderer: AutoFunctionRenderer):
339339
assert function_renderer.render_type([xref_external]) == "A"
340340
res = []
341341

342-
def xref_render(config, val, kind):
342+
def xref_render(config, val):
343343
res.append([config, val])
344+
kind = None
345+
if isinstance(val, TypeXRefInternal):
346+
kind = val.kind
347+
344348
return f"{val.package}::{val.name}::{kind}"
345349

346350
function_renderer._set_type_xref_formatter(xref_render)

0 commit comments

Comments
 (0)