diff options
author | tmarek <tmarek@google.com> | 2013-01-08 19:26:13 +0100 |
---|---|---|
committer | tmarek <tmarek@google.com> | 2013-01-08 19:26:13 +0100 |
commit | d9cf9d13e239a2b19b1dc485863705f0b8d328ae (patch) | |
tree | 2536cc525f6e9df79c9aecb1e99ec80e773056dc /checkers/variables.py | |
parent | 7e2cbf9efb14df4e4a5178522bb5c9476b892a1c (diff) | |
download | pylint-stable.tar.gz |
Fixed a couple of bugs in the __all__ handling and added a newstable
warning about non-string objects in __all__.
Closes #112698
Diffstat (limited to 'checkers/variables.py')
-rw-r--r-- | checkers/variables.py | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/checkers/variables.py b/checkers/variables.py index 01ea6f8..d094e6c 100644 --- a/checkers/variables.py +++ b/checkers/variables.py @@ -172,14 +172,22 @@ builtins. Remember that you should avoid to define new builtins when possible.' # attempt to check for __all__ if defined if '__all__' in node.locals: assigned = node.igetattr('__all__').next() - for elt in getattr(assigned, 'elts', ()): - elt_name = elt.value - # If elt is in not_consumed, remove it from not_consumed - if elt_name in not_consumed: - del not_consumed[elt_name] - continue - if elt_name not in node.locals: - self.add_message('E0603', args=elt_name, node=elt) + if assigned is not astng.YES: + for elt in getattr(assigned, 'elts', ()): + try: + elt_name = elt.infer().next() + except astng.InferenceError: + continue + + if not isinstance(elt_name, astng.Const): + continue + elt_name = elt.value + # If elt is in not_consumed, remove it from not_consumed + if elt_name in not_consumed: + del not_consumed[elt_name] + continue + if elt_name not in node.locals: + self.add_message('E0603', args=elt_name, node=elt) # don't check unused imports in __init__ files if not self.config.init_import and node.package: return |