13 puan yazan beenzinozino 2024-11-14 | 2 yorum | WhatsApp'ta paylaş

Merhaba, Node.js ortamında Clang kullanan bir C, C++ ve Java biçimlendiricisi geliştirdim. Bu proje, artık bakım yapılmayan (deprecated edilmiş) Angular'ın clang-format paketini temel alarak yeniden başlatılan bir projedir.

Yaklaşık bir iki ay önce de aynı konuda bir paylaşım yapmıştım; ancak paketin kararlılığı daha da arttığı ve yeni özellikler eklendiği için bu yazıyı yeniden yazmaya karar verdim.

Şu anda birçok kişinin ilgi göstermesi ve mevcut legacy kullanıcıların büyük kısmının geçiş yapması sayesinde haftalık indirme sayısı 10.000'i aştı. Gerçekten çok teşekkür ederim.

Ayrıca bu paket tam test kapsamına ulaştı ve Node.js core içinde mevcut Angular clang-format projesi yerine bu paketin kullanılmasına geçilmesi için bir PR açılmış durumda; bu yüzden kararlılık konusunda güvenerek kullanabileceğinizi düşünüyorum. (Tabii ki hâlâ gözden kaçırdığım noktalar olabilir...)


Bu paket, LLVM'in C derleyicisi olarak iyi bilinen Clang'ın clang-format aracını temel alarak C, C++ ve Java dillerindeki kod biçimlendirmesini yöneten bir pakettir. Node.js ekosistemindeki en bilinen paketlerden biri olan Prettier ile aynı rolü üstlendiğini düşünebilirsiniz.

Ancak Prettier paketi C, C++ ve Java dilleri için biçimlendirme desteği sunmadığından, bu dillerde biçimlendirmeyi yönetmek için çoğu zaman clang-format kullanılır.

Node.js ortamındaki clang-format, özellikle Node.js core geliştirmesinde olduğu gibi JavaScript kodu ile C/C++ kodunu birlikte yazmanız gerektiğinde oldukça kullanışlıdır. Mevcut clang-format paketinde bu paketi kullanmak için ek bağımlılıkların kurulması gerekiyordu; fakat bu paketle artık buna gerek yok.

Ayrıca mevcut clang-format paketi, CI gibi ortamlarda Node.js ve npm kullanan iş akışlarına entegre edilmesi açısından epey zahmetliydi; ancak bu paketle yalnızca npm'den indirip script ayarlarını yapmak yeterli olduğu için CI ortamlarında önemli avantajlar sağlıyor.


Ek olarak, 1.2.0 sürümüne yükseltilmesiyle birlikte yeni özellikler eklendi. Temel değişiklik, git-clang-format paketinin eklenmiş olmasıdır.

C/C++ projesi geliştirirken kod biçimlendirmeye ihtiyaç duyup clang-format gibi paketleri devreye almayı düşündüğünüz bir durumu örnek olarak ele alalım.

Küçük ölçekli projelerde kod biçimlendirmesini topluca düzenleyip tek seferde commit etmek, geçmiş takibi açısından büyük bir sorun yaratmayabilir. Ancak büyük ölçekli projelerde kod biçimlendirme kullanıma alındığında mevcut kodun biçimlendirmesini topluca değiştirmek gerekebileceği için commit geçmişinin takibini karmaşıklaştırma riski vardır.

Peki geliştirici 1000 satırlık kodun yalnızca 100 satırını değiştirdiyse ve commit sırasında yalnızca değiştirilen bu 100 satır için biçimlendirme kontrolü yapılırsa ne olur? Birincisi, yalnızca değiştirilen 100 satıra biçimlendirme uygulamak yeterli olacağı için 1000 satırın tamamını baştan düzenlemeye gerek kalmaz ve commit geçmişini takip etmek daha kolay olur. İkincisi, geliştirme sürecinde kod her commit edildikçe biçimlendirme uygulanmış kod miktarı giderek artar; böylece zamanla kod biçimlendirmesi daha tutarlı hale gelir.

Bunun için kullanılan paket git-clang-format paketidir. lint-staged ile staged edilen dosyaları kontrol ederek CI hızını artırmaya benzer şekilde, bunun bir adım ötesine geçip değiştirilen dosyalar içindeki yalnızca değişen kod satırlarını denetleyerek kod biçimlendirme kontrolü uygulayabilirsiniz. Bu araç da LLVM tarafından varsayılan olarak sağlandığı için paket halinde sarmalanıp yayımlandı.

Resmî dokümantasyonda kullanım şekli ayrıntılı olarak açıklanıyor; ilgi gösterirseniz memnun olurum. (Yalnız resmî dokümantasyon İngilizce.) Sorularınız veya farklı görüşleriniz varsa paylaşırsanız sevinirim. Uzun yazıyı okuduğunuz için teşekkür ederim.

Resmî dokümantasyon: https://clang-format-node.lumir.page
Depo: https://github.com/lumirlumir/npm-clang-format-node

2 yorum

 
rumbarum 2024-11-18

Açık kaynak geliştirmeyi destekliyorum!

 
beenzinozino 2024-11-18

Teşekkür ederim!!🙇‍♂️