123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- # Copyright (c) 2017 Claudiu Popa <pcmanticore@gmail.com>
-
- # Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
- # For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER
-
- import sys
-
- import astroid
-
-
- def _clone_node_with_lineno(node, parent, lineno):
- cls = node.__class__
- other_fields = node._other_fields
- _astroid_fields = node._astroid_fields
- init_params = {
- 'lineno': lineno,
- 'col_offset': node.col_offset,
- 'parent': parent
- }
- postinit_params = {
- param: getattr(node, param)
- for param in _astroid_fields
- }
- if other_fields:
- init_params.update({
- param: getattr(node, param)
- for param in other_fields
- })
- new_node = cls(**init_params)
- if hasattr(node, 'postinit') and _astroid_fields:
- new_node.postinit(**postinit_params)
- return new_node
-
-
- def _transform_formatted_value(node):
- if node.value and node.value.lineno == 1:
- if node.lineno != node.value.lineno:
- new_node = astroid.FormattedValue(
- lineno=node.lineno,
- col_offset=node.col_offset,
- parent=node.parent
- )
- new_value = _clone_node_with_lineno(
- node=node.value,
- lineno=node.lineno,
- parent=new_node
- )
- new_node.postinit(value=new_value,
- format_spec=node.format_spec)
- return new_node
-
-
- if sys.version_info[:2] >= (3, 6):
- # TODO: this fix tries to *patch* http://bugs.python.org/issue29051
- # The problem is that FormattedValue.value, which is a Name node,
- # has wrong line numbers, usually 1. This creates problems for pylint,
- # which expects correct line numbers for things such as message control.
- astroid.MANAGER.register_transform(
- astroid.FormattedValue,
- _transform_formatted_value)
|