Documentation Guidelines
========================
Ignis uses the `Sphinx `_ documentation generator
with the `autodoc `_
extension to generate documentation from Python docstrings.
.. hint::
Sphinx uses the reStructuredText markup language.
Here are some useful resources to learn more about it:
- `reStructuredText guide by Sphinx `_
- `Example Google Style Python Docstrings `_
Docstrings
-------------
Use the Google style for Python docstrings, with types included in them.
Here are some examples for functions and classes.
Functions
~~~~~~~~~~~~~~~~
For functions, use the standard Google docstring style.
Type hints will be added automatically.
.. code-block:: python
def some_func(arg1: int, arg2: str) -> str:
"""
Description of the function.
Args:
arg1: Description...
arg2: Description 2...
Returns:
The description of the return value...
Raises:
SomeException: If this condition is true...
"""
pass
General Classes
~~~~~~~~~~~~~~~~
- Signals:
If a class has custom signals, add docstrings to the functions decorated with ``@GObject.Signal`` respectively.
At the top of the docstring indicate that it's signal: ``- Signal``.
Also, if the signal have custom arguments, define them in the ``Args`` section.
- Properties:
If a class has custom properties, add docstrings to the functions decorated with ``@GObject.Object`` or ``@property`` respectively.
At the top of the docstring indicate ``read-only`` / ``read-write``, ``optional`` / ``required`` / ``not argument``.
.. note::
You shouldn't specify ``optional`` / ``required`` / ``not argument``
in properties of Services and classes related to them, since the user shouldn't initialize them manually.
- If possible, please provide a code example.
.. code-block:: python
class SomeClass:
"""
This is an example docstring for a class.
Further info goes here...
"""
@GObject.Signal
def some_signal(self):
"""
- Signal
Emitted when the something happens.
"""
@GObject.Signal(arg_types=(int,))
def arg_signal(self):
"""
- Signal
Emitted when the something another happens.
Args:
some_arg (``int``): Description of the argument...
"""
@GObject.Property
def some_prop(self) -> int:
"""
- optional, read-only
"""
...
@GObject.Property
def rw_prop(self) -> str:
"""
- optional, read-write
"""
...
@rw_prop.setter
def rw_prop(self, value: str) -> None:
...
Widgets
~~~~~~~~~~~~~~~~
- Use the same patterns as described above for general classes.
- Specify the base widget using the ``:class:`` directive.
.. code-block:: python
class SomeWidget:
"""
Bases: :class:`Gtk.WIDGET_NAME`
The description of the widget.
.. code-block:: python
Widget.WIDGET_NAME(
prop1="asd",
prop2=12
)
"""
... # rest of stuff goes here
Building documentation
-------------------------
Install dependencies
.. code-block:: bash
pip install -r docs/requirements.txt
Build
.. code-block:: bash
cd docs
make html
Built documentation will be stored at ``_build/html``.