Skip to content

Commit e5b780e

Browse files
authored
Fix the rendering of callable arguments (#55)
1 parent 36b2c34 commit e5b780e

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

sphinx_js/typedoc.py

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -616,13 +616,15 @@ def _path_segments(self, base_dir: str) -> list[str]:
616616

617617
class TypeLiteral(NodeBase):
618618
kindString: Literal["Type literal"]
619+
variant: Literal["declaration"]
620+
619621
signatures: list["Signature"] = []
620622
indexSignature: "Signature | None" = None
621623
children: Sequence["Member"] = []
622624

623625
def render(self, converter: Converter) -> Iterator[str | ir.TypeXRef]:
624626
if self.signatures:
625-
yield from self.signatures[0].type._render_name(converter)
627+
yield from self.signatures[0].render(converter)
626628
return
627629
yield "{ "
628630
index_sig = self.indexSignature
@@ -857,6 +859,23 @@ def _destructure_params(self) -> list[Param]:
857859
params.extend(self._destructure_param(p))
858860
return params
859861

862+
def render(self, converter: Converter) -> Iterator[str | ir.TypeXRef]:
863+
yield "("
864+
865+
def inner(param: Param) -> Iterator[str | ir.TypeXRef]:
866+
yield param.name + ": "
867+
yield from param.type._render_name(converter)
868+
869+
yield from riffle((inner(param) for param in self.parameters), ", ")
870+
871+
yield "): "
872+
ret = self.return_type(converter)[0].type
873+
assert ret
874+
if isinstance(ret, str):
875+
yield ret
876+
else:
877+
yield from ret
878+
860879
def to_ir(
861880
self, converter: Converter
862881
) -> tuple[ir.Function | None, Sequence["Node"]]:
@@ -1000,24 +1019,8 @@ def _render_name_root(self, converter: Converter) -> Iterator[str | ir.TypeXRef]
10001019

10011020
if isinstance(self.declaration, Callable):
10021021
if self.declaration.kindString == "Constructor":
1003-
yield "{new ("
1004-
else:
1005-
yield "("
1006-
sig = self.declaration.signatures[0]
1007-
1008-
def inner(param: Param) -> Iterator[str | ir.TypeXRef]:
1009-
yield param.name + ": "
1010-
yield from param.type._render_name(converter)
1011-
1012-
yield from riffle((inner(param) for param in sig.parameters), ", ")
1013-
1014-
yield "): "
1015-
ret = sig.return_type(converter)[0].type
1016-
assert ret
1017-
if isinstance(ret, str):
1018-
yield ret
1019-
else:
1020-
yield from ret
1022+
yield "{new "
1023+
yield from self.declaration.signatures[0].render(converter)
10211024
if self.declaration.kindString == "Constructor":
10221025
yield "}"
10231026
return

tests/test_typedoc_analysis/source/types.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,10 @@ export function destructureTest2({
180180
* @param options.b - The 'b' string.
181181
*/
182182
export function destructureTest3({ a, b }: { a: string; b: { c: string } }) {}
183+
184+
/**
185+
* An example with a function as argument
186+
*
187+
* @param a - A number reducer.
188+
*/
189+
export function funcArg(a: (b: number, c: number) => number) {}

tests/test_typedoc_analysis/test_typedoc_analysis.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,3 +615,8 @@ def test_destructured(self):
615615
obj = self.analyzer.get_object(["destructureTest3"])
616616
assert obj.params[0].name == "options"
617617
assert join_type(obj.params[0].type) == "{ a: string; b: { c: string; }; }"
618+
619+
def test_funcarg(self):
620+
obj = self.analyzer.get_object(["funcArg"])
621+
assert obj.params[0].name == "a"
622+
assert join_type(obj.params[0].type) == "(b: number, c: number): number"

0 commit comments

Comments
 (0)