Ejemplo n.º 1
0
    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,
            )
        )
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
    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,
            )
        )
Ejemplo n.º 4
0
	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)
		)
Ejemplo n.º 5
0
    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,
            )
        )