ipykernel icon indicating copy to clipboard operation
ipykernel copied to clipboard

Inspection of arguments in function cause inspection of surrounding function

Open hrdl-github opened this issue 2 years ago • 0 comments

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'}

hrdl-github avatar Sep 12 '23 14:09 hrdl-github