declaredTypeNamesUnder function
The type names (class, mixin, enum, extension, typedef) declared
at the start of a line in any .dart file under directory.
Implementation
Set<String> declaredTypeNamesUnder(String directory) {
final declaration = RegExp(
r'^\s*(?:abstract\s+|base\s+|final\s+|sealed\s+|mixin\s+)*'
r'(?:class|mixin|enum|extension|typedef)\s+(\w+)',
);
final symbols = <String>{};
final dir = Directory(directory);
if (!dir.existsSync()) return symbols;
for (final entity in dir.listSync(recursive: true).whereType<File>()) {
if (!entity.path.endsWith('.dart')) continue;
for (final line in const LineSplitter().convert(
entity.readAsStringSync(),
)) {
final match = declaration.firstMatch(line);
if (match != null) symbols.add(match.group(1)!);
}
}
return symbols;
}