Skip to content

flake8 can error out when deleting lines #438

Closed
@krassowski

Description

@krassowski

In 1.8.0 (did not check earlier versions yet) when lines are deleted while flake8 lint is running, and the diagnostic would end out of range of current document, flake8 can error out:

Traceback (most recent call last):
  File "site-packages/pylsp/config/config.py", line 40, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "site-packages/pluggy/_manager.py", line 418, in traced_hookexec
    return outcome.get_result()
           ^^^^^^^^^^^^^^^^^^^^
  File "site-packages/pluggy/_result.py", line 108, in get_result
    raise exc.with_traceback(exc.__traceback__)
  File "site-packages/pluggy/_result.py", line 70, in from_call
    result = func()
             ^^^^^^
  File "site-packages/pluggy/_manager.py", line 415, in <lambda>
    lambda: oldcall(hook_name, hook_impls, caller_kwargs, firstresult)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "site-packages/pluggy/_callers.py", line 116, in _multicall
    raise exception.with_traceback(exception.__traceback__)
  File "site-packages/pluggy/_callers.py", line 80, in _multicall
    res = hook_impl.function(*args)
          ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "site-packages/pylsp/plugins/flake8_lint.py", line 83, in pylsp_lint
    return parse_stdout(document, output)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "site-packages/pylsp/plugins/flake8_lint.py", line 215, in parse_stdout
    "character": len(document.lines[line]),
                     ~~~~~~~~~~~~~~^^^^^^
IndexError: list index out of range

The relevant line is:

"character": len(document.lines[line]),

To reproduce create a python file like:




variable

This will generate "F821 undefined name 'variable'". Then proceed to removing the empty lines and observe the error. Note:

  • it does not happen every time, you may need more empty lines to delete and vary how quickly you delete them
  • pyflakes works well in this case.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions