Skip to content

Commit 2a064ba

Browse files
DanielNoordcdce8p
andauthored
Do not use doc attribute internally (#1433)
Co-authored-by: Marc Mueller <[email protected]>
1 parent 9344ab3 commit 2a064ba

File tree

4 files changed

+32
-12
lines changed

4 files changed

+32
-12
lines changed

astroid/interpreter/objectmodel.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,10 @@ def attr___name__(self):
163163

164164
@property
165165
def attr___doc__(self):
166-
return node_classes.Const(value=self._instance.doc, parent=self._instance)
166+
return node_classes.Const(
167+
value=getattr(self._instance.doc_node, "value", None),
168+
parent=self._instance,
169+
)
167170

168171
@property
169172
def attr___file__(self):
@@ -209,7 +212,10 @@ def attr___name__(self):
209212

210213
@property
211214
def attr___doc__(self):
212-
return node_classes.Const(value=self._instance.doc, parent=self._instance)
215+
return node_classes.Const(
216+
value=getattr(self._instance.doc_node, "value", None),
217+
parent=self._instance,
218+
)
213219

214220
@property
215221
def attr___qualname__(self):
@@ -332,13 +338,18 @@ def infer_call_result(self, caller, context=None):
332338
# class where it will be bound.
333339
new_func = func.__class__(
334340
name=func.name,
335-
doc=func.doc,
336341
lineno=func.lineno,
337342
col_offset=func.col_offset,
338343
parent=func.parent,
339344
)
340345
# pylint: disable=no-member
341-
new_func.postinit(func.args, func.body, func.decorators, func.returns)
346+
new_func.postinit(
347+
func.args,
348+
func.body,
349+
func.decorators,
350+
func.returns,
351+
doc_node=func.doc_node,
352+
)
342353

343354
# Build a proper bound method that points to our newly built function.
344355
proxy = bases.UnboundMethod(new_func)
@@ -424,7 +435,7 @@ def attr___qualname__(self):
424435

425436
@property
426437
def attr___doc__(self):
427-
return node_classes.Const(self._instance.doc)
438+
return node_classes.Const(getattr(self._instance.doc_node, "value", None))
428439

429440
@property
430441
def attr___mro__(self):
@@ -584,7 +595,8 @@ def attr___name__(self):
584595
@property
585596
def attr___doc__(self):
586597
return node_classes.Const(
587-
value=self._instance.parent.doc, parent=self._instance
598+
value=getattr(self._instance.parent.doc_node, "value", None),
599+
parent=self._instance,
588600
)
589601

590602

@@ -620,7 +632,7 @@ def attr___module__(self):
620632

621633
@property
622634
def attr___doc__(self):
623-
return node_classes.Const(self._instance.doc)
635+
return node_classes.Const(getattr(self._instance.doc_node, "value", None))
624636

625637
@property
626638
def attr___dict__(self):

astroid/nodes/node_ng.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -763,6 +763,9 @@ def _repr_node(node, result, done, cur_indent="", depth=1):
763763
result.append("\n")
764764
result.append(cur_indent)
765765
for field in fields[:-1]:
766+
# TODO: Remove this after removal of the 'doc' attribute
767+
if field == "doc":
768+
continue
766769
result.append(f"{field}=")
767770
_repr_tree(getattr(node, field), result, done, cur_indent, depth)
768771
result.append(",\n")

astroid/raw_building.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,14 @@ def build_module(name: str, doc: Optional[str] = None) -> nodes.Module:
118118

119119
def build_class(name, basenames=(), doc=None):
120120
"""create and initialize an astroid ClassDef node"""
121-
node = nodes.ClassDef(name, doc)
121+
node = nodes.ClassDef(name)
122+
node.postinit(
123+
bases=[],
124+
body=[],
125+
decorators=None,
126+
doc_node=nodes.Const(value=doc) if doc else None,
127+
)
128+
# TODO: Use the actual postinit method instead of appending manually
122129
for base in basenames:
123130
basenode = nodes.Name(name=base)
124131
node.bases.append(basenode)

tests/unittest_scoped_nodes.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -968,10 +968,8 @@ def test_cls_special_attributes_1(self) -> None:
968968
)
969969
with pytest.warns(DeprecationWarning) as records:
970970
self.assertEqual(cls.getattr("__doc__")[0].value, cls.doc)
971-
# TODO: This should be 1 once we update the use of 'doc' internally
972-
assert len(records) == 2
973-
# TODO: The doc_node attribute needs to be set in the raw_building process
974-
# self.assertEqual(cls.getattr("__doc__")[0].value, cls.doc_node.value)
971+
assert len(records) == 1
972+
self.assertEqual(cls.getattr("__doc__")[0].value, cls.doc_node.value)
975973
self.assertEqual(len(cls.getattr("__module__")), 4)
976974
self.assertEqual(len(cls.getattr("__dict__")), 1)
977975
self.assertEqual(len(cls.getattr("__mro__")), 1)

0 commit comments

Comments
 (0)