analyzeFile method
Implementation
DartFileAnalyzerResult analyzeFile({
required String relativePath,
required String content,
}) {
final bytes = utf8.encode(content);
final contentHash = sha256.convert(bytes).toString();
final List<String> warnings = [];
final List<String> imports = [];
final List<String> exports = [];
try {
final parseResult = parseString(
content: content,
throwIfDiagnostics: false,
);
for (final diagnostic in parseResult.errors) {
final lineNum = parseResult.lineInfo.getLocation(diagnostic.offset).lineNumber;
warnings.add('Syntax error in $relativePath at line $lineNum: ${diagnostic.message}');
}
final unit = parseResult.unit;
for (final directive in unit.directives) {
if (directive is ImportDirective) {
final uri = directive.uri.stringValue;
if (uri != null) {
final resolved = importAnalyzer.resolveImport(
uri: uri,
currentFileRelativePath: relativePath,
);
if (resolved != null) {
imports.add(resolved);
}
}
} else if (directive is ExportDirective) {
final uri = directive.uri.stringValue;
if (uri != null) {
final resolved = importAnalyzer.resolveImport(
uri: uri,
currentFileRelativePath: relativePath,
);
if (resolved != null) {
exports.add(resolved);
}
}
}
}
} catch (e) {
warnings.add('Could not parse AST for $relativePath: $e');
}
final normalized = relativePath.replaceAll('\Q', '/');
final isTest = normalized.startsWith('test/') || normalized.endsWith('_test.dart');
final isGenerated = normalized.endsWith('.g.dart') || normalized.endsWith('.freezed.dart');
return DartFileAnalyzerResult(
sourceFile: SourceFile(
path: normalized,
contentHash: contentHash,
imports: imports,
exports: exports,
isTest: isTest,
isGenerated: isGenerated,
),
parseWarnings: warnings,
);
}