diff --git a/pylint/checkers/base_checker.py b/pylint/checkers/base_checker.py index 5c3d52909..809694398 100644 --- a/pylint/checkers/base_checker.py +++ b/pylint/checkers/base_checker.py @@ -14,9 +14,10 @@ from typing import Any from pylint.config import OptionsProviderMixIn +from pylint.constants import WarningScope from pylint.exceptions import InvalidMessageError -from pylint.interfaces import UNDEFINED -from pylint.message import build_message_definition +from pylint.interfaces import UNDEFINED, IRawChecker, ITokenChecker, implements +from pylint.message.message_definition import MessageDefinition class BaseChecker(OptionsProviderMixIn): @@ -55,14 +56,10 @@ class BaseChecker(OptionsProviderMixIn): return "{} '{}' responsible for {}".format(status, self.name, ", ".join(msgids)) def add_message( - self, - msgid, - line=None, - node=None, - args=None, - confidence=UNDEFINED, - col_offset=None, + self, msgid, line=None, node=None, args=None, confidence=None, col_offset=None ): + if not confidence: + confidence = UNDEFINED self.linter.add_message(msgid, line, node, args, confidence, col_offset) def check_consistency(self) -> None: @@ -89,10 +86,34 @@ class BaseChecker(OptionsProviderMixIn): checker_id = message.msgid[1:3] existing_ids.append(message.msgid) + def create_message_definition_from_tuple(self, msgid, msg_tuple): + if implements(self, (IRawChecker, ITokenChecker)): + default_scope = WarningScope.LINE + else: + default_scope = WarningScope.NODE + options = {} + if len(msg_tuple) > 3: + (msg, symbol, descr, options) = msg_tuple + elif len(msg_tuple) > 2: + (msg, symbol, descr) = msg_tuple + else: + error_msg = """Messages should have a msgid and a symbol. Something like this : + +"W1234": ( + "message", + "message-symbol", + "Message description with detail.", + ... +), +""" + raise InvalidMessageError(error_msg) + options.setdefault("scope", default_scope) + return MessageDefinition(self, msgid, msg, descr, symbol, **options) + @property def messages(self) -> list: return [ - build_message_definition(self, msgid, msg_tuple) + self.create_message_definition_from_tuple(msgid, msg_tuple) for msgid, msg_tuple in sorted(self.msgs.items()) ] diff --git a/pylint/message/__init__.py b/pylint/message/__init__.py index 430d06653..1616eeea0 100644 --- a/pylint/message/__init__.py +++ b/pylint/message/__init__.py @@ -39,7 +39,6 @@ """All the classes related to Message handling.""" -from pylint.message.build_message_definition import build_message_definition from pylint.message.message import Message from pylint.message.message_definition import MessageDefinition from pylint.message.message_handler_mix_in import MessagesHandlerMixIn diff --git a/pylint/message/build_message_definition.py b/pylint/message/build_message_definition.py deleted file mode 100644 index 4de204d04..000000000 --- a/pylint/message/build_message_definition.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html -# For details: https://github.com/PyCQA/pylint/blob/master/COPYING - -import warnings - -from pylint.constants import WarningScope -from pylint.interfaces import IRawChecker, ITokenChecker, implements -from pylint.message.message_definition import MessageDefinition - - -def build_message_definition(checker, msgid, msg_tuple): - if implements(checker, (IRawChecker, ITokenChecker)): - default_scope = WarningScope.LINE - else: - default_scope = WarningScope.NODE - options = {} - if len(msg_tuple) > 3: - (msg, symbol, descr, options) = msg_tuple - elif len(msg_tuple) > 2: - (msg, symbol, descr) = msg_tuple - else: - # messages should have a symbol, but for backward compatibility - # they may not. - (msg, descr) = msg_tuple - warnings.warn( - "[pylint 0.26] description of message %s doesn't include " - "a symbolic name" % msgid, - DeprecationWarning, - ) - symbol = None - options.setdefault("scope", default_scope) - return MessageDefinition(checker, msgid, msg, descr, symbol, **options) diff --git a/pylint/message/message_handler_mix_in.py b/pylint/message/message_handler_mix_in.py index 942b5ec4b..388054897 100644 --- a/pylint/message/message_handler_mix_in.py +++ b/pylint/message/message_handler_mix_in.py @@ -20,7 +20,6 @@ from pylint.constants import ( ) from pylint.exceptions import InvalidMessageError, UnknownMessageError from pylint.interfaces import UNDEFINED -from pylint.message.build_message_definition import build_message_definition from pylint.message.message import Message from pylint.utils.utils import ( _format_option_value, @@ -442,7 +441,7 @@ Below is a list of all checkers and their features. for msgid, msg in sorted( msgs.items(), key=lambda kv: (_MSG_ORDER.index(kv[0][0]), kv[1]) ): - msg = build_message_definition(checker.name, msgid, msg) + msg = checker.create_message_definition_from_tuple(msgid, msg) result += "%s\n" % msg.format_help(checkerref=False) result += "\n" if reports: