Zamarudziłem ostatnio na twiterze, że przestałem lubić code review:
Przyznam się szczerze -UWIELBIAŁEM PULL REQUESTY –
jak można spierdolić coś tak pięknego?— Jaroslaw Stadnicki (@j_stadnicki) November 30, 2022
To nie pierwszy raz, kiedy marudzę, nie pierwszy raz, kiedy na Twitterze i nie pierwszy raz o tym, że komentarze na temat spacji, wcięć, klamerek i całej serii białych znaków to czyste ?
Ile jeszcze? Otóż dorosłem ? i chce coś z tym zrobić. Można na różne sposoby, ja wybrałem .editorconfig – bo jest wspierany z pudełka przez większość edytorów
Oczywiście moje życie mówi sprawdzam! i jest trochę inaczej, ale ostatecznie można to ogarnąć.
Mój problem jest taki, że w solucji jest kilka projektów i nie wiem, czy wszyscy chcą mieć taki sam format kodu (sic!). Na szczęście .editorconfig to ogarnia i można to zrobić globalnie, a potem nadpisywać w projektach.
Przykładowa solucja
Wygląda to tak, że mam jeden plik globalnie, oraz dodatkowo w projekcie webapplication1 posiadam dodatkowy, który ma lekko inne ustawienia formatowania.
Visual Studio 2022 w wersji Community radzi sobie tak se z formatowanie, czy nawet zapisywaniem zmian. Aby wygenerować działający plik ediforconfig, zmieniłem ustawienia całego VS, a potem eksport do pliku.
Wbudowany edytor lubi zapomnieć zmienić zawartość pliku, polecam notatnik lub otwierać jako plik tekstowy i zmian dokonywać ręcznie
Następnie wciskam ^K, ^D nie działa, nic się nie dzieje, patrze meme powyżej, gdzie .editorconfig działa w większości edytorów (vscode też, rider też).
Na szczęście dla moich bujnych i ciemnych włosów dotnet format robi robotę:
Można go uruchomić dla jednego projektu:
dotnet format webapplication1.csproj
Można dla solucji
dotnet format
Można także w trybie sprawdzania
dotnet format --verify-no-changes
gdzie zamarudzi błędem i wskaże które miejsca nie pasują do konfiguracji
E:\Users\jarek\source\repos\WebApplication2 λ dotnet format --verify-no-changes E:\Users\jarek\source\repos\WebApplication2\WebApplication2\Program.cs(3,48): error WHITESPACE: Fix whitespace formatting. Delete 10 characters. [E:\Users\jarek\source\repos\WebApplication2\WebApplication2\WebApplication2.csproj] E:\Users\jarek\source\repos\WebApplication2\WebApplication2\Program.cs(13,51): error WHITESPACE: Fix whitespace formatting. Delete 14 characters. [E:\Users\jarek\source\repos\WebApplication2\WebApplication2\WebApplication2.csproj]
I teraz jak to się sprawdza w różnych projektach, z różną konfiguracją, aby mieć pewność, włączyłem wyższy poziom logowania:
dotnet format WebApplication2.sln -v d The dotnet runtime version is '7.0.0'. Formatting code files in workspace 'E:\Users\jarek\source\repos\WebApplication2\WebApplication2.sln'. Determining projects to restore... All projects are up-to-date for restore. Project WebApplication2 is using configuration from 'E:\Users\jarek\source\repos\WebApplication2\.editorconfig'. Project WebApplication2 is using configuration from 'E:\Users\jarek\source\repos\WebApplication2\WebApplication2\obj\Debug\net6.0\WebApplication2.GeneratedMSBuildEditorConfig.editorconfig'. Project WebApplication2 is using configuration from 'C:\Program Files\dotnet\sdk\7.0.100\Sdks\Microsoft.NET.Sdk\analyzers\build\config\analysislevel_6_default.editorconfig'. Project WebApplication1 is using configuration from 'E:\Users\jarek\source\repos\WebApplication2\.editorconfig'. Project WebApplication1 is using configuration from 'E:\Users\jarek\source\repos\WebApplication2\WebApplication1\.editorconfig'. Project WebApplication1 is using configuration from 'E:\Users\jarek\source\repos\WebApplication2\WebApplication1\obj\Debug\net6.0\WebApplication1.GeneratedMSBuildEditorConfig.editorconfig'. Project WebApplication1 is using configuration from 'C:\Program Files\dotnet\sdk\7.0.100\Sdks\Microsoft.NET.Sdk\analyzers\build\config\analysislevel_6_default.editorconfig'. Running 2 analyzers on WebApplication2. Running 2 analyzers on WebApplication1. Running 147 analyzers on WebApplication2. Running 147 analyzers on WebApplication1. Formatted 0 of 16 files. Format complete in 3305ms.
Spójrz na kolor czerwony oraz zielony (?), używane są odpowiednie editorconfig z roota, i root wraz z nadpisanym lokalnie configiem.
Z takiej zbitki kodu:
Powstały mi takie dwa różne pliki:
Oraz
Teraz pozostaje tylko to sprzedać i tyle, back to I <3 PR
ps.
Prawie udało mi się nie pisać nic przez rok!