summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Miller <millerdev@gmail.com>2017-11-11 07:14:23 -0500
committerClaudiu Popa <pcmanticore@gmail.com>2017-11-11 13:14:23 +0100
commitd2841e1d2fc9aae2cfcc74199f86dc4aa79beea3 (patch)
treed93d53a2115fa84e3baf67c7bc10b555a84a00d6
parentff45b2d06262be02274a959f9d6feda63bc9dd3a (diff)
downloadpylint-git-d2841e1d2fc9aae2cfcc74199f86dc4aa79beea3.tar.gz
Do not warn no-absolute-import multiple times per file (#1725)
-rw-r--r--CONTRIBUTORS.txt2
-rw-r--r--ChangeLog2
-rw-r--r--pylint/checkers/python3.py5
-rw-r--r--pylint/test/unittest_checker_python3.py10
4 files changed, 17 insertions, 2 deletions
diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt
index 8836bb82d..c0d2aa2a0 100644
--- a/CONTRIBUTORS.txt
+++ b/CONTRIBUTORS.txt
@@ -142,4 +142,6 @@ Order doesn't matter (not that much, at least ;)
* Guillaume Peillex: contributor.
+* Daniel Miller: contributor.
+
* Bryce Guinta: contributor
diff --git a/ChangeLog b/ChangeLog
index 59e966c6d..195d061e3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,8 @@ Pylint's ChangeLog
What's New in Pylint 1.8?
=========================
+ * Do not display no-absolute-import warning multiple times per file.
+
* `trailing-comma-tuple` refactor check now extends to assignment with
more than one element (such as lists)
diff --git a/pylint/checkers/python3.py b/pylint/checkers/python3.py
index fabcb7e48..8409e9ac0 100644
--- a/pylint/checkers/python3.py
+++ b/pylint/checkers/python3.py
@@ -650,6 +650,7 @@ class Python3Checker(checkers.BaseChecker):
if not self._future_absolute_import:
if self.linter.is_message_enabled('no-absolute-import'):
self.add_message('no-absolute-import', node=node)
+ self._future_absolute_import = True
if not _is_conditional_import(node) and not node.level:
self._warn_if_deprecated(node, node.modname, {x[0] for x in node.names})
@@ -660,7 +661,9 @@ class Python3Checker(checkers.BaseChecker):
def visit_import(self, node):
if not self._future_absolute_import:
- self.add_message('no-absolute-import', node=node)
+ if self.linter.is_message_enabled('no-absolute-import'):
+ self.add_message('no-absolute-import', node=node)
+ self._future_absolute_import = True
if not _is_conditional_import(node):
for name, _ in node.names:
self._warn_if_deprecated(node, name, None)
diff --git a/pylint/test/unittest_checker_python3.py b/pylint/test/unittest_checker_python3.py
index e5d6a9172..d24150de2 100644
--- a/pylint/test/unittest_checker_python3.py
+++ b/pylint/test/unittest_checker_python3.py
@@ -1,3 +1,4 @@
+# encoding: utf-8
# Copyright (c) 2014-2015 Brett Cannon <brett@python.org>
# Copyright (c) 2014-2016 Claudiu Popa <pcmanticore@gmail.com>
@@ -313,12 +314,18 @@ class TestPython3Checker(testutils.CheckerTestCase):
message = testutils.Message('no-absolute-import', node=node)
with self.assertAddsMessages(message):
self.checker.visit_import(node)
+ with self.assertNoMessages():
+ # message should only be added once
+ self.checker.visit_import(node)
def test_relative_from_import(self):
node = astroid.extract_node('from os import path #@')
message = testutils.Message('no-absolute-import', node=node)
with self.assertAddsMessages(message):
- self.checker.visit_import(node)
+ self.checker.visit_importfrom(node)
+ with self.assertNoMessages():
+ # message should only be added once
+ self.checker.visit_importfrom(node)
def test_absolute_import(self):
module_import = astroid.parse(
@@ -600,6 +607,7 @@ class TestPython3Checker(testutils.CheckerTestCase):
absolute_import_message = testutils.Message('no-absolute-import', node=node)
with self.assertAddsMessages(absolute_import_message):
self.checker.visit_importfrom(node)
+ self.checker._future_absolute_import = False
@python2_only
def test_bad_import_conditional(self):