Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion openevolve/utils/code_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,10 @@ def extract_code_language(code: str) -> str:
Detected language or "unknown"
"""
# Look for common language signatures
if re.search(r"^(import|from|def|class)\s", code, re.MULTILINE):
# Java imports also match Python's generic import signature.
if re.search(r"^(import|from|def|class)\s", code, re.MULTILINE) and not re.search(
r"^(package\s+[\w.]+\s*;|public class\s)", code, re.MULTILINE
):
return "python"
elif re.search(r"^(package|import java|public class)", code, re.MULTILINE):
return "java"
Expand Down
40 changes: 40 additions & 0 deletions tests/test_code_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
apply_diff,
apply_diff_blocks,
enforce_evolve_blocks,
extract_code_language,
extract_diffs,
format_diff_summary,
parse_evolve_blocks,
Expand All @@ -19,6 +20,45 @@
class TestCodeUtils(unittest.TestCase):
"""Tests for code utilities"""

def test_extract_code_language_java(self):
sources = [
"package demo;\nimport java.util.List;\npublic class Demo {}",
"import java.util.List;\npublic class Demo {}",
"import static java.util.Collections.emptyList;\npublic class Demo {}",
"public class Demo {}",
]
for source in sources:
with self.subTest(source=source):
self.assertEqual(extract_code_language(source), "java")

def test_extract_code_language_python(self):
sources = [
"import os\nprint(os.getcwd())",
"from math import sqrt\nprint(sqrt(4))",
"def solve():\n return 1",
"class Demo:\n pass",
"import java",
"import java.util",
"import java_api",
"from java import util",
'import os\npackage = "demo"',
]
for source in sources:
with self.subTest(source=source):
self.assertEqual(extract_code_language(source), "python")

def test_extract_code_language_other_signatures(self):
sources = [
("#include <iostream>\nint main() { return 0; }", "cpp"),
("function solve() { return 1; }", "javascript"),
("fn main() {}", "rust"),
("SELECT * FROM users;", "sql"),
("42 + 7", "unknown"),
]
for source, language in sources:
with self.subTest(language=language):
self.assertEqual(extract_code_language(source), language)

def test_parse_full_rewrite_line_endings(self):
for newline in ("\n", "\r\n"):
with self.subTest(newline=repr(newline)):
Expand Down
Loading