diff options
Diffstat (limited to 'pylint/lint/pylinter.py')
-rw-r--r-- | pylint/lint/pylinter.py | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/pylint/lint/pylinter.py b/pylint/lint/pylinter.py index 913bc4a22..53453af40 100644 --- a/pylint/lint/pylinter.py +++ b/pylint/lint/pylinter.py @@ -1413,14 +1413,30 @@ class PyLinter( args: Optional[Any], confidence: Optional[interfaces.Confidence], col_offset: Optional[int], + end_lineno: Optional[int], + end_col_offset: Optional[int], ) -> None: """After various checks have passed a single Message is passed to the reporter and added to stats""" message_definition.check_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 # type: ignore[union-attr] + + # Look up "location" data of node if not yet supplied + if node: + if not line: + line = node.fromlineno + # pylint: disable=fixme + # TODO: Initialize col_offset on every node (can be None) -> astroid + if not col_offset and hasattr(node, "col_offset"): + col_offset = node.col_offset + # pylint: disable=fixme + # TODO: Initialize end_lineno on every node (can be None) -> astroid + # See https://github.com/PyCQA/astroid/issues/1273 + if not end_lineno and hasattr(node, "end_lineno"): + end_lineno = node.end_lineno + # pylint: disable=fixme + # TODO: Initialize end_col_offset on every node (can be None) -> astroid + if not end_col_offset and hasattr(node, "end_col_offset"): + end_col_offset = node.end_col_offset # should this message be displayed if not self.is_message_enabled(message_definition.msgid, line, confidence): @@ -1463,7 +1479,14 @@ class PyLinter( message_definition.msgid, message_definition.symbol, MessageLocationTuple( - abspath, path, module or "", obj, line or 1, col_offset or 0 + abspath, + path, + module or "", + obj, + line or 1, + col_offset or 0, + end_lineno, + end_col_offset, ), msg, confidence, @@ -1478,6 +1501,8 @@ class PyLinter( args: Optional[Any] = None, confidence: Optional[interfaces.Confidence] = None, col_offset: Optional[int] = None, + end_lineno: Optional[int] = None, + end_col_offset: Optional[int] = None, ) -> None: """Adds a message given by ID or name. @@ -1492,7 +1517,14 @@ class PyLinter( message_definitions = self.msgs_store.get_message_definitions(msgid) for message_definition in message_definitions: self._add_one_message( - message_definition, line, node, args, confidence, col_offset + message_definition, + line, + node, + args, + confidence, + col_offset, + end_lineno, + end_col_offset, ) def add_ignored_message( |