def add_one_message( self, message_definition, line, node, args, confidence, col_offset ): # backward compatibility, message may not have a symbol symbol = message_definition.symbol or message_definition.msgid self.check_message_definition(message_definition, line, node) if line is None and node is not None: line = node.fromlineno if col_offset is None and hasattr(node, "col_offset"): col_offset = node.col_offset # should this message be displayed if not self.is_message_enabled(message_definition.msgid, line, confidence): self.file_state.handle_ignored_message( self.get_message_state_scope( message_definition.msgid, line, confidence ), message_definition.msgid, line, node, args, confidence, ) return # update stats msg_cat = MSG_TYPES[message_definition.msgid[0]] self.msg_status |= MSG_TYPES_STATUS[message_definition.msgid[0]] self.stats[msg_cat] += 1 self.stats["by_module"][self.current_name][msg_cat] += 1 try: self.stats["by_msg"][symbol] += 1 except KeyError: self.stats["by_msg"][symbol] = 1 # expand message ? msg = message_definition.msg if args: msg %= args # get module and object if node is None: module, obj = self.current_name, "" abspath = self.current_file else: module, obj = get_module_and_frameid(node) abspath = node.root().file path = abspath.replace(self.reporter.path_strip_prefix, "", 1) # add the message self.reporter.handle_message( Message( message_definition.msgid, symbol, (abspath, path, module, obj, line or 1, col_offset or 0), msg, confidence, ) )
def add_message(self, msg_id, line=None, node=None, args=None): """add the message corresponding to the given id. If provided, msg is expanded using args astng checkers should provide the node argument, raw checkers should provide the line argument. """ if line is None and node is not None: line = node.fromlineno#lineno or node.statement().lineno #if not isinstance(node, Module): # assert line > 0, node.__class__ # should this message be displayed if not self.is_message_enabled(msg_id, line): return # update stats if msg_id[0] == 'I': ty = 'info' sty = 'unknown' elif msg_id[0] == 'C': ty = 'info' sty = 'badstyle' elif msg_id[0] == 'R': ty = 'info' sty = 'badstyle' elif msg_id[0] == 'W': ty = 'warning' sty = 'unknown' elif msg_id[0] == 'E': ty = 'error' sty = 'unknown' elif msg_id[0] == 'F': ty = 'fatal' sty = 'unknown' else: ty = 'unknown' sty = 'unknown' #msg_cat = MSG_TYPES[msg_id[0]] #self.stats[msg_cat] += 1 #self.stats['by_module'][self.current_name][msg_cat] += 1 #try: # self.stats['by_msg'][msg_id] += 1 #except KeyError: # self.stats['by_msg'][msg_id] = 1 if SUBTYPE_MAPPING.has_key(msg_id): sty = SUBTYPE_MAPPING[msg_id] msg = self._messages[msg_id].msg # expand message ? #if args: # msg %= args # get module and object if node is None: module, obj = self.current_name, '' path = self.current_file else: module, obj = get_module_and_frameid(node) path = node.root().file # add the message cmsg = PythonError( message = msg, level = ty, kind = sty, filename = path, message_args = args or (), lineno = line or 1, msg_id = msg_id ) self._output.append(cmsg) self.sema.release()
def add_one_message( self, message_definition, line, node, args, confidence, col_offset ): self.check_message_definition(message_definition, line, node) if line is None and node is not None: line = node.fromlineno if col_offset is None and hasattr(node, "col_offset"): col_offset = node.col_offset # should this message be displayed if not self.is_message_enabled(message_definition.msgid, line, confidence): self.file_state.handle_ignored_message( self.get_message_state_scope( message_definition.msgid, line, confidence ), message_definition.msgid, line, node, args, confidence, ) return # update stats msg_cat = MSG_TYPES[message_definition.msgid[0]] self.msg_status |= MSG_TYPES_STATUS[message_definition.msgid[0]] if self.stats is None: # pylint: disable=fixme # TODO self.stats should make sense, # class should make sense as soon as instantiated # This is not true for Linter and Reporter at least # pylint: enable=fixme self.stats = { msg_cat: 0, "by_module": {self.current_name: {msg_cat: 0}}, "by_msg": {}, } self.stats[msg_cat] += 1 self.stats["by_module"][self.current_name][msg_cat] += 1 try: self.stats["by_msg"][message_definition.symbol] += 1 except KeyError: self.stats["by_msg"][message_definition.symbol] = 1 # expand message ? msg = message_definition.msg if args: msg %= args # get module and object if node is None: module, obj = self.current_name, "" abspath = self.current_file else: module, obj = get_module_and_frameid(node) abspath = node.root().file if abspath is not None: path = abspath.replace(self.reporter.path_strip_prefix, "", 1) else: path = "configuration" # add the message self.reporter.handle_message( Message( message_definition.msgid, message_definition.symbol, (abspath, path, module, obj, line or 1, col_offset or 0), msg, confidence, ) )
def add_message(self, msg_descr, line=None, node=None, args=None, confidence=pylint.utils.UNDEFINED): """Adds a message given by ID or name. If provided, the message string is expanded using args AST checkers should must the node argument (but may optionally provide line if the line number is different), raw and token checkers must provide the line argument. """ from pylint.exceptions import InvalidMessageError from pylint import utils msg_info = self.msgs_store.check_message_id(msg_descr) msgid = msg_info.msgid # backward compatibility, message may not have a symbol symbol = msg_info.symbol or msgid # Fatal messages and reports are special, the node/scope distinction # does not apply to them. if msgid[0] not in utils._SCOPE_EXEMPT: if msg_info.scope == utils.WarningScope.LINE: if line is None: print(InvalidMessageError( 'Message %s must provide line, got None' % msgid)) pass if node is not None: print(InvalidMessageError( 'Message %s must only provide line, ' 'got line=%s, node=%s' % (msgid, line, node))) pass elif msg_info.scope == utils.WarningScope.NODE: # Node-based warnings may provide an override line. if node is None: print(InvalidMessageError( 'Message %s must provide Node, got None' % msgid)) pass if line is None and node is not None: line = node.fromlineno if hasattr(node, 'col_offset'): col_offset = node.col_offset # XXX measured in bytes for utf-8, divide by two for chars? else: col_offset = None # should this message be displayed if not self.is_message_enabled(msgid, line, confidence): self.file_state.handle_ignored_message( self.get_message_state_scope(msgid, line, confidence), msgid, line, node, args, confidence) return # update stats msg_cat = utils.MSG_TYPES[msgid[0]] self.msg_status |= utils.MSG_TYPES_STATUS[msgid[0]] self.stats[msg_cat] += 1 self.stats['by_module'][self.current_name][msg_cat] += 1 try: self.stats['by_msg'][symbol] += 1 except KeyError: self.stats['by_msg'][symbol] = 1 # expand message ? msg = msg_info.msg if args: try: msg %= args except TypeError: if msgid == 'W0614': msg = args[:] else: msg = msg + ', '.join([repr(arg) for arg in args]) # get module and object if node is None: module, obj = self.current_name, '' abspath = self.current_file else: module, obj = utils.get_module_and_frameid(node) abspath = node.root().file if not hasattr(self.reporter, 'path_strip_prefix'): path = abspath else: path = abspath.replace(self.reporter.path_strip_prefix, '') if args: path = args #if symbol not in self.args[self.current_name]: # self.args[self.current_name][symbol] = list() # #self.args[self.current_name][symbol].append(dict(line=line, node=node, args=args)) # add the message self.reporter.handle_message( utils.Message(msgid, symbol, (abspath, path, module, obj, line or 1, col_offset or 0), msg or '', confidence) )
def add_one_message( self, message_definition, line, node, args, confidence, col_offset ): # backward compatibility, message may not have a symbol symbol = message_definition.symbol or message_definition.msgid # Fatal messages and reports are special, the node/scope distinction # does not apply to them. if message_definition.msgid[0] not in _SCOPE_EXEMPT: if message_definition.scope == WarningScope.LINE: if line is None: raise InvalidMessageError( "Message %s must provide line, got None" % message_definition.msgid ) if node is not None: raise InvalidMessageError( "Message %s must only provide line, " "got line=%s, node=%s" % (message_definition.msgid, line, node) ) elif message_definition.scope == WarningScope.NODE: # Node-based warnings may provide an override line. if node is None: raise InvalidMessageError( "Message %s must provide Node, got None" % message_definition.msgid ) if line is None and node is not None: line = node.fromlineno if col_offset is None and hasattr(node, "col_offset"): col_offset = node.col_offset # should this message be displayed if not self.is_message_enabled(message_definition.msgid, line, confidence): self.file_state.handle_ignored_message( self.get_message_state_scope( message_definition.msgid, line, confidence ), message_definition.msgid, line, node, args, confidence, ) return # update stats msg_cat = MSG_TYPES[message_definition.msgid[0]] self.msg_status |= MSG_TYPES_STATUS[message_definition.msgid[0]] self.stats[msg_cat] += 1 self.stats["by_module"][self.current_name][msg_cat] += 1 try: self.stats["by_msg"][symbol] += 1 except KeyError: self.stats["by_msg"][symbol] = 1 # expand message ? msg = message_definition.msg if args: msg %= args # get module and object if node is None: module, obj = self.current_name, "" abspath = self.current_file else: module, obj = get_module_and_frameid(node) abspath = node.root().file path = abspath.replace(self.reporter.path_strip_prefix, "", 1) # add the message self.reporter.handle_message( Message( message_definition.msgid, symbol, (abspath, path, module, obj, line or 1, col_offset or 0), msg, confidence, ) )