tu ma być spacja

Zamarudziłem ostatnio na twiterze, że przestałem lubić code review:

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!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.