This repo currently contains a single pre-commit hook that internally runs several code formatters in parallel.
- Prettier v3.3.3 for CSS, HTML, JS, JSX, Markdown, Sass, TypeScript, XML, YAML
- Ruff v0.7.3 for Python 3
- Black v21.12b0 for Python 2
- autoflake v1.7.8 for Python
- isort v5.13.2 for Python 2
- google-java-format v1.24.0 for Java
- ktfmt v0.53 for Kotlin
- gofmt v1.23.3 for Go
- scalafmt v3.8.3 for Scala
- shfmt v3.10.0 for Shell
- xsltproc from libxslt v10139 for XML
- terraform fmt v1.9.8 for Terraform
- ClangFormat v18.1.8 for C++, Protobuf
- SVGO v3.3.2 for SVG
- Taplo v0.9.3 for TOML
- Custom regex transformations (basically sed), for example:
- Trimming trailing whitespace and newlines
- Removing unnecessary
coding
pragmas andobject
base classes in Python 3 - Replacing empty Python collections like
list()
with literal equivalents - Replacing empty Kotlin collections like
arrayOf()
withempty
equivalents
We run this hook on developer workstations and enforce it in CI for all production repos at Duolingo.
Repo maintainers can declare this hook in .pre-commit-config.yaml
:
- repo: https://github.com/duolingo/pre-commit-hooks.git
rev: 1.8.0
hooks:
- id: duolingo
args: # Optional
- --python-version=2 # Defaults to Python 3
- --scala-version=3 # Defaults to Scala 2.12
Directories named build
and node_modules
are excluded by default - no need to declare them in the hook's exclude
key.
Contributors can copy or symlink this repo's .editorconfig
file to their home directory in order to have their text editors and IDEs automatically pick up the same linter/formatter settings that this hook uses.
Duolingo is hiring! Apply at https://www.duolingo.com/careers