Generator EditorConfig
Plik .editorconfig w katalogu głównym repozytorium mówi każdemu nowoczesnemu IDE, jak ten projekt formatuje swoje pliki, i rozstrzyga spór tabulatory kontra spacje plik po pliku. Trudną częścią nie jest blok globalny, tylko sekcje dla poszczególnych języków: YAML w ogóle nie da się wciąć tabulatorem, make odrzuca wiersz z poleceniem zaczynający się od spacji, a skrypt powłoki zapisany z CRLF nie uruchamia się. Wybierz języki obecne w twoim repozytorium, a ten generator zapisze sekcję, której każdy z nich potrzebuje, z notatką obok wyjaśniającą, po co ta sekcja tam jest.
Jak zbudować .editorconfig
-
1
Wybierz języki obecne w repozytorium
JavaScript, JSON, HTML i CSS, YAML, Python, PHP, Go, Rust, Ruby, Java, Markdown, Makefile, skrypty powłoki i pliki wsadowe Windows. Każdy zaznaczony dodaje jedną sekcję.
-
2
Ustaw reguły, które dziedziczy każdy plik
Styl i rozmiar wcięcia, koniec linii, kodowanie, końcowy znak nowej linii, końcowe białe znaki i limit długości linii. Trafiają do bloku `[*]` na górze, a każda sekcja poniżej nadpisuje tylko to, czego jej język faktycznie potrzebuje.
-
3
Przeczytaj, po co jest każda sekcja
Tabela obok pliku wyjaśnia każdą zapisaną sekcję, więc przed commitem możesz usunąć te, których twój zespół nie chce.
-
4
Skopiuj plik do katalogu głównego repozytorium
Zapisz go jako `.editorconfig` obok swojego `.gitignore`. Edytory podchwycą go przy następnym otwieranym pliku; bez kroku budowania, bez konfigurowania wtyczek.
Co robi .editorconfig
Plik o nazwie .editorconfig w katalogu głównym projektu deklaruje konwencje formatowania. Edytory z obsługą EditorConfig (każde większe IDE i większość nowoczesnych edytorów tekstu) stosują te reguły przy otwarciu pliku. Wyszukiwanie wędruje w górę drzewa katalogów od edytowanego pliku i zatrzymuje się na pierwszym pliku, który mówi root = true.
Przykładowy wynik
Przy ustawieniach domyślnych (spacje, rozmiar wcięcia 4, LF, utf-8) i dwóch sekcjach zaznaczonych za ciebie generator zapisuje:
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
Zaznacz Python, Go albo YAML, a poniżej pojawi się pasująca sekcja, od razu z konwencją, którą wymusza formater tego ekosystemu.
Kluczowe dyrektywy
| Dyrektywa | Przyjmowane wartości | Uwagi |
|---|---|---|
| root | true | Ustaw w katalogu głównym projektu, aby wyszukiwanie się tam zatrzymało |
| charset | latin1, utf-8, utf-8-bom, utf-16be, utf-16le | utf-8 to zwykły wybór. Specyfikacja odradza znacznik kolejności bajtów, a para utf-16 obowiązuje w każdym pliku, czego większość narzędzi budowania nie odczyta |
| end_of_line | lf, crlf, cr | lf do pracy wieloplatformowej; crlf tylko w repozytoriach wyłącznie pod Windows |
| indent_style | space, tab | |
| indent_size | liczba całkowita albo tab | Przy indent_style = tab nie jest ignorowana: tab_width przyjmuje wtedy jej wartość, więc to ona ustala szerokość tabulatora |
| tab_width | liczba całkowita | Rzadko potrzebna, bo domyślnie przyjmuje wartość indent_size |
| insert_final_newline | true, false | Pliki zostają zgodne z POSIX, a diffy czyste |
| trim_trailing_whitespace | true, false | Wyłącz dla Markdown, gdzie końcowe spacje oznaczają łamanie linii |
| max_line_length | dodatnia liczba całkowita albo unset | Nie ma jej w podstawowej specyfikacji; znajduje się w wiki właściwości. Aby nie mieć limitu, pomiń ten wiersz zamiast wpisywać 0 |
Trzy reguły, które psują build, a nie tylko przewodnik stylu
Większość wpisów w .editorconfig to preferencje. Te trzy nie są i właśnie dla nich warto mieć sekcje dla poszczególnych języków:
- YAML zabrania tabulatora we wcięciach. To błąd parsowania, a nie ostrzeżenie lintera. Jeśli twój projekt wcina tabulatorami, a masz workflow GitHub Actions, pliki Docker Compose albo manifesty Kubernetes, sekcja YAML musi wymusić z powrotem spacje.
makewymaga dosłownego tabulatora na początku każdego wiersza z poleceniem w regule. Spacja dajemissing separator. Stop.i build staje. Dlatego[{Makefile,makefile,GNUmakefile,*.mk}]wymienia kilka pisowni: EditorConfig dopasowuje nazwy plików z rozróżnianiem wielkości liter, a w repozytoriach są zarównoMakefile, jak imakefile.- Skrypt powłoki zapisany z CRLF nie uruchamia się. Jądro odczytuje znak powrotu karetki jako część ścieżki interpretera i zgłasza coś w rodzaju
/bin/bash^M: bad interpreter: No such file or directory. Pliki wsadowe Windows mają problem odwrotny:cmd.exeszukagotoicall :labelpo przesunięciu bajtowym, więc plik.batzapisany z samym LF może skoczyć do złego wiersza albo zatrzymać się w połowie, w ogóle bez błędu.
Dwa z tych problemów blok globalny raczej wywołuje, niż naprawia, i właśnie dlatego ten generator ich pilnuje. Jeśli wybierzesz tabulatory i nie dodasz sekcji YAML albo wybierzesz CRLF i nie dodasz sekcji skryptów powłoki, zapisany plik zepsuje tamte pliki, choć ani razu ich w nim nie widać. Generator mówi o tym nad wynikiem, zamiast pozwolić ci odkryć to dopiero na nieudanym buildzie. Tak samo jest z kodowaniami utf-16: obowiązują w każdym pliku projektu, a make, interpretery powłoki i Python nie potrafią czytać kodu zapisanego w ten sposób.
Konwencje języków, które zapisuje ten generator
| Język lub plik | Sekcja | Co ustawia i dlaczego |
|---|---|---|
| JavaScript, TypeScript | *.{js,jsx,mjs,cjs,ts,tsx} |
2 spacje, domyślne ustawienie Prettiera |
| JSON | *.{json,jsonc} |
2 spacje, szerokość, jaką npm zapisuje w package.json |
| HTML, CSS, szablony | *.{html,htm,css,scss,sass,less,vue,svelte} |
2 spacje, a składnia wcięciowa Sass potrzebuje ich, żeby się sparsować |
| YAML | *.{yml,yaml} |
2 spacje, i spacje nawet wtedy, gdy projekt używa tabulatorów |
| Python | *.{py,pyi} |
4 spacje, PEP 8 i Black |
| PHP | *.php |
4 spacje, PSR-12. WordPress używa tabulatorów, a Drupal 2 |
| Go | {*.go,go.mod} |
Tabulatory, bo gofmt wcina tabulatorami |
| Rust | *.rs |
4 spacje, domyślne ustawienie rustfmt |
| Ruby | {*.rb,*.rake,Gemfile,Rakefile} |
2 spacje, domyślne ustawienie RuboCopa |
| Java | *.java |
4 spacje, konwencje Oracle’a. Styl Javy od Google’a używa 2 |
| Markdown | *.{md,markdown} |
Zachowuje końcowe białe znaki, bo tak Markdown zapisuje łamanie linii |
| Makefile | {Makefile,makefile,GNUmakefile,*.mk} |
Tabulatory, których wymaga make |
| Skrypty powłoki | *.{sh,bash,zsh} |
LF, niezależnie od reszty projektu |
| Pliki wsadowe Windows | *.{bat,cmd} |
CRLF, bo cmd.exe szuka etykiet po przesunięciu bajtowym |
Zwróć uwagę, czego w tej tabeli nie ma: długości linii. PEP 8 mówi 79, Black mówi 88, PSR-12 mówi miękkie 120, a rustfmt mówi 100. Wpisanie którejkolwiek z tych liczb do sekcji języka po cichu nadpisałoby limit wybrany dla całego projektu, więc generator zostawia max_line_length wyłącznie w bloku [*], a te liczby trzyma tutaj, gdzie możesz je zastosować świadomie.
Czy twój edytor to obsługuje?
Wsparcie natywne: VS Code, rodzina JetBrains IntelliJ, Visual Studio, Sublime Text, Xcode i Notepad++. Vim, Emacs, Neovim i kilka innych potrzebuje niewielkiej wtyczki. Plik to zwykły INI, więc czytają go też lintery i formatery, i właśnie dzięki temu Prettier oraz część serwerów językowych trzyma się tych samych reguł.
Najczęściej zadawane pytania
W katalogu głównym projektu, z root = true na górze. Możesz dodać kolejne pliki .editorconfig w podkatalogach, aby nadpisać konkretne ścieżki; wyszukiwanie wędruje w górę drzewa od edytowanego pliku i zatrzymuje się na pierwszym napotkanym root = true.
Ustaw pole na 0, a generator pominie max_line_length w pliku. Udokumentowane wartości tej właściwości to liczby dodatnie oraz unset, słowo kluczowe wspólne dla całej specyfikacji, które służy do anulowania wartości odziedziczonej z pliku nadrzędnego. To jest plik najwyższego poziomu, więc nie ma tu czego anulować, a brak wiersza mówi to samo. Nie należy natomiast wpisywać max_line_length = 0, co to narzędzie kiedyś robiło: specyfikacja każe wtyczkom ignorować nieobsługiwane wartości, więc limit zero nie jest limitem zero, tylko wierszem, który po cichu nic nie robi.
Nie. EditorConfig obejmuje białe znaki i końce linii w każdym edytorze, także w tych, których używają twoi koledzy z zespołu, a ty nie. Prettier i lintery specyficzne dla języka obsługują głębsze reguły stylu, takie jak cudzysłowy, średniki i końcowe przecinki. Te dwa rozwiązania się uzupełniają, a Prettier odczyta twój .editorconfig w kwestii podstaw.
Bo YAML w ogóle nie dopuszcza tabulatora we wcięciach. Plik workflow albo compose wcięty tabulatorami nie przechodzi parsowania, zanim jakiekolwiek narzędzie go zobaczy. Generator zostawia twoje tabulatory wszędzie indziej i nadpisuje wyłącznie sekcję YAML, a gdy to robi, mówi o tym nad plikiem.
Ustaw end_of_line = crlf, jeśli narzędzia Windows w repozytorium faktycznie tego wymagają. Lepszym wyborem zwykle jest lf tutaj plus .gitattributes z * text=auto, żeby git normalizował końce linii przy commicie, a checkouty pozostawały odpowiednie dla każdego systemu operacyjnego.
Twoje wybory budują plik i wędrują w adresie strony między krokami, więc możesz udostępnić konfigurację albo dodać ją do zakładek. Po wygenerowaniu strony nic nie jest przechowywane na naszych serwerach.
Powiązane narzędzia
Generator konfiguracji webpack
Utwórz plik webpack.config.js dla webpacka 5 do czystego JavaScriptu, Reacta lub Vue: TypeScript, Babel, CSS lub Sass, obrazy, HtmlWebpackPlugin, serwer deweloperski i polecenie npm install.
Generator kolorów analogicznych
Twórz pięciokolorowe palety analogiczne z dowolnego koloru bazowego: klasyczną trójkę, dwie zewnętrzne barwy oraz wartości hex, RGB i HSL.
Generator fikcyjnych numerów telefonu
Generuj do 50 fikcyjnych numerów z oficjalnie zastrzeżonych zakresów w pięciu krajach.
Walidator OpenAPI
Wklej dokument OpenAPI lub Swagger w JSON albo YAML i sprawdź jego podstawową strukturę: pole wersji, obiekt info i paths, z czytelnymi błędami i ostrzeżeniami.
Kod na obraz
Wklej kod, ustaw motyw, kolory, rozmiar czcionki, odstępy, nagłówek i numery wierszy, sprawdź podgląd canvas i pobierz PNG. Renderowanie zwykłego tekstu, bez podświetlania składni.
Kreator diagramów ERD
Utwórz lokalnie diagram encja-relacja z maksymalnie 12 encjami, polami, relacjami i licznościami. Eksportuj Mermaid, SVG, PNG lub JSON.
Narzędzie jest dostępne w innych językach
- EditorConfig ジェネレーター [JA]
- เครื่องมือสร้าง EditorConfig [TH]
- Trình tạo EditorConfig [VI]
- EditorConfig-generator [NL]
- EditorConfig 생성기 [KO]
- Générateur EditorConfig [FR]
- EditorConfig-generator [SV]
- Gerador de EditorConfig [PT]
- Generador de EditorConfig [ES]
- مولد EditorConfig [AR]
- EditorConfig-Generator [DE]
- Generator EditorConfig [ID]
- Генератор EditorConfig [RU]
- EditorConfig Oluşturucu [TR]
- EditorConfig 生成器 [ZH]
- EditorConfig Generator [EN]
- Generatore EditorConfig [IT]