Node.js ortamında Clang kullanan bir C, C++, Java ve JavaScript formatlayıcısı geliştirdim.
(github.com/lumirlumir)- GitHub deposu: https://github.com/lumirlumir/npm-clang-format-node
- Resmî dokümantasyon sitesi: https://clang-format-node.lumir.page/
Merhaba!
Node.js ortamında Clang kullanan bir C, C++, Java ve JavaScript formatlayıcısı geliştirdim. Bu proje, artık bakımı yapılmayan Angular clang-format paketini temel alarak yeniden başlatılan bir projedir.
Buna benzer bir içeriği iki-üç ay önce paylaşmıştım; bu kez v1.3.0 sürümünü yayımlarken kullanıcıların daha kolay ve rahat kullanabilmesi için ayrıntılı bir dokümantasyon sitesi de ekledim. Dokümantasyon sitesine buradan ulaşabilirsiniz; temel kurulum yöntemlerinden bu paketi neden kullanmanız gerektiğine kadar çeşitli içerikler yer alıyor, ilgilenenlerin göz atmasının faydalı olacağını düşünüyorum.
Bu güncellemede çeşitli testler ekleyerek paketin kararlılığını daha da artırdım, ayrıca yeni özellikler de eklendi.
Bu paketlerin tamamı MIT lisanslıdır ve özgürce kullanabilirsiniz.
clang-format-node nasıl bir proje?
Bu paket, LLVM’nin C derleyicisi olarak tanınan Clang’ın clang-format aracısını temel alan ve C, C++, Java dillerinde kod formatlamayı destekleyen bir Node.js paketidir. Kısacası, Node.js ortamında Prettier’a benzer bir rol üstlenir; ancak farkı, Prettier’ın desteklemediği C, C++ ve Java dilleri için formatlama sağlamasıdır.
Özellikle Node.js core ya da Electron geliştirme gibi JavaScript kodu ile C/C++ kodunu birlikte yazmanız gereken durumlarda clang-format-node kullanışlıdır.
Mevcut clang-format paketinde Ubuntu gibi işletim sistemi ortamlarına bağlı ek bağımlılıkları kurma zahmeti vardı; ancak bu paketi kullanırsanız ek bir kurulum olmadan doğrudan kullanabilirsiniz. Ayrıca mevcut paketin CI ortamlarında Node.js ve npm tabanlı iş akışlarına entegre edilmesi zahmetliyken, clang-format-node npm’den kurup yalnızca script ayarlayarak kolayca kullanılabildiği için CI ortamında birçok avantaj sunar.
Peki clang-format-node paketinin özellikleri neler?
1. Angular clang-format için Drop-in Replacement
clang-format-node, Angular/clang-format paketinin kolayca yerine geçebilen bir Drop-in Replacement’tır.
Mevcut paketten clang-format-node’a geçiş oldukça basittir ve karmaşık bir sürece gerek kalmadan hemen kullanılabilir.
2. Clang kullanmak için ek bağımlılıklara gerek yok; yalnızca Node.js yeterli
Python veya C++ gibi ek bağımlılıklara hiç ihtiyaç yoktur. Yalnızca Node.js ile kolayca çalıştırabilirsiniz.
3. Geniş destek kapsamı
Çeşitli işletim sistemleri ve mimariler, Node.js sürümleri, GitHub Actions runner imajları ve Docker build imajları geniş kapsamda desteklenir.
4. Kolay CI yapılandırması
Karmaşık ayarlara gerek olmadan, diğer Node.js paketlerinde olduğu gibi clang-format-node kullanılabilir.
5. Otomatik build ve release
clang-format güncellendiğinde yeni npm sürümü otomatik olarak yayımlanır. GitHub Actions düzenli olarak güncellemeleri algılar, paketi build eder ve ardından bir Pull Request oluşturur.
clang-format ve git-clang-format ile kod formatlama
(Aşağıdaki yazı, benim https://clang-format-node.lumir.page/docs/get-started/introduction bölümünde İngilizce olarak yazdığım metnin kısmen Koreceye çevrilmiş hâlidir.)
Kod formatlamanın önemi
Kodu her zaman formatlayın
Kod formatlama, kod kalitesini yükseltmede çok önemli bir iştir. Formatlamanın özü, kodun biçimini tutarlı tutarak okunabilirliği ve anlaşılabilirliği artırmaktır.
clang-format nedir?
clang-format, C ve C++ gibi dillerdeki kaynak dosyaları otomatik olarak formatlayan bir araçtır ve LLVM Clang açık kaynak projesinin bir parçası olarak geliştirilmiştir.
Nasıl çalışır?
- Yapılandırma dosyası oluşturma
Formatlama stilini tanımlayan bir yapılandırma dosyası (.clang-format) oluşturulur. - Komutu çalıştırma
clang-formatkomutu çalıştırıldığında kaynak kod belirtilen stil kurallarına göre otomatik olarak yeniden düzenlenir.
Başlıca özellikler
- Çeşitli dil desteği
C, C++, Java, JavaScript, Objective-C, Protobuf, C# gibi birçok dili destekler. - Formatlama komutu örneği
Bu komut çalıştırıldığındaclang-format -i my_source.cppmy_source.cppdosyası belirlediğiniz stile göre otomatik olarak formatlanır.
Kod formatlama örneği
// Before formatting
void test(QString&data, bool extraString) {
int i=0;
for (i=0;i<3;i++) {
data+="reallylongstringtoproducealonglineasanexample" + QString::number(i * 1000) + "/filetoload.html";
if (extraString)
{
data += "some-extra";
}
}
}
// After formatting
void test(QString &data, bool extraString)
{
int i = 0;
for (i = 0; i < 3; i++) {
data += "reallylongstringtoproducealonglineasanexample" + QString::number(i * 1000)
+ "/filetoload.html";
if (extraString) {
data += "some-extra";
}
}
}
Yukarıdaki örnek, clang-formatın kodu nasıl formatladığını gösterir. Formatlama kuralları ekip stiline göre serbestçe ayarlanabilir.
clang-formatın sorunları
clang-format harika bir araçtır, ancak mevcut kod ve commit geçmişi açısından sorunlara yol açabilir.
Başlıca sorunlar
- Mevcut kodla çakışma
Tüm dosyayı formatladığınızda, formatlamayla ilgisiz bölümler de değişerek gereksiz değişiklikler oluşur. - Commit geçmişinde karmaşa
Büyük çaplı formatlama değişiklikleri commit geçmişini karmaşıklaştırabilir ve branch birleştirme, code review ve kod analizi süreçlerini zorlaştırabilir. - Yeni kod ile mevcut kod arasında tutarsızlık
Zaten formatlanmış bir koda yeni kod eklerken formatı korumak zor olabilir.
Çözüm: git-clang-format
git-clang-format, formatlamayı yalnızca değişen kodlara uygulamaya yardımcı olan bir Git genişletme aracıdır. Bunu kullanmanın avantajları şunlardır:
- Formatlama kapsamını en aza indirme: Yalnızca değişen kodlara formatlama uygulama
- İncelemeyi sadeleştirme: Formatlama değişiklikleriyle geliştirme değişikliklerini ayrı ayrı inceleyebilme
git-clang-format kullanım şekli
Kurulum
git-clang-format, clang-format-node paketiyle birlikte sunulur. clang-format-git npm paketini kurarak kullanabilirsiniz.
Temel iş akışı
- Kodu yazın.
- Değişiklikleri staging alanına ekleyin (
git add). git-clang-formatı çalıştırın.
Örnek
# Yeni dosya ekle ve değişiklikleri stage et
$ git diff --staged
diff --git a/x.cpp b/x.cpp
new file mode 100644
index 0000000..af14ed5
--- /dev/null
+++ b/x.cpp
@@ -0,0 +1,3 @@
+int main() {
+
+}
# git-clang-format çalıştır
$ git-clang-format
changed files:
x.cpp
# Formatlamadan sonra durumu kontrol et
$ git status
On branch master
Changes to be committed:
new file: x.cpp
Changes not staged for commit:
modified: x.cpp
Bu iş akışı sayesinde formatlama değişiklikleriyle geliştirme değişikliklerini birbirinden bağımsız olarak inceleyebilirsiniz. Formatlama değişikliklerini beğenmezseniz git checkout ile geri alabilirsiniz.
Stil belirtme
Formatlama stilini ayarlamak için --style seçeneğini kullanabilirsiniz.
$ git-clang-format --style=WebKit
$ git-clang-format --style=file # `.clang-format` dosyasını kullan
Sonuç
clang-format güçlü bir araçtır, ancak gerçek iş ortamında yalnızca clang-format -i komutu çoğu zaman yeterli olmaz. Formatlamayı yalnızca değişen bölümlere uygulayan git-clang-format kullanıldığında kodu verimli şekilde yönetebilir ve inceleme sürecini sadeleştirebilirsiniz.
git-clang-format yalnızca değişiklikleri formatladığı için, temiz ve profesyonel bir kod tabanını korurken esnek bir geliştirme ortamı da sağlar. Çalışma commit’lerini veya tüm branch’i formatlarken birkaç ek Git komutuyla formatlama sorunlarını kolayca çözebilirsiniz.
Uzun yazıyı okuduğunuz için teşekkür ederim! GeekNews okurlarının hepsine mutlu yıllar🙇♂️
- GitHub deposu: https://github.com/lumirlumir/npm-clang-format-node
- Resmî dokümantasyon sitesi: https://clang-format-node.lumir.page/
2 yorum
Beğenimi bırakıp geçiyorum
Teşekkür ederim!!