Automate Ktlint Checks with Git Hooks: Avoiding Code Style Violations in Code Reviews

SUBSCRIBE TO THE BLOG

Would you ask a group of people to write a one-page story with the hope that they would all do it in the same writing style? — I wouldn’t expect it! On the contrary, you would likely find many different writing styles. Furthermore, can you imagine being in charge of validating if there are no discrepancies between authors? The same can be said when it comes to code styling. Code reviewers shouldn’t waste time checking if braces are on the wrong line or if the space indentation is correct. In this post, you will learn how to automate Ktlint checks with a pre-commit Git hook in your Android project to run code-style checks before you commit your change-list.

Ktlint

Ktlint runs static code analysis. By using this tool, you place the importance of code clarity and community conventions over personal preferences. So, the following project will follow the official code style from kotlinlang.org and Android Kotlin Style Guide.

Note: Ktlint respects the rules defined in the .editorconfig file and also supports custom rulesets

Ktlint Integration

We will use the Ktlint Gradle plugin, which automatically creates Gradle tasks for your project that run ktlint checks or do code auto format.

1. Add the following code snippets to the “build.gradle

Code snippets to add to build.gradle

build.gradle

2. Once the plugin is implemented, check if the ktlint tasks have been added.

Once you have added the plugin see if the ktlint tasks have been added.

Gradle tasks

 

 

Creating pre-commit Git hook

At this point, we should be able to run the ktlint check and format tasks, but we are aiming to run these tasks automatically before we commit our change list. For this purpose, we are going to create a Git hook.

Note: Git hooks are simple scripts that run when a particular event occurs in a Git repository

1. Create a “scripts” folder in the root of the project, then add a new file and call it “pre-commit.”

2. Add the following script in the “pre-commit” file:

Once you have your scripts folder and pre-commit file add the following script to the pre-commit file

scripts/pre-commit

 

Installing our Git hook

Git looks for possible scripts that need to be run into the .git/hooks” folder. We need to place our pre-commit hook into it.

The problem is that these scripts remain in our local environment. So, to ensure all members of the team will benefit, we can create a simple Gradle task that automatically places the script into the.git/hooks” folder.

1. Add the following task in the app module build.gradle” file:

Add this task in the app module build.gradle file

build.gradle project level

2. Build your project and check the .git/hooks” folder. Our script should be placed there:

Build out your project and check the .git/hooks folder. Your scripts should be there

.git/hooks folder

 

Try it out

Before running our test, how many code style violations can you spot in the following code? 

Test your code style skills. How many code style violations do you see?

Let’s try to commit these changes and see what happens.

Commit these changes and this should be the result.

 

Conclusion

Having this kind of setup can improve our team’s workflow and code cleanliness. At the same time, allows developers to focus on what really matters for the business instead of checking code style violations in every code review.

Let’s make code reviewers’ lives easier and write cleaner code! I hope you find this post useful.

 

References:

https://github.com/pinterest/ktlint

https://github.com/jlleitschuh/ktlint-gradle

https://ktlint.github.io/

https://www.atlassian.com/git/tutorials/git-hooks

 

New call-to-action

Andres Matamoros

Andres works as an Android developer at Gorilla Logic. Throughout his career he has built apps for a variety of industries, working on apps for banks, sport fishing, as well as attendance & time tracking. Most of his experience has been with Native Android, and also cross-platform development using Xamarin. In his spare time, he enjoys going to the movies, spending time with his family, and staying active (he considers himself an amateur cyclist!)

Related Articles

Ready to be Unstoppable?

Partner with Gorilla Logic, and you can be.