diff options
author | Alain Leufroy <alain.leufroy@logilab.fr> | 2011-07-08 15:52:04 +0200 |
---|---|---|
committer | Alain Leufroy <alain.leufroy@logilab.fr> | 2011-07-08 15:52:04 +0200 |
commit | bc66f92a85219978eeae85afd560a4609390fb57 (patch) | |
tree | fff7a37e53bf1006410f2cbf1e073c5356748776 | |
parent | 67bbca5f8bb04314a981f27d25048d26b490e91c (diff) | |
download | pylint-git-bc66f92a85219978eeae85afd560a4609390fb57.tar.gz |
add regular expression support for generated-members (closes #69738)
proposed: by Bruno Clermont
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | checkers/typecheck.py | 20 | ||||
-rw-r--r-- | examples/pylintrc | 5 |
3 files changed, 22 insertions, 7 deletions
@@ -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] |