diff options
author | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-09-13 20:19:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-13 20:19:40 +0200 |
commit | 9ec8cb9c5deaafbd511898f89eebbe1f817b4e0a (patch) | |
tree | c3f6dbe7f6d4f22379c18b26785a8dadb522a2f0 | |
parent | a4ee38e2c4afdf42280086ae4b5ad2e622c0d976 (diff) | |
download | pylint-git-9ec8cb9c5deaafbd511898f89eebbe1f817b4e0a.tar.gz |
Fix bad node given to a message and false positive invalide format for ``__all__`` (#4953)
* Fix bad node being given as context for message
See https://github.com/PyCQA/pylint/issues/4711\#issuecomment-910020972
* Add a functional test for issue #4711
* Fix false positive invalid-all-format
Closes #4711
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | pylint/checkers/variables.py | 9 | ||||
-rw-r--r-- | tests/functional/i/invalid/invalid_all_format.txt | 2 | ||||
-rw-r--r-- | tests/functional/i/invalid/invalid_all_format_valid_5.py | 7 | ||||
-rw-r--r-- | tests/functional/i/invalid/invalid_all_format_valid_6.py | 7 |
5 files changed, 23 insertions, 6 deletions
@@ -83,6 +83,10 @@ Release date: TBA Closes #1375 Closes #330 +* Fix false positives for invalid-all-format that are lists or tuples at runtime + + Closes #4711 + * Fix ``no-self-use`` and ``docparams extension`` for async functions and methods. * Add documentation for ``pyreverse`` and ``symilar`` diff --git a/pylint/checkers/variables.py b/pylint/checkers/variables.py index 411e016f5..307a05feb 100644 --- a/pylint/checkers/variables.py +++ b/pylint/checkers/variables.py @@ -2013,15 +2013,14 @@ class VariablesChecker(BaseChecker): return module return None - def _check_all(self, node, not_consumed): + def _check_all(self, node: nodes.Module, not_consumed): assigned = next(node.igetattr("__all__")) if assigned is astroid.Uninferable: return - - if not isinstance(assigned, (nodes.Tuple, nodes.List, list, tuple)): - self.add_message("invalid-all-format", node=assigned) + if not assigned.pytype() in ["builtins.list", "builtins.tuple"]: + line, col = assigned.tolineno, assigned.col_offset + self.add_message("invalid-all-format", line=line, col_offset=col, node=node) return - for elt in getattr(assigned, "elts", ()): try: elt_name = next(elt.infer()) diff --git a/tests/functional/i/invalid/invalid_all_format.txt b/tests/functional/i/invalid/invalid_all_format.txt index 75c6fe0a7..f10297d4e 100644 --- a/tests/functional/i/invalid/invalid_all_format.txt +++ b/tests/functional/i/invalid/invalid_all_format.txt @@ -1 +1 @@ -invalid-all-format:5:11::Invalid format for __all__, must be tuple or list +invalid-all-format:5:11::Invalid format for __all__, must be tuple or list:HIGH diff --git a/tests/functional/i/invalid/invalid_all_format_valid_5.py b/tests/functional/i/invalid/invalid_all_format_valid_5.py new file mode 100644 index 000000000..aa0e4dbf3 --- /dev/null +++ b/tests/functional/i/invalid/invalid_all_format_valid_5.py @@ -0,0 +1,7 @@ +"""Test valid __all__ format.""" + +# pylint: disable=import-error, unused-import + +from foo import bar + +__all__ = list(globals().keys()) diff --git a/tests/functional/i/invalid/invalid_all_format_valid_6.py b/tests/functional/i/invalid/invalid_all_format_valid_6.py new file mode 100644 index 000000000..64ac46bb7 --- /dev/null +++ b/tests/functional/i/invalid/invalid_all_format_valid_6.py @@ -0,0 +1,7 @@ +"""Test valid __all__ format.""" + +# pylint: disable=import-error, unused-import + +from foo import bar + +__all__ = tuple(globals().keys()) |