From c3007eefae300d27beb938cf7f3a12a28fb2e42b Mon Sep 17 00:00:00 2001 From: ruchi-mish90 Date: Fri, 17 Jul 2026 12:29:52 +0530 Subject: [PATCH] fix patch_name IndexError when @patch_to uses cls= kwarg --- nbdev/doclinks.py | 2 +- nbs/api/05_doclinks.ipynb | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/nbdev/doclinks.py b/nbdev/doclinks.py index 09a9104c1..c340f369c 100644 --- a/nbdev/doclinks.py +++ b/nbdev/doclinks.py @@ -48,7 +48,7 @@ def patch_name(o): if nm=='patch': a = o.args.args[0].annotation if isinstance(a, ast.BinOp): return _binop_leafs(a, o) - elif nm=='patch_to': a = d.args[0] + elif nm=='patch_to': a = d.args[0] if d.args else next(k.value for k in d.keywords if k.arg=='cls') else: return o.name return _sym_nm(a,o) diff --git a/nbs/api/05_doclinks.ipynb b/nbs/api/05_doclinks.ipynb index 30ebf7c54..42a94c9ba 100644 --- a/nbs/api/05_doclinks.ipynb +++ b/nbs/api/05_doclinks.ipynb @@ -100,7 +100,7 @@ " if nm=='patch': \n", " a = o.args.args[0].annotation\n", " if isinstance(a, ast.BinOp): return _binop_leafs(a, o)\n", - " elif nm=='patch_to': a = d.args[0]\n", + " elif nm=='patch_to': a = d.args[0] if d.args else next(k.value for k in d.keywords if k.arg=='cls')\n", " else: return o.name\n", " return _sym_nm(a,o)" ] @@ -128,6 +128,16 @@ "test_eq('_T._g', _test_patch(s))" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "s = \"@patch_to(cls=_T)\\ndef _h(self): ...\"\n", + "test_eq('_T._h', _test_patch(s))" + ] + }, { "cell_type": "code", "execution_count": null,