EditorConfig-generator

.editorconfig

Välj ekosystemen i ditt repo. Varje val lägger till en sektion med de regler det ekosystemet behöver.

Nästa

En .editorconfig i repots rot talar om för varje modern IDE hur det här projektet formaterar sina filer och avgör diskussionen om tabbar kontra mellanslag fil för fil. Det svåra är inte det globala blocket, utan sektionerna per språk: i YAML går det över huvud taget inte att göra indrag med tabbar, make vägrar en kommandorad som börjar med ett mellanslag, och ett skalskript som sparats med CRLF går inte att köra. Välj språken i ditt repo, så skriver generatorn den sektion vart och ett behöver, med en anmärkning bredvid som förklarar varför sektionen finns där.

Så bygger du en .editorconfig

  1. 1

    Välj språken i ditt repo

    JavaScript, JSON, HTML och CSS, YAML, Python, PHP, Go, Rust, Ruby, Java, Markdown, Makefile, skalskript och Windows-batchfiler. Varje ruta du kryssar i lägger till en sektion.

  2. 2

    Ställ in reglerna som varje fil ärver

    Indragsstil och -storlek, radslut, teckenuppsättning, avslutande radbrytning, efterföljande blanksteg och radlängdsgränsen. De hamnar i `[*]`-blocket högst upp, och varje sektion nedanför åsidosätter bara det som dess språk faktiskt behöver.

  3. 3

    Läs varför varje sektion finns där

    Tabellen bredvid filen förklarar varje sektion som skrivits, så att du kan ta bort dem ditt team inte vill ha innan du committar.

  4. 4

    Kopiera den till repots rot

    Spara den som `.editorconfig` bredvid din `.gitignore`. Editorer plockar upp den vid nästa fil du öppnar, utan byggsteg och utan plugin-konfiguration.

Vad .editorconfig gör

En fil med namnet .editorconfig i roten av ett projekt deklarerar formateringskonventioner. Editorer med EditorConfig-stöd (varje större IDE och de flesta moderna textredigerare) tillämpar de reglerna när en fil öppnas. Sökningen går uppåt i katalogträdet från filen som redigeras och stannar vid den första filen som säger root = true.

Exempel på utdata

Med standardinställningarna (mellanslag, indragsstorlek 4, LF, utf-8) och de två sektioner som redan är ikryssade genererar verktyget:

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

Kryssa i Python, Go eller YAML så dyker motsvarande sektion upp nedanför, redan med den konvention som ekosystemets formaterare tvingar fram.

Viktiga direktiv

Direktiv Tillåtna värden Anmärkningar
root true Sätt det i projektroten så att sökningen stannar där
charset latin1, utf-8, utf-8-bom, utf-16be, utf-16le utf-8 är det vanliga valet. Specifikationen avråder från byteordningsmärket, och de två utf-16-varianterna gäller varje fil, vilket de flesta byggverktyg inte kan läsa
end_of_line lf, crlf, cr lf för plattformsoberoende arbete; crlf bara för repon som enbart används på Windows
indent_style space, tab
indent_size ett heltal, eller tab Med indent_style = tab ignoreras det inte: tab_width faller tillbaka på det, så det styr hur bred en tabb ser ut
tab_width ett heltal Behövs sällan, eftersom den som standard följer indent_size
insert_final_newline true, false Håller filerna POSIX-korrekta och diffarna rena
trim_trailing_whitespace true, false Stäng av det för Markdown, där efterföljande mellanslag betyder en radbrytning
max_line_length ett positivt heltal, eller unset Inte i kärnspecifikationen; den lever i egenskapswikin. För ingen gräns, utelämna raden i stället för att skriva 0

Tre regler som stoppar bygget, inte bara bryter mot en stilguide

De flesta inställningarna i en .editorconfig är smaksak. De här tre är det inte, och de är skälet till att det är värt att ha en sektion per språk:

  • YAML förbjuder tabbtecknet för indrag. Det är ett parsningsfel, inte en lint-varning. Om ditt projekt gör indrag med tabbar och du har workflows i GitHub Actions, Docker Compose-filer eller Kubernetes-manifest måste YAML-sektionen tvinga tillbaka mellanslag.
  • make kräver ett riktigt tabbtecken i början av varje kommandorad i en regel. Ett mellanslag ger missing separator. Stop. och bygget avbryts. Det är därför [{Makefile,makefile,GNUmakefile,*.mk}] räknar upp flera stavningar: EditorConfig matchar filnamn skiftlägeskänsligt, och repon innehåller både Makefile och makefile.
  • Ett skalskript som sparats med CRLF går inte att köra. Kärnan läser vagnreturen som en del av sökvägen till tolken och rapporterar något i stil med /bin/bash^M: bad interpreter: No such file or directory. Windows-batchfiler har det spegelvända problemet: cmd.exe letar upp goto och call :label via byteposition, så en .bat med enbart LF kan hoppa till fel rad eller stanna halvvägs utan något felmeddelande alls.

Två av dem kan orsakas av det globala blocket i stället för att lösas av det, och det är därför den här generatorn håller utkik efter dem. Om du väljer tabbar utan att lägga till YAML-sektionen, eller väljer CRLF utan att lägga till skalsektionen, kommer filen som skrivs att förstöra just de filerna trots att de aldrig nämns i den. Generatorn säger till ovanför utdatan i stället för att låta dig upptäcka det via en pipeline som fallerar. Detsamma gäller teckenuppsättningarna utf-16: de gäller varje fil i projektet, och make, skaltolkar och Python kan inte läsa källkod som sparats så.

Språkkonventioner som generatorn skriver

Språk eller fil Sektion Vad den sätter och varför
JavaScript, TypeScript *.{js,jsx,mjs,cjs,ts,tsx} 2 mellanslag, Prettiers standard
JSON *.{json,jsonc} 2 mellanslag, bredden npm skriver i package.json
HTML, CSS, mallar *.{html,htm,css,scss,sass,less,vue,svelte} 2 mellanslag, och den indragsbaserade Sass-syntaxen behöver dem för att gå att tolka
YAML *.{yml,yaml} 2 mellanslag, och mellanslag även när projektet använder tabbar
Python *.{py,pyi} 4 mellanslag, PEP 8 och Black
PHP *.php 4 mellanslag, PSR-12. WordPress använder tabbar och Drupal använder 2
Go {*.go,go.mod} Tabbar, eftersom gofmt gör indrag med tabbar
Rust *.rs 4 mellanslag, rustfmts standard
Ruby {*.rb,*.rake,Gemfile,Rakefile} 2 mellanslag, RuboCops standard
Java *.java 4 mellanslag, Oracles konventioner. Googles Java-stil använder 2
Markdown *.{md,markdown} Behåller efterföljande blanksteg, vilket är hur Markdown skriver en radbrytning
Makefile {Makefile,makefile,GNUmakefile,*.mk} Tabbar, som make kräver
Skalskript *.{sh,bash,zsh} LF, oavsett vad resten av projektet använder
Windows-batch *.{bat,cmd} CRLF, eftersom cmd.exe letar upp etiketter via byteposition

Lägg märke till vad som inte står i den tabellen: radlängder. PEP 8 säger 79, Black säger 88, PSR-12 säger en mjuk gräns på 120 och rustfmt säger 100. Att skriva in någon av dem i en språksektion skulle i tysthet åsidosätta gränsen du valde för hela projektet, så generatorn lämnar max_line_length enbart i [*]-blocket och behåller de siffrorna här, där du kan tillämpa dem medvetet.

Stöder din editor det?

Inbyggt stöd: VS Code, JetBrains IntelliJ-familjen, Visual Studio, Sublime Text, Xcode och Notepad++. Vim, Emacs, Neovim och några till behöver ett litet plugin. Filen är vanlig INI, så linters och formaterare kan också läsa den, och det är så Prettier och vissa språkservrar håller sig i takt med den.

Vanliga frågor

I projektroten, med root = true högst upp. Du kan lägga till fler .editorconfig-filer i underkataloger för att åsidosätta specifika sökvägar; sökningen går uppåt i trädet från filen som redigeras och stannar vid den första root = true den hittar.

Sätt fältet till 0, så utelämnar generatorn max_line_length ur filen. De dokumenterade värdena för den egenskapen är positiva tal, plus det specifikationsövergripande unset, som finns för att upphäva ett värde som ärvts från en överordnad fil. Det här är filen på översta nivån, så det finns ingenting att upphäva och en utelämnad rad säger samma sak. Det du inte ska skriva är max_line_length = 0, vilket det här verktyget tidigare gjorde: specifikationen säger åt plugin-modulerna att ignorera värden de inte stöder, så en gräns på noll är ingen gräns på noll, det är en rad som i tysthet inte gör någonting.

Nej. EditorConfig täcker blanksteg och radslut i varje editor, även de dina kollegor använder men inte du. Prettier och språkspecifika linters hanterar djupare stilregler som citattecken, semikolon och avslutande kommatecken. De två kompletterar varandra, och Prettier läser din .editorconfig för grunderna.

Därför att YAML inte tillåter tabbtecknet för indrag över huvud taget. En workflow- eller compose-fil som har indrag med tabbar går inte att tolka innan något verktyg ens hinner läsa den. Generatorn behåller dina tabbar överallt annars och åsidosätter bara YAML-sektionen, och den säger till ovanför filen när den gör det.

Sätt end_of_line = crlf om Windows-verktyg i repot verkligen kräver det. Det bättre alternativet är oftast lf här plus en .gitattributes med * text=auto, så att git normaliserar vid commit medan utcheckningarna förblir lämpliga för varje operativsystem.

Dina val bygger filen och följer med i sidans länk mellan stegen, så att du kan dela eller bokmärka en konfiguration. Ingenting lagras på våra servrar efter att sidan har genererats.

Relaterade verktyg

Verktyget finns på andra språk