Ktlint kullanımı— Android
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 :