Ktlint kullanımı— Android

ömer iyiöz
DigiGeek
Published in
4 min readMar 29, 2021

Merhaba değerli Android geliştiriciler ,

bu yazımda ktlint’den bahsedeceğim. KtLint kullanarak kotlin projenizde kotlin style guide’larına uyup uymadığını kontrol edebilirsiniz. Style guideline’a uygun şekilde projenizin tamamının otomatik olarak formatlanmasını sağlayabilirsiniz. Ayrıca Command Shift L kısa yolu ile yaptığınız auto indentation’ı ktlint format’lamaya bağlayabilirsiniz.

Hızlıca başlayalım.

Projenize KtLint’i entegre etmenin farklı yolları var. Temel olarak ise plugin’li ve pluginsiz entegre etmek olarak 2 farklı yolu var diyebiliriz. Bu yazımda

https://github.com/jlleitschuh/ktlint-gradle adresindeki plugin’i entegre edeceğim, ancak diğer yollardan da bahsedeceğim.

1- ktlint plugin eklenmesi

root level build.gradle’ınıza aşağıda plugin’i eklemelisiniz.

// root-level build.gradle
plugins {
id "org.jlleitschuh.gradle.ktlint" version "10.0.0"
}

2- ktlint plugin’in apply edilmesi

root level build.gradle’ınıza aşağıdaki kodu eklemelisiniz. Bu plugin mavenCentral içerisinden geldiği için mavenCentral da eklenmelidir.

allprojects {
repositories {
//blah blah

mavenCentral()
}
apply plugin: "org.jlleitschuh.gradle.ktlint"
}

Entegrasyon okdir booom! Ktlint’i bilgisayarımıza kurmaya bile gerek kalmadı fark ettiyseniz. Normalde bilgisayarımıza Ktlint’i kurarak çalıştırabileceğimiz komut satırlarını çalıştırabilmek için

3— Kodu ktlint’e göre check etmek

Projemizi ktlint’e göre check etmek için Android studio’da terminal içerisinde aşağıdaki kodu çalıştıralım

./gradlew ktlintCheck

Eğer bir problem varsa detayını görmek için bu komutun sonuna

--stacktrace

ekleyerek çalıştırabilirsiniz :

./gradlew ktlintFormat --stacktrace

4 — Kodu ktlint’e göre formatlamak

Projemizin ktlint’e uygun şekilde otomatik olarak formatlanması için aşağıdaki kodu çalıştıralım

./gradlew ktlintFormat

5 — 🔥 ktlint’i tüm Android Projelerimde kullanmak istiyorum diyenler, oto format olarak ktlint formatlama kullanmak istiyorum diyenlerrr buraya 🔥

Yukarıdaki kodu çalıştırdıktan sonra otomatik olarak formatlanmış bir kotlin kodunu açalım. Bu kodda Command Shift L diyerek oto format yaptığımızda farklı bir şekilde formatlama yapılır. Üzerinde çalıştığımız android projemizde oto formatlamanın ktlint formatına göre yapılmasını istiyorsak şu komutu vermeliyiz

./gradlew ktlintApplyToIdea

Bu komut .idea klasörü altındaki dosyalarda değişiklik yapar. Dolayısıyla .idea klasörünü silerseniz bu komutu tekrar çalıştırmanız gerekir.

🐎 🐎 🐎 Eğer tüm android studio projelerinizde ktlint style’ı kullanılsın istiyorsanız aşağıdaki komutu bir kereye mahsus çağırabilirsiniz.

ktlint applyToIDEAProject

Bu komutu çalıştırdıktan sonra ktlint entegrsayonunu yapmadığınız herhangi bir projede bile aşağıdaki komutu çalıştırarak ktlint’e göre formatlama yapabilirsiniz.

ktlint -F

ktlint check yapmak için ise

ktlint

komutunu çalıştırabilirsiniz. ktlint ile başlayan komutların çalışabilmesi için bilgisarınıza ktlint kurmalısınız. brew install ktlint diyerek kurulum yapabilirsiniz.

6 — installGitPreCommitHook

Commit’lemeden önce kodunuzu ktlint ile check etmeyi unutmak istemiyorsanız, ktlint’in bunun için de bir çözümü var.

Ktlint’i bilgisayarınıza kurduysanız, aşağıdaki komutu çalıştırabilirsiniz.

ktlint installGitPreCommitHook

Ktlint’i bilgisayarınıza kurmadıysanız ve aşağıdaki plugin’i kullanıyosanız, github readme içerisinde preCommitHook diye aratarak size lazım olan komutu bulabilirsiniz.

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

./gradlew addKtlintCheckGitPreCommitHook
./gradlew addKtlintFormatGitPreCommitHook

Böylece kodunuzu commit’lemek istediğinizde kodunuz siz unutsanız bile ktlint’e göre check edilir. Eğer sorun varsa kodunuz commit edilemez, ktlint size sorunlu yerleri gösterir.

7 — Suppress ktlint check

Kodunuzun bir yerinin ktlint’e göre check edilmemesini istiyorsanız, o kısıma aşağıdaki sihirli satırları ekleyebiliriz.

// ktlint-disable/* ktlint-disable */
...
/* ktlint-disable */

Plugin’siz KtLint kullanmak

Burda şu mantığı anlamak önemlidir. Ktlint için bir plugin’i projemize eklediğimizde bu plugin bize kullanabileceğimiz hazır gradle task implementation’larını verir. Ancak biz plugin kullanmazsak gerekli olan gradle task’larını kendimiz manual olarak yazmak zorunda kalırız.

Tavsiye edilen yol bu değil ancak kullanmak istiyorsak veya farklı projelerde görürsek ne olduğunu bilelim diye açıklıyorum. Kodları şurdan aldım https://github.com/pinterest/ktlint

Bu kodları root level build.gradle’a değil app level build.gradle’a kopyalayalım.

repositories {
mavenCentral()
}

configurations {
ktlint
}

dependencies {
ktlint "com.pinterest:ktlint:0.41.0"
// additional 3rd party ruleset(s) can be specified here
// just add them to the classpath (e.g. ktlint 'groupId:artifactId:version') and
// ktlint will pick them up
}

task ktlint(type: JavaExec, group: "verification") {
description = "Check Kotlin code style."
classpath = configurations.ktlint
main = "com.pinterest.ktlint.Main"
args "src/**/*.kt"
// to generate report in checkstyle format prepend following args:
// "--reporter=plain", "--reporter=checkstyle,output=${buildDir}/ktlint.xml"
// to add a baseline to check against prepend following args:
// "--baseline=ktlint-baseline.xml"
// see https://github.com/pinterest/ktlint#usage for more
}
check.dependsOn ktlint

task ktlintFormat(type: JavaExec, group: "formatting") {
description = "Fix Kotlin code style deviations."
classpath = configurations.ktlint
main = "com.pinterest.ktlint.Main"
args "-F", "src/**/*.kt"
}

Fark ettiyseniz, plugin’li örnekte çağırdığımız ktlintCheck ve ktlintFormat task’larının definition’larını kodumuzun içine kendimiz yazdık burda. Aşağıdaki iki komutu komut satırında çalıştırarak yukarıdaki gradle task’larını çağırabiliriz, bu şekilde de ktlint ile çalışabiliriz.

./gradlew ktlintFormat
./gradlew ktlint

Çalıştırabileceğiniz komutları görmek için, aşağıdaki komutu çalıştırabilirsiniz :

./gradlew ktlint --help

Bilgisayarınız ktlint’i kurduysanız, aşağıdaki komutu çağırarak da aynı sonucu alabilirsiniz.

ktlint --help

KtLint kurulumu

Daha önce bahsettiğim üzere, plugin kullanıyorsanız, KtLint’i bilgisayarınıza kurmaya gerek yok, ancak bazı durumlarda ihtiyacınız olabilir, örneğin ktlint’i tüm android projelerinizde kullanmak için applyToIDEAProject komutunu çalıştırdıktan sonra ktlint’i entegre etmediğiniz projeyi ktlint’e göre check etmek formatlamak mümkün, bunun için ise aşağıdaki komutla ktlint’i kurabilirsiniz.

brew install ktlint

Not : Komutlar arasında kayboluyorsanız, oh my sh ‘ı terminal’inize yüklemenizi tavsiye ederim, Ctrl R yaparak geçmiş tüm komutlarınızı görüp istediğiniz komutu çalıştırabilirsiniz, auto suggestion özelliğinden faydalanabilirsiniz.

Faydalı olabileceğini düşündüğüm kaynaklar :

--

--