How to contribute
=================

IfcOpenShell is made possible by the contributions of hundreds of people.
Contributions range from developing code, writing documentation, creating
tutorials, responding to requests, reporting bugs, and marketing.

Writing documentation
---------------------

A great way to contribute without writing code is to help writing
documentation.

All documentation is written in ReStructured Text and is available in the
`IfcOpenShell docs directory
<https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.8.0/src/ifcopenshell-python/docs>`_.
You can press the edit button on the top right on any documentation page to
quickly edit their content.

Python API documentation is autogenerated from docstrings present in the source
code of the respective Python module.

If you want to build the documentation locally, the documentation system uses
`Sphinx <https://www.sphinx-doc.org/en/master/>`_. First, install Sphinx and
dependencies:

.. code-block:: bash

    pip install sphinx
    pip install sphinx-autoapi
    pip install sphinx-copybutton
    pip install furo

Now you can generate the documentation:

.. code-block:: bash

    cd /path/to/ifcopenshell/src/ifcopenshell-python/docs/
    make html
    cd _build/html
    python -m http.server

You will now have a local webserver running hosting the documentation.

.. tip::
   
   It may take some time to generate the API documentation. You can edit the
   `list of autoapi directories
   <https://github.com/IfcOpenShell/IfcOpenShell/blob/v0.8.0/src/ifcopenshell-python/docs/conf.py#L69>`_
   to make this faster
