analyzeSource method

Future<DataFlowResult> analyzeSource({
  1. required String sourceCode,
  2. required int startLine,
  3. required int endLine,
  4. String methodName = '_extracted',
})

In-memory analysis for unit testing and IDE integration.

Implementation

Future<DataFlowResult> analyzeSource({
  required String sourceCode,
  required int startLine,
  required int endLine,
  String methodName = '_extracted',
}) async {
  final tempDir = await Directory.systemTemp.createTemp('data_flow_test_');
  try {
    final tempFile = File(p.join(tempDir.path, 'snippet.dart'));
    await tempFile.writeAsString(sourceCode);

    final result = await analyzeFile(
      filePath: tempFile.path,
      startLine: startLine,
      endLine: endLine,
      methodName: methodName,
    );

    return DataFlowResult(
      filePath: 'snippet.dart',
      startLine: result.startLine,
      endLine: result.endLine,
      enclosingDeclaration: result.enclosingDeclaration,
      inputs: result.inputs,
      mutations: result.mutations,
      outputs: result.outputs,
      escapes: result.escapes,
      suggestedSignature: result.suggestedSignature,
      isCleanlyExtractable: result.isCleanlyExtractable,
    );
  } finally {
    if (tempDir.existsSync()) {
      await tempDir.delete(recursive: true);
    }
  }
}