EditorConfig Oluşturucu

.editorconfig

Deponuzdaki ekosistemleri seçin. Her biri, o ekosistemin ihtiyaç duyduğu kuralları içeren bir bölüm ekler.

Sonraki

Deponun kök dizinindeki bir .editorconfig, bu projenin dosyalarını nasıl biçimlendirdiğini her modern IDE’ye bildirir ve tab mı boşluk mu tartışmasını dosya dosya çözer. Zor olan kısım genel blok değil, dile özel bölümlerdir: YAML girintide tab karakterini hiç kabul etmez, make boşlukla başlayan bir komut satırını reddeder ve CRLF ile kaydedilen bir kabuk betiği çalışmaz. Deponuzdaki dilleri seçtiğinizde bu oluşturucu her birinin ihtiyaç duyduğu bölümü yazar ve yanına o bölümün neden orada olduğunu açıklayan bir not koyar.

Bir .editorconfig nasıl oluşturulur

  1. 1

    Deponuzdaki dilleri seçin

    JavaScript, JSON, HTML ve CSS, YAML, Python, PHP, Go, Rust, Ruby, Java, Markdown, Makefile, kabuk betikleri ve Windows toplu iş dosyaları. İşaretlediğiniz her seçenek dosyaya bir bölüm ekler.

  2. 2

    Her dosyanın devraldığı kuralları ayarlayın

    Girinti stili ve boyutu, satır sonu, karakter kümesi, son satır sonu, satır sonundaki boşluklar ve satır uzunluğu sınırı. Bunlar en üstteki `[*]` bloğuna yazılır; aşağıdaki her bölüm yalnızca kendi dilinin gerçekten ihtiyaç duyduğu kuralı geçersiz kılar.

  3. 3

    Her bölümün neden orada olduğunu okuyun

    Dosyanın yanındaki tablo, yazılan her bölümü açıklar; böylece ekibinizin istemediklerini commit'lemeden önce çıkarabilirsiniz.

  4. 4

    Deponun kök dizinine kopyalayın

    Dosyayı `.gitignore` dosyanızın yanına `.editorconfig` adıyla kaydedin. Editörler açtığınız bir sonraki dosyada onu devreye alır; ne derleme adımı ne de eklenti ayarı gerekir.

.editorconfig ne işe yarar?

Bir projenin kök dizinindeki .editorconfig adlı dosya, biçimlendirme kurallarını bildirir. EditorConfig destekli editörler (her büyük IDE ve çoğu modern metin editörü) bir dosya açıldığında bu kuralları uygular. Arama, düzenlenen dosyadan başlayarak dizin ağacında yukarı doğru ilerler ve root = true yazan ilk dosyada durur.

Örnek çıktı

Varsayılan ayarlarla (boşluk, girinti boyutu 4, LF, utf-8) ve sizin için önceden işaretlenmiş iki bölümle oluşturucu şunu üretir:

root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

[*.{md,markdown}]
trim_trailing_whitespace = false

[{Makefile,makefile,GNUmakefile,*.mk}]
indent_style = tab

Python, Go veya YAML kutusunu işaretleyin; ilgili bölüm aşağıda belirir ve o ekosistemin biçimlendiricisinin dayattığı kuralı baştan taşır.

Temel direktifler

Direktif Kabul edilen değerler Notlar
root true Aramanın orada durması için proje kökünde ayarlayın
charset latin1, utf-8, utf-8-bom, utf-16be, utf-16le Genellikle utf-8 seçilir. Spesifikasyon bayt sırası işaretini (BOM) önermez; utf-16 çifti ise her dosya için geçerli olur ve çoğu derleme aracı bunu okuyamaz
end_of_line lf, crlf, cr Platformlar arası çalışma için lf; yalnızca Windows depoları için crlf
indent_style space, tab
indent_size bir tam sayı veya tab indent_style = tab ile yok sayılmaz: tab_width buna geri döner, yani bir tabın ne kadar geniş görüneceğini belirler
tab_width bir tam sayı Nadiren gerekir, çünkü varsayılanı indent_size değeridir
insert_final_newline true, false Dosyaları POSIX uyumlu tutar, diff gürültüsünü azaltır
trim_trailing_whitespace true, false Markdown için kapatın; orada satır sonundaki boşluklar satır sonu anlamına gelir
max_line_length pozitif bir tam sayı veya unset Çekirdek spesifikasyonda yer almaz; özellikler wikisinde tanımlıdır. Sınır istemiyorsanız 0 yazmak yerine satırı hiç yazmayın

Stil kılavuzunu değil, derlemeyi bozan üç kural

Bir .editorconfig içindeki girdilerin çoğu tercihten ibarettir. Şu üçü değil ve dile özel bölüm tutmaya değmesinin nedeni de bunlar:

  • YAML, girintide tab karakterine izin vermez. Bu bir ayrıştırma hatasıdır, lint uyarısı değil. Projeniz tab ile girinti yapıyorsa ve GitHub Actions iş akışlarınız, Docker Compose dosyalarınız ya da Kubernetes manifest dosyalarınız varsa, YAML bölümünün boşluğu geri zorlaması gerekir.
  • make gerçek bir tab ister, hem de her kuralın komut satırının başında. Boşluk kullanırsanız missing separator. Stop. çıkar ve derleme durur. [{Makefile,makefile,GNUmakefile,*.mk}] bölümünün birkaç yazımı birden listelemesinin nedeni budur: EditorConfig dosya adlarını büyük/küçük harfe duyarlı eşleştirir ve depolarda hem Makefile hem makefile bulunur.
  • CRLF ile kaydedilen bir kabuk betiği çalışmaz. Çekirdek, satır başı karakterini yorumlayıcı yolunun bir parçası olarak okur ve şuna benzer bir hata verir: /bin/bash^M: bad interpreter: No such file or directory. Windows toplu iş dosyalarında sorun tam tersidir: cmd.exe, goto ve call :label komutlarını bayt konumuna göre arar, bu yüzden yalnızca LF içeren bir .bat yanlış satıra atlayabilir veya hiç hata vermeden yarıda durabilir.

Bunlardan ikisini genel blok çözmek yerine kendisi yaratabilir; bu oluşturucunun onları kollamasının nedeni de budur. Tab seçip YAML bölümünü eklemezseniz ya da CRLF seçip kabuk betikleri bölümünü eklemezseniz, yazılan dosyada adları hiç geçmediği hâlde o dosyalar bozulur. Oluşturucu bunu çıktının üstünde söyler; böylece çöken bir pipeline size haber vermek zorunda kalmaz. Aynısı utf-16 karakter kümeleri için de geçerlidir: projedeki her dosya için geçerli olurlar ve make, kabuk yorumlayıcıları ile Python bu şekilde kaydedilmiş kaynak kodu okuyamaz.

Bu oluşturucunun yazdığı dil kuralları

Dil veya dosya Bölüm Neyi neden ayarlar
JavaScript, TypeScript *.{js,jsx,mjs,cjs,ts,tsx} 2 boşluk, Prettier varsayılanı
JSON *.{json,jsonc} 2 boşluk, npm’in package.json dosyasına yazdığı genişlik
HTML, CSS, şablonlar *.{html,htm,css,scss,sass,less,vue,svelte} 2 boşluk; girintili Sass sözdiziminin ayrıştırılabilmesi için de zorunlu
YAML *.{yml,yaml} 2 boşluk; proje tab kullansa bile boşluk
Python *.{py,pyi} 4 boşluk, PEP 8 ve Black
PHP *.php 4 boşluk, PSR-12. WordPress tab, Drupal ise 2 boşluk kullanır
Go {*.go,go.mod} Tab, çünkü gofmt tab ile girinti yapar
Rust *.rs 4 boşluk, rustfmt varsayılanı
Ruby {*.rb,*.rake,Gemfile,Rakefile} 2 boşluk, RuboCop varsayılanı
Java *.java 4 boşluk, Oracle’ın kuralları. Google’ın Java stili 2 kullanır
Markdown *.{md,markdown} Satır sonundaki boşlukları korur; Markdown satır sonunu böyle yazar
Makefile {Makefile,makefile,GNUmakefile,*.mk} make’in zorunlu kıldığı tab
Kabuk betikleri *.{sh,bash,zsh} Projenin geri kalanı ne kullanırsa kullansın LF
Windows toplu iş *.{bat,cmd} CRLF, çünkü cmd.exe etiketleri bayt konumuna göre arar

Bu tabloda olmayana dikkat edin: satır uzunlukları. PEP 8 79 der, Black 88 der, PSR-12 esnek bir 120 der, rustfmt ise 100 der. Bunlardan herhangi birini dile özel bir bölüme yazmak, proje geneli için seçtiğiniz sınırı sessizce geçersiz kılardı. Bu yüzden oluşturucu max_line_length satırını yalnızca [*] bloğunda bırakır ve bu sayıları burada tutar; böylece onları bilerek uygulayabilirsiniz.

Editörünüz bunu destekliyor mu?

Yerleşik destek: VS Code, JetBrains IntelliJ ailesi, Visual Studio, Sublime Text, Xcode ve Notepad++. Vim, Emacs, Neovim ve birkaçı için küçük bir eklenti gerekir. Dosya düz INI biçiminde olduğundan linterlar ve biçimlendiriciler de okuyabilir; Prettier ile bazı dil sunucularının onunla uyumlu kalmasının yolu budur.

Sık Sorulan Sorular

Proje köküne, en üstünde root = true satırıyla koyun. Belirli yolları geçersiz kılmak için alt dizinlere ek .editorconfig dosyaları ekleyebilirsiniz; arama, düzenlenen dosyadan başlayarak ağaçta yukarı doğru ilerler ve bulduğu ilk root = true satırında durur.

Alana 0 yazın; oluşturucu max_line_length satırını dosyaya hiç koymaz. Bu özelliğin belgelenmiş değerleri pozitif sayılardır; bir de spesifikasyonun tamamında geçerli olan, üst bir dosyadan devralınan değeri iptal etmeye yarayan unset vardır. Burada en üst düzey dosyayı yazıyorsunuz, yani iptal edilecek bir şey yok ve satırın hiç bulunmaması da aynı şeyi söyler. Yazmamanız gereken şey, bu aracın eskiden yaptığı gibi max_line_length = 0 satırıdır: spesifikasyon eklentilere desteklenmeyen değerleri yok saymalarını söyler, dolayısıyla sıfırlık bir sınır aslında sınır değil, sessizce hiçbir şey yapmayan bir satırdır.

Hayır. EditorConfig; boşlukları ve satır sonlarını her editörde, siz kullanmasanız bile takım arkadaşlarınızın kullandıklarında da düzenler. Prettier ve dile özgü linterlar ise tırnak işaretleri, noktalı virgüller ve sondaki virgüller gibi daha derin stil kurallarını üstlenir. İkisi birbirini tamamlar; Prettier temel kurallar için .editorconfig dosyanızı zaten okur.

Çünkü YAML, girintide tab karakterine hiç izin vermez. Tab ile girintilenmiş bir iş akışı veya compose dosyası, herhangi bir araç onu görmeden ayrıştırma aşamasında hata verir. Oluşturucu diğer her yerde tab tercihinizi korur, yalnızca YAML bölümünü geçersiz kılar ve bunu yaptığında dosyanın üstünde size bildirir.

Depodaki Windows araçları bunu gerçekten gerektiriyorsa end_of_line = crlf ayarlayın. Genellikle daha iyi seçenek, burada lf kullanmak ve .gitattributes dosyasına * text=auto eklemektir; böylece git commit sırasında satır sonlarını normalleştirirken checkout her işletim sistemine uygun kalır.

Seçimleriniz dosyayı oluşturur ve adımlar arasında sayfa bağlantısında taşınır; böylece bir yapılandırmayı paylaşabilir veya yer imlerinize ekleyebilirsiniz. Sayfa oluşturulduktan sonra sunucularımızda hiçbir şey saklanmaz.

İlgili Araçlar

Araç diğer dillerde mevcuttur