.NET, Architecture, ALM, Cloud
Une des nouveautés apportées avec Visual Studio 2015 est la possibilité d'étendre l'analyseur de code plus facilement que ce soit en important une librairie ou avec vos packages vsix et nugget.
Pour créer votre analyseur, créer une librairie C# avec la configuration nuget suivante :
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.CodeAnalysis.Analyzers" version="1.0.0" targetFramework="net46" />
<package id="Microsoft.CodeAnalysis.Common" version="1.0.0" targetFramework="net46" />
<package id="Microsoft.CodeAnalysis.CSharp" version="1.0.0" targetFramework="net46" />
<package id="System.Collections.Immutable" version="1.1.36" targetFramework="net46" />
<package id="System.Reflection.Metadata" version="1.0.21" targetFramework="net46" />
</packages>
Une fois les packages téléchargés, créer votre premier analyseur. Voici un exemple d'analyseur qui se déclenche sur une méthode et vérifie que le nom de la méthode ne dépasse pas 15 caractères :
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class MethodNameAnalyzer : DiagnosticAnalyzer
{
public const string DiagnosticId = "MethodNameTooLong";
internal static readonly LocalizableString Title = "Method name too Long";
internal static readonly LocalizableString MessageFormat = "The method name {0} cannot exceed 15 characters";
internal const string Category = "Syntax";
internal static DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Warning, true);
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get { return ImmutableArray.Create(Rule); } }
public override void Initialize(AnalysisContext context)
{
context.RegisterSymbolAction(AnalyzeSymbol, SymbolKind.Method);
}
private static void AnalyzeSymbol(SymbolAnalysisContext context)
{
if(context.Symbol.Name.Length > 15)
{
var diagnostic = Diagnostic.Create(Rule, context.Symbol.Locations[0], context.Symbol.Name);
context.ReportDiagnostic(diagnostic);
}
}
}
Vous pouvez partir d'un squelette prédéfinis en ajoutant un nouvel élément Analyser "Visual C# Items>Extensibility" (il vous faut pour cela installer le .NET Compiler SDK) :
Ajouter ensuite l'analyser (la dll) dans votre programmer principale ("References>Analyzers>Add") et tester !
Le code suivant doit vous donner le rendu Visual Studio ci-dessous :
public void MethodNameIsTooLong()
{
}