processMdRules method
Processes all .md files in a .neomage/rules/ directory and its subdirectories.
Implementation
Future<List<MemoryFileInfo>> processMdRules({
required String rulesDir,
required MemoryType type,
required Set<String> processedPaths,
required bool includeExternal,
required bool conditionalRule,
Set<String>? visitedDirs,
}) async {
visitedDirs ??= {};
if (visitedDirs.contains(rulesDir)) return [];
visitedDirs.add(rulesDir);
final result = <MemoryFileInfo>[];
try {
final dir = Directory(rulesDir);
if (!await dir.exists()) return [];
await for (final entry in dir.list()) {
if (entry is Directory) {
result.addAll(
await processMdRules(
rulesDir: entry.path,
type: type,
processedPaths: processedPaths,
includeExternal: includeExternal,
conditionalRule: conditionalRule,
visitedDirs: visitedDirs,
),
);
} else if (entry is File && entry.path.endsWith('.md')) {
final files = await processMemoryFile(
entry.path,
type,
processedPaths,
includeExternal,
);
result.addAll(
files.where(
(f) => conditionalRule ? f.globs != null : f.globs == null,
),
);
}
}
} on FileSystemException catch (e) {
final message = e.message.toLowerCase();
if (!message.contains('no such file') &&
!message.contains('permission denied') &&
!message.contains('not a directory')) {
rethrow;
}
}
return result;
}