# Recommended tooling for RSE projects ## Python ### Testing * [pytest](https://docs.pytest.org/en/stable/) * [unittest](https://docs.python.org/3/library/unittest.html) * [syrupy](https://syrupy-project.github.io/syrupy/) - for snapshot testing, i.e. testing that outputs remain the same over time. This can be particularly helpful for complex outputs and code that's difficult to unit test. ### Documentation * [Sphinx](https://www.sphinx-doc.org/en/master/index.html) * [MyST parser](https://myst-parser.readthedocs.io/en/latest/) allows you to write Sphinx docs in Markdown * [MyST-NB](https://myst-nb.readthedocs.io/en/v0.13.2/index.html) can convert notebooks to Markdown and allows notebooks to be incorporated into Sphinx docs * [sphinx-autoapi](https://sphinx-autoapi.readthedocs.io/en/latest/) - automatic API documentation by parsing the source code ### Linting * [ruff](https://docs.astral.sh/ruff/) - linting and formatting * [pyroma](https://github.com/regebro/pyroma) - "aimed at giving a rating of how well a Python project complies with the best practices of the Python packaging ecosystem" * [prospector](https://prospector.landscape.io/en/master/index.html) ### Typing * [mypy](https://www.mypy-lang.org/) * [pyright](https://github.com/microsoft/pyright) * [ty](https://docs.astral.sh/ty/) ### Unused dependencies * [fawltydeps](https://tweag.github.io/FawltyDeps/) - a dependency checker for Python that finds undeclared and/or unused 3rd-party dependencies * [deptry](https://deptry.com/) - a command line tool to check for issues with dependencies in a Python project, such as unused or missing dependencies ### Static analysis * [bandit](https://bandit.readthedocs.io/en/latest/) - designed to find common security issues in Python code ## R ### Testing * [testthat](https://testthat.r-lib.org/) - both unit tests and snapshot tests ### Documentation * [roxygen](https://roxygen2.r-lib.org/) ### Linting and formatting * [lintr](https://lintr.r-lib.org/) * [air](https://posit-dev.github.io/air/) - formatter * [jarl](https://jarl.etiennebacher.com/) - linter ### Static analysis * [Flowr](https://github.com/flowr-analysis/flowr/wiki) - "a static dataflow analyzer and program slicer for the R programming language" ### Dependency management * [renv](https://rstudio.github.io/renv/articles/renv.html) * [rv](https://a2-ai.github.io/rv-docs/)