Exemple #1
0
 public override void Render(PageTree parent, MarkdownWriter writer)
 {
     writer.WriteHeader(1, Title);
     writer.WriteParagraph(Docs?.Summary ?? "_(No Description)_");
     writer.WriteHeader(2, "Signature");
     writer.WriteCodeBlock("csharp", DocUtilities.GetPropertySignature(_property, true, true, true));
 }
Exemple #2
0
        public TypePage(Type type, MemberXmlDocs docs, ProjectXmlDocs prjDocs) : base(docs)
        {
            Type     = type;
            _prjDocs = prjDocs;

            var name = DocUtilities.GetDisplayTitle(type, false);

            if (type.IsEnum)
            {
                Title = $"{name} Enum";
            }
            else if (type.IsInterface)
            {
                Title = $"{name} Interface";
            }
            else if (type.IsValueType)
            {
                Title = $"{name} Struct";
            }
            else if (type.IsSubclassOf(typeof(Delegate)))
            {
                Title = $"{name} Delegate";
            }
            else
            {
                Title = $"{name} Class";
            }
        }
Exemple #3
0
        private static Doc Print(BlockSyntax node, string?groupId)
        {
            Doc statementSeparator = node.Parent is AccessorDeclarationSyntax &&
                                     node.Statements.Count <= 1 ? Doc.Line : Doc.HardLine;

            var docs = new List <Doc>
            {
                groupId != null
                    ? Doc.IfBreak(" ", Doc.Line, groupId)
                    : node.Parent is ParenthesizedLambdaExpressionSyntax ? Doc.Null : Doc.Line,
                Token.Print(node.OpenBraceToken)
            };

            if (node.Statements.Count > 0)
            {
                var innerDoc = Doc.Indent(
                    statementSeparator,
                    Doc.Join(statementSeparator, node.Statements.Select(Node.Print))
                    );

                DocUtilities.RemoveInitialDoubleHardLine(innerDoc);

                docs.Add(Doc.Concat(innerDoc, statementSeparator));
            }

            docs.Add(
                node.Statements.Count == 0 ? " " : Doc.Null,
                Token.Print(node.CloseBraceToken)
                );
            return(Doc.Group(docs));
        }
 public ConstructorsPage(Type type, IEnumerable <ConstructorInfo> ctors, Dictionary <ConstructorInfo, MemberXmlDocs> ctorsData) : base(null)
 {
     _type      = type;
     _ctors     = ctors;
     _ctorsData = ctorsData;
     Title      = $"{DocUtilities.GetDisplayTitle(type)} constructors";
 }
        public void RemoveInitialDoubleHardLine_Should_Handle_Empty_List()
        {
            var doc = new List <Doc>();

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            doc.Should().BeEmpty();
        }
        public void RemoveInitialDoubleHardLine_Should_Only_Remove_Initial_HardLines()
        {
            var doc = Doc.Concat("1", Doc.HardLine, Doc.HardLine);

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            doc.Should().BeEquivalentTo(Doc.Concat("1", Doc.HardLine, Doc.HardLine));
        }
        public void RemoveInitialDoubleHardLine_Work_With_Doc_Null_Before_String()
        {
            var doc = Doc.Concat(Doc.HardLine, Doc.Null, "1", Doc.HardLine, "2");

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            DocSerializer.Serialize(doc)
            .Should()
            .Be(DocSerializer.Serialize(Doc.Concat(Doc.HardLine, "1", Doc.HardLine, "2")));
        }
        public void RemoveInitialDoubleHardLine_Should_Remove_Simple_Double_HardLine()
        {
            var doc = new List <Doc> {
                Doc.HardLine, Doc.HardLine
            };

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            doc.Should().HaveCount(1);
        }
        public void RemoveInitialDoubleHardLine_Should_Remove_Null()
        {
            var doc = new List <Doc> {
                Doc.Null
            };

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            doc.Should().BeEmpty();
        }
        public void RemoveInitialDoubleHardLine_Should_Remove_Deep_Concated_HardLine()
        {
            var concat = Doc.Concat(Doc.HardLine, Doc.HardLine);
            var doc    = new List <Doc> {
                Doc.Concat(concat)
            };

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            concat.Contents.Should().ContainSingle();
        }
Exemple #11
0
        public void RemoveInitialDoubleHardLine_Should_Remove_Concated_HardLine()
        {
            var concat = Doc.Concat(Doc.HardLine, Doc.HardLine);
            var doc    = new List <Doc> {
                concat
            };

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            concat.Should().BeEquivalentTo(Doc.Concat(Doc.HardLine, Doc.Null));
        }
        public void RemoveInitialDoubleHardLine_Should_Not_Remove_Deep_Concated_HardLine()
        {
            var concat = Doc.Concat(Doc.HardLine);
            var doc    = new List <Doc> {
                Doc.Concat(concat)
            };

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            concat.Contents.Should().BeEquivalentTo(Doc.HardLine);
        }
        public void RemoveInitialDoubleHardLine_Should_Remove_Indented_HardLine()
        {
            var indent = Doc.Indent(Doc.HardLine);
            var doc    = new List <Doc> {
                Doc.HardLine, indent
            };

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            indent.Contents.Should().Be(Doc.Null);
        }
        public void RemoveInitialDoubleHardLine_Should_Not_Remove_Deep_Indented_HardLine()
        {
            var indent = Doc.Indent(Doc.HardLine);
            var doc    = new List <Doc> {
                Doc.Indent(indent)
            };

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            indent.Contents.Should().BeEquivalentTo(Doc.HardLine);
        }
        public void RemoveInitialDoubleHardLine_Should_Remove_Grouped_Double_HardLine()
        {
            var contents = new List <Doc> {
                Doc.HardLine, Doc.HardLine
            };
            var doc = Doc.Group(contents);

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            contents.Should().ContainSingle();
        }
Exemple #16
0
        public void RemoveInitialDoubleHardLine_Should_Remove_Simple_Double_HardLine()
        {
            var doc = new List <Doc> {
                Doc.HardLine, Doc.HardLine
            };

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            doc.Should().BeEquivalentTo(new List <Doc> {
                Doc.HardLine, Doc.Null
            });
        }
Exemple #17
0
        public void RemoveInitialDoubleHardLine_Should_Remove_Grouped_Double_HardLine()
        {
            var contents = new List <Doc> {
                Doc.HardLine, Doc.HardLine
            };
            var doc = Doc.Group(contents);

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            contents.Should().BeEquivalentTo(new List <Doc> {
                Doc.HardLine, Doc.Null
            });
        }
Exemple #18
0
        public override void Render(PageTree parent, MarkdownWriter writer)
        {
            writer.WriteHeader(1, Title);
            foreach (var data in _methodData.OrderBy(m => m.Key.GetParameters().Length))
            {
                var method = data.Key;
                var docs   = data.Value;

                writer.WriteHeader(2, DocUtilities.GetMethodSignature(method, false, false));
                writer.WriteParagraph(docs?.Summary);
                writer.WriteHeader(3, "Signature");
                writer.WriteCodeBlock("csharp", DocUtilities.GetMethodSignature(method, true, true));

                if (docs != null)
                {
                    if (docs.HasTypeParameters)
                    {
                        writer.WriteHeader(3, "Type Parameters");
                        foreach (var tp in method.GetGenericArguments())
                        {
                            var desc = docs?.GetTypeParameterDescription(tp.Name) ?? "_(No Description)_";
                            writer.WriteLine($"- `{tp.Name}`: {desc}");
                        }
                        writer.WriteLine();
                    }

                    if (docs.HasParameters)
                    {
                        writer.WriteHeader(3, "Parameters");
                        foreach (var p in method.GetParameters())
                        {
                            var desc = docs?.GetParameterDescription(p.Name) ?? "_(No Description)_";
                            writer.WriteLine($"- `{p.Name}`: {desc}");
                        }
                        writer.WriteLine();
                    }

                    if (docs.Returns != null)
                    {
                        writer.WriteHeader(3, "Returns");
                        writer.WriteLine(docs.Returns);
                    }

                    if (docs.Remarks != null)
                    {
                        writer.WriteHeader(3, "Remarks");
                        writer.WriteLine(docs.Remarks);
                    }
                }
            }
        }
Exemple #19
0
        public void RemoveInitialDoubleHardLine_Should_Remove_Single_HardLine()
        {
            var concat = Doc.Concat(Doc.HardLine, Doc.HardLine, Doc.HardLine);
            var doc    = new List <Doc> {
                Doc.Concat(concat)
            };

            DocUtilities.RemoveInitialDoubleHardLine(doc);

            concat.Contents.Should()
            .BeEquivalentTo(new List <Doc> {
                Doc.HardLine, Doc.Null, Doc.HardLine
            });
        }
        public override void Render(PageTree parent, MarkdownWriter writer)
        {
            writer.WriteHeader(1, Title);
            foreach (var(ctor, idx) in _ctors.Select((ctor, idx) => (ctor, idx)))
            {
                if (idx > 0)
                {
                    writer.WriteLine();
                    writer.WriteLine("<p>&nbsp;</p>");
                    writer.WriteLine("<p>&nbsp;</p>");
                    writer.WriteLine("<hr/>");
                    writer.WriteLine();
                }
                writer.WriteHeader(2, DocUtilities.GetMethodSignature(ctor, false, false));
                var docs = _ctorsData[ctor];

                writer.WriteParagraph(docs?.Summary);
                writer.WriteHeader(3, "Signature");
                writer.WriteCodeBlock("csharp", DocUtilities.GetMethodSignature(ctor, true, true));

                if (docs != null)
                {
                    if (docs.HasParameters)
                    {
                        writer.WriteHeader(3, "Parameters");
                        foreach (var p in ctor.GetParameters())
                        {
                            var desc = docs?.GetParameterDescription(p.Name) ?? "_(No Description)_";
                            writer.WriteLine($"- `{p.Name}`: {desc}");
                        }
                        writer.WriteLine();
                    }

                    if (docs.Remarks != null)
                    {
                        writer.WriteHeader(3, "Remarks");
                        writer.WriteLine(docs.Remarks);
                    }
                }
            }
        }
Exemple #21
0
        public override void Render(PageTree parent, MarkdownWriter writer)
        {
            writer.WriteHeader(1, Title);
            writer.WriteParagraph($"**Namespace:** {Type.Namespace}");
            var inheritance = DocUtilities.GetInheritanceString(Type);

            if (!String.IsNullOrEmpty(inheritance))
            {
                writer.WriteParagraph($"**Inheritance:** {inheritance}");
            }
            writer.WriteParagraph(Docs?.Summary ?? "(No Description)");
            writer.WriteHeader(2, "Signature");
            writer.WriteCodeBlock("csharp", DocUtilities.GetClassSignature(Type));

            var ctors = Type.GetConstructors().OrderBy(c => c.Name).ToArray();

            if (ctors.Length > 0)
            {
                writer.WriteHeader(2, "Constructors");
                if (Args.MethodGroupsTable)
                {
                    writer.WriteLine("|**Name**|**Summary**|");
                    writer.WriteLine("|---|---|");
                }
                var ctorNum = 1;
                foreach (var ctor in ctors)
                {
                    if (Args.MethodGroupsTable)
                    {
                        var anchor = "";
                        if (ctorNum > 1)
                        {
                            anchor = $"#{DocUtilities.GetAnchor(DocUtilities.GetMethodSignature(ctor, false, false))}";
                        }
                        var sbLink = new StringBuilder();
                        sbLink.Append($"[{DocUtilities.GetMethodSignature(ctor, false, false)}]");
                        sbLink.Append($"({DocUtilities.GetURLTitle(Type)}/ctors.md{anchor})");
                        bool isStatic = ctor.IsStatic;
                        if (isStatic)
                        {
                            sbLink.Append(" (static)");
                        }

                        var summary = "";
                        var doc     = _prjDocs[ID.GetIDString(ctor)];
                        if (doc != null && !string.IsNullOrEmpty(doc.Summary))
                        {
                            summary = doc.Summary.Replace("|", "\\|").Replace("\n", "<br/>");
                        }

                        writer.WriteLine($"|{sbLink.ToString()}|{summary}|");
                    }
                    else
                    {
                        var  sbLink   = new StringBuilder($"[{DocUtilities.GetMethodSignature(ctor, false, true)}]({DocUtilities.GetURLTitle(Type)}/ctors.md)");
                        bool isStatic = ctor.IsStatic;
                        if (isStatic)
                        {
                            sbLink.Append(" (static)");
                        }

                        writer.WriteLine($"- {sbLink.ToString()}");
                    }

                    ++ctorNum;
                }
            }

            var methods = Type.GetMethods().OrderBy(m => m.Name).ToArray();

            if (methods.Length > 0)
            {
                writer.WriteHeader(2, "Methods");
                if (Args.MethodGroupsTable)
                {
                    writer.WriteLine("|**Name**|**Summary**|");
                    writer.WriteLine("|---|---|");
                }
                foreach (var methodGroup in methods.Where(m => !m.IsSpecialName).GroupBy(m => m.Name))
                {
                    if (Args.MethodGroupsTable)
                    {
                        foreach (var(method, idx) in methodGroup
                                 .OrderBy(m => m.GetParameters().Length)
                                 .Select((method, idx) => (method, idx)))
                        {
                            var anchor = "";
                            if (idx > 0)
                            {
                                anchor = $"#{DocUtilities.GetAnchor(DocUtilities.GetMethodSignature(method, false, false))}";
                            }
                            var sbLink = new StringBuilder();
                            sbLink.Append($"[{DocUtilities.GetIdentifier(methodGroup.Key)}]");
                            sbLink.Append($"({DocUtilities.GetURLTitle(Type)}/{DocUtilities.GetIdentifier(methodGroup.Key)}.md{anchor})");
                            bool isStatic = method.IsStatic;
                            if (isStatic)
                            {
                                sbLink.Append(" (static)");
                            }

                            var summary = "";
                            var doc     = _prjDocs[ID.GetIDString(method)];
                            if (doc != null && !string.IsNullOrEmpty(doc.Summary))
                            {
                                summary = doc.Summary.Replace("|", "\\|").Replace("\n", "<br/>");
                            }

                            writer.WriteLine($"|{sbLink.ToString()}|{summary}|");
                        }
                    }
                    else
                    {
                        var  sbLink   = new StringBuilder($"[{DocUtilities.GetIdentifier(methodGroup.Key)}]({DocUtilities.GetURLTitle(Type)}/{DocUtilities.GetIdentifier(methodGroup.Key)}.md)");
                        bool isStatic = methodGroup.All(m => m.IsStatic);
                        if (isStatic)
                        {
                            sbLink.Append(" (static)");
                        }

                        writer.WriteLine($"- {sbLink.ToString()}");
                    }
                }
            }

            var props = Type.GetProperties()
                        .Where(p => p.GetIndexParameters().Length == 0)
                        .OrderBy(p => p.Name)
                        .ToArray();

            if (props.Length > 0)
            {
                writer.WriteHeader(2, "Properties");
                if (Args.PropertiesTable)
                {
                    writer.WriteLine("|**Name**|**Summary**|");
                    writer.WriteLine("|---|---|");
                }
                foreach (var prop in props)
                {
                    var  sbLink   = new StringBuilder($"[{DocUtilities.GetIdentifier(prop.Name)}]({DocUtilities.GetURLTitle(Type)}/{DocUtilities.GetIdentifier(prop.Name)}.md)");
                    bool isStatic = prop.CanRead && prop.GetGetMethod(true).IsStatic || prop.CanWrite && prop.GetSetMethod(true).IsStatic;
                    if (isStatic)
                    {
                        sbLink.Append(" (static)");
                    }
                    if (Args.PropertiesTable)
                    {
                        var summary = "";
                        var doc     = _prjDocs[ID.GetIDString(prop)];
                        if (doc != null && !string.IsNullOrEmpty(doc.Summary))
                        {
                            summary = doc.Summary.Replace("|", "\\|").Replace("\n", "<br/>");
                        }
                        writer.WriteLine($"|{sbLink.ToString()}|{summary}");
                    }
                    else
                    {
                        writer.WriteLine($"- {sbLink.ToString()}");
                    }
                }
            }

            var fields = Type.GetFields()
                         .Where(f => !f.IsSpecialName)
                         .OrderBy(f => f.Name)
                         .ToArray();

            if (fields.Length > 0)
            {
                writer.WriteHeader(2, "Fields");
                foreach (var field in fields)
                {
                    var sbLink = new StringBuilder($"- [{DocUtilities.GetIdentifier(field.Name)}]({DocUtilities.GetURLTitle(Type)}/{DocUtilities.GetIdentifier(field.Name)}.md)");
                    if (field.IsStatic)
                    {
                        sbLink.Append(" (static)");
                    }
                    writer.WriteLine(sbLink.ToString());
                }
            }

            // TODO: Events
            //writer.WriteHeader(2, "Events");


            var operators = Type.GetMethods()
                            .Where(m => m.Name.StartsWith("op_") && m.Name != "op_Explicit" && m.Name != "op_Implicit")
                            .ToArray();

            if (operators.Length > 0)
            {
                writer.WriteHeader(2, "Operators");
                foreach (var op in operators)
                {
                    writer.WriteLine($"- [{DocUtilities.GetOperatorSymbol(op.Name)}]({DocUtilities.GetURLTitle(Type)}/{op.Name}.md)");
                }
            }

            writer.WriteHeader(2, "Conversions");
        }
Exemple #22
0
        public override void Render(PageTree parent, MarkdownWriter writer)
        {
            writer.WriteHeader(1, Title);
            writer.WriteParagraph($"**Namespace:** {Type.Namespace}");
            var inheritance = DocUtilities.GetInheritanceString(Type);

            if (!String.IsNullOrEmpty(inheritance))
            {
                writer.WriteParagraph($"**Inheritance:** {inheritance}");
            }
            writer.WriteParagraph(Docs?.Summary ?? "(No Description)");
            writer.WriteHeader(2, "Signature");
            writer.WriteCodeBlock("csharp", DocUtilities.GetClassSignature(Type));

            var methods = Type.GetMethods().OrderBy(m => m.Name).ToArray();

            if (methods.Length > 0)
            {
                writer.WriteHeader(2, "Methods");
                foreach (var methodGroup in methods.Where(m => !m.IsSpecialName).GroupBy(m => m.Name))
                {
                    var  sbLink   = new StringBuilder($"- [{DocUtilities.GetIdentifier(methodGroup.Key)}]({DocUtilities.GetURLTitle(Type)}/{DocUtilities.GetIdentifier(methodGroup.Key)}.md)");
                    bool isStatic = methodGroup.All(m => m.IsStatic);
                    if (isStatic)
                    {
                        sbLink.Append(" (static)");
                    }
                    writer.WriteLine(sbLink.ToString());
                }
            }

            var props = Type.GetProperties()
                        .Where(p => p.GetIndexParameters().Length == 0)
                        .OrderBy(p => p.Name)
                        .ToArray();

            if (props.Length > 0)
            {
                writer.WriteHeader(2, "Properties");
                foreach (var prop in props)
                {
                    var  sbLink   = new StringBuilder($"- [{DocUtilities.GetIdentifier(prop.Name)}]({DocUtilities.GetURLTitle(Type)}/{DocUtilities.GetIdentifier(prop.Name)}.md)");
                    bool isStatic = prop.CanRead && prop.GetGetMethod(true).IsStatic || prop.CanWrite && prop.GetSetMethod(true).IsStatic;
                    if (isStatic)
                    {
                        sbLink.Append(" (static)");
                    }
                    writer.WriteLine(sbLink.ToString());
                }
            }

            var fields = Type.GetFields()
                         .Where(f => !f.IsSpecialName)
                         .OrderBy(f => f.Name)
                         .ToArray();

            if (fields.Length > 0)
            {
                writer.WriteHeader(2, "Fields");
                foreach (var field in fields)
                {
                    var sbLink = new StringBuilder($"- [{DocUtilities.GetIdentifier(field.Name)}]({DocUtilities.GetURLTitle(Type)}/{DocUtilities.GetIdentifier(field.Name)}.md)");
                    if (field.IsStatic)
                    {
                        sbLink.Append(" (static)");
                    }
                    writer.WriteLine(sbLink.ToString());
                }
            }

            // TODO: Events
            //writer.WriteHeader(2, "Events");


            var operators = Type.GetMethods()
                            .Where(m => m.Name.StartsWith("op_") && m.Name != "op_Explicit" && m.Name != "op_Implicit")
                            .ToArray();

            if (operators.Length > 0)
            {
                writer.WriteHeader(2, "Operators");
                foreach (var op in operators)
                {
                    writer.WriteLine($"- [{DocUtilities.GetOperatorSymbol(op.Name)}]({DocUtilities.GetURLTitle(Type)}/{op.Name}.md)");
                }
            }

            writer.WriteHeader(2, "Conversions");
        }
        public static Doc Print(NamespaceDeclarationSyntax node)
        {
            var docs = new List <Doc>
            {
                ExtraNewLines.Print(node),
                AttributeLists.Print(node, node.AttributeLists),
                Modifiers.Print(node.Modifiers),
                Token.Print(node.NamespaceKeyword),
                " ",
                Node.Print(node.Name)
            };

            var innerDocs  = new List <Doc>();
            var hasMembers = node.Members.Count > 0;
            var hasUsing   = node.Usings.Count > 0;
            var hasExterns = node.Externs.Count > 0;

            if (hasMembers || hasUsing || hasExterns)
            {
                innerDocs.Add(Doc.HardLine);
                if (hasExterns)
                {
                    innerDocs.Add(
                        Doc.Join(Doc.HardLine, node.Externs.Select(ExternAliasDirective.Print)),
                        Doc.HardLine
                        );
                }
                if (hasUsing)
                {
                    innerDocs.Add(
                        Doc.Join(Doc.HardLine, node.Usings.Select(UsingDirective.Print)),
                        Doc.HardLine
                        );
                }
                if (hasMembers)
                {
                    innerDocs.Add(
                        Doc.Join(Doc.HardLine, node.Members.Select(Node.Print)),
                        Doc.HardLine
                        );
                }

                innerDocs.RemoveAt(innerDocs.Count - 1);
            }
            else
            {
                innerDocs.Add(" ");
            }

            DocUtilities.RemoveInitialDoubleHardLine(innerDocs);

            docs.Add(
                Doc.Group(
                    Doc.Line,
                    Token.Print(node.OpenBraceToken),
                    Doc.Indent(innerDocs),
                    hasMembers || hasUsing || hasExterns ? Doc.HardLine : Doc.Null,
                    Token.Print(node.CloseBraceToken),
                    Token.Print(node.SemicolonToken)
                    )
                );
            return(Doc.Concat(docs));
        }
Exemple #24
0
 public FieldPage(FieldInfo field, MemberXmlDocs docs) : base(docs)
 {
     _field = field;
     Title  = $"{DocUtilities.GetFieldSignature(_field, false)} field ({DocUtilities.GetDisplayTitle(_field.DeclaringType)})";
 }
        public static Doc Print(BaseTypeDeclarationSyntax node)
        {
            ParameterListSyntax?    parameterList     = null;
            TypeParameterListSyntax?typeParameterList = null;
            var         constraintClauses             = Enumerable.Empty <TypeParameterConstraintClauseSyntax>();
            var         hasMembers     = false;
            SyntaxToken?keyword        = null;
            Doc         members        = Doc.Null;
            SyntaxToken?semicolonToken = null;
            string?     groupId        = null;

            if (node is TypeDeclarationSyntax typeDeclarationSyntax)
            {
                typeParameterList = typeDeclarationSyntax.TypeParameterList;
                constraintClauses = typeDeclarationSyntax.ConstraintClauses;
                hasMembers        = typeDeclarationSyntax.Members.Count > 0;
                if (typeDeclarationSyntax.Members.Count > 0)
                {
                    members = Doc.Indent(
                        Doc.HardLine,
                        Doc.Join(Doc.HardLine, typeDeclarationSyntax.Members.Select(Node.Print))
                        );
                }
                if (node is ClassDeclarationSyntax classDeclarationSyntax)
                {
                    keyword = classDeclarationSyntax.Keyword;
                }
                else if (node is StructDeclarationSyntax structDeclarationSyntax)
                {
                    keyword = structDeclarationSyntax.Keyword;
                }
                else if (node is InterfaceDeclarationSyntax interfaceDeclarationSyntax)
                {
                    keyword = interfaceDeclarationSyntax.Keyword;
                }
                else if (node is RecordDeclarationSyntax recordDeclarationSyntax)
                {
                    keyword       = recordDeclarationSyntax.Keyword;
                    groupId       = Guid.NewGuid().ToString();
                    parameterList = recordDeclarationSyntax.ParameterList;
                }

                semicolonToken = typeDeclarationSyntax.SemicolonToken;
            }
            else if (node is EnumDeclarationSyntax enumDeclarationSyntax)
            {
                members = Doc.Indent(
                    Doc.HardLine,
                    SeparatedSyntaxList.Print(
                        enumDeclarationSyntax.Members,
                        EnumMemberDeclaration.Print,
                        Doc.HardLine
                        )
                    );
                hasMembers     = enumDeclarationSyntax.Members.Count > 0;
                keyword        = enumDeclarationSyntax.EnumKeyword;
                semicolonToken = enumDeclarationSyntax.SemicolonToken;
            }

            var docs = new List <Doc>
            {
                ExtraNewLines.Print(node),
                AttributeLists.Print(node, node.AttributeLists),
                Modifiers.Print(node.Modifiers)
            };

            if (keyword != null)
            {
                docs.Add(Token.PrintWithSuffix(keyword.Value, " "));
            }

            docs.Add(Token.Print(node.Identifier));

            if (typeParameterList != null)
            {
                docs.Add(TypeParameterList.Print(typeParameterList));
            }

            if (parameterList != null)
            {
                docs.Add(ParameterList.Print(parameterList, groupId));
            }

            if (node.BaseList != null)
            {
                docs.Add(BaseList.Print(node.BaseList));
            }

            docs.Add(ConstraintClauses.Print(constraintClauses));

            if (hasMembers)
            {
                DocUtilities.RemoveInitialDoubleHardLine(members);

                var useSpaceBraceWithParameterList = groupId != null && parameterList != null;
                docs.Add(
                    useSpaceBraceWithParameterList
                        ? Doc.IfBreak(" ", Doc.Line, groupId)
                        : Doc.HardLine,
                    Token.Print(node.OpenBraceToken),
                    members,
                    Doc.HardLine,
                    Token.Print(node.CloseBraceToken)
                    );
            }
            else if (node.OpenBraceToken.Kind() != SyntaxKind.None)
            {
                Doc separator = node.CloseBraceToken.LeadingTrivia.Any() ? Doc.Line : " ";

                docs.Add(
                    separator,
                    Token.Print(node.OpenBraceToken),
                    separator,
                    Token.Print(node.CloseBraceToken)
                    );
            }

            if (semicolonToken.HasValue)
            {
                docs.Add(Token.Print(semicolonToken.Value));
            }

            return(Doc.Concat(docs));
        }
Exemple #26
0
 public MethodGroupPage(Type type, string name, Dictionary <MethodInfo, MemberXmlDocs> methodData) : base(null)
 {
     _type       = type;
     _methodData = methodData;
     Title       = $"{DocUtilities.GetDisplayTitle(type)}.{DocUtilities.GetIdentifier(name)} method";
 }
Exemple #27
0
 public PropertyPage(PropertyInfo property, MemberXmlDocs docs) : base(docs)
 {
     _property = property;
     Title     = $"{DocUtilities.GetPropertySignature(_property, false, false, false)} property ({DocUtilities.GetDisplayTitle(_property.DeclaringType)})";
 }