44
55import ast
66from collections import defaultdict
7- from typing import Annotated , Any
7+ from typing import TYPE_CHECKING , Annotated , Any
88
99from griffe .agents .extensions import VisitorExtension , When
1010from griffe .agents .nodes import safe_get_annotation
11- from griffe .dataclasses import Function
1211from griffe .docstrings .dataclasses import DocstringParameter , DocstringSectionParameters
1312
1413from griffe_typingdoc .typing_doc import __typing_doc__
1514
15+ if TYPE_CHECKING :
16+ from griffe .dataclasses import Function
17+
1618
1719@__typing_doc__ (description = "Griffe extension parsing the `typing.doc` decorator." )
1820class TypingDocExtension (VisitorExtension ):
@@ -39,9 +41,8 @@ def visit_functiondef(
3941
4042 func_doc = {}
4143 for decorator_node in node .decorator_list :
42- if isinstance (decorator_node , ast .Call ):
43- if decorator_node .func .id == "__typing_doc__" : # type: ignore[attr-defined]
44- func_doc .update ({kw .arg : kw .value .value for kw in decorator_node .keywords }) # type: ignore[attr-defined]
44+ if isinstance (decorator_node , ast .Call ) and decorator_node .func .id == "__typing_doc__" : # type: ignore[attr-defined]
45+ func_doc .update ({kw .arg : kw .value .value for kw in decorator_node .keywords }) # type: ignore[attr-defined]
4546
4647 params_doc : dict [str , dict [str , Any ]] = defaultdict (dict )
4748 for arg in node .args .args :
@@ -57,18 +58,17 @@ def visit_functiondef(
5758 if doc .func .id == "__typing_doc__" : # type: ignore[attr-defined]
5859 params_doc [param_name ].update ({kw .arg : kw .value .value for kw in doc .keywords }) # type: ignore[attr-defined,misc]
5960
60- if func_doc or params_doc :
61- if function .docstring :
62- sections = function .docstring .parsed
63- if params_doc :
64- docstring_params = []
65- for param_name , param_doc in params_doc .items (): # noqa: WPS440
66- docstring_params .append (
67- DocstringParameter (
68- name = param_name ,
69- description = param_doc ["description" ],
70- annotation = param_doc ["annotation" ],
71- value = function .parameters [param_name ].default ,
72- ),
73- )
74- sections .append (DocstringSectionParameters (docstring_params ))
61+ if (func_doc or params_doc ) and function .docstring :
62+ sections = function .docstring .parsed
63+ if params_doc :
64+ docstring_params = []
65+ for param_name , param_doc in params_doc .items ():
66+ docstring_params .append (
67+ DocstringParameter (
68+ name = param_name ,
69+ description = param_doc ["description" ],
70+ annotation = param_doc ["annotation" ],
71+ value = function .parameters [param_name ].default ,
72+ ),
73+ )
74+ sections .append (DocstringSectionParameters (docstring_params ))
0 commit comments