SwiftLint va Danger-dan foydalanish Swift-ning eng yaxshi amaliyotlari

Ushbu xabar dastlab Swift Post-da paydo bo'lgan, bu erda mavjud.

Apple Swift ishlab chiqaruvchilar hamjamiyati orasida tobora ommalashib bormoqda. Ko'pchiligimiz allaqachon loyihalarimizni ushbu xalqqa moslashtira boshladik. Qabul qilayotganda, biz ehtiyot bo'lmasligimiz mumkin, chunki Swift juda moslashuvchan til va uni suiiste'mol qilish juda oson. Ayniqsa, Objective-C madaniyatidan kelib chiqib, ilg'or tajribalarni qo'llash juda muhimdir.

Göksel-dan Swifty Tips-ni o'qib chiqib, uning ikkita maslahati SwiftLint yordamida avtomatik ravishda tekshirilishi mumkinligini angladim. Bundan tashqari, biz dangasa odamlarmiz va masterga qo'shilishdan oldin kodimizni tekshirishni unutishga moyil bo'lamiz. Bu erda Xavf yaltiroq kiyimlar bilan sahnaga chiqadi va biz xavfli ish qilayotganimizni ta'kidlaydi.

Qiziq ovozlar ... Aslida bu qanday vositalar?

SwiftLint

SwiftLint - bu Swift uslubi va konventsiyalarini bajarish uchun ochiq manbali vositadir. Bu Realm tomonidan ishlab chiqilgan. Siz kodlash uslubingiz qoidalarini o'rnatishingiz va ularni ishlab chiqishda majburlashingiz mumkin. SwiftLint-da buyruq qatori vositasi, Xcode plaginlari, AppCode va Atom integratsiyasi mavjud. Shunday qilib, har doim sizning rivojlanish muhitingizga mos keladi. Agar siz tintish qoidalarini buzsangiz, sizga ogohlantirishlar va / yoki xatolar ko'rsatiladi.

O'rnatish bo'yicha qo'llanma va qo'llanmani shu erdan ko'rib chiqishingiz mumkin. O'rnatishdan so'ng siz odatdagidek ba'zi qoidalarga ega bo'lasiz. Masalan, xususiy IBOutlet-dan foydalanganda yoki majburiy ravishda majburiy ravishda o'rashda ogohlantiradi.

Keling, Gokselning maslahatlarini ko'rib chiqaylik. U aytadi: "Hech qachon bemalol o'rashni ishlatmang". SwiftLint buni qanday tasvirlayotganini sukut bo'yicha ta'minlaydi. Agar siz IBOutlet-dan tashqari bo'lsa, ixtiyoriy ravishda ochmaganingizda SwiftLint sizni ogohlantiradi. Ikkinchisi - "suiiste'mol qilmaslik". Agar siz o'zingiz xohlagan imkoniyatdan foydalanmasangiz, SwiftLint shunchaki aqlli.

if let _ = Foo.optionalValue {} // Triggerlar ogohlantirish
if case .some (let _) = self {} // ogohlantirishni ishga tushirish
if foo () {let _ = bar ()} // Ogohlantirish emas
if foo () {_ = bar ()} // Ogohlantirish emas

Eng yaxshi tajribalarni individual ravishda qo'llashdan tashqari, biz kodlar bazasini izchil qilishni xohlaymiz. Maxsus qoidalarni qo'llashni osonlashtirish. Ushbu qoidalar eng yaxshi amaliyotga mos kelishi kerak. Linting-ni sozlash .swiftlint.yml faylidan ishlaydi. Ushbu fayl loyihaning asosiy yo'lida joylashgan. Ushbu YML faylida biz shaxsiy qoidalarni yoqishimiz, o'chirishimiz yoki yozishimiz mumkin. Keling, ba'zi misollarni ko'rib chiqaylik.

Avvalo, birinchi navbatda, katta funktsiyani yozish odatda yomon belgidir. Agar sizning vazifangiz tobora kattalashib borayotgan bo'lsa, demak siz javobgarlikni taqsimlashingiz kerak. .Swiftlint.yml faylingizga quyidagi kod bo'lagini qo'shing. Bu ishlab chiquvchilarni 200 satrdan kam funktsiyalarga ega bo'lishlari haqida ogohlantiradi. Agar dasturchi 300 ga yetsa, SwiftLint xato keltirib chiqaradi. Esda tutingki, siz ogohlantirishlarni e'tiborsiz qoldirishingiz mumkin, ammo xatolardan emas.

function_body_length:
 - 200 # ogohlantirish
 - 300 # xato

Deyarli har bir loyihada o'zgarishi mumkin bo'lmagan bog'liqliklar yoki kod qismlari mavjud. Ushbu kod bo'laklari umuman bosilmasligi kerak. Masalan, agar loyiha CocoaPodlarni qaramlik menejeri sifatida ishlatsa, unda barcha qaramlik fayllarini saqlaydigan "Pods" papkasi bo'ladi. Ushbu jildni astarlash jarayonidan chiqarib tashlashimiz kerak. Ko'rib turganingizdek, bu juda oson.

chiqarib tashlangan:
  - Podlar

Kompaniyaning yo'riqnomasi yoki loyihada ishlaydigan ishlab chiqaruvchi kodlash uslubiga ega. SwiftLint bortga chiqish jarayonida yangi kelganlarga ushbu uslublarni qo'llashga yordam beradi.

Misollardan ko'rinib turibdiki, SwiftLint-ga qo'shimcha kuch beradigan narsa moslashuvchanlikdir. Ba'zan siz qoidalarni maxsus chiziqlar yoki fayllarda buzishingiz kerak. Ushbu holatlar SwiftLint-da maxsus sharhlar yordamida ko'rib chiqilgan. Ushbu holatlarda qoidalarni sozlash uchun siz quyidagilardan foydalanishingiz mumkin.

Faylning qoidasini o'chirish uchun ushbu sharhni qo'shing:

// swiftlint: qoida_nomini o'chirib qo'ying

Quyidagi qatorda qoidani o'chirish uchun ushbu sharhni qo'shing:

// swiftlint: o'chirish: keyingi qoida_nomasi

Oldingi satrda qoidani o'chirish uchun ushbu sharhni qo'shing:

// swiftlint: o'chirish: oldingi qoida_ nomi

Siz barcha qoidalar ro'yxatini terminalda swiftlint qoidalari buyrug'ini ishga tushirish orqali olishingiz mumkin.

Va nihoyat, biz o'z qoidalarimizni tayyorladik va endi tinchlik bilan kodlashimiz mumkin. Ammo ba'zi holatlarda ham, siz linting qoidalarini qo'llashdan ko'ra ko'proq ehtiyot bo'lishingiz kerak. Bu erda Xavf paydo bo'ladi.

P.S.: Mening oldindan belgilab qo'yilgan .swiftlint.yml faylimni bu erda topishingiz mumkin .

Xavf ️

Har bir loyiha / kod bo'limi o'ziga xos oqimga ega. Loyiha o'sib ulg'aygan sayin, yangi xususiyatlarni saqlash va qo'shish qiyinlashadi. Xato moyilligi oshadi. Kodlash bo'yicha ko'rsatmalarga ega bo'lish va eng yaxshi amaliyotlarni qo'llash odatda etarli emas. Biz insonmiz, xato qilamiz. Xavf asosiy xatolarga duch kelishi mumkin va bizga qiyinroq muammolar haqida o'ylashga imkon beradi. Masalan, u odatiy xatolarni yoki siz o'zgartirmaydigan fayllarni yaratishi mumkin. Agar siz 20 tadan ko'p kodni yozsangiz, u sizni testlarni yozishga majbur qilishi mumkin. Qoidalar sizning qo'lingizda SwiftLint bilan bir xil.

Xavf - bu CI-da tortish / birlashtirish so'rovi jarayonida ishlaydigan yoqutli marvarid. Bu sizning xabarlaringiz, sharhlaringizni qoldiradi yoki sizning qoidalaringiz buzilgan taqdirda ham CI qurishda muvaffaqiyatsiz bo'ladi. Xavf bir nechta CI vositalarida ishlaydi va GitHub, Bitbucket va GitLab-da suhbatlashishi mumkin.

Xavf PR / MR-da xabarlar, ogohlantirishlar, xatolarni qoldirishi mumkin. Manba: xavf.sistemalar

CI jarayoniga xavf tug'diradigan dasturni o'rnatish uchun siz ushbu erda ko'rsatmalarga amal qilishingiz mumkin. Danger qoidalarni Dangerfile-da yozilgan Yoqut skriptidan foydalanadi. Bu erda nima qilishimiz mumkinligini ko'rib chiqaylik.

Yagona javobgarlik va kodni oson ko'rib chiqish uchun ishlab chiquvchilar katta tortish so'rovlarini ochmasliklari kerak. Agar tortishish so'rovida 600 tadan ko'p kod mavjud bo'lsa, tortib olish so'rovini ajratish haqida ogohlantirish bo'lishi kerak. Xavf uni bitta konfiguratsiya qatori bilan ta'minlaydi:

agar git.lines_of_code> 600 bo'lsa, "Katta PR, kichikroq bo'lishga e'tibor bering" deb ogohlantiring

Yana nima? Agar siz Test-After dasturini ishlab chiqish jarayoni bilan ishlayotgan bo'lsangiz, testlarni yozishni osongina unutishingiz mumkin. Boshqa tomondan, "Siz testlarni qo'shishni unutdingiz" sharhlari uchun avtomatlashtirilgan usul bo'lishi kerak. Umuman olganda, agar siz 20 dan ortiq kod satrlarini o'zgartirsangiz, testlarni yozishingiz kerak. Chiziqlar soni sizning qaroringizga bog'liq, ammo siz g'oyani oldingiz. Xavfli vaziyatga qanday erishish mumkinligini ko'rib chiqamiz:

## Loyihaning papkasida biron bir o'zgarish mavjudligini tekshirib ko'ramiz
has_app_changes =! git.modified_files.grep (/ ProjectName /) bo'sh.
## Keyin, testlar yangilanganligini tekshirishimiz kerak
has_test_changes =! git.modified_files.grep (/ ProjectNameTests /) bo'sh.
## Va nihoyat, ularni birlashtiramiz va qo'shimcha shart qo'yamiz
kodlar satrlarining o'zgartirilgan soni uchun ##
agar has_app_changes &&! has_test_changes && git.lines_of_code> 20
  muvaffaqiyatsiz ("Sinovlar yangilanmadi", yopishqoq: noto'g'ri)
oxiri

Xavf har qanday loyihaga mos keladi. Plaginlar orqali bir nechta tillarga keng konfiguratsiyani taqdim etadi. Swift holatida Ash Furrow SwiftLint uchun plagin ishlab chiqdi. Ushbu plagin tufayli biz SwiftLint-ning ogohlantirishlarini tortib olish so'rovida keltirilgan sharhlar sifatida olamiz. O'rnatish bo'yicha qo'llanmani bu erda ko'rishingiz mumkin. O'rnatishdan so'ng, Dangerfile-ning oxiriga quyidagi qatorlardan birini qo'shishingiz kerak bo'ladi.

swiftlint.lint_files
swiftlint.lint_fayllar inline_mode: haqiqiy

Dangerfile sizning kodingizda qo'llaniladigan ishlab chiqish ko'rsatmalaringizni ta'minlaydi. Bu sizni yanada ishonchli qiladi. Oxir oqibat, ogohlantirishlar ehtiyot bo'lishga o'rgatadi. Xavfning imkoniyatlari to'g'risida batafsilroq ma'lumot berish uchun bu erda ma'lumotnoma qo'llanmasi mavjud.

Eslatma: Siz CI-ni sozlashingiz shart emas. Mahalliy mashinangizda xavfli mahalliy buyruq bilan Dangerni ishga tushirish mumkin.

Erenning javobi tufayli, agar xavfli mahalliy buyruq so'nggi ochiq PR orqali o'tmasa, siz har doim quyidagi buyruqdan foydalanishingiz mumkin:

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

P.S .: Mening oldindan aniqlangan Dangerfile faylini bu erda topishingiz mumkin .

Bonus: Git Hook bilan SwiftLint

Agar siz SwiftLint qo'llab-quvvatlamaydigan turli xil matn muharrirlari yoki IDE-lar bilan ishlayotgan bo'lsangiz, kodni kiritish uchun faqat buyruq satri vositalaridan foydalanishingiz mumkin. Bu qo'shimcha qadam va uni unutish oson. Yaxshi narsa, biz buni avtomatlashtirishimiz mumkin. Git-da kanca xususiyati - bu narsalarni avtomatlashtirish uchun yana bir joy. Asosan, Git kancalari - bu Git o'tkazish, surish va qabul qilish kabi hodisalardan oldin yoki keyin bajariladigan skriptlar. Ushbu skriptlardan birida biz SwiftLint-ni ishga tushirishimiz mumkin. Shaxsan, men SwiftLint-ni sub-Matn-da yozayotganda oldindan tuzilgan kancada ishlatmoqdaman.

P.S .: Mening to'liq javobgarlikka tortish kancamni bu erda topishingiz mumkin . Agar siz xuddi shu ma'lumotni ishlatmoqchi bo'lsangiz, yuqoridagi faylni loyihangiz ichiga .git / kancalar papkasi ostiga qo'ying. (U erda siz kanca skriptlarining namunalarini ko'rasiz. Ularni orasiga joylashtiring.) Bundan tashqari boshqa ilgak sifatida ham foydalanishingiz mumkin. Siz mavjud ilgaklar ro'yxatini va qo'shimcha ma'lumotni bu erda ko'rishingiz mumkin.

Oxiri

Danger va SwiftLint sizga ahamiyatsiz narsalarni boshqarishga ruxsat bering. Endi siz kodlarni ko'rib chiqish paytida asosiy muammolarni o'tkazib yuborishingiz va murakkabroq narsalarga e'tibor qaratishingiz mumkin. SwiftLint va Danger hamma narsa xohlaganingizcha bo'lishini ta'minlaydi. Sinab ko'rmoqchimisiz?

O'qiganingiz uchun tashakkur !!! so'zini tarqatishga yordam bering.

Kelgusi blog xabarlari uchun savollaringiz, takliflaringiz, sharhlaringiz yoki fikrlaringiz bormi? Menga Twitter orqali murojaat qiling yoki sharh yozing! GitHub-da ham menga ergashishingiz mumkin.

Mening boshqa xabarlarim:

  • IOS-da olis xabarnomalar uchun Firebase Cloud Messaging-dan foydalanish
  • Swift - HTTP usullari va ma'lumotlar bazasi operatsiyalarida birinchi server tomoni
  • Swift Backend API-ni sinovdan o'tkazish - Swift server-side dasturida birlik sinovlari