Coverage for packages / griffelib / src / griffe / _internal / docstrings / parsers.py: 100.00%
19 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-11 11:48 +0100
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-11 11:48 +0100
1# This module imports all the defined parsers
2# and provides a generic function to parse docstrings.
4from __future__ import annotations
6from typing import TYPE_CHECKING, Any, Literal
8from griffe._internal.docstrings.auto import AutoOptions, parse_auto
9from griffe._internal.docstrings.google import GoogleOptions, parse_google
10from griffe._internal.docstrings.models import DocstringSection, DocstringSectionText
11from griffe._internal.docstrings.numpy import NumpyOptions, parse_numpy
12from griffe._internal.docstrings.sphinx import SphinxOptions, parse_sphinx
13from griffe._internal.enumerations import Parser
15if TYPE_CHECKING:
16 from collections.abc import Callable
18 from griffe._internal.models import Docstring
21DocstringStyle = Literal["google", "numpy", "sphinx", "auto"]
22"""The supported docstring styles (literal values of the Parser enumeration)."""
23DocstringOptions = GoogleOptions | NumpyOptions | SphinxOptions | AutoOptions
24"""The options for each docstring style."""
27parsers: dict[Parser, Callable[[Docstring], list[DocstringSection]]] = {
28 Parser.auto: parse_auto,
29 Parser.google: parse_google,
30 Parser.sphinx: parse_sphinx,
31 Parser.numpy: parse_numpy,
32}
35def parse(
36 docstring: Docstring,
37 parser: DocstringStyle | Parser | None,
38 **options: Any,
39) -> list[DocstringSection]:
40 """Parse the docstring.
42 Parameters:
43 docstring: The docstring to parse.
44 parser: The docstring parser to use. If None, return a single text section.
45 **options: The options accepted by the parser.
47 Returns:
48 A list of docstring sections.
49 """
50 if parser:
51 if not isinstance(parser, Parser):
52 parser = Parser(parser)
53 return parsers[parser](docstring, **options)
54 return [DocstringSectionText(docstring.value)] if docstring.value else []