コード例 #1
0
        protected IEnumerable <XmlNodeSyntax> GetSummaryNodes()
        {
            if (Documentable.Docs?.ContainsKey("comment") == true)
            {
                yield return(SF.XmlText(" ").WithLeadingTrivia(SF.DocumentationCommentExterior(" ")));

                yield return(SF.XmlSummaryElement(GetXmlNodes(Documentable.Docs["comment"]).ToArray()));
            }
        }
コード例 #2
0
        protected IEnumerable <XmlNodeSyntax> GetSummaryNodes()
        {
            if (!String.IsNullOrEmpty(Documentable.Docs?.Summary))
            {
                yield return(SF.XmlText(" ").WithLeadingTrivia(SF.DocumentationCommentExterior(" ")));

                yield return(SF.XmlSummaryElement(GetXmlNodes(Documentable.Docs.Summary).ToArray()));
            }
        }
コード例 #3
0
 private XmlTextSyntax CreateCommentLeading()
 {
     return(SF.XmlText().WithTextTokens(
                SF.TokenList(
                    SF.XmlTextLiteral(
                        SF.TriviaList(
                            SF.DocumentationCommentExterior("///")),
                        " ",
                        " ",
                        SF.TriviaList()))));
 }
コード例 #4
0
        protected IEnumerable <XmlNodeSyntax> GetReturnsNodes()
        {
            var text = Documentable.Docs?.Returns;

            if (!String.IsNullOrEmpty(text))
            {
                yield return(SF.XmlText(" ").WithLeadingTrivia(SF.DocumentationCommentExterior(" ")));

                yield return(SF.XmlReturnsElement(GetXmlNodes(text).ToArray()));
            }
        }
コード例 #5
0
        protected IEnumerable <XmlNodeSyntax> GetReturnsNodes()
        {
            if (Documentable.Docs?.ContainsKey("return") != true)
            {
                yield break;
            }

            string text = Documentable.Docs["return"];

            yield return(SF.XmlText(" ").WithLeadingTrivia(SF.DocumentationCommentExterior(" ")));

            yield return(SF.XmlReturnsElement(GetXmlNodes(text).ToArray()));
        }
コード例 #6
0
        protected IEnumerable <XmlNodeSyntax> GetRemarksNodes()
        {
            if (Documentable.Docs == null)
            {
                yield break;
            }

            List <string> remarks = new List <string>();

            if (!String.IsNullOrEmpty(Documentable.Docs.Remarks))
            {
                remarks.Add(Documentable.Docs.Remarks);
            }
            if (!String.IsNullOrEmpty(Documentable.Docs.Default))
            {
                remarks.Add($"default: {Documentable.Docs.Default}");
            }
            if (Documentable.Docs.Stability.HasValue)
            {
                remarks.Add($"stability: {Documentable.Docs.Stability}");
            }
            if (!String.IsNullOrEmpty(Documentable.Docs.Example))
            {
                remarks.Add($"example:\n<code>\n{Documentable.Docs.Example}\n</code>");
            }
            if (!String.IsNullOrEmpty(Documentable.Docs.See))
            {
                remarks.Add($"{Documentable.Docs.See} ");
            }                                                                                               // Extra space here to keep links clickable
            if (Documentable.Docs.Subclassable.GetValueOrDefault(false))
            {
                remarks.Add($"subclassable");
            }

            remarks.AddRange(Documentable.Docs.Custom
                             .Where(kvp => !_wellKnownKeys.Contains(kvp.Key))
                             .Select(kvp => kvp.Key == "link"
                    ? $"{kvp.Key}: {kvp.Value} "  // Extra space for '@link' to keep unit tests happy
                    : $"{kvp.Key}: {kvp.Value}"
                                     ));

            if (remarks.Any())
            {
                yield return(SF.XmlText(" ").WithLeadingTrivia(SF.DocumentationCommentExterior(" ")));

                yield return(SF.XmlRemarksElement(GetXmlNodes(string.Join(Environment.NewLine, remarks)).ToArray()));
            }
        }
コード例 #7
0
        protected IEnumerable <XmlNodeSyntax> GetRemarksNodes()
        {
            if (Documentable.Docs == null)
            {
                yield break;
            }

            string remarks = string.Join(Environment.NewLine, Documentable.Docs
                                         .Where(kvp => !_wellKnownKeys.Contains(kvp.Key))
                                         // Visual Studio will include the closing </remarks> tag as part
                                         // of the clickable link if there is no space separating it.
                                         .Select(kvp => $"{kvp.Key}: {kvp.Value}{(kvp.Key == "link" ? " " : "")}"));

            if (remarks.Any())
            {
                yield return(SF.XmlText(" ").WithLeadingTrivia(SF.DocumentationCommentExterior(" ")));

                yield return(SF.XmlRemarksElement(GetXmlNodes(remarks).ToArray()));
            }
        }
コード例 #8
0
        protected IEnumerable <XmlNodeSyntax> GetXmlNodes(string text)
        {
            string[] tokens = text.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None);

            if (tokens.Length == 1)
            {
                yield return(SF.XmlText($"{tokens[0]}"));

                yield break;
            }

            foreach (XmlNodeSyntax node in tokens.Select(t =>
                                                         SF.XmlText($" {t}").WithLeadingTrivia(SF.DocumentationCommentExterior(" "))
                                                         ))
            {
                yield return(node);
            }

            yield return(SF.XmlNewLine(Environment.NewLine));

            yield return(SF.XmlText(" "));
        }
コード例 #9
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
                       ));
        }