Zet je Visual Studio 2017 code stijl in Git

En als je geen Git gebruikt? Ook dan kan het. Visual Studio 2017 implementeert namelijk .editorconfig. Dit is een open source bestandstype welke je de mogelijkheid geeft om je code stijl vast te leggen zodat iedereen in je team dezelfde stijl gebruikt. Omdat Visual Studio véél meer opties heeft dan er tot nu toe ondersteund worden is er een uitbreiding op de standaard gemaakt.

Een voorbeeld van hoe Microsoft het .editorconfig bestand heeft uitgebreid is te zien in hun eigen dotnet/coreclr repository op GitHub. Alle uitbreidingen zijn geprefixed met ofwel csharp_ ofwel dotnet_. Dit levert eigenschappen op als:

csharp_style_var_for_built_in_types = false:none
csharp_style_var_when_type_is_apparent = false:none
csharp_style_var_elsewhere = false:suggestion

Deze drie eigenschappen slaan op wanneer een expliciet type (zoals string, int, List<string> etc.) vervangen mag worden door het keyword var. De structuur van deze regels is eigenschap = [true|false]:[none|suggestion|warning|error]. Je geeft dus éérst de naam van de eigenschap op, en als waarde geef je aan of deze eigenschap aan of uit moet staan gevolgd door hoe de editor op het breken van deze regel moet reageren.

none levert, zoals te verwachten, géén reactie op. Er komt géén gloeilamp in de rand te staan, geen onderstreping en geen melding in het Error List venster. Als je dat vervangt door suggestion dan krijg je wél een gloeilamp in de rand en een vermelding in het Error List venster, maar de onderstreping is niet heel zichtbaar. Dit is namelijk een grijze onderstreping, zoals dit:

Ga je een stap verder en maak je er een warning van dan wordt deze als warning in het Error List venster getoond en ook als warning in de editor onderstreept. Als je er tot slot een error van maakt dan wordt deze ook overal als error gemarkeerd. Helaas is dit op het moment van schrijven enkel geïmplementeerd in de editor. De compiler doet er nog niets mee, waardoor dit je build nog niet breekt. Dit is wel iets waar aan gewerkt word zodat de regels ook daadwerkelijk afgedwongen worden.

EditorConfig bewerken


Iets anders dat momenteel nog ontbreekt is een fatsoenlijke editor voor deze bestanden. Als je deze nu in Visual Studio 2017 opent dan krijg je de gewone teksteditor. Er is echter een plugin die dit eenvoudiger maakt. Dit is Mads Kristensen’s EditorConfig Language Service< welke op de gebruikelijke manier geïnstalleerd kan worden. Naast de syntax highlighting van de .editorconfig bestanden bied deze ook de mogelijkheid om deze simpel aan je solution, project of map toe te voegen.

Gebruik van .editorconfig

In principe heb je genoeg aan het plaatsen van een .editorconfig bestand in de root van je solution. Mocht je echter een afwijkende .editorconfig willen gebruiken voor een project of map, dan kun je in het project of de map een extra .editorconfig plaatsen. Er word gezocht naar .editorconfig bestanden in de map van het bestand waarin je bezig bent en alle bovenliggende mappen. Dit gaat door totdat ofwel de root van het bestandssysteem bereikt wordt (bijv C:\) ofwel er een .editorconfig gevonden wordt waarin root = true staat. Al deze .editorconfig bestanden worden vervolgens op eenzelfde manier gelezen als CSS.

Daarmee bedoel ik dat de .editorconfig in de map het verst weg begonnen word, en iedere .editorconfig die dichterbij ligt word daar overheen gelezen. Een voorbeeld:

Je hebt onderstaande projectstructuur, waarbij je voor de bestanden onder Database/Oracle een aantal andere regels wilt toepassen dan voor de rest van het project. Je plaatst dan een .editorconfig in de root van het project. Vervolgens plaats je er een in de map Database/Oracle welke enkel de regels overschrijft die je aangepast wilt hebben.

Op het moment dat je het bestand Database/Oracle/Connector.cs opent wordt eerst de .editorconfig naast Program.cs ingelezen, en omdat deze aangeeft dat het de root .editorconfig is wordt er niet hoger gezocht. Hierna wordt er naar de map Database gekeken, waar in dit geval geen .editorconfig in staat. Tot slot wordt de .editorconfig ingelezen die naast Connector.cs staat. Alle regels worden samengevoegd, en dat is de regelset welke gebruikt wordt.

Hoe zit het dan met instellingen onder Tools => Options?

In eerdere versies van Visual Studio stonden al deze opties ingesteld in het optiescherm onder het Tools menu. Dit scherm is er nog steeds, en werkt ook nog steeds. Deze regels worden echter overschreven door wat er in de .editorconfig bestanden vermeld staat. Zeggen jouw persoonlijke voorkeuren bijvoorbeeld dat je nooit een var wilt gebruiken, maar stelt de .editorconfig dat dit toch in sommige gevallen moet? Dan zal Visual Studio meegaan met de opties in de .editorconfig.

Meer informatie

Dit is slechts de top van de ijsberg, er is online natuurlijk veel meer informatie beschikbaar. De website van EditorConfig is waar je meer informatie kunt vinden over wat het bestand doet en hoe je deze kunt gebruiken. Een voorbeeld van een .editorconfig bestand voor Visual Studio kun je vinden in de dotnet/coreclr repository op GitHub, of door meteen naar https://github.com/dotnet/coreclr/blob/master/.editorconfig te gaan.