summaryrefslogtreecommitdiff
path: root/utils.py
diff options
context:
space:
mode:
authortmarek <tmarek@google.com>2012-11-12 14:06:26 +0100
committertmarek <tmarek@google.com>2012-11-12 14:06:26 +0100
commitb3da8966dfb324db5e4071014b2d3e4489e92b0b (patch)
tree384fa4fecd0e5075444ad466460458804cca349b /utils.py
parent0db5734922cf1b0f69d3cce769dbd1c58cfaf03b (diff)
downloadpylint-b3da8966dfb324db5e4071014b2d3e4489e92b0b.tar.gz
Add messages I0020 and I0021 for reporting of suppressed messages and useless suppression pragmas. Closes #110840
Both messages are disabled by default, and only emitted after all other checkers have been processed.
Diffstat (limited to 'utils.py')
-rw-r--r--utils.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/utils.py b/utils.py
index 32ad4e9..c8b07e5 100644
--- a/utils.py
+++ b/utils.py
@@ -57,6 +57,8 @@ MSG_TYPES_STATUS = {
}
_MSG_ORDER = 'EWRCIF'
+MSG_STATE_SCOPE_CONFIG = 0
+MSG_STATE_SCOPE_MODULE = 1
def sort_msgs(msgids):
"""sort message identifiers according to their category first"""
@@ -115,8 +117,10 @@ class MessagesHandlerMixIn:
self._messages_by_symbol = {}
self._msgs_state = {}
self._module_msgs_state = {} # None
+ self._raw_module_msgs_state = {}
self._msgs_by_category = {}
self.msg_status = 0
+ self._ignored_msgs = {}
def register_messages(self, checker):
"""register a dictionary of messages
@@ -260,6 +264,14 @@ class MessagesHandlerMixIn:
except KeyError:
raise UnknownMessage('No such message id %s' % msgid)
+ def get_message_state_scope(self, msgid, line=None):
+ """Returns the scope at which a message was enabled/disabled."""
+ try:
+ if line in self._module_msgs_state[msgid]:
+ return MSG_STATE_SCOPE_MODULE
+ except (KeyError, TypeError):
+ return MSG_STATE_SCOPE_CONFIG
+
def is_message_enabled(self, msgid, line=None):
"""return true if the message associated to the given message id is
enabled
@@ -275,6 +287,20 @@ class MessagesHandlerMixIn:
except (KeyError, TypeError):
return self._msgs_state.get(msgid, True)
+ def handle_ignored_message(self, state_scope, msgid, line, node, args):
+ """Report an ignored message.
+
+ state_scope is either MSG_STATE_SCOPE_MODULE or MSG_STATE_SCOPE_CONFIG,
+ depending on whether the message was disabled locally in the module,
+ or globally. The other arguments are the same as for add_message.
+ """
+ if state_scope == MSG_STATE_SCOPE_MODULE:
+ try:
+ orig_line = self._suppression_mapping[(msgid, line)]
+ self._ignored_msgs.setdefault((msgid, orig_line), set()).add(line)
+ except KeyError:
+ pass
+
def add_message(self, msgid, line=None, node=None, args=None):
"""add the message corresponding to the given id.
@@ -291,6 +317,8 @@ class MessagesHandlerMixIn:
col_offset = None
# should this message be displayed
if not self.is_message_enabled(msgid, line):
+ self.handle_ignored_message(
+ self.get_message_state_scope(msgid, line), msgid, line, node, args)
return
# update stats
msg_cat = MSG_TYPES[msgid[0]]