mirror of
https://github.com/Aider-AI/aider.git
synced 2025-06-06 20:54:59 +00:00
feat: Add language filter and multi-lang support
This commit is contained in:
parent
a842f41627
commit
1fb33f0c47
1 changed files with 36 additions and 2 deletions
|
@ -161,6 +161,9 @@ def main(
|
||||||
sleep: float = typer.Option(
|
sleep: float = typer.Option(
|
||||||
0, "--sleep", help="Sleep seconds between tests when single threaded"
|
0, "--sleep", help="Sleep seconds between tests when single threaded"
|
||||||
),
|
),
|
||||||
|
languages: str = typer.Option(
|
||||||
|
None, "--languages", "-l", help="Only run tests for specific languages (comma separated)"
|
||||||
|
),
|
||||||
edit_format: str = typer.Option(None, "--edit-format", "-e", help="Edit format"),
|
edit_format: str = typer.Option(None, "--edit-format", "-e", help="Edit format"),
|
||||||
editor_model: str = typer.Option(None, "--editor-model", help="Editor model name"),
|
editor_model: str = typer.Option(None, "--editor-model", help="Editor model name"),
|
||||||
editor_edit_format: str = typer.Option(None, "--editor-edit-format", help="Editor edit format"),
|
editor_edit_format: str = typer.Option(None, "--editor-edit-format", help="Editor edit format"),
|
||||||
|
@ -237,9 +240,38 @@ def main(
|
||||||
return
|
return
|
||||||
|
|
||||||
assert BENCHMARK_DNAME.exists() and BENCHMARK_DNAME.is_dir(), BENCHMARK_DNAME
|
assert BENCHMARK_DNAME.exists() and BENCHMARK_DNAME.is_dir(), BENCHMARK_DNAME
|
||||||
|
def get_exercise_dirs(base_dir, languages=None):
|
||||||
|
"""Get all exercise directories for specified languages (or all if none specified)"""
|
||||||
|
base_dir = Path(base_dir)
|
||||||
|
|
||||||
|
# Get available language dirs
|
||||||
|
lang_dirs = [d for d in base_dir.iterdir() if d.is_dir()]
|
||||||
|
|
||||||
|
# Filter to requested languages if specified
|
||||||
|
if languages:
|
||||||
|
requested = set(lang.strip().lower() for lang in languages.split(","))
|
||||||
|
lang_dirs = [d for d in lang_dirs if d.name.lower() in requested]
|
||||||
|
if not lang_dirs:
|
||||||
|
print(f"No matching language directories found for: {languages}")
|
||||||
|
return []
|
||||||
|
|
||||||
|
# Get all exercise dirs under exercises/practice for each language
|
||||||
|
exercise_dirs = []
|
||||||
|
for lang_dir in lang_dirs:
|
||||||
|
practice_dir = lang_dir / "exercises" / "practice"
|
||||||
|
if practice_dir.exists():
|
||||||
|
exercise_dirs.extend(d for d in practice_dir.iterdir() if d.is_dir())
|
||||||
|
|
||||||
|
return exercise_dirs
|
||||||
|
|
||||||
original_dname = BENCHMARK_DNAME / exercises_dir
|
original_dname = BENCHMARK_DNAME / exercises_dir
|
||||||
assert original_dname.exists() and original_dname.is_dir(), original_dname
|
assert original_dname.exists() and original_dname.is_dir(), original_dname
|
||||||
|
|
||||||
|
exercise_dirs = get_exercise_dirs(original_dname, languages)
|
||||||
|
if not exercise_dirs:
|
||||||
|
print("No exercise directories found")
|
||||||
|
return 1
|
||||||
|
|
||||||
if clean and dirname.exists():
|
if clean and dirname.exists():
|
||||||
print("Cleaning up and replacing", dirname)
|
print("Cleaning up and replacing", dirname)
|
||||||
dir_files = set(fn.name for fn in dirname.glob("*"))
|
dir_files = set(fn.name for fn in dirname.glob("*"))
|
||||||
|
@ -260,7 +292,7 @@ def main(
|
||||||
shutil.copytree(original_dname, dirname)
|
shutil.copytree(original_dname, dirname)
|
||||||
print("...done")
|
print("...done")
|
||||||
|
|
||||||
test_dnames = sorted(os.listdir(dirname))
|
test_dnames = sorted(d.name for d in exercise_dirs)
|
||||||
|
|
||||||
if keywords:
|
if keywords:
|
||||||
keywords = keywords.split(",")
|
keywords = keywords.split(",")
|
||||||
|
@ -614,7 +646,9 @@ def run_test_real(
|
||||||
if src.exists():
|
if src.exists():
|
||||||
fnames.append(src)
|
fnames.append(src)
|
||||||
# restore the original file, in case we interrupted a prev run
|
# restore the original file, in case we interrupted a prev run
|
||||||
original_fname = original_dname / testdir.name / file_path
|
# Find the original file in the language-specific practice dir
|
||||||
|
lang_part = str(testdir).split("/exercises/practice/")[0]
|
||||||
|
original_fname = Path(lang_part) / "exercises" / "practice" / testdir.name / file_path
|
||||||
if original_fname.exists():
|
if original_fname.exists():
|
||||||
os.makedirs(src.parent, exist_ok=True)
|
os.makedirs(src.parent, exist_ok=True)
|
||||||
shutil.copy(original_fname, src)
|
shutil.copy(original_fname, src)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue