mirror of
https://fuchsia.googlesource.com/third_party/github.com/pylint-dev/pylint
synced 2024-09-21 16:19:21 +00:00
40a9d665dd
We got a lot of complaints about redefined-variable-type having multiple false positives and not being reliable enough for a core checker. The fact that it doesn't take into account duck typing makes it way to noisy when dealing with large code bases. Since it would take some time until these concerns will be fixed, the checker becomes an extension and can be later upgraded to a core one.
59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""Tests for the pylint checker in :mod:`pylint.extensions.check_elif
|
|
"""
|
|
|
|
import os
|
|
import os.path as osp
|
|
import unittest
|
|
|
|
from pylint import checkers
|
|
from pylint.extensions.check_reassign import MultipleTypesChecker
|
|
from pylint.lint import PyLinter
|
|
from pylint.reporters import BaseReporter
|
|
|
|
|
|
class TestReporter(BaseReporter):
|
|
|
|
def handle_message(self, msg):
|
|
self.messages.append(msg)
|
|
|
|
def on_set_current_module(self, module, filepath):
|
|
self.messages = []
|
|
|
|
|
|
class CheckElseIfUsedTC(unittest.TestCase):
|
|
|
|
expected = [
|
|
'Redefinition of self.var1 type from int to float',
|
|
'Redefinition of var type from int to str',
|
|
'Redefinition of myint type from int to bool',
|
|
'Redefinition of _OK type from bool to str',
|
|
'Redefinition of instance type from redefined.MyClass to bool',
|
|
'Redefinition of SOME_FLOAT type from float to int',
|
|
'Redefinition of var3 type from str to int',
|
|
'Redefinition of var type from bool to int',
|
|
'Redefinition of var4 type from float to str',
|
|
]
|
|
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls._linter = PyLinter()
|
|
cls._linter.set_reporter(TestReporter())
|
|
checkers.initialize(cls._linter)
|
|
cls._linter.register_checker(MultipleTypesChecker(cls._linter))
|
|
cls._linter.disable('I')
|
|
|
|
def test_types_redefined(self):
|
|
elif_test = osp.join(osp.dirname(osp.abspath(__file__)), 'data',
|
|
'redefined.py')
|
|
self._linter.check([elif_test])
|
|
msgs = sorted(self._linter.reporter.messages, key=lambda item: item.line)
|
|
self.assertEqual(len(msgs), 9)
|
|
for msg, expected in zip(msgs, self.expected):
|
|
self.assertEqual(msg.symbol, 'redefined-variable-type')
|
|
self.assertEqual(msg.msg, expected)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|