summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlain Leufroy <alain.leufroy@logilab.fr>2011-07-08 15:52:04 +0200
committerAlain Leufroy <alain.leufroy@logilab.fr>2011-07-08 15:52:04 +0200
commitbc66f92a85219978eeae85afd560a4609390fb57 (patch)
treefff7a37e53bf1006410f2cbf1e073c5356748776
parent67bbca5f8bb04314a981f27d25048d26b490e91c (diff)
downloadpylint-git-bc66f92a85219978eeae85afd560a4609390fb57.tar.gz
add regular expression support for generated-members (closes #69738)
proposed: by Bruno Clermont
-rw-r--r--ChangeLog4
-rw-r--r--checkers/typecheck.py20
-rw-r--r--examples/pylintrc5
3 files changed, 22 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 01301fc03..e5f496053 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,9 @@
ChangeLog for PyLint
====================
- --
+
+ * #69738: add regular expressions support for "generated-members"
+
* ids of logging and string_format checkers have been changed:
logging: 65 -> 12, string_format: 99 -> 13
Also add documentation to say that ids of range 1-50 shall be reserved
diff --git a/checkers/typecheck.py b/checkers/typecheck.py
index eec538d80..8f00ca2bb 100644
--- a/checkers/typecheck.py
+++ b/checkers/typecheck.py
@@ -16,6 +16,9 @@
"""try to find more bugs in the code using astng inference capabilities
"""
+import re
+import shlex
+
from logilab import astng
from logilab.astng import InferenceError, NotFoundError, YES, Instance
@@ -92,11 +95,11 @@ of Zope acquired attributes to generated-members.'}
('generated-members',
{'default' : (
'REQUEST', 'acl_users', 'aq_parent'),
- 'type' : 'csv',
+ 'type' : 'string',
'metavar' : '<members names>',
'help' : 'List of members which are set dynamically and \
missed by pylint inference system, and so shouldn\'t trigger E0201 when \
-accessed.'}
+accessed. Python regular expressions are accepted.'}
),
)
@@ -122,9 +125,18 @@ accessed.'}
function/method, super call and metaclasses are ignored
"""
- if node.attrname in self.generated_members:
+ # generated_members may containt regular expressions
+ # (surrounded by quote `"` and followed by a comma `,`)
+ # REQUEST,aq_parent,"[a-zA-Z]+_set{1,2}"' =>
+ # ('REQUEST', 'aq_parent', '[a-zA-Z]+_set{1,2}')
+ if isinstance(self.config.generated_members, str):
+ gen = shlex.shlex(self.config.generated_members)
+ gen.whitespace += ','
+ self.config.generated_members = tuple(tok.strip('"') for tok in gen)
+ for pattern in self.config.generated_members:
# attribute is marked as generated, stop here
- return
+ if re.match(pattern, node.attrname):
+ return
try:
infered = list(node.expr.infer())
except InferenceError:
diff --git a/examples/pylintrc b/examples/pylintrc
index a5b864156..046e133b0 100644
--- a/examples/pylintrc
+++ b/examples/pylintrc
@@ -113,8 +113,9 @@ ignored-classes=SQLObject
zope=no
# List of members which are set dynamically and missed by pylint inference
-# system, and so shouldn't trigger E0201 when accessed.
-generated-members=REQUEST,acl_users,aq_parent
+# system, and so shouldn't trigger E0201 when accessed. Note that regular
+# expressions are accepted (surrounded by quote `"` and followed by a comma `,`)
+generated-members=REQUEST,acl_users,aq_parent,"[a-zA-Z]+_set{1,2}",
[BASIC]