diff --git a/src/Directory.Build.props b/src/Directory.Build.props index d4b5634d..7e2f046e 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ CS1591 - 24.5.0 + 24.5.1 11 1.0.0 Markdown, Snippets, mdsnippets, documentation, MarkdownSnippets diff --git a/src/MarkdownSnippets/Processing/DirectoryMarkdownProcessor.cs b/src/MarkdownSnippets/Processing/DirectoryMarkdownProcessor.cs index 62b2cd4f..658449d7 100644 --- a/src/MarkdownSnippets/Processing/DirectoryMarkdownProcessor.cs +++ b/src/MarkdownSnippets/Processing/DirectoryMarkdownProcessor.cs @@ -322,6 +322,8 @@ void ProcessFile(string sourceFile, MarkdownProcessor markdownProcessor) void WriteLines(string target, List lines) { + var directoryName = Path.GetDirectoryName(target)!; + Directory.CreateDirectory(directoryName); using var writer = File.CreateText(target); writer.NewLine = newLine; foreach (var line in lines) diff --git a/src/Tests/DirectoryMarkdownProcessor/ConventionWithNestedDir/mdsource/Nested/one.source.md b/src/Tests/DirectoryMarkdownProcessor/ConventionWithNestedDir/mdsource/Nested/one.source.md new file mode 100644 index 00000000..2cd3eb5e --- /dev/null +++ b/src/Tests/DirectoryMarkdownProcessor/ConventionWithNestedDir/mdsource/Nested/one.source.md @@ -0,0 +1 @@ +snippet: snippet1 \ No newline at end of file diff --git a/src/Tests/DirectoryMarkdownProcessorTests.ConventionWithNestedDir.verified.txt b/src/Tests/DirectoryMarkdownProcessorTests.ConventionWithNestedDir.verified.txt new file mode 100644 index 00000000..c76b400b --- /dev/null +++ b/src/Tests/DirectoryMarkdownProcessorTests.ConventionWithNestedDir.verified.txt @@ -0,0 +1,12 @@ +/mdsource/Nested/one.source.md +snippet: snippet1 + +/Nested/one.md + + +```cs +the code from snippet1 +``` +anchor + + diff --git a/src/Tests/DirectoryMarkdownProcessorTests.cs b/src/Tests/DirectoryMarkdownProcessorTests.cs index ba0afcb1..b2e25606 100644 --- a/src/Tests/DirectoryMarkdownProcessorTests.cs +++ b/src/Tests/DirectoryMarkdownProcessorTests.cs @@ -420,6 +420,30 @@ public Task Convention() return Verify(builder.ToString()); } + [Fact] + public Task ConventionWithNestedDir() + { + var root = Path.GetFullPath("DirectoryMarkdownProcessor/ConventionWithNestedDir"); + var processor = new DirectoryMarkdownProcessor( + root, + writeHeader: false, + newLine: "\r", + directoryIncludes: _ => true, + markdownDirectoryIncludes: _ => true, + snippetDirectoryIncludes: _ => true); + processor.AddSnippets(SnippetBuild("snippet1")); + processor.Run(); + + var builder = new StringBuilder(); + foreach (var file in Directory.EnumerateFiles(root, "*.*", SearchOption.AllDirectories).OrderBy(_ => _)) + { + builder.AppendLineN(file.Replace(root, "")); + builder.AppendLineN(File.ReadAllText(file)); + builder.AppendLineN(); + } + + return Verify(builder.ToString()); + } [Fact] public void MustErrorByDefaultWhenIncludesAreMissing()