Skip to content

RecursionError in ipython autocomplete #2085

@jokasimr

Description

@jokasimr

Steps to reproduce:

mamba create -n jedi-repro python=3.11 jedi ipython
mamba activate jedi-repro

cat << EOF > test.py
def test(x, **kwargs):
    if isinstance(x, int):
        return test((x,), **kwargs)
EOF

then open ipython repl and type:

from test import <tab>

and after a short delay you should see a stack trace like:

    RecursionError: maximum recursion depth exceeded
   
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/star_args.py", line 125, in process_params
    kwarg_callables = list(_iter_nodes_for_param(p))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/star_args.py", line 44, in _iter_nodes_for_param
    if _goes_to_param_name(param_name, context, name):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/star_args.py", line 61, in _goes_to_param_name
    found = TreeNameDefinition(context, potential_name).goto()
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/names.py", line 213, in goto
    return context.goto(name, position=stmt.start_pos)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/context.py", line 34, in goto
    names = finder.filter_name(filters, name_or_str)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/finder.py", line 36, in filter_name
    names = filter.get(string_name)
            ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/filters.py", line 109, in get
    return self._convert_names(self._filter(
                               ^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/filters.py", line 145, in _filter
    return list(self._check_flows(names))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/filters.py", line 156, in _check_flows
    check = flow_analysis.reachability_check(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/flow_analysis.py", line 54, in reachability_check
    origin_flow_scopes = list(_get_flow_scopes(origin_scope))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/inference/flow_analysis.py", line 41, in _get_flow_scopes
    node = get_parent_scope(node, include_flows=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/parser_utils.py", line 261, in get_parent_scope
    and any(n.start_pos <= node.start_pos < n.end_pos
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/jedi/parser_utils.py", line 261, in 
    and any(n.start_pos <= node.start_pos < n.end_pos
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johannes/.local/share/mamba/envs/jedi-repro/lib/python3.11/site-packages/parso/python/tree.py", line 706, in get_test_nodes
    if c in ('elif', 'if'):
       ^^^^^^^^^^^^^^^^^^^
RecursionError: maximum recursion depth exceeded
   

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions