When we talk about lint, many developers think it is related to the code style guide. Wow !, but not only that
Linting is the process of analyzing code for potential errors.
As an Android developer, we use the kotlin language to develop our applications, but how to make our code clean and easy to read? There may still be many of us who are still influenced by Java Code Style or some who follow the Kotlin Style Guide
Ktlin may be our assistant, it was created to be a standard Kotlin writing format with simplicity, expansion, and an active community. So how do we use Ktlin in our project?
We should read the documentation on Ktlint , there are many ways to install Ktlint, in this article I just introduced 1 way
Setting
Add Plugin for your build.grade.kts
1 2 3 4 | plugins <span class="token punctuation">{</span> <span class="token function">id</span> <span class="token punctuation">(</span> <span class="token string">"org.jlleitschuh.gradle.ktlint"</span> <span class="token punctuation">)</span> version Versions <span class="token punctuation">.</span> ktlintPlugin <span class="token punctuation">}</span> |
Then set up the properties in Ktlin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ktlint <span class="token punctuation">{</span> version <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> Versions <span class="token punctuation">.</span> ktlint <span class="token punctuation">)</span> debug <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token boolean">true</span> <span class="token punctuation">)</span> verbose <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token boolean">true</span> <span class="token punctuation">)</span> android <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token boolean">false</span> <span class="token punctuation">)</span> outputToConsole <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token boolean">true</span> <span class="token punctuation">)</span> reporters <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token function">setOf</span> <span class="token punctuation">(</span> ReporterType <span class="token punctuation">.</span> PLAIN <span class="token punctuation">,</span> ReporterType <span class="token punctuation">.</span> CHECKSTYLE <span class="token punctuation">)</span> <span class="token punctuation">)</span> ignoreFailures <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token boolean">true</span> <span class="token punctuation">)</span> kotlinScriptAdditionalPaths <span class="token punctuation">{</span> <span class="token function">include</span> <span class="token punctuation">(</span> <span class="token function">fileTree</span> <span class="token punctuation">(</span> <span class="token string">"scripts/"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> filter <span class="token punctuation">{</span> <span class="token function">exclude</span> <span class="token punctuation">(</span> <span class="token string">"**/generated/**"</span> <span class="token punctuation">)</span> <span class="token function">include</span> <span class="token punctuation">(</span> <span class="token string">"**/kotlin/**"</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Add ktlin to the subproject
1 2 3 4 5 6 7 8 9 | subprojects <span class="token punctuation">{</span> <span class="token function">apply</span> <span class="token punctuation">(</span> plugin <span class="token operator">=</span> <span class="token string">"org.jlleitschuh.gradle.ktlint"</span> <span class="token punctuation">)</span> <span class="token comment">// Optionally configure plugin</span> ktlint <span class="token punctuation">{</span> debug <span class="token operator">=</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Detailed examples you can refer to the following example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | ext <span class="token punctuation">.</span> ReporterType <span class="token operator">=</span> org <span class="token punctuation">.</span> jlleitschuh <span class="token punctuation">.</span> gradle <span class="token punctuation">.</span> ktlint <span class="token punctuation">.</span> reporter <span class="token punctuation">.</span> ReporterType apply plugin <span class="token operator">:</span> <span class="token string">"org.jlleitschuh.gradle.ktlint"</span> ktlint <span class="token punctuation">{</span> version <span class="token operator">=</span> <span class="token string">"0.34.2"</span> debug <span class="token operator">=</span> <span class="token boolean">true</span> verbose <span class="token operator">=</span> <span class="token boolean">true</span> android <span class="token operator">=</span> <span class="token boolean">false</span> outputToConsole <span class="token operator">=</span> <span class="token boolean">true</span> reporters <span class="token operator">=</span> <span class="token punctuation">[</span> ReporterType <span class="token punctuation">.</span> PLAIN <span class="token punctuation">,</span> ReporterType <span class="token punctuation">.</span> CHECKSTYLE <span class="token punctuation">]</span> ignoreFailures <span class="token operator">=</span> <span class="token boolean">true</span> enableExperimentalRules <span class="token operator">=</span> <span class="token boolean">true</span> additionalEditorconfigFile <span class="token operator">=</span> <span class="token function">file</span> <span class="token punctuation">(</span> <span class="token string">"/some/additional/.editorconfig"</span> <span class="token punctuation">)</span> kotlinScriptAdditionalPaths <span class="token punctuation">{</span> include <span class="token function">fileTree</span> <span class="token punctuation">(</span> <span class="token string">"scripts/"</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> filter <span class="token punctuation">{</span> <span class="token function">exclude</span> <span class="token punctuation">(</span> <span class="token string">"**/generated/**"</span> <span class="token punctuation">)</span> <span class="token function">include</span> <span class="token punctuation">(</span> <span class="token string">"**/kotlin/**"</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> buildscript <span class="token punctuation">{</span> repositories <span class="token punctuation">{</span> maven <span class="token punctuation">{</span> url <span class="token string">"https://plugins.gradle.org/m2/"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> dependencies <span class="token punctuation">{</span> classpath <span class="token string">"org.jlleitschuh.gradle:ktlint-gradle:8.2.0"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> allprojects <span class="token punctuation">{</span> <span class="token comment">/* no need configuration */</span> <span class="token punctuation">}</span> subprojects <span class="token punctuation">{</span> apply plugin <span class="token operator">:</span> <span class="token string">"org.jlleitschuh.gradle.ktlint"</span> <span class="token punctuation">}</span> task <span class="token function">clean</span> <span class="token punctuation">(</span> type <span class="token operator">:</span> Delete <span class="token punctuation">)</span> <span class="token punctuation">{</span> delete rootProject <span class="token punctuation">.</span> buildDir <span class="token punctuation">}</span> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <span class="token keyword">import</span> org <span class="token punctuation">.</span> jlleitschuh <span class="token punctuation">.</span> gradle <span class="token punctuation">.</span> ktlint <span class="token punctuation">.</span> reporter <span class="token punctuation">.</span> ReporterType plugins <span class="token punctuation">{</span> <span class="token function">id</span> <span class="token punctuation">(</span> <span class="token string">"org.jlleitschuh.gradle.ktlint"</span> <span class="token punctuation">)</span> version Versions <span class="token punctuation">.</span> ktlintPlugin <span class="token comment">// "8.2.0"</span> <span class="token punctuation">}</span> ktlint <span class="token punctuation">{</span> version <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> Versions <span class="token punctuation">.</span> ktlint <span class="token punctuation">)</span> <span class="token comment">// "0.34.2"</span> debug <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token boolean">true</span> <span class="token punctuation">)</span> verbose <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token boolean">true</span> <span class="token punctuation">)</span> android <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token boolean">false</span> <span class="token punctuation">)</span> outputToConsole <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token boolean">true</span> <span class="token punctuation">)</span> reporters <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token function">setOf</span> <span class="token punctuation">(</span> ReporterType <span class="token punctuation">.</span> PLAIN <span class="token punctuation">,</span> ReporterType <span class="token punctuation">.</span> CHECKSTYLE <span class="token punctuation">)</span> <span class="token punctuation">)</span> ignoreFailures <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token boolean">true</span> <span class="token punctuation">)</span> kotlinScriptAdditionalPaths <span class="token punctuation">{</span> <span class="token function">include</span> <span class="token punctuation">(</span> <span class="token function">fileTree</span> <span class="token punctuation">(</span> <span class="token string">"scripts/"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> filter <span class="token punctuation">{</span> <span class="token function">exclude</span> <span class="token punctuation">(</span> <span class="token string">"**/generated/**"</span> <span class="token punctuation">)</span> <span class="token function">include</span> <span class="token punctuation">(</span> <span class="token string">"**/kotlin/**"</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> buildscript <span class="token punctuation">{</span> <span class="token comment">/* no need configuration */</span> <span class="token punctuation">}</span> allprojects <span class="token punctuation">{</span> <span class="token comment">/* no need configuration */</span> <span class="token punctuation">}</span> subprojects <span class="token punctuation">{</span> <span class="token function">apply</span> <span class="token punctuation">(</span> plugin <span class="token operator">=</span> <span class="token string">"org.jlleitschuh.gradle.ktlint"</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> tasks <span class="token punctuation">.</span> <span class="token function">register</span> <span class="token punctuation">(</span> <span class="token string">"clean"</span> <span class="token punctuation">,</span> Delete <span class="token operator">::</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">delete</span> <span class="token punctuation">(</span> rootProject <span class="token punctuation">.</span> buildDir <span class="token punctuation">)</span> <span class="token punctuation">}</span> |
Review
After confige is complete you can open the terminal and run the command ./gradlew ktlintCheck to see the error warnings found
When running ./gradlew ktlintCheck it will display some formatting errors. Not only that, it will show you the exact error you encountered, you can automatically fix the error by running the command: ./gradlew ktlintFormat
Refer
https://proandroiddev.com/simplify-android-kotlin-code-with-ktlint-20c702108901