Generator EditorConfig
File .editorconfig di akar repositori memberi tahu setiap IDE modern bagaimana proyek ini memformat file-nya, sekaligus menyelesaikan perdebatan tab versus spasi file demi file. Bagian yang sulit bukanlah blok global, melainkan bagian per bahasa: YAML sama sekali tidak boleh diindentasi dengan tab, make menolak baris resep yang diawali spasi, dan skrip shell yang disimpan dengan CRLF tidak bisa dijalankan. Pilih bahasa yang ada di repositori Anda, lalu generator ini menuliskan bagian yang dibutuhkan masing-masing, lengkap dengan catatan di sebelahnya yang menjelaskan mengapa bagian itu ada.
Cara membuat file .editorconfig
-
1
Pilih bahasa yang ada di repositori Anda
JavaScript, JSON, HTML dan CSS, YAML, Python, PHP, Go, Rust, Ruby, Java, Markdown, Makefile, skrip shell, dan file batch Windows. Setiap pilihan yang Anda centang menambahkan satu bagian.
-
2
Tetapkan aturan yang diwarisi semua file
Gaya dan ukuran indentasi, akhir baris, charset, baris baru di akhir file, spasi di ujung baris, dan batas panjang baris. Semuanya masuk ke blok `[*]` di bagian atas, dan setiap bagian di bawahnya hanya menimpa apa yang benar-benar dibutuhkan bahasanya.
-
3
Baca alasan setiap bagian ada
Tabel di samping file menjelaskan setiap bagian yang ditulis, jadi Anda bisa membuang bagian yang tidak diinginkan tim Anda sebelum melakukan commit.
-
4
Salin ke akar repositori
Simpan sebagai `.editorconfig` bersebelahan dengan `.gitignore` Anda. Editor akan membacanya pada file berikutnya yang Anda buka; tanpa langkah build, tanpa konfigurasi plugin.
Fungsi file .editorconfig
File bernama .editorconfig di akar sebuah proyek mendeklarasikan konvensi format. Editor yang mendukung EditorConfig (semua IDE utama dan sebagian besar editor teks modern) menerapkan aturan tersebut saat sebuah file dibuka. Pencariannya menelusuri pohon direktori ke atas dari file yang sedang diedit dan berhenti pada file pertama yang berisi root = true.
Contoh keluaran
Dengan pengaturan bawaan (spasi, ukuran indentasi 4, LF, utf-8) dan dua bagian yang sudah dicentang untuk Anda, generator menghasilkan:
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
Centang Python, Go, atau YAML dan bagian yang sesuai akan muncul di bawahnya, sudah membawa konvensi yang dipaksakan oleh formatter ekosistem tersebut.
Direktif utama
| Direktif | Nilai yang diterima | Catatan |
|---|---|---|
| root | true | Tetapkan di akar proyek agar pencarian berhenti di situ |
| charset | latin1, utf-8, utf-8-bom, utf-16be, utf-16le | utf-8 adalah pilihan yang lazim. Spesifikasi tidak menganjurkan byte order mark, dan pasangan utf-16 berlaku untuk semua file, yang tidak bisa dibaca sebagian besar perkakas build |
| end_of_line | lf, crlf, cr | lf untuk kerja lintas platform; crlf hanya untuk repositori khusus Windows |
| indent_style | space, tab | |
| indent_size | bilangan bulat, atau tab | Dengan indent_style = tab nilai ini tidak diabaikan: tab_width mengacu padanya, jadi nilai inilah yang menentukan lebar tampilan tab |
| tab_width | bilangan bulat | Jarang diperlukan, karena bawaannya mengikuti indent_size |
| insert_final_newline | true, false | Menjaga file tetap sesuai POSIX dan membuat diff tidak berisik |
| trim_trailing_whitespace | true, false | Matikan untuk Markdown, karena di sana spasi di ujung baris berarti pemisah baris |
| max_line_length | bilangan bulat positif, atau unset | Tidak ada di spesifikasi inti; tempatnya di wiki properti. Untuk tanpa batas, hilangkan barisnya alih-alih menulis 0 |
Tiga aturan yang merusak build, bukan sekadar panduan gaya
Sebagian besar isi .editorconfig hanyalah preferensi. Tiga hal berikut bukan preferensi, dan justru inilah alasan bagian per bahasa layak dimiliki:
- YAML melarang karakter tab untuk indentasi. Itu kesalahan parsing, bukan peringatan lint. Kalau proyek Anda memakai indentasi tab dan Anda punya workflow GitHub Actions, file Docker Compose, atau manifest Kubernetes, bagian YAML harus memaksa spasi kembali aktif.
makemenuntut tab literal di awal setiap baris resep. Spasi akan menghasilkanmissing separator. Stop.dan build berhenti. Itulah sebabnya[{Makefile,makefile,GNUmakefile,*.mk}]mencantumkan beberapa ejaan: EditorConfig mencocokkan nama file secara case sensitive, dan repositori bisa memuatMakefilemaupunmakefile.- Skrip shell yang disimpan dengan CRLF tidak bisa dijalankan. Kernel membaca carriage return sebagai bagian dari path interpreter lalu melaporkan sesuatu seperti
/bin/bash^M: bad interpreter: No such file or directory. File batch Windows punya masalah kebalikannya:cmd.exemencarigotodancall :labelberdasarkan offset byte, jadi file.batyang hanya memakai LF bisa melompat ke baris yang salah atau berhenti di tengah jalan tanpa pesan error sama sekali.
Dua di antaranya justru bisa disebabkan oleh blok global, bukan diperbaiki olehnya, dan karena itulah generator ini mengawasinya. Kalau Anda memilih tab tanpa menambahkan bagian YAML, atau memilih CRLF tanpa menambahkan bagian shell, file yang ditulisnya akan merusak file-file itu meski namanya tidak pernah disebut di dalamnya. Generator memberitahukannya di atas keluaran, alih-alih membiarkan Anda mengetahuinya dari pipeline yang gagal. Hal yang sama berlaku untuk charset utf-16: charset itu berlaku untuk semua file di proyek, dan make, interpreter shell, serta Python tidak bisa membaca kode sumber yang disimpan seperti itu.
Konvensi bahasa yang ditulis generator ini
| Bahasa atau file | Bagian | Apa yang ditetapkan dan alasannya |
|---|---|---|
| JavaScript, TypeScript | *.{js,jsx,mjs,cjs,ts,tsx} |
2 spasi, bawaan Prettier |
| JSON | *.{json,jsonc} |
2 spasi, lebar yang ditulis npm ke package.json |
| HTML, CSS, template | *.{html,htm,css,scss,sass,less,vue,svelte} |
2 spasi, dan sintaks Sass berindentasi membutuhkannya agar bisa di-parse |
| YAML | *.{yml,yaml} |
2 spasi, dan tetap spasi meski proyek memakai tab |
| Python | *.{py,pyi} |
4 spasi, PEP 8 dan Black |
| PHP | *.php |
4 spasi, PSR-12. WordPress memakai tab dan Drupal memakai 2 |
| Go | {*.go,go.mod} |
Tab, karena gofmt memakai indentasi tab |
| Rust | *.rs |
4 spasi, bawaan rustfmt |
| Ruby | {*.rb,*.rake,Gemfile,Rakefile} |
2 spasi, bawaan RuboCop |
| Java | *.java |
4 spasi, konvensi Oracle. Gaya Java dari Google memakai 2 |
| Markdown | *.{md,markdown} |
Mempertahankan spasi di ujung baris, karena begitulah Markdown menulis pemisah baris |
| Makefile | {Makefile,makefile,GNUmakefile,*.mk} |
Tab, yang diwajibkan make |
| Skrip shell | *.{sh,bash,zsh} |
LF, apa pun yang dipakai sisa proyek |
| Batch Windows | *.{bat,cmd} |
CRLF, karena cmd.exe mencari label berdasarkan offset byte |
Perhatikan apa yang tidak ada di tabel itu: panjang baris. PEP 8 menyebut 79, Black 88, PSR-12 menyarankan 120 yang tidak kaku, dan rustfmt 100. Menuliskan salah satunya ke dalam bagian bahasa akan diam-diam menimpa batas yang Anda pilih untuk seluruh proyek, jadi generator hanya menaruh max_line_length di blok [*] dan menyimpan angka-angka itu di sini, tempat Anda bisa menerapkannya secara sadar.
Apakah editor Anda mendukungnya?
Dukungan bawaan: VS Code, keluarga JetBrains IntelliJ, Visual Studio, Sublime Text, Xcode, dan Notepad++. Vim, Emacs, Neovim, dan beberapa editor lain butuh plugin kecil. File ini berformat INI biasa, jadi linter dan formatter juga bisa membacanya, dan begitulah Prettier serta sebagian language server tetap selaras dengannya.
Pertanyaan yang Sering Diajukan
Di akar proyek, dengan root = true di bagian atas. Anda bisa menambahkan file .editorconfig lain di subdirektori untuk menimpa jalur tertentu; pencariannya menelusuri pohon direktori ke atas dari file yang sedang diedit dan berhenti pada root = true pertama yang ditemukan.
Isi kolomnya dengan 0, dan generator tidak akan menuliskan max_line_length ke dalam file. Nilai yang terdokumentasi untuk properti itu adalah bilangan positif, ditambah unset yang berlaku di seluruh spesifikasi dan gunanya membatalkan nilai yang diwarisi dari file induk. File ini adalah file tingkat teratas, jadi tidak ada yang perlu dibatalkan dan ketiadaan barisnya menyatakan hal yang sama. Yang sebaiknya tidak Anda tulis adalah max_line_length = 0, seperti yang dulu dilakukan tool ini: spesifikasi meminta plugin mengabaikan nilai yang tidak didukung, jadi batas nol bukanlah batas nol, melainkan baris yang diam-diam tidak melakukan apa-apa.
Tidak. EditorConfig mengurus spasi dan akhir baris di semua editor, termasuk editor yang dipakai rekan satu tim Anda tetapi tidak Anda pakai. Prettier dan linter khusus bahasa menangani aturan gaya yang lebih dalam seperti tanda kutip, titik koma, dan koma di akhir daftar. Keduanya saling melengkapi, dan Prettier akan membaca .editorconfig Anda untuk hal-hal dasar.
Karena YAML sama sekali tidak mengizinkan karakter tab untuk indentasi. File workflow atau compose yang diindentasi dengan tab gagal di-parse bahkan sebelum ada tool yang membacanya. Generator mempertahankan tab Anda di semua tempat lain dan hanya menimpa bagian YAML, dan hal itu diberitahukan di atas file saat terjadi.
Atur end_of_line = crlf kalau perkakas Windows di repositori itu memang membutuhkannya. Pilihan yang biasanya lebih baik adalah lf di sini ditambah .gitattributes berisi * text=auto, sehingga git menormalkan akhir baris saat commit sementara hasil checkout tetap sesuai untuk tiap sistem operasi.
Pilihan Anda dipakai untuk menyusun file dan ikut berpindah lewat tautan halaman antarlangkah, jadi Anda bisa membagikan atau menandai sebuah konfigurasi. Tidak ada yang disimpan di server kami setelah halaman dibuat.
Alat Terkait
Referensi Tabel ASCII
Tabel ASCII lengkap dari 0 sampai 127 dengan desimal, heksadesimal, oktal, biner, dan referensi karakter numerik HTML untuk setiap karakter, termasuk kode kontrol seperti NUL, LF, dan DEL.
Generator Konfigurasi Nginx
Buat server block Nginx dengan TLS, HTTP/2, gzip, cache browser, dan aturan reverse proxy hanya dari sebuah formulir sederhana.
Referensi Karakter HTML
Daftar entitas HTML yang dapat dicari, beserta kode bernama dan kode numeriknya, serta fitur salin dengan satu klik untuk karakter khusus dan simbol.
Crontab Guru
Tempel ekspresi cron standar 5 field dan dapatkan penjelasan sederhana untuk tiap field, peringatan yang penting, serta lima waktu eksekusi berikutnya di zona waktu Anda.
Konverter piksel ke EM
Bagi nilai piksel CSS dengan ukuran font dasar pilihan untuk melihat em, rem, persen, dan poin.
Pemformat Spasi Python
Normalkan indentasi dasar serta spasi di sekitar koma dan operator pada cuplikan Python. Alat pembersih ringan, bukan Black, Ruff, atau pemformat yang memahami sintaks.
Alat ini tersedia dalam bahasa lain
- Generator EditorConfig [PL]
- Generador de EditorConfig [ES]
- Gerador de EditorConfig [PT]
- EditorConfig ジェネレーター [JA]
- เครื่องมือสร้าง EditorConfig [TH]
- EditorConfig 생성기 [KO]
- Trình tạo EditorConfig [VI]
- EditorConfig-generator [SV]
- مولد EditorConfig [AR]
- EditorConfig-Generator [DE]
- Générateur EditorConfig [FR]
- EditorConfig-generator [NL]
- EditorConfig Generator [EN]
- Generatore EditorConfig [IT]
- Генератор EditorConfig [RU]
- EditorConfig Oluşturucu [TR]
- EditorConfig 生成器 [ZH]