Added file patterns and exclusions to folder data sources (#1057)

Co-authored-by: Thorsten Sommer <SommerEngineering@users.noreply.github.com>
This commit is contained in:
Paul KoudelkaandThorsten Sommer authored and GitHub committed 2026-10-17 19:12:43 +02:00
1 parent 249fc778a2
commit 031874cebf
75 files changed
+4808 -589

No files matched your search

@@ -1,11 +1,33 @@
using AIStudio.Tools.Rust;
namespace AIStudio.Tools.Services;
public sealed class FileEnumerationResult
{
private readonly Dictionary<string, int> filePatternExclusionCounts = new(StringComparer.OrdinalIgnoreCase);
private readonly Dictionary<string, int> excludedFolderCounts = new(StringComparer.OrdinalIgnoreCase);
public List<FileInfo> Files { get; } = [];
public List<DataSourceEmbeddingFailure> Failures { get; } = [];
public List<DataSourceEmbeddingIgnoredFile> IgnoredFiles { get; } = [];
public IReadOnlyList<DataSourceEmbeddingFilePatternGroup> FilePatternExclusions => this.filePatternExclusionCounts
.Select(group => new DataSourceEmbeddingFilePatternGroup(group.Key, group.Value))
.OrderBy(group => group.FileType, StringComparer.OrdinalIgnoreCase)
.ToList();
public int FilePatternExclusionCount => this.filePatternExclusionCounts.Values.Sum();
public IReadOnlyList<DataSourceEmbeddingExcludedFolderGroup> ExcludedFolders => this.excludedFolderCounts
.Select(group => new DataSourceEmbeddingExcludedFolderGroup(group.Key, group.Value))
.OrderBy(group => group.FolderName, StringComparer.OrdinalIgnoreCase)
.ToList();
public int ExcludedFolderCount => this.excludedFolderCounts.Values.Sum();
public int FailedFiles { get; set; }
public string LastError { get; set; } = string.Empty;
@@ -32,4 +54,31 @@ public sealed class FileEnumerationResult
this.UnreadableDirectories.Add(directoryPath);
this.AddFailure(directoryPath, reason);
}
}
public void AddIgnoredFile(string filePath, DataSourceEmbeddingIgnoreReason reason) =>
this.IgnoredFiles.Add(new DataSourceEmbeddingIgnoredFile(filePath, reason));
public void AddFilePatternExclusion(string filePath)
{
var fileType = GetFilePatternExclusionType(filePath);
this.filePatternExclusionCounts[fileType] = this.filePatternExclusionCounts.GetValueOrDefault(fileType) + 1;
}
public void AddExcludedFolder(string directoryPath)
{
var folderName = Path.GetFileName(Path.TrimEndingDirectorySeparator(directoryPath));
this.excludedFolderCounts[folderName] = this.excludedFolderCounts.GetValueOrDefault(folderName) + 1;
}
private static string GetFilePatternExclusionType(string filePath)
{
var extension = Path.GetExtension(filePath).ToLowerInvariant();
if (!string.IsNullOrWhiteSpace(extension))
return extension;
var fileName = Path.GetFileName(filePath);
return FileTypes.SOURCE_LIKE_FILE_NAMES.FilterExtensions
.FirstOrDefault(knownFileName => string.Equals(knownFileName, fileName, StringComparison.OrdinalIgnoreCase))
?? string.Empty;
}
}