Inspection of arguments in function cause inspection of surrounding function
- Dominant language
- Python
- Stars
- 734
- Forks
- 412
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 8
Description
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'}
```
Contributor guide
Research direction
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.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100