diff options
author | Claudiu Popa <pcmanticore@gmail.com> | 2014-08-24 22:03:35 +0300 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2014-08-24 22:03:35 +0300 |
commit | 6d19e33ba6eb634e22800effe91c110e58cd3852 (patch) | |
tree | 2c5a1355e30853b70759e5dfde8b8148b8783676 | |
parent | e5b8874b8e1075d77528490383794cae13814d5a (diff) | |
download | pylint-git-6d19e33ba6eb634e22800effe91c110e58cd3852.tar.gz |
Other backports from default.
--HG--
branch : pylint-1.3
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | checkers/classes.py | 6 | ||||
-rw-r--r-- | checkers/misc.py | 11 |
3 files changed, 18 insertions, 2 deletions
@@ -27,6 +27,9 @@ ChangeLog for Pylint Closes issue #311. * Fix a crash encountered when looking for attribute docstrings. + + * Fix a crash which ocurred while checking for 'method-hidden', + when the parent frame was something different than a function. 2014-07-26 -- 1.3.0 diff --git a/checkers/classes.py b/checkers/classes.py index 61769f24d..232e130b8 100644 --- a/checkers/classes.py +++ b/checkers/classes.py @@ -344,9 +344,11 @@ a metaclass class method.'} try: overridden = klass.instance_attr(node.name)[0] # XXX overridden_frame = overridden.frame() - if overridden_frame.type == 'method': + if (isinstance(overridden_frame, astroid.Function) + and overridden_frame.type == 'method'): overridden_frame = overridden_frame.parent.frame() - if isinstance(overridden_frame, Class) and klass._is_subtype_of(overridden_frame.qname()): + if (isinstance(overridden_frame, Class) + and klass._is_subtype_of(overridden_frame.qname())): args = (overridden.root().name, overridden.fromlineno) self.add_message('method-hidden', args=args, node=node) except astroid.NotFoundError: diff --git a/checkers/misc.py b/checkers/misc.py index b53f88219..b27b86ae6 100644 --- a/checkers/misc.py +++ b/checkers/misc.py @@ -54,6 +54,17 @@ class EncodingChecker(BaseChecker): 'separated by a comma.')}),) def _check_note(self, notes, lineno, line): + # First, simply check if the notes are in the line at all. This is an + # optimisation to prevent using the regular expression on every line, + # but rather only on lines which may actually contain one of the notes. + # This prevents a pathological problem with lines that are hundreds + # of thousands of characters long. + for note in self.config.notes: + if note in line: + break + else: + return + match = notes.search(line) if not match: return |