Swift'in En İyi Uygulamaları için SwiftLint ve Tehlike Kullanımı

Bu yayın ilk olarak burada bulunan Swift Post'ta göründü.

Apple’ın Swift'i, geliştirici topluluğu arasında giderek daha popüler hale geliyor. Çoğumuz projelerimizi bu akla adapte etmeye başladık. Kabul ederken, Swift çok esnek bir dil olduğu ve onu kötüye kullanması çok kolay olduğu için olması gerektiği kadar dikkatli olmayabiliriz. Özellikle bir Objective-C kültüründen gelmek, en iyi uygulamaları uygulamak gerçekten önemli hale geliyor.

Göksel'den Swifty Tips okuduktan sonra, birkaç ipucunun SwiftLint ile otomatik olarak kontrol edilebileceğini fark ettim. Ayrıca, tembel insanlarız ve efendi ile birleşmeden önce kodumuzu kontrol etmeyi unutma eğilimindeyiz. Tam burada, Tehlike sahneye parlak kıyafetlerle geliyor ve tehlikeli bir şey yaptığımızı gösteriyor.

Kulağa ilginç geliyor ... Ama bu araçlar aslında ne?

SwiftLint

SwiftLint, Swift stilini ve kurallarını uygulamak için açık kaynaklı bir araçtır. Realm tarafından geliştirilmiştir. Kodlama stil kurallarınızı belirleyebilir ve geliştirme sırasında bunları zorlayabilirsiniz. SwiftLint'in bir komut satırı aracı, Xcode eklentisi, AppCode ve Atom entegrasyonu vardır. Yani, her zaman gelişim ortamınıza uyuyor. Astar kurallarını ihlal ederseniz size uyarıları ve / veya hataları gösterecektir.

Kurulum rehberine ve öğreticiye buradan bakabilirsiniz. Yüklemeden sonra, varsayılan olarak bazı kurallara sahip olacaksınız. Örneğin, özel IBOutlet kullandığınızda veya opsiyonlarda paket açmaya zorladığınızda uyarır.

Göksel'in ipuçlarına bir göz atalım. “Asla dolaylı olarak paket açmamış seçenekleri kullanma” diyor. SwiftLint bunu varsayılan olarak tam olarak tanımladığı şekilde sağlar. SwiftLint, IBOutlet dışında bir isteğe bağlı örtük olarak paketten çıkardığınızda sizi uyaracaktır. Diğeri “kötüye kullanmadan kaçınma” dır. SwiftLint, bağlı seçeneklerinizi kullanmadığınızda işaret edecek kadar akıllıdır.

eğer let _ = Foo.optionalValue {} // Bir uyarı tetikler
if case .some (let _) = self {} // Bir uyarı tetikler
Eğer foo () {let _ = bar ()} // Bir uyarı tetiklemez
Eğer foo () {_ = bar ()} // Bir uyarı tetiklemez

En iyi uygulamaları tek tek uygulamaya ek olarak, kod tabanını tutarlı hale getirmek istiyoruz. Özel kuralların uygulanmasını kolaylaştırın. Yine de bu kurallar en iyi uygulamalara uymalıdır. Çizgiyi yapılandırma .swiftlint.yml dosyasından işlenir. Bu dosya projenin ana yolunda oturuyor. Bu YML dosyasında özel kuralları etkinleştirebilir, devre dışı bırakabilir veya yazabiliriz. Bazı örneklere bakalım.

İlk önce, ilk önce büyük bir işlev yazmak, genellikle kötü bir işarettir. Eğer fonksiyonunuz büyüyüyorsa, bu sorumluluğu paylaşmanız gerektiği anlamına gelir. .Swiftlint.yml dosyanıza aşağıdaki kod parçasını ekleyin. Bu, geliştiricilerin 200 satırdan daha az fonksiyona sahip olmaları konusunda uyarır. Programcı 300'e ulaşırsa, SwiftLint bir hata oluşturur. Unutmayın, uyarıları yok sayabilirsiniz ancak hataları göz ardı edebilirsiniz.

function_body_length:
 - 200 # uyarı
 - 300 # hata

Hemen hemen her projenin değiştirmesi mümkün olmayan bağımlılıklar veya kod parçaları vardır. Bu kod parçaları kesinlikle dizilmemelidir. Örneğin, bir proje CocoaPods'u bağımlılık yöneticisi olarak kullanıyorsa, tüm bağımlılık dosyalarını tutan Pods klasörüne sahip olacaktır. Bu klasörü lining işleminin dışında tutmamız gerekiyor. Aşağıda gördüğünüz gibi, çok kolay.

dışlanan:
  - Bakla

Şirket yönergeleri veya projede çalışan geliştirici kodlama stiline sahiptir. SwiftLint, yeni başlayanların bu işe başlama sürecinde bu tarzları benimsemelerine yardımcı olur.

Örneklerden gördüğünüz gibi, SwiftLint'e ekstra destek veren esneklik. Bazen kuralları özel satırlar veya dosyalar halinde kırman gerekir. Bu durumlar SwiftLint'te özel yorumlar ile ele alınmıştır. Bu durumlarda kuralları ayarlamak için aşağıdakileri kullanabilirsiniz.

Dosyadaki kuralı devre dışı bırakmak için bu yorumu ekleyin:

// swiftlint: kural_adı'nı devre dışı bırak

Kuralı aşağıdaki satırda devre dışı bırakmak için bu yorumu ekleyin:

// swiftlint: disable: sonraki kural_adı

Önceki satırdaki kuralı devre dışı bırakmak için bu yorumu ekleyin:

// swiftlint: disable: önceki kural_adı

Terminalde swiftlint rules komutunu çalıştırarak tüm kuralların listesini alabilirsiniz.

Sonunda kurallarımızı tamamladık ve şimdi barış içinde kodlayabiliriz. Ancak bazı durumlarda bile, yalnızca kural koyma kurallarını uygulamaktan daha dikkatli olmalısınız. Burası tehlikenin meydana geldiği yer.

P.S .: Önceden tanımlanmış .swiftlint.yml dosyamı burada .

Tehlike ️

Her proje / kod parçasının kendine özgü akışı vardır. Proje büyüdüğünde, yeni özelliklerin korunması ve eklenmesi zorlaşır. Hata eğilimli artar. Kodlama kurallarına sahip olmak ve en iyi uygulamaları uygulamak genellikle yeterli değildir. Biz insanız, hata yapıyoruz. Tehlike temel hataları yakalayabilir ve daha zor problemleri düşünmemize izin verir. Örneğin, kendi başınıza değiştirmemeniz gereken genel yazım hatalarını veya oluşturulan dosya değişikliklerini yakalayabilir. Ayrıca, 20'den fazla kod satırı yazdığınızda, testler yazmaya zorlayabilirsiniz. Kurallar senin ellerinde SwiftLint ile aynı.

Tehlike, çekme isteği / birleştirme isteği işlemi sırasında CI'da çalışan bir Yakut taşıdır. Kurallar ihlal edildiğinde mesajlar, yorumlar bırakıyor veya hatta CI kurulumunuzu gerçekleştiremiyor. Tehlike birçok CI aracında çalışabilir ve GitHub, Bitbucket ve GitLab'da sohbet edebilir.

Tehlike, PR / MR'da mesaj, uyarı, hata bırakabilir. Kaynak: tehlike

CI işleminize Tehlike yüklemek için kurulum kılavuzunu buradan takip edebilirsiniz. Tehlike, Dangerfile'de yazılmış bir Ruby komut dosyasındaki kuralları uygular. Orada neler yapabileceğimize bir bakalım.

Tek bir sorumluluk ve daha kolay kod incelemesi için geliştiriciler büyük çekme talepleri açmamalıdır. Bir çekme isteğinde 600'den fazla kod satırı varsa, çekme isteğini bölmek için bir uyarı olmalıdır. Tehlike bunu tek bir yapılandırma satırı ile sağlayabilir:

git.lines_of_code> 600 ise "Büyük PR, daha küçük parçalara ayırmayı düşün" uyarısı

Başka? Test Sonrası geliştirme işlemiyle çalışıyorsanız, test yazmayı kolayca unutabilirsiniz. Öte yandan, “Test eklemeyi unuttun” yorumlarının otomatik bir yolu olmalı. Genel olarak, 20'den fazla kod satırı değiştirirseniz, sınamalar yazmalısınız. Satır sayısı kararınıza bağlıdır, ancak fikir sizde. Bunu Tehlike ile nasıl başarabileceğimize bakalım:

## Proje klasöründe değişiklik olup olmadığını kontrol edelim
has_app_changes =! git.modified_files.grep (/ ProjectName /). boş?
## Öyleyse, testlerin güncellendiğini kontrol etmeliyiz
has_test_changes =! git.modified_files.grep (/ ProjectNameTests /). boş?
## Sonunda, onları birleştirelim ve ekstra şart koyalım.
Değiştirilen kod satırı sayısı için ##
eğer has_app_changes &&! has_test_changes && git.lines_of_code> 20
  başarısız ("Testler güncellenmedi", yapışkan: yanlış)
son

Her türlü proje için tehlike uygundur. Eklentilerle birçok dile çeşitli yapılandırma seçenekleri sunar. Swift durumunda, Ash Furrow, SwiftLint için bir eklenti geliştirdi. Bu eklenti sayesinde, çekme isteğinde satır içi yorum olarak SwiftLint uyarıları alabiliriz. Kurulum kılavuzunu burada görebilirsiniz. Yüklemeden sonra, Tehlike dosyalarınızı bitirmek için aşağıdaki satırlardan birini eklemeniz gerekir.

swiftlint.lint_files
swiftlint.lint_files inline_mode: true

Tehlike dosyası, geliştirme yönergelerinizin kodunuza uygulanmasını sağlar. Bu seni daha çok güvende tutar. Uzun vadede, uyarılar daha dikkatli olmanızı öğretir. Tehlike’nin yeteneklerini daha ayrıntılı görebilmeniz için burada bir referans kılavuzu bulunmaktadır.

Not: CI'yi yapılandırmanız gerekmez. Tehlikeli yerel komutla yerel makinenizde Tehlike çalıştırmak mümkündür.

Eren’in cevabı sayesinde, eğer yerel tehlike son açık PR ile karşılaşmazsa, her zaman aşağıdaki komutu kullanabilirsiniz:

tehlike pr https: // YOUR_PR_URL --dangerfile = YOUR_DANGERFILE_PATH

P.S .: Önceden tanımlanmış Tehlike dosyamı burada bulabilirsiniz.

Bonus: Git Hook ile SwiftLint

SwiftLint’in desteklemediği farklı metin editörleri veya IDE’lerle çalışıyorsanız, kodunuzu yazmak için yalnızca komut satırı araçlarını kullanabilirsiniz. Bu fazladan bir adım ve unutması kolaydır. İyi bir şey, bunu otomatikleştirebiliriz. Git'teki kanca özelliği işleri otomatikleştirmek için başka bir yer. Temel olarak, Git kancaları Git'in taahhüt, itme ve alma gibi olaylardan önce veya sonra yürüttüğü komut dosyalarıdır. SwiftLint'i bu senaryolardan birinde çalıştırabiliriz. Şahsen, Swift'i Sublime Text'de yazarken ön işleme kancalarında kullanıyorum.

P.S .: Önceden işlenmiş kancamın tamamını burada bulabilirsiniz . Aynısını kullanmak istiyorsanız, yukarıdaki dosyayı projenizin içine .git / hooks klasörü altına yerleştirmeniz yeterlidir. (Orada örnek kanca komut dosyalarını göreceksiniz. Bunların arasına yerleştirin.) Farklı bir kanca olarak da kullanabilirsiniz. Burada mevcut kancaların listesine ve daha fazla bilgiye göz atabilirsiniz.

Son

Danger ve SwiftLint'in sizin için önemsiz şeyleri ele almasına izin verin. Bundan sonra, temel sorunları atlayabilir ve kod incelemesi sırasında daha karmaşık şeylere odaklanabilirsiniz. SwiftLint ve Tehlike, her şeyin istediğiniz gibi olduğundan emin olmanızı sağlar. Denemek ister misin?

Okuduğunuz için teşekkürler! spread kelimesinin yayılmasına yardım edin.

Gelecek blog yazıları için sorularınız, önerileriniz, yorumlarınız veya fikirleriniz var mı? Twitter'da bana ulaşın ya da bir yorum yaz! Ayrıca beni GitHub'da da takip edebilirsiniz.

Diğer yayınlarım:

  • İOS'ta Uzaktan Bildirimler için Firebase Cloud Messaging Kullanma
  • Swift'de ilk sunucu tarafı deneyimleri - HTTP yöntemleri ve veritabanı işlemleri
  • Swift Backend API'yi Test Edilebilir Yapma - Swift Server-Side Uygulamasında Birim Testleri