Photo par pxhere.com

Utiliser StyleCop pour améliorer la qualité de votre code

Améliorez votre qualité de code facilement!

Posted by Damien Aicheh on June 20, 2019 · 5 mins

Lorsque vous développez un projet, vous travaillez probablement au sein d’une équipe. Chaque développeur a ses propres habitudes de programmation. Pour éviter d’avoir un code différent dans chaque classe, nous devons trouver un moyen de l’harmoniser.

Présentation de StyleCop

StyleCop est un analyseur de code source C# qui vous permet d’appliquer un ensemble de règles de style et de contrôle de cohérence. Vous pouvez adapter les règles que vous ne souhaitez pas vérifier en fonction de vos besoins. Ce type d’outils vous aide à avoir un code:

  • Lisible
  • Maintenable
  • Facile à suivre pour les nouveaux développeurs

Pour ajouter StyleCop à votre project vous avez différentes possibilités :

  • L’utilisation du Nuget StyleCop.MSBuild
  • L’utilisation de l’extension Visual Studio

Je vais concentrer ce tutoriel sur la première solution, ses avantages sont :

  • Vous conservez votre configuration StyleCop avec votre projet
  • Si un nouveau développeur arrive dans votre équipe, il n’aura pas besoin d’installer l’extension Visual Studio
  • Lorsque vous récuperez le projet, il vous suffit de restaurer les Nugets et vous êtes prêt à démarrer

Installation de StyleCop

Tout d’abord ajoutez le package Nuget StyleCop.MSBuild dans le projet que vous voulez analyser.

Maintenant, par exemple, créons une nouvelle class appelée MyViewModel.cs, voici ce qui est généré de base :

using System;
namespace StyleCopDemo
{
    public class MyViewModel
    {
        public MyViewModel()
        {
        }
    }
}

Si vous compilez votre projet, vous verrez immédiatement de nombreux warnings dans cette class :

ViewModel warnings

Configuration de StyleCop

Ajoutons un nouveau fichier appelé Settings.StyleCop à votre projet, celui-ci vous aidera à configurer et ajuster les règles que vous voulez ou non dans votre projet.

Ajoutons une configuration par défaut:

<StyleCopSettings Version="4.3">
  <GlobalSettings>
    <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
    <StringProperty Name="Culture">en-US</StringProperty>
    <CollectionProperty Name="RecognizedWords">
      <Value>Dll</Value>          
    </CollectionProperty>
  </GlobalSettings>
  <Parsers>
    <Parser ParserId="StyleCop.CSharp.CsParser">
      <ParserSettings>
        <BooleanProperty Name="AnalyzeDesignerFiles">False</BooleanProperty>
      </ParserSettings>
    </Parser>
  </Parsers>
  <Analyzers>
    <Analyzer AnalyzerId="StyleCop.CSharp.DocumentationRules">
      <Rules>
      </Rules>
      <AnalyzerSettings>
        <StringProperty Name="CompanyName">https://github.com/YourCompany</StringProperty>
        <StringProperty Name="Copyright">MS-PL</StringProperty>
        <BooleanProperty Name="IgnorePrivates">True</BooleanProperty>
        <BooleanProperty Name="IgnoreInternals">True</BooleanProperty>
        <BooleanProperty Name="IncludeFields">False</BooleanProperty>
      </AnalyzerSettings>
    </Analyzer>
    <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
      <AnalyzerSettings>
        <CollectionProperty Name="Hungarian">
          <Value>as</Value>
          <Value>do</Value>
          <Value>id</Value>
          <Value>if</Value>
          <Value>in</Value>
          <Value>ip</Value>
          <Value>is</Value>
          <Value>mx</Value>
          <Value>my</Value>
          <Value>no</Value>
          <Value>on</Value>
          <Value>to</Value>
          <Value>ui</Value>
          <Value>vs</Value>
          <Value>x</Value>
          <Value>y</Value>
          <Value>z</Value>
        </CollectionProperty>
      </AnalyzerSettings>
    </Analyzer>
    <Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
      <AnalyzerSettings>
        <BooleanProperty Name="GeneratedCodeElementOrder">False</BooleanProperty>
      </AnalyzerSettings>
    </Analyzer>    
  </Analyzers>
</StyleCopSettings>

Selon ce que vous voulez et ce dont vous avez besoin, vous pouvez désactiver certaines règles. Prenons un exemple, si vous regardez la capture d’écran ci-dessus, vous constaterez que StyleCop se plaint à propos de plusieurs règles. La régle SA1633 a pour message d’erreur :

SA1633 : CSharp.Documentation : The file has no header, the header Xml is invalid, or the header is not located at the top of the file.

Si vous souhaitez désactiver cette règle, il vous suffit de:

  • Aller sur le repos Github de StyleCop
  • Faire une recherche avec l’identifiant de la règle, dans notre cas c’est la SA1633
  • Recherchez le nom de la règle associé. Dans notre cas, il s’agit de FileMustHaveHeader

Ensuite, vous pouvez la désactiver en le spécifiant dans les balises Rules :

<Rule Name="FileMustHaveHeader">
  <RuleSettings>
    <BooleanProperty Name="Enabled">False</BooleanProperty>
  </RuleSettings>
</Rule>

Maintenant, si vous recompilez, l’avertissement disparaîtra. Il est temps que vous l’expérimentiez dans vos projets ! J’ai crée un projet de démonstration juste pour vous montrer un exemple simple.

Vous trouverez un exemple de code sur ce répertoire Github.

Happy codding !

Vous avez aimé ce tutoriel ? Laissez une étoile sur le répertoire Github associé !

N'hésitez pas à me suivre sur pour ne pas rater mon prochain tutoriel !