--- name: python-docstrings description: Enforces Google-style Python docstrings for Python code --- # Python Docstring Rules Use this skill when reviewing or writing Python docstrings. ## Purpose and scope - Use Google-style docstrings. - Focus on public Python modules, classes, functions, and methods. - Keep docstrings compact, specific, and easy to scan. ## Request changes when - a public API has no docstring; - the summary line is vague or inaccurate; - arguments, returns, or intentionally raised exceptions are undocumented; - a non-trivial public API needs an example but does not have one. ## Required structure 1. Short description 2. Optional longer explanation 3. `Args` 4. `Returns` 5. Optional `Raises` 6. Optional `Example` ## Formatting rules - Limit docstrings to 120 characters per line. - In `Args`, use `name (type): description`. - In `Returns`, describe both the type and meaning of the returned value. - Add `Raises` when the function intentionally raises exceptions. - Use doctest-style `Example` blocks with `>>>` when examples help clarify usage. ## Reviewer checklist - Is the docstring present on the public API? - Is the summary line accurate? - Are inputs, outputs, and exceptions documented? - Would a user understand how to call this API from the docstring alone? ## Example ```python def my_function(param1: int, param2: str = "default") -> bool: """Short description. A longer explanation. Args: param1 (int): Explanation of param1. param2 (str): Explanation of param2. Defaults to "default". Returns: bool: Explanation of the return value. Example: >>> my_function(1, "test") True """ return True ``` ## Docstring for `__init__` method - Document constructor arguments in the class docstring rather than in a separate `__init__` docstring. ```python class MyClass: """My class description. A longer explanation. Args: param1 (int): Description of param1. param2 (str): Description of param2. Example: >>> my_class = MyClass(param1=1, param2="test") >>> my_class.param1 1 >>> my_class.param2 'test' """ def __init__(self, param1: int, param2: str) -> None: ... ```