EditorConfig-generator
Een .editorconfig in de hoofdmap van de repository vertelt elke moderne IDE hoe dit project zijn bestanden opmaakt, en beslecht de discussie tabs versus spaties per bestand. Het lastige zit niet in het globale blok, maar in de secties per taal: YAML laat zich helemaal niet met tabs inspringen, make weigert een receptregel die met een spatie begint, en een shellscript dat met CRLF is opgeslagen draait niet. Kies de talen in je repository, dan schrijft deze generator voor elke taal de sectie die nodig is, met daarnaast een notitie waarom die sectie er staat.
Zo bouw je een .editorconfig
-
1
Kies de talen in je repository
JavaScript, JSON, HTML en CSS, YAML, Python, PHP, Go, Rust, Ruby, Java, Markdown, Makefile, shellscripts en Windows-batchbestanden. Elke taal die je aanvinkt, voegt één sectie toe.
-
2
Stel de regels in die elk bestand overneemt
Inspringstijl en -grootte, regeleinde, tekenset, afsluitende nieuwe regel, spaties aan het regeleinde en de maximale regellengte. Die komen in het `[*]`-blok bovenaan, en elke sectie daaronder overschrijft alleen wat zijn eigen taal echt nodig heeft.
-
3
Lees waarom elke sectie er staat
De tabel naast het bestand legt elke geschreven sectie uit, zodat je de secties die je team niet wil, eruit kunt halen voordat je het bestand commit.
-
4
Zet het in de hoofdmap van de repository
Sla het op als `.editorconfig`, naast je `.gitignore`. Editors pakken het op bij het volgende bestand dat je opent: geen buildstap, geen plug-in om in te stellen.
Wat .editorconfig doet
Een bestand met de naam .editorconfig in de hoofdmap van een project legt opmaakconventies vast. Editors met EditorConfig-ondersteuning (elke grote IDE en de meeste moderne teksteditors) passen die regels toe zodra je een bestand opent. Het zoeken loopt vanaf het bestand dat je bewerkt omhoog door de mappenstructuur en stopt bij het eerste bestand waarin root = true staat.
Voorbeelduitvoer
Met de standaardinstellingen (spaties, inspringgrootte 4, LF, utf-8) en de twee secties die alvast voor je zijn aangevinkt, genereert de tool:
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
Vink Python, Go of YAML aan en de bijbehorende sectie verschijnt eronder, meteen met de conventie die de formatter van dat ecosysteem afdwingt.
Belangrijkste richtlijnen
| Richtlijn | Toegestane waarden | Opmerkingen |
|---|---|---|
| root | true | Zet dit in de hoofdmap van het project, zodat het zoeken daar stopt |
| charset | latin1, utf-8, utf-8-bom, utf-16be, utf-16le | utf-8 is de gebruikelijke keuze. De specificatie raadt de byte order mark af, en de twee utf-16-varianten gelden voor elk bestand, en zulke bestanden kunnen de meeste buildtools niet lezen |
| end_of_line | lf, crlf, cr | lf voor cross-platform werk; crlf alleen voor repository’s die uitsluitend op Windows draaien |
| indent_style | space, tab | |
| indent_size | een geheel getal, of tab | Met indent_style = tab wordt de waarde niet genegeerd: tab_width valt erop terug, dus die waarde bepaalt hoe breed een tab oogt |
| tab_width | een geheel getal | Zelden nodig, want standaard gelijk aan indent_size |
| insert_final_newline | true, false | Houdt bestanden POSIX-conform en diffs rustig |
| trim_trailing_whitespace | true, false | Uitzetten voor Markdown, waar spaties aan het regeleinde een regelafbreking betekenen |
| max_line_length | een positief geheel getal, of unset | Staat niet in de kernspecificatie, maar in de properties-wiki. Wil je geen limiet, laat de regel dan weg in plaats van 0 te schrijven |
Drie regels die een build breken, niet alleen een stijlgids
De meeste regels in een .editorconfig zijn voorkeuren. Deze drie niet, en juist daarom is een sectie per taal de moeite waard:
- YAML staat het tabteken niet toe om in te springen. Dat is een parseerfout, geen waarschuwing van een linter. Springt je project in met tabs en heb je GitHub Actions-workflows, Docker Compose-bestanden of Kubernetes-manifesten, dan moet de YAML-sectie de spaties terugzetten.
makeeist een echte tab aan het begin van elke receptregel. Een spatie levertmissing separator. Stop.op en de build valt stil. Daarom staan er in[{Makefile,makefile,GNUmakefile,*.mk}]meerdere schrijfwijzen: EditorConfig vergelijkt bestandsnamen hoofdlettergevoelig, en in repository’s komen zowelMakefilealsmakefilevoor.- Een shellscript dat met CRLF is opgeslagen, draait niet. De kernel leest de carriage return als onderdeel van het pad naar de interpreter en meldt zoiets als
/bin/bash^M: bad interpreter: No such file or directory. Windows-batchbestanden hebben het spiegelbeeld van dat probleem:cmd.exezoektgotoencall :labelop via een byte-offset, dus een.batmet alleen LF kan naar de verkeerde regel springen of halverwege stoppen, zonder ook maar één foutmelding.
Twee daarvan worden juist veroorzaakt door het globale blok in plaats van erdoor opgelost, en daarom houdt deze generator ze in de gaten. Kies je tabs zonder de YAML-sectie toe te voegen, of CRLF zonder de shell-sectie, dan maakt het bestand dat hij schrijft juist die bestanden kapot, ook al worden ze er nergens in genoemd. De generator meldt dat boven de uitvoer, in plaats van je het te laten ontdekken via een pipeline die faalt. Hetzelfde geldt voor de utf-16-tekensets: die gelden voor elk bestand in het project, en make, shell-interpreters en Python kunnen broncode die zo is opgeslagen niet lezen.
Taalconventies die deze generator schrijft
| Taal of bestand | Sectie | Wat het instelt en waarom |
|---|---|---|
| JavaScript, TypeScript | *.{js,jsx,mjs,cjs,ts,tsx} |
2 spaties, de standaard van Prettier |
| JSON | *.{json,jsonc} |
2 spaties, de breedte die npm in package.json schrijft |
| HTML, CSS, templates | *.{html,htm,css,scss,sass,less,vue,svelte} |
2 spaties, en de ingesprongen Sass-syntaxis heeft ze nodig om te kunnen parsen |
| YAML | *.{yml,yaml} |
2 spaties, en spaties ook als het project tabs gebruikt |
| Python | *.{py,pyi} |
4 spaties, PEP 8 en Black |
| PHP | *.php |
4 spaties, PSR-12. WordPress gebruikt tabs en Drupal 2 |
| Go | {*.go,go.mod} |
Tabs, omdat gofmt met tabs inspringt |
| Rust | *.rs |
4 spaties, de standaard van rustfmt |
| Ruby | {*.rb,*.rake,Gemfile,Rakefile} |
2 spaties, de standaard van RuboCop |
| Java | *.java |
4 spaties, de conventies van Oracle. De Java-stijl van Google gebruikt er 2 |
| Markdown | *.{md,markdown} |
Behoudt spaties aan het regeleinde, waarmee Markdown een regelafbreking maakt |
| Makefile | {Makefile,makefile,GNUmakefile,*.mk} |
Tabs, die make verplicht stelt |
| Shellscripts | *.{sh,bash,zsh} |
LF, wat de rest van het project ook gebruikt |
| Windows-batch | *.{bat,cmd} |
CRLF, omdat cmd.exe labels via een byte-offset opzoekt |
Let op wat er niet in die tabel staat: regellengtes. PEP 8 zegt 79, Black zegt 88, PSR-12 houdt een zachte 120 aan en rustfmt zegt 100. Zet je een van die getallen in een taalsectie, dan overschrijft dat stilletjes de limiet die je voor het hele project hebt gekozen. Daarom laat de generator max_line_length alleen in het [*]-blok staan en houdt hij die getallen hier, waar je ze bewust kunt toepassen.
Ondersteunt jouw editor het?
Ingebouwde ondersteuning: VS Code, de IntelliJ-familie van JetBrains, Visual Studio, Sublime Text, Xcode en Notepad++. Vim, Emacs, Neovim en een handvol andere editors hebben een kleine plug-in nodig. Het bestand is gewone INI, dus linters en formatters kunnen het ook lezen; zo blijven Prettier en sommige language servers ermee in de pas lopen.
Veelgestelde vragen
In de hoofdmap van het project, met root = true bovenaan. Je kunt extra .editorconfig-bestanden in submappen zetten om specifieke paden te overschrijven; het zoeken loopt vanaf het bestand dat je bewerkt omhoog door de mappenstructuur en stopt bij de eerste root = true die het tegenkomt.
Vul 0 in bij dat veld, dan laat de generator max_line_length helemaal weg uit het bestand. De gedocumenteerde waarden voor die eigenschap zijn positieve getallen, plus het specificatiebrede unset, dat bestaat om een waarde uit een bovenliggend bestand ongedaan te maken. Dit is het bestand op het hoogste niveau, dus er valt niets ongedaan te maken en een ontbrekende regel zegt precies hetzelfde. Wat je niet moet schrijven is max_line_length = 0, zoals deze tool vroeger deed: de specificatie draagt plug-ins op om waarden die ze niet ondersteunen te negeren, dus een limiet van nul is geen limiet van nul, maar een regel die stilletjes niets doet.
Nee. EditorConfig regelt witruimte en regeleindes in elke editor, ook in de editors die je collega’s gebruiken en jij niet. Prettier en taalspecifieke linters nemen de diepere stijlregels voor hun rekening, zoals aanhalingstekens, puntkomma’s en afsluitende komma’s. Ze vullen elkaar aan, en Prettier leest je .editorconfig voor de basis.
Omdat YAML het tabteken helemaal niet toestaat om in te springen. Een workflow- of compose-bestand dat met tabs is ingesprongen, geeft een parseerfout voordat welke tool dan ook het te zien krijgt. De generator houdt je tabs overal elders aan en overschrijft alleen de YAML-sectie, en meldt dat boven het bestand zodra hij dat doet.
Zet end_of_line = crlf als Windows-tooling in de repository dat echt vereist. Meestal is lf hier de betere keuze, samen met een .gitattributes met * text=auto: dan normaliseert git de regeleindes bij het committen, terwijl elke checkout passend blijft voor het besturingssysteem.
Je keuzes bouwen het bestand op en worden tussen de stappen meegegeven in de paginalink, zodat je een configuratie kunt delen of als bladwijzer kunt bewaren. Nadat de pagina is gegenereerd, wordt er niets op onze servers bewaard.
Gerelateerde tools
JSON naar PHP-array
Zet JSON om naar een PHP-array-literal met korte syntaxis, associatieve/geïndexeerde arrays en geneste structuren, klaar om in een .php-bestand te plakken.
Luhn-algoritme-checker
Controleer de creditcardnummer, IMEI, SIN en andere door Luhn beschermden nummers. Geef een resultaat terug (goed of fout) en toon elke stap van het verdubbelen en het berekenen van de controlesom aan.
ASCII-tabelreferentie
Volledige ASCII-tabel van 0 tot 127 met decimale, hexadecimale, octale en binaire waarden en HTML-numerieke referentienotatie, inclusief control codes zoals NUL, LF en DEL.
Telefoonnummers controleren
Controleer de structuur van telefoonnummers per land en bekijk regio, type en E.164-, internationale, nationale en RFC 3966-notatie.
SVG-golfgenerator
Genereer een vloeiende SVG-golfscheiding voor headers en footers met instelbare amplitude, frequentie, kleur en positie boven of onder. Kopieer de SVG-code.
Sneltoetsenoverzicht
Zoek gedocumenteerde standaardsneltoetsen voor VS Code, Chrome en Bash met GNU Readline op macOS, Windows en Linux.
Tool beschikbaar in andere talen
- Generador de EditorConfig [ES]
- Trình tạo EditorConfig [VI]
- EditorConfig 생성기 [KO]
- Generator EditorConfig [ID]
- Generator EditorConfig [PL]
- Générateur EditorConfig [FR]
- Gerador de EditorConfig [PT]
- EditorConfig-Generator [DE]
- مولد EditorConfig [AR]
- EditorConfig ジェネレーター [JA]
- EditorConfig-generator [SV]
- เครื่องมือสร้าง EditorConfig [TH]
- EditorConfig Generator [EN]
- Generatore EditorConfig [IT]
- Генератор EditorConfig [RU]
- EditorConfig Oluşturucu [TR]
- EditorConfig 生成器 [ZH]