Esempio n. 1
0
        public override string Format(ITypeScriptLibrary lib, FormatMode mode = FormatMode.Markdown)
        {
            var path = lib.FindPathToType(Name);
            var name = path != null?MarkdownBuilder.MarkdownUrl(Name, path) : MarkdownBuilder.MarkdownCodeQuote(Name);

            if (TypeArguments.Any())
            {
                name += "<" + string.Join(",", TypeArguments.Select(t => t.Format(lib, mode))) + ">";
            }

            return(name);
        }
Esempio n. 2
0
        public static string ToMarkdownTypeReference(CSharpLibrary lib, TypeReference t, bool isParam = false)
        {
            if (t == null)
            {
                return("");
            }
            if (t.FullName == "System.Void")
            {
                return("`void`");
            }
            if (t.FullName == "System.Object")
            {
                return("`object`");
            }
            if (t.FullName == "System.Boolean")
            {
                return("`bool`");
            }
            if (t.FullName == "System.String")
            {
                return("`string`");
            }
            if (t.FullName == "System.Int32")
            {
                return("`int`");
            }
            if (t.FullName == "System.Int64")
            {
                return("`long`");
            }
            if (t.FullName == "System.Double")
            {
                return("`double`");
            }

            var hasMdType = lib.Types.TryGetValue(t.FullName, out var mdType);

            string name;

            if (!t.IsGenericInstance && !t.HasGenericParameters)
            {
                name = (t.IsNested && !isParam) ? $"{t.DeclaringType.Name}.{t.Name}" : t.Name;
                if (hasMdType)
                {
                    return(MarkdownBuilder.MarkdownUrl(name, mdType.GetPath()));
                }

                return(MarkdownBuilder.MarkdownCodeQuote(name));
            }

            string innerFormat = "";

            if (t is GenericInstanceType genType)
            {
                var args = genType.GenericArguments.ToArray();
                innerFormat = string.Join(", ", args.Select(x => ToMarkdownTypeReference(lib, x, isParam: true)));
            }
            else
            {
                innerFormat = string.Join(", ", t.GenericParameters.Select(x => x.Name));
            }

            name = Regex.Replace(t.Name, @"`.+$?", "");
            if (hasMdType)
            {
                name = MarkdownBuilder.MarkdownUrl(name, mdType.GetPath());
            }
            else
            {
                name = MarkdownBuilder.MarkdownCodeQuote(name);
            }

            return(name + "<" + innerFormat + ">");
        }