Ejemplo n.º 1
0
 public SyntaxTrivia CreateDocComment()
 {
     return(SF.Trivia(
                SF.DocumentationCommentTrivia(SyntaxKind.SingleLineDocumentationCommentTrivia)
                .AddContent(GetNodes().ToArray())
                ));
 }
Ejemplo n.º 2
0
 public SyntaxTriviaList ConstructTriviaList()
 {
     return(SF.TriviaList(
                SF.Trivia(
                    SF.DocumentationCommentTrivia(
                        SyntaxKind.MultiLineDocumentationCommentTrivia,
                        CreateDocumentElement("Summary", Summary)))));
 }
Ejemplo n.º 3
0
        private DocumentationCommentTriviaSyntax GetDocCommentWithText(string text)
        {
            var summaryComment = SF.DocumentationCommentTrivia(SyntaxKind.SingleLineDocumentationCommentTrivia)
                                 .AddContent(
                SF.XmlText(
                    SF.Token(SyntaxKind.XmlTextLiteralToken)
                    .WithLeadingTrivia(
                        SF.TriviaList(SF.SyntaxTrivia(SyntaxKind.DocumentationCommentExteriorTrivia, "///"))
                        )
                    ),
                SF.XmlElement(
                    SF.XmlElementStartTag(SF.XmlName(SF.Identifier(@"summary"))),
                    SF.XmlElementEndTag(SF.XmlName(SF.Identifier(@"summary")))
                    )
                .AddContent(
                    SF.XmlText(
                        SF.Token(SyntaxKind.XmlTextLiteralNewLineToken),
                        SF.Token(
                            SF.TriviaList(SF.SyntaxTrivia(SyntaxKind.DocumentationCommentExteriorTrivia, "///")),
                            SyntaxKind.XmlTextLiteralToken,
                            $" {text}",
                            $" {text}",
                            SF.TriviaList()
                            ),
                        SF.Token(SyntaxKind.XmlTextLiteralNewLineToken),
                        SF.Token(SyntaxKind.XmlTextLiteralToken)
                        .WithLeadingTrivia(
                            SF.TriviaList(SF.SyntaxTrivia(SyntaxKind.DocumentationCommentExteriorTrivia, "///"))
                            )
                        )
                    ),
                SF.XmlText(SF.XmlTextNewLine(SF.TriviaList(), Environment.NewLine, Environment.NewLine, SF.TriviaList()))
                )
                                 .WithEndOfComment(SF.Token(SyntaxKind.EndOfDocumentationCommentToken));

            return(summaryComment);
        }
Ejemplo n.º 4
0
        private static SyntaxTriviaList MakeXmlDocComments(
            SyntaxNode maybePrevious, IEnumerable <Field> fields, string defaultSummary)
        {
            var xmlParameters = fields.Where(x => x.StructuredTrivia != null)
                                .Select(
                x => new
            {
                Field        = x,
                FieldSummary = x.StructuredTrivia?.Select(i => i.GetStructure())
                               .OfType <DocumentationCommentTriviaSyntax>()
                               .FirstOrDefault()
                               ?.ChildNodes()
                               .OfType <XmlElementSyntax>()
                               .FirstOrDefault(i => i.StartTag.Name.ToString() == "summary")
            }
                );

            var newXmlParameters = xmlParameters.Select(
                x => x.FieldSummary.WithStartTag(
                    SF.XmlElementStartTag(
                        SF.XmlName("param"),
                        SF.SingletonList((XmlAttributeSyntax)SF.XmlNameAttribute(x.Field.Name))
                        )
                    )
                .WithEndTag(SF.XmlElementEndTag(SF.XmlName("param")))
                );

            var existingXmlTrivia = maybePrevious?.HasStructuredTrivia == true
                ? maybePrevious.GetLeadingTrivia()
                                    .Select(i => i.GetStructure())
                                    .OfType <DocumentationCommentTriviaSyntax>()
                                    .FirstOrDefault()
                : null;

            var xmlTrivia = existingXmlTrivia ?? SF.DocumentationCommentTrivia(
                SyntaxKind.SingleLineDocumentationCommentTrivia, SF.List(
                    new XmlNodeSyntax[]
            {
                SF.XmlText(" "),
                SF.XmlSummaryElement(SF.XmlText(defaultSummary))
            }
                    )
                )
                            .WithLeadingTrivia(SF.TriviaList(SF.DocumentationCommentExterior("///")));

            var xmlNodes = xmlTrivia.ChildNodes()
                           .OfType <XmlNodeSyntax>()
                           .Where(node => !(node is XmlElementSyntax xmlElement) || xmlElement.StartTag.Name.ToString() != "param")
                           .ToList();

            var xmlElementsToKeep = xmlNodes.FindLastIndex(x => x is XmlElementSyntax) + 1;
            var xmlElements       = xmlNodes.Take(xmlElementsToKeep).ToList();

            return(SF.TriviaList(
                       SF.LineFeed,
                       SF.Trivia(
                           xmlTrivia.WithContent(
                               SF.List(
                                   xmlElements.Concat(
                                       newXmlParameters.SelectMany(
                                           x => new XmlNodeSyntax[]
            {
                SF.XmlText("\n"),
                x.WithLeadingTrivia(
                    SF.TriviaList()
                    .Concat(xmlTrivia.GetLeadingTrivia())
                    .Concat(new[] { SF.Space })
                    )
            }
                                           )
                                       )
                                   )
                               )
                           ), SF.LineFeed
                       ));
        }