From 2fa7515a6ce438ce5ba51a6d45010803cda01ef7 Mon Sep 17 00:00:00 2001 From: Ashley Whetter Date: Wed, 28 Aug 2024 21:09:10 -0700 Subject: [PATCH] Do not inherit docstrings from standard library classes Implements a missing part of #467 --- autoapi/_astroid_utils.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/autoapi/_astroid_utils.py b/autoapi/_astroid_utils.py index fd549fe8..e3d073e4 100644 --- a/autoapi/_astroid_utils.py +++ b/autoapi/_astroid_utils.py @@ -4,12 +4,21 @@ from collections.abc import Iterable import itertools import re +import sys from typing import Any, NamedTuple import astroid import astroid.nodes +if sys.version_info < (3, 10): # PY310 + from stdlib_list import in_stdlib +else: + + def in_stdlib(module_name: str) -> bool: + return module_name in sys.stdlib_module_names + + class ArgInfo(NamedTuple): prefix: str | None name: str | None @@ -649,12 +658,11 @@ def get_func_docstring(node: astroid.nodes.FunctionDef) -> str: if not doc and isinstance(node.parent, astroid.nodes.ClassDef): for base in node.parent.ancestors(): - if node.name in ("__init__", "__new__") and base.qname() in ( - "__builtins__.object", - "builtins.object", - "builtins.type", - ): - continue + if node.name in ("__init__", "__new__"): + base_module = base.qname().split(".", 1)[0] + if in_stdlib(base_module): + continue + for child in base.get_children(): if ( isinstance(child, node.__class__)