From f95a06afe6d9902d41881ca6487d10554a758cf1 Mon Sep 17 00:00:00 2001 From: ali Date: Wed, 25 Mar 2026 18:05:28 +0200 Subject: [PATCH] fix: pass language to format_generated_code for correct temp file extension format_generated_code was called without the language parameter in process_review(), defaulting to "python". This created temp files with .py extension when formatting JS/TS code, causing prettier to fail. Trace IDs: 11e9745d, 1578f081, 7e8abab2 (73 affected logs total) Co-Authored-By: Claude Opus 4.6 --- codeflash/languages/function_optimizer.py | 6 ++- tests/test_formatter.py | 55 +++++++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/codeflash/languages/function_optimizer.py b/codeflash/languages/function_optimizer.py index 9b6e01976..4a2f01878 100644 --- a/codeflash/languages/function_optimizer.py +++ b/codeflash/languages/function_optimizer.py @@ -2514,13 +2514,15 @@ class FunctionOptimizer: for test_file, count in map_gen_test_file_to_no_of_tests.items() ): formatted_generated_test = format_generated_code( - test.generated_original_test_source, self.args.formatter_cmds + test.generated_original_test_source, self.args.formatter_cmds, language=code_lang ) generated_tests_str += f"```{code_lang}\n{formatted_generated_test}\n```" generated_tests_str += "\n\n" if concolic_test_str: - formatted_generated_test = format_generated_code(concolic_test_str, self.args.formatter_cmds) + formatted_generated_test = format_generated_code( + concolic_test_str, self.args.formatter_cmds, language=code_lang + ) generated_tests_str += f"```{code_lang}\n{formatted_generated_test}\n```\n\n" existing_tests, replay_tests, _concolic_tests = existing_tests_source_for( diff --git a/tests/test_formatter.py b/tests/test_formatter.py index 480efcef5..bd3fd7226 100644 --- a/tests/test_formatter.py +++ b/tests/test_formatter.py @@ -1394,6 +1394,61 @@ def test_format_generated_code_unicode(): assert "Hello, δΈ–η•Œ! 🌍" in result +def test_format_generated_code_uses_correct_extension_for_javascript(): + """Test that format_generated_code creates temp files with .js extension for JavaScript code.""" + from unittest.mock import patch + + js_code = """function test() { + return 42; +}""" + + captured_paths = [] + original_apply = format_code.__module__ + + with patch("codeflash.code_utils.formatter.apply_formatter_cmds") as mock_apply: + mock_apply.return_value = (Path("/tmp/temp.js"), js_code, False) + format_generated_code(js_code, ["npx prettier --write $file"], language="javascript") + # Verify the temp file path has .js extension + call_args = mock_apply.call_args + original_temp_path = call_args[0][1] # second positional arg is the path + assert original_temp_path.suffix == ".js", ( + f"Expected .js extension for JavaScript, got {original_temp_path.suffix}" + ) + + +def test_format_generated_code_uses_correct_extension_for_typescript(): + """Test that format_generated_code creates temp files with .ts extension for TypeScript code.""" + from unittest.mock import patch + + ts_code = """function test(): number { + return 42; +}""" + + with patch("codeflash.code_utils.formatter.apply_formatter_cmds") as mock_apply: + mock_apply.return_value = (Path("/tmp/temp.ts"), ts_code, False) + format_generated_code(ts_code, ["npx prettier --write $file"], language="typescript") + call_args = mock_apply.call_args + original_temp_path = call_args[0][1] + assert original_temp_path.suffix == ".ts", ( + f"Expected .ts extension for TypeScript, got {original_temp_path.suffix}" + ) + + +def test_format_generated_code_defaults_to_py_extension(): + """Test that format_generated_code defaults to .py extension when no language specified.""" + from unittest.mock import patch + + py_code = """def test(): + return 42""" + + with patch("codeflash.code_utils.formatter.apply_formatter_cmds") as mock_apply: + mock_apply.return_value = (Path("/tmp/temp.py"), py_code, False) + format_generated_code(py_code, ["black $file"]) + call_args = mock_apply.call_args + original_temp_path = call_args[0][1] + assert original_temp_path.suffix == ".py", f"Expected .py extension for Python, got {original_temp_path.suffix}" + + def test_format_generated_code_f_strings(): """Test format_generated_code with f-strings.""" try: