aider icon indicating copy to clipboard operation
aider copied to clipboard

Feature Request: support for regex/glob expressions in the `/add` function

Open JPDucky opened this issue 2 years ago • 4 comments

Feature Description Currently, the /add function accepts directory paths to add the entire directory or spefic file paths to the program's context. A useful enhancement would be to support the use of regex or glob expressions with the /add function. This would give users more flexibility and control to specify exactly which files to include.

Proposed Solution Allow the /add function to interpret glob or regex patterns. For example, a user could use /add src/*.py to include only Python files from the src directory or /add src/[A-C]* to add only files that start with A, B, or C.

Expected Behavior When a user runs /add with a regex or glob pattern, the program should add to the context only the files that match the pattern. The program should handle non-matching files or non-existent paths gracefully, preferably by ignoring them and printing a warning message.

Alternatives Considered An alternative could be providing an additional function, say /addPattern, that accepts regex/glob patterns. This approach would leave the existing /add functionality unchanged for users who don't need the enhanced functionality.

Additional Context Adding this feature would boost the flexibility of the /add function, making the program more convenient to use for a variety of tasks. Users could, for instance, exclude certain types of files or select a subset of files based on their naming conventions.

JPDucky avatar Jul 05 '23 18:07 JPDucky

Good idea. I've been meaning to do this.

I pasted your issue text into aider and it did most of the heavy lifting on the PR.

paul-gauthier avatar Jul 06 '23 04:07 paul-gauthier

I just merged this change. Thanks again for the suggestion.

You can pick it up by installing the latest version directly from github.

paul-gauthier avatar Jul 07 '23 16:07 paul-gauthier

Awesome, can't wait to try this out. It was having issues with a vanilla vuejs project because it creates a logo.png in the assets directory, and I'm sure vue is not the only one that does this by default

JPDucky avatar Jul 09 '23 16:07 JPDucky

So throwing a wildcard at the end works, but it does not add files recursively, only the files in the folder specified. Trying to add just a directory makes the program throw the following and exit:

> /add src/components                                                                                                                           

Traceback (most recent call last):
  File "/home/palmerd/.local/bin/aider", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/palmerd/.local/lib/python3.11/site-packages/aider/main.py", line 369, in main
    coder.run()
  File "/home/palmerd/.local/lib/python3.11/site-packages/aider/coders/base_coder.py", line 382, in run
    new_user_message = self.run_loop()
                       ^^^^^^^^^^^^^^^
  File "/home/palmerd/.local/lib/python3.11/site-packages/aider/coders/base_coder.py", line 446, in run_loop
    return self.commands.run(inp)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/palmerd/.local/lib/python3.11/site-packages/aider/commands.py", line 60, in run
    return self.do_run(matching_commands[0][1:], rest_inp)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/palmerd/.local/lib/python3.11/site-packages/aider/commands.py", line 45, in do_run
    return cmd_method(args)
           ^^^^^^^^^^^^^^^^
  File "/home/palmerd/.local/lib/python3.11/site-packages/aider/commands.py", line 264, in cmd_add
    content = self.io.read_text(abs_file_path)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/palmerd/.local/lib/python3.11/site-packages/aider/io.py", line 142, in read_text
    with open(str(filename), "r", encoding=self.encoding) as f:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IsADirectoryError: [Errno 21] Is a directory: '/home/palmerd/vue-frontend/src/components'

Perhaps more robust file handling is needed. I'll be able to dig deeper later this afternoon

JPDucky avatar Jul 09 '23 17:07 JPDucky

I just merged a fix for the error above. /add and /drop now recurse into subdirs.

paul-gauthier avatar Jul 10 '23 23:07 paul-gauthier

I'm going to close this issue for now, but feel free to re-open or file a new issue if you have any further problems.

paul-gauthier avatar Jul 11 '23 16:07 paul-gauthier