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