/// <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));
        }
示例#2
0
        /// <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));
        }