mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-20 12:24:59 +00:00
feat: add option to disable shell command suggestions
This commit is contained in:
parent
825a94f7f0
commit
6f85f38d47
3 changed files with 35 additions and 47 deletions
|
@ -92,6 +92,7 @@ class Coder:
|
||||||
add_cache_headers = False
|
add_cache_headers = False
|
||||||
cache_warming_thread = None
|
cache_warming_thread = None
|
||||||
num_cache_warming_pings = 0
|
num_cache_warming_pings = 0
|
||||||
|
suggest_shell_commands = True
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(
|
def create(
|
||||||
|
@ -262,6 +263,8 @@ class Coder:
|
||||||
self.rejected_urls = set()
|
self.rejected_urls = set()
|
||||||
self.abs_root_path_cache = {}
|
self.abs_root_path_cache = {}
|
||||||
|
|
||||||
|
self.suggest_shell_commands = suggest_shell_commands
|
||||||
|
|
||||||
self.num_cache_warming_pings = num_cache_warming_pings
|
self.num_cache_warming_pings = num_cache_warming_pings
|
||||||
|
|
||||||
if not fnames:
|
if not fnames:
|
||||||
|
|
|
@ -776,7 +776,38 @@ This command will print 'Hello, World!' to the console."""
|
||||||
self.assertEqual(coder.shell_commands[0].strip(), 'echo "Hello, World!"')
|
self.assertEqual(coder.shell_commands[0].strip(), 'echo "Hello, World!"')
|
||||||
|
|
||||||
# Check if handle_shell_commands was called with the correct argument
|
# Check if handle_shell_commands was called with the correct argument
|
||||||
coder.handle_shell_commands.assert_called_once_with('echo "Hello, World!"', ANY)
|
coder.handle_shell_commands.assert_called_once()
|
||||||
|
|
||||||
|
def test_no_suggest_shell_commands(self):
|
||||||
|
with GitTemporaryDirectory():
|
||||||
|
io = InputOutput(yes=True)
|
||||||
|
coder = Coder.create(self.GPT35, "diff", io=io, suggest_shell_commands=False)
|
||||||
|
|
||||||
|
def mock_send(*args, **kwargs):
|
||||||
|
coder.partial_response_content = """Here's a shell command to run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "Hello, World!"
|
||||||
|
```
|
||||||
|
|
||||||
|
This command will print 'Hello, World!' to the console."""
|
||||||
|
coder.partial_response_function_call = dict()
|
||||||
|
return []
|
||||||
|
|
||||||
|
coder.send = mock_send
|
||||||
|
|
||||||
|
# Mock the handle_shell_commands method to check if it's called
|
||||||
|
coder.handle_shell_commands = MagicMock()
|
||||||
|
|
||||||
|
# Run the coder with a message
|
||||||
|
coder.run(with_message="Suggest a shell command")
|
||||||
|
|
||||||
|
# Check if the shell command was added to the list
|
||||||
|
self.assertEqual(len(coder.shell_commands), 1)
|
||||||
|
self.assertEqual(coder.shell_commands[0].strip(), 'echo "Hello, World!"')
|
||||||
|
|
||||||
|
# Check if handle_shell_commands was called with the correct argument
|
||||||
|
coder.handle_shell_commands.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -586,20 +586,6 @@ class TestMain(TestCase):
|
||||||
self.assertIsInstance(coder, Coder)
|
self.assertIsInstance(coder, Coder)
|
||||||
self.assertEqual(coder.repo_map.map_mul_no_files, 5)
|
self.assertEqual(coder.repo_map.map_mul_no_files, 5)
|
||||||
|
|
||||||
def test_apply_shell_commands(self):
|
|
||||||
with GitTemporaryDirectory():
|
|
||||||
shell_md = Path("shell.md")
|
|
||||||
shell_md.write_text("```bash\ntouch file.txt\n```")
|
|
||||||
|
|
||||||
main(
|
|
||||||
["--apply", "shell.md", "--yes"],
|
|
||||||
input=DummyInput(),
|
|
||||||
output=DummyOutput(),
|
|
||||||
)
|
|
||||||
|
|
||||||
# shell commands require explicit approval, not just --yes
|
|
||||||
self.assertFalse(Path("file.txt").exists())
|
|
||||||
|
|
||||||
def test_suggest_shell_commands_default(self):
|
def test_suggest_shell_commands_default(self):
|
||||||
with GitTemporaryDirectory():
|
with GitTemporaryDirectory():
|
||||||
coder = main(
|
coder = main(
|
||||||
|
@ -629,35 +615,3 @@ class TestMain(TestCase):
|
||||||
return_coder=True,
|
return_coder=True,
|
||||||
)
|
)
|
||||||
self.assertTrue(coder.suggest_shell_commands)
|
self.assertTrue(coder.suggest_shell_commands)
|
||||||
|
|
||||||
def test_apply_shell_commands_with_no_suggest(self):
|
|
||||||
with GitTemporaryDirectory():
|
|
||||||
shell_md = Path("shell.md")
|
|
||||||
shell_md.write_text("```bash\ntouch no_suggest_file.txt\n```")
|
|
||||||
|
|
||||||
with patch(
|
|
||||||
"aider.coders.base_coder.Coder.handle_shell_commands"
|
|
||||||
) as mock_handle_shell_commands:
|
|
||||||
main(
|
|
||||||
["--apply", "shell.md", "--no-git"],
|
|
||||||
input=DummyInput(),
|
|
||||||
output=DummyOutput(),
|
|
||||||
)
|
|
||||||
|
|
||||||
# Make sure handle_shell_commands IS called when --no-suggest-shell-commands is not used
|
|
||||||
mock_handle_shell_commands.assert_called_once()
|
|
||||||
|
|
||||||
with patch(
|
|
||||||
"aider.coders.base_coder.Coder.handle_shell_commands"
|
|
||||||
) as mock_handle_shell_commands:
|
|
||||||
main(
|
|
||||||
["--apply", "shell.md", "--no-suggest-shell-commands", "--no-git"],
|
|
||||||
input=DummyInput(),
|
|
||||||
output=DummyOutput(),
|
|
||||||
)
|
|
||||||
|
|
||||||
# Make sure handle_shell_commands is not called when --no-suggest-shell-commands is used
|
|
||||||
mock_handle_shell_commands.assert_not_called()
|
|
||||||
|
|
||||||
# Check that the file was not created in either case
|
|
||||||
self.assertFalse(Path("no_suggest_file.txt").exists())
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue