/// <summary> /// Détermine si le inheritDoc du symbole méthode est présent et correct. /// </summary> /// <param name="context">Le contexte du symbole.</param> /// <returns>La ligne inheritDoc correcte dans le cas où l'actuelle est manquante/incorrecte, sinon null.</returns> private static string InheritDocEstCorrect(SymbolAnalysisContext context) { // On récupère les informations nécessaires du contexte du symbole. var location = context.Symbol.Locations.First(); var modèleSémantique = context.Compilation.GetSemanticModel(location.SourceTree); var racine = location.SourceTree.GetRoot(); var méthode = racine.FindNode(location.SourceSpan) as MethodDeclarationSyntax; // On ignore le code généré. if ((méthode?.Parent as ClassDeclarationSyntax)?.AttributeLists.Any(node => node.ChildNodes().Any(node2 => node2.ToString().Contains("GeneratedCode"))) ?? true) { return(null); } return(Inheritdoc.InheritDocEstCorrect(racine, modèleSémantique, méthode)); }
/// <summary> /// Ajoute/corrige la ligne de documentation à/de la méthode. /// </summary> /// <param name="document">Le document du contexte.</param> /// <param name="méthode">La méthode à documenter.</param> /// <param name="jetonAnnulation">Le jeton d'annulation.</param> /// <returns>Le document mis à jour.</returns> private static async Task <Document> AjouterInheritDoc(Document document, MethodDeclarationSyntax méthode, CancellationToken jetonAnnulation) { // On récupère la recine et le modèle sémantique. var racine = await document .GetSyntaxRootAsync(jetonAnnulation) .ConfigureAwait(false); var modèleSémantique = await document.GetSemanticModelAsync(jetonAnnulation); // On a déjà trouvé le inheritDoc dans le diagnostic mais on ne peut pas vraiment le passer au correctif... var inheritDoc = Inheritdoc.InheritDocEstCorrect(racine, modèleSémantique, méthode); // Ajoute la ligne de commentaire à la méthode. var méthodeCommentée = méthode .WithLeadingTrivia(SyntaxFactory.LineFeed, SyntaxFactory.Comment(inheritDoc), SyntaxFactory.LineFeed) .WithAdditionalAnnotations(Formatter.Annotation); // Met à jour la racine. var nouvelleRacine = racine.ReplaceNode(méthode, méthodeCommentée); return(document.WithSyntaxRoot(nouvelleRacine)); }