From ae087287c75680969e45c66262c5bbe22b947691 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 26 May 2023 15:57:31 -0700 Subject: [PATCH] aider: Added `check_for_ctags` method to `RepoMap` class and updated `__init__` method to set `use_ctags` to `False` if `check_for_ctags` returns `False`. # Context: USER: add a check_for_ctags method that: makes a tempdir with hello.py that defines a hello func. call get_tags on that and catch any error and return false. otherwise true. ASSISTANT: I will add a `check_for_ctags` method to the `RepoMap` class in the `aider/repomap.py` file. This method will create a temporary directory with a `hello.py` file that defines a `hello` function. It will then call the `get_tags` method on that file, catch any errors, and return `False` if there's an error or `True` otherwise. Here's the change: ```python aider/repomap.py <<<<<<< ORIGINAL import os import json import sys import subprocess import tiktoken ======= import os import json import sys import subprocess import tiktoken import tempfile >>>>>>> UPDATED ``` ```python aider/repomap.py <<<<<<< ORIGINAL class RepoMap: ctags_cmd = ["ctags", "--fields=+S", "--extras=-F", "--output-format=json"] def __init__(self, use_ctags=True, root=None, main_model="gpt-4"): ======= class RepoMap: ctags_cmd = ["ctags", "--fields=+S", "--extras=-F", "--output-format=json"] def __init__(self, use_ctags=True, root=None, main_model="gpt-4"): if not self.check_for_ctags(): use_ctags = False >>>>>>> UPDATED ``` ```python aider/repomap.py <<<<<<< ORIGINAL return tags if __name__ == "__main__": rm = RepoMap() res = rm.get_tags_map(sys.argv[1:]) print(res) ======= def check_for_ctags(self): try: with tempfile.TemporaryDirectory() as tempdir: hello_py = os.path.join(tempdir, "hello.py") with open(hello_py, "w") as f: f.write("def hello():\n print('Hello, world!')\n") self.get_tags(hello_py) except Exception: return False return True if __name__ == "__main__": rm = RepoMap() res = rm.get_tags_map(sys.argv[1:]) print(res) >>>>>>> UPDATED ``` This adds the `check_for_ctags` method to the `RepoMap` class and updates the `__init__` method to set `use_ctags` to `False` if `check_for_ctags` returns `False`. --- aider/repomap.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/aider/repomap.py b/aider/repomap.py index 3a324047b..058b59c6f 100644 --- a/aider/repomap.py +++ b/aider/repomap.py @@ -3,6 +3,7 @@ import json import sys import subprocess import tiktoken +import tempfile from aider import prompts @@ -50,6 +51,8 @@ class RepoMap: ctags_cmd = ["ctags", "--fields=+S", "--extras=-F", "--output-format=json"] def __init__(self, use_ctags=True, root=None, main_model="gpt-4"): + if not self.check_for_ctags(): + use_ctags = False if not root: root = os.getcwd() @@ -162,10 +165,19 @@ class RepoMap: # Update the cache TAGS_CACHE[cache_key] = {"mtime": file_mtime, "tags": tags} - return tags - + def check_for_ctags(self): + try: + with tempfile.TemporaryDirectory() as tempdir: + hello_py = os.path.join(tempdir, "hello.py") + with open(hello_py, "w") as f: + f.write("def hello():\n print('Hello, world!')\n") + self.get_tags(hello_py) + except Exception: + return False + return True if __name__ == "__main__": rm = RepoMap() res = rm.get_tags_map(sys.argv[1:]) print(res) + print(res)