ipython / ipython/ipykernel

Inspection of arguments in function cause inspection of surrounding function

未關閉
#1,147 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
Python
星號
734
分支
412
平均合併
1 天 5 小時
30 天內合併 PR
8

描述

At the moment inspection of arguments in function calls is not possible as the function is inspected instead. This is because `do_inspect` relies on `IPython.utils.tokenutil.generate_tokens`:

https://github.com/ipython/ipykernel/blob/c24b252dc4fc81e6cf6354f8d64ea06ed1ce3496/ipykernel/ipkernel.py#L544-L546

The behaviour of `generate_tokens` has changed in https://github.com/ipython/ipython/commit/240eef90ab769a25100eb9f2c4247d775e6c160c . Before it would return the tokens of names, including parameters and names, even if they were inside a function call. Not all edge cases were handled correctly, but for most day-to-day inspection tasks were served fine. Now `generate_tokens` returns function names if the cursor is positioned inside the parentheses:

```
from IPython.utils.tokenutil import generate_tokens, token_at_cursor
from io import StringIO
code = 'func(param1, param2=arg)'
tokens = list(generate_tokens(StringIO(code).readline))

pos = dict(func=3, param1=8, param2=15, arg=22)
# Current behaviour
dict((k, token_at_cursor(code, v) for k, v in pos.items())
# Output: {'func': 'func', 'param1': 'func', 'param2': 'func', 'arg': 'func'}
```

貢獻指南

開啟貢獻指南

研究方向

Start in ipykernel/ipkernel.py around lines 544-546 and inspect how do_inspect uses generate_tokens, token_at_cursor, and the surrounding cursor handling. Reproduce the provided func(param1, param2=arg) example, then verify that cursors on arguments identify those arguments rather than the surrounding function.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
tooling
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
45/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。