summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2015-09-20 19:20:53 +0000
committerClaudiu Popa <pcmanticore@gmail.com>2015-09-20 19:20:53 +0000
commit948d0d9915641b337a9dffd7dec4fcebf8e13c6e (patch)
tree4507cb3beff6021fc92d8758825976292f3114de
parentc3d27a83565e81aef5e358e2588bf6cd22b05650 (diff)
parent102de0163c7c5e85059bc17db9c64a9c13939ad3 (diff)
downloadpylint-948d0d9915641b337a9dffd7dec4fcebf8e13c6e.tar.gz
Merge heads
-rw-r--r--CONTRIBUTORS.txt2
-rw-r--r--pylint/checkers/stdlib.py132
-rw-r--r--pylint/test/functional/deprecated_methods_py2.py9
-rw-r--r--pylint/test/functional/deprecated_methods_py2.rc2
-rw-r--r--pylint/test/functional/deprecated_methods_py2.txt4
-rw-r--r--pylint/test/functional/deprecated_methods_py3.py15
-rw-r--r--pylint/test/functional/deprecated_methods_py3.rc2
-rw-r--r--pylint/test/functional/deprecated_methods_py3.txt3
-rw-r--r--pylint/test/functional/duplicate_dict_literal_key.py2
-rw-r--r--pylint/test/functional/logging_not_lazy.py8
-rw-r--r--pylint/test/unittest_checker_stdlib.py122
11 files changed, 125 insertions, 176 deletions
diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt
index ac8800d..e88762a 100644
--- a/CONTRIBUTORS.txt
+++ b/CONTRIBUTORS.txt
@@ -66,3 +66,5 @@ Order doesn't matter (not that much, at least ;)
Maarten ter Huurne, Mirko Friedenhagen and all the Logilab's team (among others):
bug reports, feedback, feature requests... Many other people have contributed
by their feedback or even patches, if I've forgotten you, send me a note !
+
+* Cezar Elnazli: deprecated-method
diff --git a/pylint/checkers/stdlib.py b/pylint/checkers/stdlib.py
index 52251c5..aa4dab1 100644
--- a/pylint/checkers/stdlib.py
+++ b/pylint/checkers/stdlib.py
@@ -27,7 +27,8 @@ from pylint.checkers import BaseChecker
from pylint.checkers import utils
-TYPECHECK_COMPARISON_OPERATORS = frozenset(('is', 'is not', '==', '!=', 'in', 'not in'))
+TYPECHECK_COMPARISON_OPERATORS = frozenset(('is', 'is not', '==',
+ '!=', 'in', 'not in'))
LITERAL_NODE_TYPES = (astroid.Const, astroid.Dict, astroid.List, astroid.Set)
if sys.version_info >= (3, 0):
@@ -125,52 +126,76 @@ class StdlibChecker(BaseChecker):
'alternative in the documentation.'),
}
- options = (('deprecated-methods',
- {'default': (
- 'asyncio.tasks.async',
- 'base64.encodestring', 'base64.decodestring',
- 'cgi.parse_qs', 'cgi.parse_qsl', 'cgi.escape',
- 'configparser.RawConfigParser.readfp',
- 'ctypes.c_buffer',
- 'distutils.command.register.register.check_metadata',
- 'distutils.command.sdist.sdist.check_metadata',
- 'fractions.gcd',
- 'html.unescape',
- 'importlib.find_loader',
- 'inspect.getmoduleinfo', 'inspect.getargspec',
- 'inspect.Signature.from_function',
- 'inspect.Signature.from_builtin',
- 'logging.warn', 'logging.Logger.warn',
- 'logging.LoggerAdapter.warn',
- 'nntplib._NNTPBase.xgtitle', 'nntplib._NNTPBase.xpath',
- 'ntpath.splitunc',
- 'platform.linux_distribution', 'platform.dist',
- 'platform.popen',
- 'plistlib.readPlist', 'plistlib.writePlist',
- 'plistlib.readPlistFromBytes',
- 'plistlib.writePlistToBytes',
- 'sre_parse.isident', 'sre_parse.isdigit',
- 'sre_parse.isname',
- 'tarfile.filemode',
- 'tkinter.Misc.tk_menuBar',
- 'tkinter.Menu.tk_bindForTraversal',
- 'trace.usage', 'trace.modname', 'trace.fullmodname',
- 'trace.find_lines_from_code', 'trace.find_lines',
- 'trace.find_strings', 'trace.find_executable_linenos',
- 'unittest.case.TestCase._deprecate.deprecated_func',
- 'unittest.case.TestCase.assertEquals',
- 'unittest.case.TestCase.assertNotEquals',
- 'unittest.case.TestCase.assertAlmostEquals',
- 'unittest.case.TestCase.assertNotAlmostEquals',
- 'unittest.case.TestCase.assert_',
- 'xml.etree.Element.getchildren',
- 'xml.etree.Element.getiterator',
- 'xml.etree.XMLParser.getiterator',
- 'xml.etree.XMLParser.doctype',
- ), 'type': 'csv', 'metavar': '<names>',
- 'help': 'Methods considered deprecated'}
- ),
- )
+ deprecated = {
+ 0: [
+ 'cgi.parse_qs', 'cgi.parse_qsl',
+ 'ctypes.c_buffer',
+ 'distutils.command.register.register.check_metadata',
+ 'distutils.command.sdist.sdist.check_metadata',
+ 'tkinter.Misc.tk_menuBar',
+ 'tkinter.Menu.tk_bindForTraversal',
+ ],
+ 2: {
+ (2, 6): [
+ 'commands.getstatus',
+ 'os.popen2',
+ 'os.popen3',
+ 'os.popen4',
+ 'macostools.touched',
+ ],
+ (2, 7): [
+ 'unittest.case.TestCase.assertEquals',
+ 'unittest.case.TestCase.assertNotEquals',
+ 'unittest.case.TestCase.assertAlmostEquals',
+ 'unittest.case.TestCase.assertNotAlmostEquals',
+ 'unittest.case.TestCase.assert_',
+ 'xml.etree.ElementTree.Element.getchildren',
+ 'xml.etree.ElementTree.Element.getiterator',
+ 'xml.etree.ElementTree.XMLParser.getiterator',
+ 'xml.etree.ElementTree.XMLParser.doctype',
+ ],
+ },
+ 3: {
+ (3, 0): [
+ 'inspect.getargspec',
+ 'unittest.case.TestCase._deprecate.deprecated_func',
+ ],
+ (3, 1): [
+ 'base64.encodestring', 'base64.decodestring',
+ 'ntpath.splitunc',
+ ],
+ (3, 2): [
+ 'cgi.escape',
+ 'configparser.RawConfigParser.readfp',
+ 'xml.etree.ElementTree.Element.getchildren',
+ 'xml.etree.ElementTree.Element.getiterator',
+ 'xml.etree.ElementTree.XMLParser.getiterator',
+ 'xml.etree.ElementTree.XMLParser.doctype',
+ ],
+ (3, 3): [
+ 'inspect.getmoduleinfo', 'inspect.getmodulename',
+ 'logging.warn', 'logging.Logger.warn',
+ 'logging.LoggerAdapter.warn',
+ 'nntplib.NNTPBase.xpath',
+ 'platform.popen',
+ ],
+ (3, 4): [
+ 'asyncio.tasks.async',
+ 'importlib.find_loader',
+ 'plistlib.readPlist', 'plistlib.writePlist',
+ 'plistlib.readPlistFromBytes',
+ 'plistlib.writePlistToBytes',
+ 'xml.etree.ElementTree.iterparse',
+ ],
+ (3, 5): [
+ 'fractions.gcd',
+ 'inspect.getfullargspec', 'inspect.getargvalues',
+ 'inspect.formatargspec', 'inspect.formatargvalues',
+ 'inspect.getcallargs',
+ 'platform.linux_distribution', 'platform.dist',
+ ],
+ },
+ }
@utils.check_messages('bad-open-mode', 'redundant-unittest-assert',
'deprecated-method')
@@ -213,9 +238,18 @@ class StdlibChecker(BaseChecker):
self._check_type_x_is_y(node, left, operator, right)
def _check_deprecated_method(self, node, infer):
- if infer.qname() in self.config.deprecated_methods:
+ py_vers = sys.version_info[0]
+ qname = infer.qname()
+
+ if qname in self.deprecated[0]:
self.add_message('deprecated-method', node=node,
- args=(infer.name, ))
+ args=(node.func.attrname, ))
+ else:
+ for since_vers, func_list in self.deprecated[py_vers].items():
+ if since_vers < sys.version_info and qname in func_list:
+ self.add_message('deprecated-method', node=node,
+ args=(node.func.attrname, ))
+ break
def _check_redundant_assert(self, node, infer):
if (isinstance(infer, astroid.BoundMethod) and
diff --git a/pylint/test/functional/deprecated_methods_py2.py b/pylint/test/functional/deprecated_methods_py2.py
new file mode 100644
index 0000000..3b3d25a
--- /dev/null
+++ b/pylint/test/functional/deprecated_methods_py2.py
@@ -0,0 +1,9 @@
+""" Functional test for deprecated methods in Python 2 """
+# pylint: disable=no-member
+import os
+import xml.etree.ElementTree
+
+os.popen2() # [deprecated-method]
+os.popen3() # [deprecated-method]
+os.popen4() # [deprecated-method]
+xml.etree.ElementTree.Element('elem').getchildren() # [deprecated-method]
diff --git a/pylint/test/functional/deprecated_methods_py2.rc b/pylint/test/functional/deprecated_methods_py2.rc
new file mode 100644
index 0000000..a650233
--- /dev/null
+++ b/pylint/test/functional/deprecated_methods_py2.rc
@@ -0,0 +1,2 @@
+[testoptions]
+max_pyver=3.0
diff --git a/pylint/test/functional/deprecated_methods_py2.txt b/pylint/test/functional/deprecated_methods_py2.txt
new file mode 100644
index 0000000..226e8d3
--- /dev/null
+++ b/pylint/test/functional/deprecated_methods_py2.txt
@@ -0,0 +1,4 @@
+deprecated-method:5::Using deprecated method popen2()
+deprecated-method:6::Using deprecated method popen3()
+deprecated-method:7::Using deprecated method popen4()
+deprecated-method:8::Using deprecated method getchildren()
diff --git a/pylint/test/functional/deprecated_methods_py3.py b/pylint/test/functional/deprecated_methods_py3.py
new file mode 100644
index 0000000..1a5fbf0
--- /dev/null
+++ b/pylint/test/functional/deprecated_methods_py3.py
@@ -0,0 +1,15 @@
+""" Functional tests for method deprecation. """
+# pylint: disable=missing-docstring
+import unittest
+import distutils
+import xml.etree.ElementTree
+
+
+class MyTest(unittest.TestCase):
+ def test(self):
+ self.assert_(True) # [deprecated-method]
+
+REG = distutils.command.register.register('a')
+REG.check_metadata() # [deprecated-method]
+
+xml.etree.ElementTree.Element('tag').getchildren() # [deprecated-method]
diff --git a/pylint/test/functional/deprecated_methods_py3.rc b/pylint/test/functional/deprecated_methods_py3.rc
new file mode 100644
index 0000000..c093be2
--- /dev/null
+++ b/pylint/test/functional/deprecated_methods_py3.rc
@@ -0,0 +1,2 @@
+[testoptions]
+min_pyver=3.0
diff --git a/pylint/test/functional/deprecated_methods_py3.txt b/pylint/test/functional/deprecated_methods_py3.txt
new file mode 100644
index 0000000..8e9516c
--- /dev/null
+++ b/pylint/test/functional/deprecated_methods_py3.txt
@@ -0,0 +1,3 @@
+deprecated-method:10:MyTest.test:Using deprecated method assert_()
+deprecated-method:13::Using deprecated method check_metadata()
+deprecated-method:15::Using deprecated method getchildren()
diff --git a/pylint/test/functional/duplicate_dict_literal_key.py b/pylint/test/functional/duplicate_dict_literal_key.py
index f74e10e..3fae8b7 100644
--- a/pylint/test/functional/duplicate_dict_literal_key.py
+++ b/pylint/test/functional/duplicate_dict_literal_key.py
@@ -1,5 +1,5 @@
"""Check multiple key definition"""
-#pylint: disable=C0103
+# pylint: disable=C0103
correct_dict = {
'tea': 'for two',
diff --git a/pylint/test/functional/logging_not_lazy.py b/pylint/test/functional/logging_not_lazy.py
index ccc8665..b843431 100644
--- a/pylint/test/functional/logging_not_lazy.py
+++ b/pylint/test/functional/logging_not_lazy.py
@@ -1,13 +1,13 @@
-# pylint: disable=missing-docstring,no-member
+# pylint: disable=missing-docstring,no-member,deprecated-method
# Muck up the names in an effort to confuse...
import logging as renamed_logging
import os as logging
# Statements that should be flagged:
-renamed_logging.warn('%s, %s' % (4, 5)) # [logging-not-lazy]
-renamed_logging.exception('%s' % 'Exceptional!') # [logging-not-lazy]
-renamed_logging.log(renamed_logging.INFO, 'msg: %s' % 'Run!') # [logging-not-lazy]
+renamed_logging.warn('%s, %s' % (4, 5)) # [logging-not-lazy]
+renamed_logging.exception('%s' % 'Exceptional!') # [logging-not-lazy]
+renamed_logging.log(renamed_logging.INFO, 'msg: %s' % 'Run!') # [logging-not-lazy]
# Statements that should not be flagged:
renamed_logging.warn('%s, %s', 4, 5)
diff --git a/pylint/test/unittest_checker_stdlib.py b/pylint/test/unittest_checker_stdlib.py
deleted file mode 100644
index b8bed76..0000000
--- a/pylint/test/unittest_checker_stdlib.py
+++ /dev/null
@@ -1,122 +0,0 @@
-"""Unit tests for the imports checker."""
-import unittest
-
-from astroid import test_utils
-from pylint.checkers import stdlib
-from pylint.testutils import CheckerTestCase, Message
-
-
-class StdlibCheckerTC(CheckerTestCase):
-
- CHECKER_CLASS = stdlib.StdlibChecker
-
- def test_asyncio_deprecated(self):
- """
- `asyncio.async` is deprecated.
- """
- node = test_utils.extract_node("""
- import asyncio
- asyncio.async()
- """)
- msg = Message(msg_id='deprecated-method', node=node,
- args=('async', ))
- with self.assertAddsMessages(msg):
- self.checker.visit_call(node)
-
- def test_base64_deprecated(self):
- """
- `base64.encodestring` and `base64.decodestring` are deprecated.
- """
- node = test_utils.extract_node("""
- import base64
- base64.encodestring('a')
- """)
- msg = Message(msg_id='deprecated-method', node=node,
- args=('encodestring', ))
- with self.assertAddsMessages(msg):
- self.checker.visit_call(node)
-
- node = test_utils.extract_node("""
- import base64
- base64.decodestring('a')
- """)
- msg = Message(msg_id='deprecated-method', node=node,
- args=('decodestring', ))
- with self.assertAddsMessages(msg):
- self.checker.visit_call(node)
-
- def test_cgi_deprecated(self):
- """
- All deprecated methods in package `cgi`
- """
-
- node = test_utils.extract_node("""
- from cgi import parse_qs
- parse_qs()
- """)
- msg = Message(msg_id='deprecated-method', node=node,
- args=('parse_qs', ))
- with self.assertAddsMessages(msg):
- self.checker.visit_call(node)
-
- node = test_utils.extract_node("""
- import cgi
- cgi.parse_qsl()
- """)
- msg = Message(msg_id='deprecated-method', node=node,
- args=('parse_qsl', ))
- with self.assertAddsMessages(msg):
- self.checker.visit_call(node)
-
- node = test_utils.extract_node("""
- from cgi import escape
- escape()
- """)
- msg = Message(msg_id='deprecated-method', node=node,
- args=('escape', ))
- with self.assertAddsMessages(msg):
- self.checker.visit_call(node)
-
- def test_unittest_deprecated(self):
- """
- Deprecated methods in package `unittest`
- """
- node = test_utils.extract_node("""
- import unittest
- class TestMe(unittest.TestCase):
- def test(self):
- self.failIf(True)
- """)
- msg = Message(msg_id='deprecated-method', node=node,
- args=('failIf', ))
- with self.assertAddsMessages(msg):
- self.checker.visit_call(node)
-
- def test_html_deprecated(self):
- """
- `html` deprecation
- """
- node = test_utils.extract_node("""
- import html.parser
- html.parser.unescape('a')
- """)
- msg = Message(msg_id='deprecated-method', node=node,
- args=('unescape', ))
- with self.assertAddsMessages(msg):
- self.checker.visit_call(node)
-
- def test_distutils_deprecated(self):
- """
- `distutil` deprecation
- """
- node = test_utils.extract_node("""
- import distutils
- distutils.command.register.register('a').check_metadata()
- """)
- msg = Message(msg_id='deprecated-method', node=node,
- args=('check_metadata', ))
- with self.assertAddsMessages(msg):
- self.checker.visit_call(node)
-
-if __name__ == '__main__':
- unittest.main()