1[MASTER]
2ignore=
3	src/python/grpcio_tests/tests/unit/beta,
4	src/python/grpcio_tests/tests/unit/framework,
5	src/python/grpcio_tests/tests/unit/framework/common,
6	src/python/grpcio_tests/tests/unit/framework/foundation,
7
8[VARIABLES]
9
10# TODO(https://github.com/PyCQA/pylint/issues/1345): How does the inspection
11# not include "unused_" and "ignored_" by default?
12dummy-variables-rgx=^ignored_|^unused_
13
14[DESIGN]
15
16# NOTE(nathaniel): Not particularly attached to this value; it just seems to
17# be what works for us at the moment (excepting the dead-code-walking Beta
18# API).
19max-args=6
20
21[MISCELLANEOUS]
22
23# NOTE(nathaniel): We are big fans of "TODO(<issue link>): " and
24# "NOTE(<username or issue link>): ". We do not allow "TODO:",
25# "TODO(<username>):", "FIXME:", or anything else.
26notes=FIXME,XXX
27
28[MESSAGES CONTROL]
29
30extension-pkg-whitelist=grpc._cython.cygrpc
31
32disable=
33	# These suppressions are specific to tests:
34	#
35	# TODO(https://github.com/grpc/grpc/issues/261): investigate
36	# each of the following one by one and consider eliminating
37	# the suppression category.
38	# Eventually, the hope is to eliminate the .pylintrc-tests
39	# altogether and rely on .pylintrc for everything.
40	pointless-statement,
41	no-member,
42	no-self-use,
43	attribute-defined-outside-init,
44	unused-argument,
45	unused-variable,
46	unused-import,
47	redefined-builtin,
48	too-many-public-methods,
49	too-many-locals,
50	redefined-variable-type,
51	redefined-outer-name,
52	ungrouped-imports,
53	too-many-branches,
54	too-many-arguments,
55	too-many-format-args,
56	too-many-return-statements,
57	too-many-statements,
58	line-too-long,
59	wrong-import-position,
60	wrong-import-order,
61	# -- END OF TEST-SPECIFIC SUPPRESSIONS --
62
63
64	# TODO(https://github.com/PyCQA/pylint/issues/59#issuecomment-283774279):
65	# Enable cyclic-import after a 1.7-or-later pylint release that
66	# recognizes our disable=cyclic-import suppressions.
67	cyclic-import,
68	# TODO(https://github.com/grpc/grpc/issues/8622): Enable this after the
69	# Beta API is removed.
70	duplicate-code,
71	# TODO(https://github.com/grpc/grpc/issues/261): Doesn't seem to
72	# understand enum and concurrent.futures; look into this later with the
73	# latest pylint version.
74	import-error,
75	# TODO(https://github.com/grpc/grpc/issues/261): Enable this one.
76	# Should take a little configuration but not much.
77	invalid-name,
78	# TODO(https://github.com/grpc/grpc/issues/261): This doesn't seem to
79	# work for now? Try with a later pylint?
80	locally-disabled,
81	# NOTE(nathaniel): What even is this? *Enabling* an inspection results
82	# in a warning? How does that encourage more analysis and coverage?
83	locally-enabled,
84	# NOTE(nathaniel): We don't write doc strings for most private code
85	# elements.
86	missing-docstring,
87	# NOTE(nathaniel): In numeric comparisons it is better to have the
88	# lesser (or lesser-or-equal-to) quantity on the left when the
89	# expression is true than it is to worry about which is an identifier
90	# and which a literal value.
91	misplaced-comparison-constant,
92	# NOTE(nathaniel): Our completely abstract interface classes don't have
93	# constructors.
94	no-init,
95	# TODO(https://github.com/grpc/grpc/issues/261): Doesn't yet play
96	# nicely with some of our code being implemented in Cython. Maybe in a
97	# later version?
98	no-name-in-module,
99	# TODO(https://github.com/grpc/grpc/issues/261): Suppress these where
100	# the odd shape of the authentication portion of the API forces them on
101	# us and enable everywhere else.
102	protected-access,
103	# NOTE(nathaniel): Pylint and I will probably never agree on this.
104	too-few-public-methods,
105	# NOTE(nathaniel): Pylint and I wil probably never agree on this for
106	# private classes. For public classes maybe?
107	too-many-instance-attributes,
108	# NOTE(nathaniel): Some of our modules have a lot of lines... of
109	# specification and documentation. Maybe if this were
110	# lines-of-code-based we would use it.
111	too-many-lines,
112	# TODO(https://github.com/grpc/grpc/issues/261): Maybe we could have
113	# this one if we extracted just a few more helper functions...
114	too-many-nested-blocks,
115	# TODO(https://github.com/grpc/grpc/issues/261): Disable unnecessary
116	# super-init requirement for abstract class implementations for now.
117	super-init-not-called,
118	# NOTE(nathaniel): A single statement that always returns program
119	# control is better than two statements the first of which sometimes
120	# returns program control and the second of which always returns
121	# program control. Probably generally, but definitely in the cases of
122	# if:/else: and for:/else:.
123	useless-else-on-loop,
124	no-else-return,
125	# NOTE(lidiz): Python 3 make object inheritance default, but not PY2
126	useless-object-inheritance,
127