diff --git a/codeflash/code_utils/edit_generated_tests.py b/codeflash/code_utils/edit_generated_tests.py index 35150e0da..6677aade0 100644 --- a/codeflash/code_utils/edit_generated_tests.py +++ b/codeflash/code_utils/edit_generated_tests.py @@ -3,6 +3,7 @@ import ast import os import re +from functools import lru_cache from pathlib import Path from textwrap import dedent from typing import TYPE_CHECKING, Union @@ -126,7 +127,7 @@ def visit_ExceptHandler(self, node: ast.ExceptHandler) -> None: def find_codeflash_output_assignments(source_code: str) -> list[int]: - tree = ast.parse(source_code) + tree = _parse_source(source_code) visitor = CfoVisitor(source_code) visitor.visit(tree) return visitor.results @@ -303,3 +304,9 @@ def leave_SimpleStatementLine( modified_tests.append(test) return GeneratedTestsList(generated_tests=modified_tests) + + +@lru_cache(maxsize=128) +def _parse_source(source_code: str): + # Memoized parsing to avoid repeated expensive AST construction + return ast.parse(source_code)