pylint icon indicating copy to clipboard operation
pylint copied to clipboard

per-line pylint suppression does not work inside multiline-imports like black formats things

Open vapier opened this issue 2 years ago • 6 comments

Bug description

# pylint: disable=missing-module-docstring, pointless-statement

from typing import (
    Any,
    AnyStr,
    Callable,
    Collection,
    Dict,
    Generator,
    Iterator,  # pylint: disable=unused-import
    List,
    Optional,
    Tuple,
    Union,
)

Any
AnyStr
Callable
Collection
Dict
Generator
List
Optional
Tuple
Union

Configuration

No response

Command used

pylint test.py

Pylint output

************* Module test
test.py:3:0: W0611: Unused Iterator imported from typing (unused-import)

Expected behavior

warning should have been suppressed

Pylint version

pylint 2.11.1
astroid 2.8.4
Python 3.9.10 (main, Feb 22 2022, 13:54:07) 
[GCC 11.2.0]

OS / Environment

No response

Additional dependencies

No response

vapier avatar May 02 '22 07:05 vapier

Thank you for opening the issue, I can reproduce with 2.14.0-dev0:

************* Module a
a.py:3:0: W0611: Unused Iterator imported from typing (unused-import)
a.py:10:0: I0021: Useless suppression of 'unused-import' (useless-suppression)

You should disable on line 3 instead but being able to disable on the specific line would be a nice enhancement.

Pierre-Sassoulas avatar May 02 '22 07:05 Pierre-Sassoulas

there are a couple of workarounds, but none are ideal

putting it before the import line turns it off for the entire file after that point (since these comments operate on scope) and requires manual turning off with # pylint: enable=unused-import after the import line. that also disables it for all the imports on that line (when there are multiple ones like this typing example). trying to split the one import out to a dedicated line works only if the whole thing fits on one line, otherwise black/isort wraps it with parens, and it hits this bug again. when the comment is at the start of the line, black/isort insert blank lines around the section making it more jarring.

vapier avatar May 02 '22 14:05 vapier

putting it before the import line turns it off for the entire file after that point

I think the suggestion was to do this:

from typing import (  # pylint: disable=unused-import
...

jacobtylerwalls avatar May 05 '22 18:05 jacobtylerwalls

gotcha, thanks for the clarification. unfortunately, isort will reformat that when the first line is longer than 80 cols. i could put in a comment to disable the isort logic, but then i'm back in the same position of adding lots of suppressions :/.

vapier avatar May 05 '22 18:05 vapier

I see! I think disable-next can be used to still prevent an all-block disable:

# pylint: disable-next=unused-import
from typing import ...

jacobtylerwalls avatar May 05 '22 18:05 jacobtylerwalls

ah, i guess disable-next is a new thing. time for me to upgrade.

vapier avatar May 05 '22 19:05 vapier