コード例 #1
0
        public static void RewriteDocsRootIndex(ApiCatalog catalog)
        {
            var root      = DirectoryLayout.ForRootDocs().DocsSourceDirectory;
            var indexPath = Path.Combine(root, "index.md");

            RewriteApiTable(indexPath, catalog, api => $"{api.Id}/index.html");
        }
コード例 #2
0
        public static void RewriteDocsRootIndex(List <ApiMetadata> apis)
        {
            var root      = DirectoryLayout.ForRootDocs().DocsSourceDirectory;
            var indexPath = Path.Combine(root, "index.md");

            RewriteApiTable(indexPath, apis, api => $"{api.Id}/index.html");
        }
コード例 #3
0
        private static int MainImpl(string[] args)
        {
            if (args.Length == 0 || args.Length > 2)
            {
                ThrowUsageError();
            }
            string api            = args[0];
            bool   generateReport = false;
            string reportFile     = null;

            if (args.Length == 2)
            {
                generateReport = true;
                string reportArg = args[1];
                if (!reportArg.StartsWith("--report"))
                {
                    ThrowUsageError();
                }
                if (reportArg != "--report")
                {
                    if (!reportArg.StartsWith("--report="))
                    {
                        ThrowUsageError();
                    }
                    reportFile = reportArg.Substring("--report=".Length);
                }
            }

            DirectoryLayout layout         = api == "root" ? DirectoryLayout.ForRootDocs() : DirectoryLayout.ForApi(api);
            string          snippetsSource = Directory.GetDirectories(layout.SourceDirectory, "*.Snippets").FirstOrDefault();

            if (snippetsSource == null)
            {
                Console.WriteLine($"Unable to find snippets within API {api}. Ignoring this API.");
                return(0);
            }

            string output = layout.SnippetOutputDirectory;

            if (!Directory.Exists(output))
            {
                Directory.CreateDirectory(output);
            }
            else
            {
                foreach (var file in Directory.GetFiles(output))
                {
                    File.Delete(file);
                }
            }

            var memberLookup = LoadMembersByType(layout.DocfxMetadataDirectory);

            Console.WriteLine($"Loaded {memberLookup.Count} types with {memberLookup.Sum(x => x.Count())} members");
            List <string> errors   = new List <string>();
            var           snippets = LoadAllSnippets(snippetsSource, errors);

            Console.WriteLine($"Loaded {snippets.Sum(x => x.Count())} snippets");

            foreach (var entry in snippets)
            {
                if (entry.Key.EndsWith(".cs"))
                {
                    errors.Add($"Snippet file {entry.Key} does not end with one of the accepted snippet file suffixes: {string.Join(", ", SnippetFileSuffixes)}");
                    continue;
                }

                string snippetFile = entry.Key + ".txt";
                GenerateSnippetText(Path.Combine(output, snippetFile), entry);
                MapSnippetMetadataUids(entry, memberLookup[entry.Key], errors);
                GenerateSnippetMarkdown(Path.Combine(output, entry.Key + ".md"), snippetFile, entry);
            }

            var seeAlsos = LoadAllSeeAlsos(snippetsSource, errors);

            Console.WriteLine($"Loaded {seeAlsos.Sum(x => x.Count())} see-alsos");
            foreach (var entry in seeAlsos)
            {
                MapSeeAlsoMetadataUids(entry, memberLookup, entry.Key, errors);
                GenerateSeeAlsoMarkdown(Path.Combine(output, entry.Key + ".md"), entry);
            }

            ValidateSeeAlsos(seeAlsos.SelectMany(x => x), snippets.SelectMany(x => x), errors);

            if (errors.Any())
            {
                foreach (var error in errors)
                {
                    Console.Error.WriteLine(error);
                }
                return(1);
            }

            if (generateReport)
            {
                using (var writer = reportFile == null ? Console.Out : File.CreateText(reportFile))
                {
                    GenerateReport(memberLookup, snippets, seeAlsos, writer);
                }
            }
            return(0);
        }