# 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/)