Tooling
=======

This is a list of first party and third party tools used for developing Scipp.

Third Party
^^^^^^^^^^^

Compilers
~~~~~~~~~

All compilers can be installed through conda.
See ``conda/meta.yaml``.

- GCC [Linux]
- XCode [macOS]
- MSVC [Windows]

Static Analysis and Formatters
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

We use ``tox`` and ``pre-commit`` to do auto formatting and static analysis.
See in particular ``pre-commit-config.yaml`` for the list of used tools and versions.

Misc
~~~~

- CMake >= 3.21
- Conda

Note: Ubuntu users can use the `Kitware Repo <https://apt.kitware.com/>`_ to obtain the latest version.

First Party
^^^^^^^^^^^

There are several development tools in the ``tools`` directory at the top level of the Scipp repository.
See the readmes in the folder.

Stubgen
~~~~~~~

A number of classes are defined in C++ and exposed to Python via Pybind11.
These classes are invisible to static analysis tools, in particular type checkers.
In addition, some classes have many dynamically bound methods which are equally invisible to type checkers.

So stubs are provided in ``src/scipp/core/cpp_classes.pyi`` which lists these classes and all their methods.
This file is automatically generated by the ``stubgen`` package located in ``tools/stubgen/``.
It can be used by calling

.. code-block:: bash

    cd tools
    python -m stubgen

A tox environment is also provided: ``tox -e stubgen``.

Both ways of using ``stubgen`` require Scipp to be installed (potentially in editable mode) in the current environment.
See ``tools/stubgen/README.md`` for details.

Remember to call the stubgen whenever you make a change to the interface of those core classes!
