Skip to content

Commit

Permalink
refactor: Refactor implementation with latest version in `typing_exte…
Browse files Browse the repository at this point in the history
…nsions`, `Doc()`, and de-indent

PR #2: #2
  • Loading branch information
tiangolo authored Sep 11, 2023
1 parent cc15edc commit c7a61c6
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ tests = [
"pytest-cov>=3.0",
"pytest-randomly>=3.10",
"pytest-xdist>=2.4",
"typing-extensions @ git+https://github.com/tiangolo/typing_extensions@typing-doc",
"typing-extensions>=4.8.0rc1",
]
typing = [
"mypy>=0.910",
Expand Down
22 changes: 14 additions & 8 deletions src/griffe_typingdoc/extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from __future__ import annotations

import inspect
from ast import literal_eval
from collections import defaultdict
from typing import TYPE_CHECKING, Any, Sequence
Expand All @@ -14,21 +15,26 @@
if TYPE_CHECKING:
import ast

from typing_extensions import Annotated, doc # type: ignore[attr-defined]
from typing_extensions import Annotated, Doc # type: ignore[attr-defined]


class TypingDocExtension(Extension):
"""Griffe extension that reads documentation from `typing.doc`."""
"""Griffe extension that reads documentation from `typing.Doc`."""

def on_function_instance(
self,
node: Annotated[
ast.AST | ObjectNode,
doc("The object/AST node describing the function or its definition."),
Doc("The object/AST node describing the function or its definition."),
],
func: Annotated[
Function,
doc("The Griffe function just instantiated."),
Doc(
# Multiline docstring to test de-indentation.
"""
The Griffe function just instantiated.
""",
),
],
) -> None:
"""Post-process Griffe functions to add a parameters section."""
Expand Down Expand Up @@ -56,10 +62,10 @@ def on_function_instance(
doc = None
for data in metadata:
if isinstance(data, ExprCall) and data.function.canonical_path in {
"typing.doc",
"typing_extensions.doc",
"typing.Doc",
"typing_extensions.Doc",
}:
doc = literal_eval(str(data.arguments[0]))
doc = inspect.cleandoc(literal_eval(str(data.arguments[0])))
params_doc[parameter.name]["annotation"] = annotation
if doc:
params_doc[parameter.name]["description"] = doc
Expand All @@ -72,7 +78,7 @@ def on_function_instance(
[
DocstringParameter(
name=param_name,
description=param_doc["description"],
description=param_doc.get("description") or "",
annotation=param_doc["annotation"],
value=func.parameters[param_name].default, # type: ignore[arg-type]
)
Expand Down
1 change: 1 addition & 0 deletions tests/test_extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ def test_extension() -> None:
sections = typingdoc["extension.TypingDocExtension.on_function_instance"].docstring.parsed
assert len(sections) == 2
assert sections[1].kind is DocstringSectionKind.parameters
assert sections[1].value[1].description == "The Griffe function just instantiated."

0 comments on commit c7a61c6

Please sign in to comment.