summaryrefslogtreecommitdiff
path: root/pylint/message
diff options
context:
space:
mode:
authorPierre Sassoulas <pierre.sassoulas@gmail.com>2022-06-04 10:41:54 +0200
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2022-06-04 11:13:39 +0200
commitf388437a11cd39350fcd738b6a93c128c2b8d92e (patch)
tree33c16a6278e75057d688874df81ca14ab8430fe9 /pylint/message
parent90d963058ea1faba53e27b425662efe421b535a4 (diff)
downloadpylint-git-f388437a11cd39350fcd738b6a93c128c2b8d92e.tar.gz
[deleted messages] Add an exception for deleted messages in MessageIdStore
Diffstat (limited to 'pylint/message')
-rw-r--r--pylint/message/_deleted_message_ids.py21
-rw-r--r--pylint/message/message_id_store.py17
2 files changed, 35 insertions, 3 deletions
diff --git a/pylint/message/_deleted_message_ids.py b/pylint/message/_deleted_message_ids.py
index 349d30f66..7a8872db7 100644
--- a/pylint/message/_deleted_message_ids.py
+++ b/pylint/message/_deleted_message_ids.py
@@ -4,6 +4,7 @@
from __future__ import annotations
+from functools import lru_cache
from typing import NamedTuple
@@ -123,3 +124,23 @@ DELETED_MESSAGES_IDS = {
DeletedMessage("W0111", "assign-to-new-keyword"),
],
}
+
+
+@lru_cache(maxsize=None)
+def is_deleted_symbol(symbol: str) -> str | None:
+ """Return the explanation for removal if the message was removed."""
+ for explanation, deleted_messages in DELETED_MESSAGES_IDS.items():
+ for deleted_message in deleted_messages:
+ if symbol == deleted_message.symbol:
+ return explanation
+ return None
+
+
+@lru_cache(maxsize=None)
+def is_deleted_msgid(msgid: str) -> str | None:
+ """Return the explanation for removal if the message was removed."""
+ for explanation, deleted_messages in DELETED_MESSAGES_IDS.items():
+ for deleted_message in deleted_messages:
+ if msgid == deleted_message.msgid:
+ return explanation
+ return None
diff --git a/pylint/message/message_id_store.py b/pylint/message/message_id_store.py
index bb807dcf6..508c67b31 100644
--- a/pylint/message/message_id_store.py
+++ b/pylint/message/message_id_store.py
@@ -6,7 +6,12 @@ from __future__ import annotations
from typing import NoReturn
-from pylint.exceptions import InvalidMessageError, UnknownMessageError
+from pylint.exceptions import (
+ DeletedMessageError,
+ InvalidMessageError,
+ UnknownMessageError,
+)
+from pylint.message._deleted_message_ids import is_deleted_msgid, is_deleted_symbol
class MessageIdStore:
@@ -122,18 +127,24 @@ class MessageIdStore:
# If we don't have a cached value yet we compute it
msgid: str | None
+ deletion_reason = None
if msgid_or_symbol[1:].isdigit():
# Only msgid can have a digit as second letter
msgid = msgid_or_symbol.upper()
symbol = self.__msgid_to_symbol.get(msgid)
+ if not symbol:
+ deletion_reason = is_deleted_msgid(msgid)
else:
- msgid = self.__symbol_to_msgid.get(msgid_or_symbol)
symbol = msgid_or_symbol
+ msgid = self.__symbol_to_msgid.get(msgid_or_symbol)
+ if not msgid:
+ deletion_reason = is_deleted_symbol(symbol)
if not msgid or not symbol:
+ if deletion_reason is not None:
+ raise DeletedMessageError(msgid_or_symbol, deletion_reason)
error_msg = f"No such message id or symbol '{msgid_or_symbol}'."
raise UnknownMessageError(error_msg)
ids = self.__old_names.get(msgid, [msgid])
-
# Add to cache
self.__active_msgids[msgid_or_symbol] = ids
return ids