Skip to content

Commit d115285

Browse files
Copilotreakaleekcotti
authored
Fix: files with _snippets in their name incorrectly treated as snippet-only files (#2743)
* Initial plan * Fix: treat only _snippets directories as special, not filenames containing _snippets Co-authored-by: reakaleek <16325797+reakaleek@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: reakaleek <16325797+reakaleek@users.noreply.github.com> Co-authored-by: Felipe Cotti <felipe.cotti@elastic.co>
1 parent 667e2ec commit d115285

4 files changed

Lines changed: 33 additions & 3 deletions

File tree

src/Elastic.Markdown/IO/MarkdownFileFactory.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ private DocumentationFile CreateMarkDownFile(IFileInfo file, BuildContext contex
117117
if (context.Configuration.IsExcluded(relativePath))
118118
return new ExcludedFile(file, sourceDirectory, context.Git.RepositoryName);
119119

120-
if (relativePath.Contains("_snippets"))
120+
if (relativePath.Contains($"{Path.DirectorySeparatorChar}_snippets{Path.DirectorySeparatorChar}")
121+
|| relativePath.StartsWith($"_snippets{Path.DirectorySeparatorChar}"))
121122
return new SnippetFile(file, sourceDirectory, context.Git.RepositoryName);
122123

123124
// we ignore files in folders that start with an underscore

src/Elastic.Markdown/Myst/Directives/Include/IncludeBlock.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ private void ExtractInclusionPath(ParserContext context)
9393
if (Literal)
9494
return;
9595

96-
if (file.Directory != null && file.Directory.FullName.IndexOf("_snippets", StringComparison.Ordinal) < 0)
96+
if (file.Directory != null && !file.Directory.FullName.Split(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar).Contains("_snippets"))
9797
{
9898
this.EmitError($"{{include}} only supports including snippets from `_snippet` folders. `{IncludePath}` is not a snippet");
9999
Found = false;

tests/Elastic.Markdown.Tests/MockFileSystemExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public static void GenerateDocSetYaml(
3434
.EnumerateFiles(root.FullName, "*.md", SearchOption.AllDirectories);
3535
foreach (var markdownFile in markdownFiles)
3636
{
37-
if (markdownFile.Contains("_snippet"))
37+
if (markdownFile.Contains($"{Path.DirectorySeparatorChar}_snippets{Path.DirectorySeparatorChar}"))
3838
continue;
3939
var relative = fileSystem.Path.GetRelativePath(root.FullName, markdownFile);
4040
yaml.WriteLine($" - file: {relative}");

tests/Elastic.Markdown.Tests/OutputDirectoryTests.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,35 @@ public async Task CreatesDefaultOutputDirectory()
4444
fileSystem.Directory.Exists(".artifacts").Should().BeTrue();
4545
}
4646

47+
[Fact]
48+
public void FilesWithSnippetsInNameNotTreatedAsSnippets()
49+
{
50+
var logger = new TestLoggerFactory(output);
51+
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
52+
{
53+
{ "docs/docset.yml",
54+
//language=yaml
55+
new MockFileData("""
56+
project: test
57+
toc:
58+
- file: index.md
59+
- file: top_snippets.md
60+
""") },
61+
{ "docs/index.md", new MockFileData("# Test") },
62+
{ "docs/top_snippets.md", new MockFileData("# Top Snippets") }
63+
}, new MockFileSystemOptions
64+
{
65+
CurrentDirectory = Paths.WorkingDirectoryRoot.FullName
66+
});
67+
var collector = new TestDiagnosticsCollector(output);
68+
var configurationContext = TestHelpers.CreateConfigurationContext(fileSystem);
69+
var context = new BuildContext(collector, FileSystemFactory.ScopeCurrentWorkingDirectory(fileSystem), configurationContext);
70+
var linkResolver = new TestCrossLinkResolver();
71+
var set = new DocumentationSet(context, logger, linkResolver);
72+
73+
set.MarkdownFiles.Should().Contain(f => f.RelativePath.EndsWith("top_snippets.md"));
74+
}
75+
4776
[Theory]
4877
[MemberData(nameof(ValidFileNames))]
4978
public void OutputFileValidationValidNames(string fileName)

0 commit comments

Comments
 (0)