Skip to content

classicvalues/pre-commit-hooks-1

 
 

Repository files navigation

pre-commit hooks

This repo currently contains a single pre-commit hook that internally runs several code formatters in parallel.

  • Prettier v2.6.2 for CSS, HTML, JS, JSX, Markdown, Sass, TypeScript, XML, YAML
  • Black v22.3.0 for Python 3, v21.12b0 for Python 2
  • autoflake v1.4 for Python
  • isort v5.10.1 for Python
  • google-java-format v1.15.0 for Java
  • ktfmt v0.35 for Kotlin
  • scalafmt v3.5.1 for Scala
  • shfmt v3.4.3 for Shell
  • xsltproc from libxslt v10135 for XML
  • terraform fmt v1.1.8 for Terraform
  • ClangFormat v13.0.1 for Protobuf
  • SVGO v2.8.0 for SVG
  • Custom regex transformations (basically sed), for example:
    • Trimming trailing whitespace and newlines
    • Removing unnecessary coding pragmas and object base classes in Python 3
    • Replacing empty Python collections like list() with literal equivalents
    • Replacing empty Kotlin collections like arrayOf() with empty equivalents

We run this hook on developer workstations and enforce it in CI for all production repos at Duolingo.

Usage

Repo maintainers can declare this hook in .pre-commit-config.yaml:

- repo: https://github.com/duolingo/pre-commit-hooks.git
  rev: 1.6.1
  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

About

Standardizing our code quality tooling 🛠️

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 77.0%
  • Dockerfile 9.6%
  • Makefile 8.4%
  • Java 1.1%
  • TypeScript 0.9%
  • Scala 0.9%
  • Other 2.1%