paint-brush
Comment utiliser Common EditorConfig en tant que package NuGetpar@igorlopushko
6,868 lectures
6,868 lectures

Comment utiliser Common EditorConfig en tant que package NuGet

par Igor Lopushko1m2022/06/17
Read on Terminal Reader
Read this story w/o Javascript

Trop long; Pour lire

EditorConfig permet de maintenir des styles de codage cohérents pour plusieurs développeurs travaillant sur le même projet dans différents éditeurs et IDE. Les fichiers EditorConfig sont facilement lisibles et fonctionnent bien avec les systèmes de contrôle de version. EditorConfg a certaines limitations dans le monde .NET également spécifiées dans cet article dans la section [limitations] de cet article. Le projet EditorConfig se compose d'un format de fichier** pour définir les styles de codage et d'une collection de plug-ins d'éditeur de texte** qui permettent aux éditeurs de lire le format de fichier et de respecter les styles définis.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Comment utiliser Common EditorConfig en tant que package NuGet
Igor Lopushko HackerNoon profile picture

Le problème

Dans notre organisation, nous exécutons plusieurs référentiels GitHub avec différents services Web. Tous ces projets nécessitent des règles communes pour le style du code. Nous nous sommes déplacés dans le bon sens et avons créé un projet de modèle de service qui sert de base à toutes les solutions .NET et définit une architecture commune. Il contient un ensemble de projets avec des noms et des références corrects. Cependant, nous nous sommes déplacés dans le mauvais sens et avons copié le fichier .editorconfig dans chaque nouveau référentiel. Il y avait une tentation de modifier le fichier .editorconfig chaque fois qu'il ne correspondait pas aux besoins du développeur. Et nous avons commis cette faute.


Il n'y a pas beaucoup d'informations sur Internet sur la façon de créer un fichier .editorconfig commun et de le distribuer sur plusieurs référentiels. Le sentiment divin a dit qu'il devait s'agir d'un package NuGet. Après une longue période de recherche sur Google, nous avons trouvé cette solution. Merci à Adam Craven qui a résolu le même problème pour son projet.

Pourquoi EditorConfig

EditorConfig aide à maintenir des styles de codage cohérents pour plusieurs développeurs travaillant sur le même projet dans différents éditeurs et IDE. Le projet EditorConfig se compose d' un format de fichier pour définir les styles de codage et d'une collection de plugins d'éditeur de texte qui permettent aux éditeurs de lire le format de fichier et de respecter les styles définis. Les fichiers EditorConfig sont facilement lisibles et fonctionnent bien avec les systèmes de contrôle de version.


Dans le monde .NET, les règles d'analyse de code ont diverses options de configuration. Vous spécifiez ces options sous forme de paires clé-valeur dans l'un des fichiers de configuration d'analyseur suivants :

  • Fichier EditorConfig : options de configuration basées sur des fichiers ou des dossiers.

  • Fichier global AnalyzerConfig : options de configuration au niveau du projet. Utile lorsque certains fichiers de projet résident en dehors du dossier du projet.


Vous pouvez définir la gravité des avertissements du compilateur ou des règles de l'analyseur dans un fichier EditorConfig avec la syntaxe suivante :

dotnet_diagnostic.<rule ID>.severity = <severity>


La définition de la gravité d'une règle dans un fichier EditorConfig est prioritaire sur toute gravité définie dans un ensemble de règles ou dans l'Explorateur de solutions.


Dans certains projets, il existe un mélange de fichiers de configuration locaux et globaux. De plus, EditorConfg a certaines limitations dans le monde .NET également spécifiées dans cet article dans la section des limitations . Nous avons essayé dans les deux sens et avons fait des allers-retours avec ces deux approches. Et finalement décidé de passer d'une manière simple à utiliser uniquement EditoConfig pour nos projets.

La solution

Tout d'abord, vous devez créer un nouveau projet de bibliothèque C# pour le package NuGet. Appelons-le MyProject.EditorConfig . Ce projet contiendra les fichiers suivants :

  • fichier .props
  • fichier .csproj
  • fichier .editorconfig

fichier .props

Vous devez ajouter PropertyGroup avec les propriétés suivantes définies sur la vraie valeur :

 <PropertyGroup> <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild> <EnableNETAnalyzers>true</EnableNETAnalyzers> </PropertyGroup>


  • EnforceCodeStyleInBuild - permet aux règles de style de code spécifiées dans le fichier EditorConfig d'être vérifiées dans le cadre de la construction ;
  • EnableNETAnalyzers esttrue par défaut pour .NET 5.0 , mais définissez-le plutôt sur true pour prendre en charge les versions antérieures de .NET ;


Comme l'une des limitations de EditorConfig est que certaines règles ont Location.None et ne peuvent pas être spécifiées dans un fichier EditorConfig. Si vous n'utilisez pas le fichier Global AnalyzerConfig comme nous le faisons, vous auriez la possibilité de désactiver ces règles dans le fichier .props :

 <PropertyGroup> <NoWarn>$(NoWarn);CA1014</NoWarn> </PropertyGroup>


Spécifiez l'emplacement du fichier .editorconfig à copier depuis la structure de dossiers du package NuGet :

 <ItemGroup> <EditorConfigFilesToCopy Include="$(MSBuildThisFileDirectory)../content/Rules/.editorconfig" /> </ItemGroup>


Soyez prudent avec les symboles \ et / dans la chaîne du chemin d'accès au fichier sur différentes plates-formes. Il nous a vraiment fallu beaucoup de temps pour comprendre pourquoi le fichier .editorconfig n'est pas copié.


Utilisez la tâche de Copy MSBuild pour copier le fichier dans le dossier du projet .NET en cours de génération. Cette cible est définie pour s'exécuter avant la cible MSBuild BeforeBuild .

 <Target Name="CopyEditorConfig" BeforeTargets="BeforeBuild"> <Message Text="Copying the .editorconfig file from '@(EditorConfigFilesToCopy)' to '$(SolutionFolder)'"></Message> <Copy SourceFiles="@(EditorConfigFilesToCopy)" DestinationFolder="$(SolutionFolder)" SkipUnchangedFiles="true" UseHardlinksIfPossible="false" /> </Target>

fichier .csproj

Par défaut, lors de la compression, les fichiers NuGet commençant par un point sont ignorés. Pour éviter cela, vous devez ajouter le code suivant au fichier .csproj :

 <PropertyGroup> <NoDefaultExcludes>true</NoDefaultExcludes> </PropertyGroup>


Après cela, vous devez inclure les fichiers .props et .editorconfig :

 <ItemGroup> <None Include="MyProject.EditorConfig.props" Pack="true" PackagePath="\build" /> <None Include=".editorconfig" Pack="true" PackagePath="\content\Rules" /> </ItemGroup>

Construire et tester le package NuGet

Lorsque tout le travail est terminé, vous pouvez publier le package NuGet sur le stockage local et vérifier qu'il fonctionne.


Exécutez la commande suivante dans le dossier du projet MyProject.EditorConfig pour compresser un package NuGet :

 dotnet pack MyProject.EditorConfig.csproj -c Release -o out --no-restore


Publiez-le dans le stockage local (dossier). NuGet CLI doit être installé au préalable :

 nuget add out/MyProject.EditorConfig.1.0.0.nupkg -Source /Users/igorlopushko/test_nuget_expand/ -Expand

Spécifiez un dossier cible avec le paramètre -Source .


Enregistrez le chemin d'accès au package NuGet local :

 dotnet nuget add source /Users/igorlopushko/test_nuget_expand/


Pour ajouter un package NuGet local au projet cible, exécutez cette commande dans le dossier du projet cible :

 dotnet add package MyProject.EditorConfig -s /Users/igorlopushko/test_nuget_expand/


Lorsque vous créez votre projet cible, vous obtenez le fichier .editorconfig dans le répertoire racine de ce projet. Il sera écrasé à chaque fois que vous créerez un projet. Même s'il a été modifié d'une manière ou d'une autre par erreur, le fichier .editorconfig sera écrasé sur la construction.

Conclusion

La solution est assez simple, mais elle a facilité la vie de notre équipe. Nous avons ajouté ce package NuGet à tous nos projets et évitons la désynchronisation des styles de code dans tous les référentiels.