void UseSnippetExtractor()
    {
    // get files containing snippets
    var filesToParse = Directory.EnumerateFiles(@"C:\path", "*.*", SearchOption.AllDirectories)
        .Where(s => s.EndsWith(".vm") || s.EndsWith(".cs"));

    // setup version convention and extract snippets from files
    var snippetExtractor = new SnippetExtractor(InferVersion);
    var readSnippets = snippetExtractor.FromFiles(filesToParse);

    // Grouping
    var snippetGroups = SnippetGrouper.Group(readSnippets)
        .ToList();

    // Merge with some markdown text
    var markdownProcessor = new MarkdownProcessor();

    //In this case the text will be extracted from a file path
    ProcessResult result;
    using (var reader = File.OpenText(@"C:\path\myInputMarkdownFile.md"))
    using (var writer = File.CreateText(@"C:\path\myOutputMarkdownFile.md"))
    {
        result = markdownProcessor.Apply(snippetGroups, reader, writer);
    }

    // List of all snippets that the markdown file expected but did not exist in the input snippets 
    var missingSnippets = result.MissingSnippets;

    // List of all snippets that the markdown file used
    var usedSnippets = result.UsedSnippets;

    }
    void Run(string folder, string input, string expectedOutput)
    {
        var extractor = new SnippetExtractor(s => VersionRange.All);
        var snippets = extractor.FromFiles(Directory.EnumerateFiles(folder, "code.cs"));

        var snippetGroups = SnippetGrouper.Group(snippets)
            .ToList();

        using (var reader = File.OpenText(input))
        {
            var markdownProcessor = new MarkdownProcessor(alsoParseImportSyntax:true);
            var stringBuilder = new StringBuilder();
            using (var writer = new StringWriter(stringBuilder))
            {
                markdownProcessor.Apply(snippetGroups, reader, writer);
            }

            var expected = File.ReadAllText(expectedOutput).FixNewLines();
            var fixNewLines = stringBuilder
                .ToString()
                .FixNewLines()
                .TrimTrailingNewLine();
            Assert.AreEqual(expected, fixNewLines, folder);
        }
    }
 static void Verify(string markdownContent, List<SnippetGroup> availableSnippets)
 {
     var processor = new MarkdownProcessor();
     var stringBuilder = new StringBuilder();
     using (var reader = new StringReader(markdownContent))
     using (var writer = new StringWriter(stringBuilder))
     {
         var processResult = processor.Apply(availableSnippets, reader, writer);
         var output = new object[]
         {
             processResult.MissingSnippets, processResult.UsedSnippets, stringBuilder.ToString()
         };
         ObjectApprover.VerifyWithJson(output, s => s.Replace("\\r\\n", "\r\n"));
     }
 }