This package provides utilities for ensuring that your code is nicely formatted by using pre-commit hooks
pretty-format-golangpretty-format-inipretty-format-javapretty-format-kotlinpretty-format-rustpretty-format-toml⚠️ removes comments under certain conditionspretty-format-yaml
⚠: the list above could be out-of-sync respect the exposed pre-commit hooks.
Please refer to .pre-commit-hooks.yaml for a more updated list.
Add a similar snippet into your .pre-commit-config.yaml file
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: ${LATEST_SHA_OR_VERSION}
hooks:
- id: pretty-format-java
args: [--autofix]
- id: pretty-format-kotlin
args: [--autofix]
- id: pretty-format-yaml
args: [--autofix, --indent, '2']This tool uses tox as main tool to build virtual environments.
To get started will be enough to run make development.
If you have aactivator installed this step will happen automatically.
Contributions are always welcome.
- Fork the project
- Create your feature branch (
git checkout -b my-new-feature) - Add your modifications
- Push to the branch (
git push origin my-new-feature) - Create new Pull Request
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: ...
hooks:
- id: pretty-format-java
args: [--autofix, --aosp, --google-java-formatter-version=1.16.0]This might be relevant for pretty-format-java and pretty-format-kotlin hooks.
The hooks depends on having java on version 11 or greater installed on your machine.
As you're working with compiled-to-JVM languages, we assume that you have java installed on your system. You might not have the minimum required version installed.
To work-around such scenario you have 2 approaches available:
-
Have multiple
javaversions installed on your system and ensure that while running the pre-commit hooks JRE 11+ is available on yourPATHvariable (ie.PATH=${JRE_11_PATH}:${PATH} pre-commit run). -
Work around the issue by using
docker. ⚠: This approach has been tested (at the time of writing) on Linux and MacOS.The latter approach should be preferred if you cannot install an additional JRE version on your system or if doing is unfeasible (e.g. on a CI system). Please note you need to have
dockerinstalled on your system.Add the following
Dockerfileon your repository root (same directory where.pre-commit-config.yamlis stored)FROM python:3.7-alpine # Install JRE-11 as we will run pre-commit hooks that depends an Java 11+ RUN apk add --no-cache openjdk11-jre ENV PRE_COMMIT_HOME /pre-commit-docker-cache ENV PRE_COMMIT_LANGUAGE_FORMATTERS_VERSION ${version of the library to install} RUN set -x \ && pip install --no-cache-dir language-formatters-pre-commit-hooks==${PRE_COMMIT_LANGUAGE_FORMATTERS_VERSION} \ # Run pre-commit-hook to ensure that jars are downloaded and stored in the docker image # Run the hooks that you're planning to run within docker. # This reduces premission issues as well has makes all the run fast as the lazy-dependencies are pre-fetched && pretty-format-java \ # Update permissions as hooks will be run as your host-system user (your username) but the image is built as root && chmod a+r ${PRE_COMMIT_HOME}/*
and the following hook into your
.pre-commit-config.yamlfilerepos: - repo: local hooks: - id: pretty-format-java-in-docker # Useful to eventually SKIP pre-commit hooks name: pretty-format-java-in-docker # This is required, put something sensible language: docker # Self explanatory entry: pretty-format-java # Hook that you want to run in docker args: [...] # Arguments that would would pass to the hook (as if it was local) files: ^.*\.java$ # File filter has to be added ;)
By doing the following, the selected hook (
pretty-format-javain the example) will be executed within the docker container.Side note: We're not embedding the Dockerfile in the repository as this is more a workaround to support whom cannot of installing a more recent Java version on the library-user system and as such we are not planning to fully support this other than giving possible solutions (Java 11+ was released in September, 2018).
How to use a pre-downloaded google-java-format jar file?
You can pass the jar file path to --google-java-formatter-jar argument:
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: ...
hooks:
- id: pretty-format-java
args: [--google-java-formatter-jar=/usr/bin/google-java-format-1.17.0-all-deps.jar]How to use a pre-downloaded ktlint jar file?
You can pass the jar file path to the --ktlint-jar argument:
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: ...
hooks:
- id: pretty-format-kotlin
args: [--ktlint-jar=/usr/bin/ktlint.jar]How to use a pre-downloaded ktfmt jar file?
You can pass the jar file path to the --ktfmt-jar argument:
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: ...
hooks:
- id: pretty-format-kotlin
args: [--ktfmt, --ktfmt-jar=/usr/bin/ktfmt-0.47.jar]Only supported for the pretty-format-java and pretty-format-kotlin-hooks
Use the corresponding [...]-checksum argument
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: ...
hooks:
- id: pretty-format-java
args: [
--google-java-formatter-version=1.17.0,
--formatter-jar-checksum=33068bbbdce1099982ec1171f5e202898eb35f2919cf486141e439fc6e3a4203,
] - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: ...
hooks:
- id: pretty-format-kotlin
args: [
--ktlint-version=1.2.1,
--formatter-jar-checksum=2e28cf46c27d38076bf63beeba0bdef6a845688d6c5dccd26505ce876094eb92,
] - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: ...
hooks:
- id: pretty-format-kotlin
args: [
--ktfmt,
--ktfmt-version=0.47,
--formatter-jar-checksum=af61161faacd74ac56374e0b43003dbe742ddc0d6a7e2c1fe43e15415e65ffbd,
] - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: ...
hooks:
- id: pretty-format-kotlin
args: [--ktfmt, --ktfmt-style=google]Supported styles are google (default), dropbox and kotlinlang
language-formatters-pre-commit-hooks is licensed with Apache License version 2.0.