diff options
author | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2014-11-15 17:26:12 +0200 |
---|---|---|
committer | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2014-11-15 17:26:12 +0200 |
commit | 542126d42404a8bd5b8ca1c9e734fc65419180f5 (patch) | |
tree | 8a3dd596fb75d4b269e34a30584c2c5c5c5594a5 | |
parent | 99ac3a90889b1cac74a80fa76141b9301eb8e90b (diff) | |
download | pylint-git-542126d42404a8bd5b8ca1c9e734fc65419180f5.tar.gz |
Add 'long-suffix' error, emitted when encountering the long suffix
on numbers.
This is sligthly different than lowercase-l-suffix, so it's a new
error instead of overwriting that one.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | checkers/python3.py | 22 | ||||
-rw-r--r-- | test/input/func_w0332_py_30.py | 2 | ||||
-rw-r--r-- | test/unittest_checker_python3.py | 15 |
4 files changed, 40 insertions, 2 deletions
@@ -169,6 +169,9 @@ ChangeLog for Pylint * 'abstract-class-instantiated' is also emitted for Python 2. It was previously disabled. + * Add 'long-suffix' error, emitted when encountering the long suffix + on numbers. + 2014-07-26 -- 1.3.0 diff --git a/checkers/python3.py b/checkers/python3.py index 899bb9b00..e8609a0f7 100644 --- a/checkers/python3.py +++ b/checkers/python3.py @@ -14,6 +14,8 @@ """Check Python 2 code for Python 2/3 source-compatible issues.""" from __future__ import absolute_import +import tokenize + import astroid from pylint import checkers, interfaces from pylint.checkers import utils @@ -345,5 +347,25 @@ class Python3Checker(checkers.BaseChecker): return True +class Python3TokenChecker(checkers.BaseTokenChecker): + __implements__ = interfaces.ITokenChecker + name = 'python3' + msgs = { + 'E1605': ('Use of long suffix', + 'long-suffix', + 'Used when "l" or "L" is used to mark a long integer. ' + 'This will not work in Python 3, since `int` and `long` ' + 'types have merged.', + {'maxversion': (3, 0)}), + } + + def process_tokens(self, tokens): + for (tok_type, token, start, _, _) in tokens: + if tok_type == tokenize.NUMBER and token.lower().endswith('l'): + # This has a different semantic than lowercase-l-suffix. + self.add_message('long-suffix', line=start[0]) + + def register(linter): linter.register_checker(Python3Checker(linter)) + linter.register_checker(Python3TokenChecker(linter)) diff --git a/test/input/func_w0332_py_30.py b/test/input/func_w0332_py_30.py index d6fed47f4..6a38e8c0d 100644 --- a/test/input/func_w0332_py_30.py +++ b/test/input/func_w0332_py_30.py @@ -1,4 +1,4 @@ """check use of l as long int marker """ - +# pylint: disable=long-suffix __revision__ = 1l diff --git a/test/unittest_checker_python3.py b/test/unittest_checker_python3.py index 75ed8a6cd..340470d3b 100644 --- a/test/unittest_checker_python3.py +++ b/test/unittest_checker_python3.py @@ -27,7 +27,6 @@ def python2_only(test): """Decorator for any tests that will fail under Python 3.""" return unittest.skipIf(sys.version_info[0] > 2, 'Python 2 only')(test) - # TODO(cpopa): Port these to the functional test framework instead. class Python3CheckerTest(testutils.CheckerTestCase): @@ -254,5 +253,19 @@ class Python3CheckerTest(testutils.CheckerTestCase): self.walk(node) +class Python3TokenCheckerTest(testutils.CheckerTestCase): + + CHECKER_CLASS = checker.Python3TokenChecker + + @python2_only + def test_long_suffix(self): + for code in ("1l", "1L"): + tokens = testutils.tokenize_str(code) + with self.assertAddsMessages( + testutils.Message('long-suffix', line=1)): + self.checker.process_tokens(tokens) + + if __name__ == '__main__': unittest.main() +
\ No newline at end of file |