Added counts to get better overview:
grep -R '# pylint: disable' | sed 's/.*\(# pylint.*\)/\1/' | sort | uniq -c
1 Binary file
.git/objects/pack/pack-b85cbf9c91a5ba2bc0e0f19ea9bcf9d8193c48d5.pack
matches
3 # pylint: disable=abstract-method
18 # pylint: disable=assignment-from-no-return
22 # pylint: disable=attribute-defined-outside-init
195 # pylint: disable=broad-except
2 # pylint: disable=C0103
2 # pylint: disable=C0103, line-too-long
1 # pylint: disable=C0111
2 # pylint: disable=C0123
4 # pylint: disable=C0301
3 # pylint: disable=C0302
18 # pylint: disable=c-extension-no-member
7 # pylint: disable=c-extension-no-member, no-member
2 # pylint: disable=c-extension-no-member,no-member
19 # pylint: disable=comparison-with-callable
1 # pylint: disable=comparison-with-itself
4 # pylint: disable=consider-using-enumerate
2 # pylint: disable=consider-using-generator
46 # pylint: disable=consider-using-with
2 # pylint: disable=consider-using-with,attribute-defined-outside-init
4 # pylint: disable=cyclic-import
2 # pylint: disable=dangerous-default-value
2 # pylint: disable=E0012
1 # pylint: disable=E1101
2 # pylint: disable=E1102
3 # pylint: disable=E1111
8 # pylint: disable=expression-not-assigned
29 # pylint: disable=global-statement
1 # pylint: disable=global-statement,global-variable-not-assigned
4 # pylint: disable=inconsistent-return-statements
1 # pylint: disable=invalid-bool-returned, bad-option-value
1 # pylint: disable=invalid-length-returned
123 # pylint: disable=invalid-name
2 # pylint: disable=invalid-name,missing-docstring
2 # pylint: disable=invalid-name, unused-argument
1 # pylint: disable=invalid-sequence-index
2 # pylint: disable=invalid-str-returned
2 # pylint: disable=len-as-condition
20 # pylint: disable=line-too-long
3 # pylint: disable=line-too-long # noqa
4 # pylint: disable=logging-not-lazy
4 # pylint: disable=lost-exception
26 # pylint: disable=maybe-no-member
21 # pylint: disable=missing-docstring
1 # pylint: disable=missing-docstring, redefined-outer-name
12 # pylint: disable=missing-function-docstring
6 # pylint: disable=missing-kwoa
4 # pylint: disable-msg=too-many-arguments
2 # pylint: disable=no-else-break
2 # pylint: disable=no-else-continue
741 # pylint: disable=no-member
1 # pylint: disable=no-member,invalid-name
3 # pylint: disable=no-member,line-too-long
1 # pylint: disable=no-member, maybe-no-member
3 # pylint: disable=no-member # noqa
2 # pylint: disable=no-method-argument
58 # pylint: disable=no-name-in-module
1 # pylint: disable=no-name-in-module,wrong-import-order
2 # pylint: disable=non-parent-init-called
6 # pylint: disable=no-self-argument
1 # pylint: disable=not-a-mapping
6 # pylint: disable=not-callable
222 # pylint: disable=no-value-for-parameter
6 # pylint: disable=pointless-statement
123 # pylint: disable=protected-access
2 # pylint: disable=protected-access,c-extension-no-member,no-member
2 # pylint: disable=protected-access,no-member
2 # pylint: disable=R0401
2 # pylint: disable=R0902,R0904
1 # pylint: disable=R0904, C0111
1 # pylint: disable=R0904, C0111, C0302
3 # pylint: disable=R0904, C0302
3 # pylint: disable=R0913, C0302
2 # pylint: disable=raising-format-tuple
14 # pylint: disable=redefined-builtin
1 # pylint: disable=redefined-builtin,unused-argument
2 # pylint: disable=redefined-builtin,unused-argument,too-many-arguments
14 # pylint: disable=redefined-outer-name
6 # pylint: disable=redefined-outer-name,reimported
7 # pylint: disable=redefined-outer-name,reimported,unused-import
1 # pylint: disable=redefined-outer-name,unused-argument
2 # pylint: disable=reimported,unused-import,redefined-outer-name
2 # pylint: disable=self-assigning-variable
13 # pylint: disable=signature-differs
2 # pylint: disable=signature-differs # noqa: D403
2 # pylint: disable=singleton-comparison
4 # pylint: disable=subprocess-popen-preexec-fn
2 # pylint: disable=subprocess-popen-preexec-fn,consider-using-with
5 # pylint: disable=subprocess-run-check
7 # pylint: disable=super-init-not-called
2 # pylint: disable=syntax-error
3 # pylint: disable=too-few-public-methods
17 # pylint: disable=too-many-ancestors
270 # pylint: disable=too-many-arguments
2 # pylint: disable=too-many-arguments,inconsistent-return-statements
6 # pylint: disable=too-many-arguments, too-many-locals
26 # pylint: disable=too-many-arguments,too-many-locals
2 # pylint: disable=too-many-arguments,too-many-locals,too-many-branches
2 # pylint: disable=too-many-arguments,too-many-locals,
too-many-statements
2 # pylint: disable=too-many-boolean-expressions
4 # pylint: disable=too-many-branches
1 # pylint: disable=too-many-function-args
78 # pylint: disable=too-many-instance-attributes
2 # pylint: disable=too-many-instance-attributes, too-many-arguments
2 # pylint:
disable=too-many-instance-attributes,too-many-arguments,too-many-branches
2 # pylint: disable=too-many-instance-attributes,too-many-locals
2 # pylint: disable=too-many-instance-attributes,too-many-public-methods
14 # pylint: disable=too-many-lines
21 # pylint: disable=too-many-locals
6 # pylint: disable=too-many-locals,too-many-arguments
3 # pylint: disable=too-many-locals,too-many-arguments,invalid-name
3 # pylint: disable=too-many-locals,too-many-arguments, too-many-branches
4 # pylint: disable=too-many-locals,too-many-statements
71 # pylint: disable=too-many-nested-blocks
9 # pylint: disable=too-many-public-methods
18 # pylint: disable=too-many-return-statements
7 # pylint: disable=too-many-statements
5 # pylint: disable=undefined-variable
11 # pylint: disable=unexpected-keyword-arg
4 # pylint: disable=ungrouped-imports
4 # pylint: disable=unidiomatic-typecheck
1 # pylint: disable=unnecessary-lambda
18 # pylint: disable=unsubscriptable-object
4 # pylint: disable=unsupported-membership-test
1 # pylint: disable = unused-argument
188 # pylint: disable=unused-argument
1 # pylint: disable=unused-argument,invalid-name
1 # pylint: disable=unused-argument,line-too-long
2 # pylint: disable=unused-argument # pragma: no cover
3 # pylint: disable=unused-argument,too-many-arguments,too-many-locals
2 # pylint: disable=unused-argument, unused-variable
549 # pylint: disable=unused-import
2 # pylint: disable=unused-import,line-too-long
2 # pylint: disable=unused-import # noqa
2 # pylint: disable=unused-import # noqa: F401
4 # pylint: disable=unused-import # noqa: F401
8 # pylint: disable=unused-variable
1 # pylint: disable=unused-variable # noqa
4 # pylint: disable=using-constant-test
1 # pylint: disable=W0104
6 # pylint: disable=W0106
1 # pylint: disable=W0108
1 # pylint: disable=W0143
2 # pylint: disable=W0201
20 # pylint: disable=W0212
1 # pylint: disable=W0612
4 # pylint: disable=W0703
1 # pylint: disable=wildcard-import
5 # pylint: disable=wrong-import-order
5 # pylint: disable=wrong-import-position
On Thu, Jun 24, 2021 at 10:53 AM Jarek Potiuk <[email protected]> wrote:
>
> It could be survivor bias, but at least in my memory pretty much every
> time I've seen something really serious, it's been also reported by
> flake8 (which on its own is a combination of pep8, pyflakes + circular
> complexity).
>
> Let me explain a bit more context that built up in my mind over the
> last few months which made me change my mind.
>
> I think for such a tool, it is important to have as few
> false-positives as possible. If you have a lot of false-positives, we
> are basically trading both - contributor's and reviewers time on
> analysing and explaining that "this is false positive" with the
> potential of introducing a mistake like a typo.
>
> As a reviewer, this is a recurring pattern recently that the
> contributor complains about a "new" problem reported in the code they
> did not touch and then the reviewer has to get engaged and explain,
> and iterate often resulting in having to rebase the PR (sometimes
> again and again).
>
> When I look at our code:
>
> grep -R '# pylint: disable' | wc -l
> 3370
>
> find . -name '*.py' | wc -l
> 4924
>
> We have > 3000 false positives in our code and almost 5000 python files.
>
> Those false positives are time lost by both contributors and
> reviewers. Those are the places where contributor and reviewer jointly
> decided that it's not worth to fix the problem reported by pylunt. Is
> 3370/4920 a lot ? I think so.
>
> Yes it might mean we should disable some rules possibly. But when I
> look at those rules to disable, those are the very ones that we would
> like to be able to discover. The list of those unique disables at the
> end of the mail.
>
> If you look at the pyflakes (which is one of the three tools in
> flake8) -> "Pyflakes makes a simple promise: it will never complain
> about style, and it will try very, very hard to never emit false
> positives." . I think it delivers.
>
> Pylint makes no such promise (and delivers as well).
>
> J.
>
>
> #### Currently disabled pylint rules:
>
> grep -R '# pylint: disable' | sed 's/.*\(# pylint.*\)/\1/' | sort | uniq
> # pylint: disable=abstract-method
> # pylint: disable=assignment-from-no-return
> # pylint: disable=attribute-defined-outside-init
> # pylint: disable=broad-except
> # pylint: disable=C0103
> # pylint: disable=C0103, line-too-long
> # pylint: disable=C0111
> # pylint: disable=C0123
> # pylint: disable=C0301
> # pylint: disable=C0302
> # pylint: disable=c-extension-no-member
> # pylint: disable=c-extension-no-member, no-member
> # pylint: disable=c-extension-no-member,no-member
> # pylint: disable=comparison-with-callable
> # pylint: disable=comparison-with-itself
> # pylint: disable=consider-using-enumerate
> # pylint: disable=consider-using-generator
> # pylint: disable=consider-using-with
> # pylint: disable=consider-using-with,attribute-defined-outside-init
> # pylint: disable=cyclic-import
> # pylint: disable=dangerous-default-value
> # pylint: disable=E0012
> # pylint: disable=E1101
> # pylint: disable=E1102
> # pylint: disable=E1111
> # pylint: disable=expression-not-assigned
> # pylint: disable=global-statement
> # pylint: disable=global-statement,global-variable-not-assigned
> # pylint: disable=inconsistent-return-statements
> # pylint: disable=invalid-bool-returned, bad-option-value
> # pylint: disable=invalid-length-returned
> # pylint: disable=invalid-name
> # pylint: disable=invalid-name,missing-docstring
> # pylint: disable=invalid-name, unused-argument
> # pylint: disable=invalid-sequence-index
> # pylint: disable=invalid-str-returned
> # pylint: disable=len-as-condition
> # pylint: disable=line-too-long
> # pylint: disable=line-too-long # noqa
> # pylint: disable=logging-not-lazy
> # pylint: disable=lost-exception
> # pylint: disable=maybe-no-member
> # pylint: disable=missing-docstring
> # pylint: disable=missing-docstring, redefined-outer-name
> # pylint: disable=missing-function-docstring
> # pylint: disable=missing-kwoa
> # pylint: disable-msg=too-many-arguments
> # pylint: disable=no-else-break
> # pylint: disable=no-else-continue
> # pylint: disable=no-member
> # pylint: disable=no-member,invalid-name
> # pylint: disable=no-member,line-too-long
> # pylint: disable=no-member, maybe-no-member
> # pylint: disable=no-member # noqa
> # pylint: disable=no-method-argument
> # pylint: disable=no-name-in-module
> # pylint: disable=no-name-in-module,wrong-import-order
> # pylint: disable=non-parent-init-called
> # pylint: disable=no-self-argument
> # pylint: disable=not-a-mapping
> # pylint: disable=not-callable
> # pylint: disable=no-value-for-parameter
> # pylint: disable=pointless-statement
> # pylint: disable=protected-access
> # pylint: disable=protected-access,c-extension-no-member,no-member
> # pylint: disable=protected-access,no-member
> # pylint: disable=R0401
> # pylint: disable=R0902,R0904
> # pylint: disable=R0904, C0111
> # pylint: disable=R0904, C0111, C0302
> # pylint: disable=R0904, C0302
> # pylint: disable=R0913, C0302
> # pylint: disable=raising-format-tuple
> # pylint: disable=redefined-builtin
> # pylint: disable=redefined-builtin,unused-argument
> # pylint: disable=redefined-builtin,unused-argument,too-many-arguments
> # pylint: disable=redefined-outer-name
> # pylint: disable=redefined-outer-name,reimported
> # pylint: disable=redefined-outer-name,reimported,unused-import
> # pylint: disable=redefined-outer-name,unused-argument
> # pylint: disable=reimported,unused-import,redefined-outer-name
> # pylint: disable=self-assigning-variable
> # pylint: disable=signature-differs
> # pylint: disable=signature-differs # noqa: D403
> # pylint: disable=singleton-comparison
> # pylint: disable=subprocess-popen-preexec-fn
> # pylint: disable=subprocess-popen-preexec-fn,consider-using-with
> # pylint: disable=subprocess-run-check
> # pylint: disable=super-init-not-called
> # pylint: disable=syntax-error
> # pylint: disable=too-few-public-methods
> # pylint: disable=too-many-ancestors
> # pylint: disable=too-many-arguments
> # pylint: disable=too-many-arguments,inconsistent-return-statements
> # pylint: disable=too-many-arguments, too-many-locals
> # pylint: disable=too-many-arguments,too-many-locals
> # pylint: disable=too-many-arguments,too-many-locals,too-many-branches
> # pylint: disable=too-many-arguments,too-many-locals, too-many-statements
> # pylint: disable=too-many-boolean-expressions
> # pylint: disable=too-many-branches
> # pylint: disable=too-many-function-args
> # pylint: disable=too-many-instance-attributes
> # pylint: disable=too-many-instance-attributes, too-many-arguments
> # pylint:
> disable=too-many-instance-attributes,too-many-arguments,too-many-branches
> # pylint: disable=too-many-instance-attributes,too-many-locals
> # pylint: disable=too-many-instance-attributes,too-many-public-methods
> # pylint: disable=too-many-lines
> # pylint: disable=too-many-locals
> # pylint: disable=too-many-locals,too-many-arguments
> # pylint: disable=too-many-locals,too-many-arguments,invalid-name
> # pylint: disable=too-many-locals,too-many-arguments, too-many-branches
> # pylint: disable=too-many-locals,too-many-statements
> # pylint: disable=too-many-nested-blocks
> # pylint: disable=too-many-public-methods
> # pylint: disable=too-many-return-statements
> # pylint: disable=too-many-statements
> # pylint: disable=undefined-variable
> # pylint: disable=unexpected-keyword-arg
> # pylint: disable=ungrouped-imports
> # pylint: disable=unidiomatic-typecheck
> # pylint: disable=unnecessary-lambda
> # pylint: disable=unsubscriptable-object
> # pylint: disable=unsupported-membership-test
> # pylint: disable = unused-argument
> # pylint: disable=unused-argument
> # pylint: disable=unused-argument,invalid-name
> # pylint: disable=unused-argument,line-too-long
> # pylint: disable=unused-argument # pragma: no cover
> # pylint: disable=unused-argument,too-many-arguments,too-many-locals
> # pylint: disable=unused-argument, unused-variable
> # pylint: disable=unused-import
> # pylint: disable=unused-import,line-too-long
> # pylint: disable=unused-import # noqa
> # pylint: disable=unused-import # noqa: F401
> # pylint: disable=unused-import # noqa: F401
> # pylint: disable=unused-variable
> # pylint: disable=unused-variable # noqa
> # pylint: disable=using-constant-test
> # pylint: disable=W0104
> # pylint: disable=W0106
> # pylint: disable=W0108
> # pylint: disable=W0143
> # pylint: disable=W0201
> # pylint: disable=W0212
> # pylint: disable=W0612
> # pylint: disable=W0703
> # pylint: disable=wildcard-import
> # pylint: disable=wrong-import-order
> # pylint: disable=wrong-import-position
>
>
> On Thu, Jun 24, 2021 at 1:57 AM Tomasz Urbaszek <[email protected]> wrote:
> >
> > -0.5 from me. Black and flake8 does not guarantee the same quality and
> > consistency of code as pylint (for example using if list instead of if
> > len(list) > 0 ).
> >
> > > I can't remember the last time where pylint prevented any real error
> >
> > Well, isn't it a survivor bias (the one usually represented by this picture
> > of airplane)?
> >
> > Pylint is slow and sometimes brittle but I think it may help. What I would
> > consider is to keep pylint for providers - this code in particular is
> > created and changed by plenty of people with different backgrounds and
> > standards.
> >
> > Tomek
> >
> > On Wed, 23 Jun 2021 at 21:45, Jarek Potiuk <[email protected]> wrote:
> >>
> >> Just to be precise - the vote will end on Monday 28th at 8.30 PM CEST
> >> (to account for weekend) ...
> >>
> >> J.
> >>
> >> On Wed, Jun 23, 2021 at 9:29 PM Kaxil Naik <[email protected]> wrote:
> >> >
> >> > +1 -- Pylint is proving to be a headache and is very very slow locally
> >> > this days
> >> >
> >> > On Wed, Jun 23, 2021 at 8:02 PM Jarek Potiuk <[email protected]> wrote:
> >> >>
> >> >> Why not +10000 Ash :) ?
> >> >>
> >> >> On Wed, Jun 23, 2021 at 9:00 PM Andrew Godwin
> >> >> <[email protected]> wrote:
> >> >> >
> >> >> > I can't cast a binding vote on this, but I would also like to chime
> >> >> > in with support for this move. We have plenty of protection from
> >> >> > everything else, and while we could try to go through pylint and
> >> >> > disable every superfluous check, I'm not sure it's worth it.
> >> >> >
> >> >> > Andrew
> >> >> >
> >> >> > On Wed, Jun 23, 2021 at 12:49 PM Ash Berlin-Taylor <[email protected]>
> >> >> > wrote:
> >> >> >>
> >> >> >> Clearly I'm +7000 on this.
> >> >> >>
> >> >> >> On 23 June 2021 19:38:13 BST, Xinbin Huang <[email protected]>
> >> >> >> wrote:
> >> >> >>>
> >> >> >>> I would like to deprecate it too, so count +1 from me. One question
> >> >> >>> I have is: do we have any ways to detect and prevent cyclic imports?
> >> >> >>>
> >> >> >>> On Wed, Jun 23, 2021 at 11:30 AM Jarek Potiuk <[email protected]>
> >> >> >>> wrote:
> >> >> >>>>
> >> >> >>>> I think this subject has been raised a few times (last time by
> >> >> >>>> Ash).
> >> >> >>>> Finally I grew up to embrace it as well.
> >> >> >>>>
> >> >> >>>> I think I am also fed-up by random pylint errors. Last time
> >> >> >>>> https://github.com/apache/airflow/pull/15634/checks?check_run_id=2896761068
> >> >> >>>>
> >> >> >>>> We have many, many pylint exceptions all over our code. I can't
> >> >> >>>> remember the last time where pylint prevented any real error. As
> >> >> >>>> Ash
> >> >> >>>> (rightfully) mentioned in latest discussion on slack - we have
> >> >> >>>> mypy/flake/isort/black which report (and fix) vast majority of
> >> >> >>>> things
> >> >> >>>> pylint reports.
> >> >> >>>>
> >> >> >>>> I think this last error was the final drop for me.
> >> >> >>>>
> >> >> >>>> Should we remove pylint ?
> >> >> >>>>
> >> >> >>>> Consider it +1 from my side.
> >> >> >>>>
> >> >> >>>> J .
> >> >> >>>>
> >> >> >>>>
> >> >> >>>> --
> >> >> >>>> +48 660 796 129
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> +48 660 796 129
> >>
> >>
> >>
> >> --
> >> +48 660 796 129
>
>
>
> --
> +48 660 796 129
--
+48 660 796 129