Commit graph

144 commits

Author SHA1 Message Date
Paul Gauthier
10192dddcd Add env_prefix variable and load default values from environment variables.
# Context:
USER: in main add a var called env_prefix="CODER_" then for every parser arg load the default from os.environ using that prefix and the uppercase, snakecase of the arg name as the env var name
ASSISTANT: To add an `env_prefix` variable and load the default values for each argument from the environment variables, you can update the `main` function as follows:

```python
coder.py
<<<<<<< ORIGINAL
def main():
    parser = argparse.ArgumentParser(description="Chat with GPT about code")
    parser.add_argument(
        "files", metavar="FILE", nargs="+", help="a list of source code files"
    )
    parser.add_argument(
        "-3",
        "--gpt-3-5-turbo",
        action="store_true",
        help="Only use gpt-3.5-turbo, not gpt-4",
    )
    parser.add_argument(
        "--no-pretty",
        action="store_false",
        dest="pretty",
        default=True,
        help="Disable prettyd output of GPT responses",
    )
    parser.add_argument(
        "--apply",
        metavar="FILE",
        help="Apply the changes from the given file instead of running the chat",
    )
    parser.add_argument(
        "--commit",
        action="store_true",
        help="Commit dirty files without confirmation",
    )
=======
def main():
    env_prefix = "CODER_"

    parser = argparse.ArgumentParser(description="Chat with GPT about code")
    parser.add_argument(
        "files", metavar="FILE", nargs="+", help="a list of source code files",
        default=os.environ.get(env_prefix + "FILES", "").split()
    )
    parser.add_argument(
        "-3",
        "--gpt-3-5-turbo",
        action="store_true",
        help="Only use gpt-3.5-turbo, not gpt-4",
        default=bool(os.environ.get(env_prefix + "GPT_3_5_TURBO", False))
    )
    parser.add_argument(
        "--no-pretty",
        action="store_false",
        dest="pretty",
        default=True,
        help="Disable prettyd output of GPT responses",
        default=bool(os.environ.get(env_prefix + "NO_PRETTY", True))
    )
    parser.add_argument(
        "--apply",
        metavar="FILE",
        help="Apply the changes from the given file instead of running the chat",
        default=os.environ.get(env_prefix + "APPLY", None)
    )
    parser.add_argument(
        "--commit",
        action="store_true",
        help="Commit dirty files without confirmation",
        default=bool(os.environ.get(env_prefix + "COMMIT", False))
    )
>>>>>>> UPDATED
```

This change adds the `env_prefix` variable and sets the default values for each argument using the `os.environ.get()` function with the appropriate environment variable name.
2023-05-08 23:06:56 -07:00
Paul Gauthier
6fcf4ff0e7 lint 2023-05-08 23:02:14 -07:00
Paul Gauthier
1c881cd574 Fix f-string missing placeholders warning by converting f-string to a regular string.
# Context:
USER: coder.py:113:21: F541 f-string is missing placeholders
ASSISTANT: To fix the f-string missing placeholders warning, you can either add placeholders or convert the f-string to a regular string. In this case, it seems like a regular string is more appropriate. Here's the change:

```python
coder.py
<<<<<<< ORIGINAL
            self.console.print(f"[red]Creating {fname}")
=======
            self.console.print(f"[red]Creating {fname}")
>>>>>>> UPDATED
```

However, the code you provided does not have an f-string on line 113. Please double-check the line number and the code you want to modify.
2023-05-08 23:01:39 -07:00
Paul Gauthier
045acb96d3 Ignore invalid escape sequence warning for a specific line in coder.py.
# Context:
USER: coder.py:554:56: W605 invalid escape sequence '\[' ... add comment to ignore
ASSISTANT: To fix the invalid escape sequence warning, you can add a comment to ignore the warning for that specific line. Here's the change:

```python
coder.py
<<<<<<< ORIGINAL
            res = Prompt.ask(
                "[red]Commit before the chat proceeds? \[y/n/commit message]"
            ).strip()
=======
            res = Prompt.ask(
                "[red]Commit before the chat proceeds? \[y/n/commit message]"  # noqa: W605
            ).strip()
>>>>>>> UPDATED
```
2023-05-08 23:01:01 -07:00
Paul Gauthier
04d01a9077 show diffs 2023-05-08 23:00:25 -07:00
Paul Gauthier
3cce28d27d Removed unused variable commit_result in coder.py.
# Context:
USER: coder.py:567:9: F841 local variable 'commit_result' is assigned to but never used
ASSISTANT: I see that the variable `commit_result` is assigned but never used. I will remove the assignment to fix the issue.

```python
coder.py
<<<<<<< ORIGINAL
        commit_result = repo.git.commit("-m", full_commit_message, "--no-verify")
        commit_hash = repo.head.commit.hexsha[:7]
        self.console.print(f"[green bold]{commit_hash} {commit_message}")
=======
        repo.git.commit("-m", full_commit_message, "--no-verify")
        commit_hash = repo.head.commit.hexsha[:7]
        self.console.print(f"[green bold]{commit_hash} {commit_message}")
>>>>>>> UPDATED
```
2023-05-08 22:59:55 -07:00
Paul Gauthier
c6d369742a Remove unused local variable 'new_files_str' from coder.py.
# Context:
USER: coder.py:99:13: F841 local variable 'new_files_str' is assigned to but never used
ASSISTANT: I will remove the unused local variable 'new_files_str' from the file.

```python
coder.py
<<<<<<< ORIGINAL
            new_files_str = "\n  ".join(new_files)
            self.console.print(f"[red bold]\nFiles not tracked in {repo.git_dir}:")
            for fn in new_files:
                self.console.print(f"[red bold]    {fn}")
=======
            self.console.print(f"[red bold]Files not tracked in {repo.git_dir}:")
            for fn in new_files:
                self.console.print(f"[red bold]  {fn}")
>>>>>>> UPDATED
```
2023-05-08 22:57:20 -07:00
Paul Gauthier
7a48e4606b Remove unused import 'RateLimitError' from coder.py.
# Context:
USER: coder.py:10:1: F401 'openai.error.RateLimitError' imported but unused
ASSISTANT: I will remove the unused import 'RateLimitError' from the file.

```python
coder.py
<<<<<<< ORIGINAL
from openai.error import RateLimitError
=======
>>>>>>> UPDATED
```
2023-05-08 22:56:48 -07:00
Paul Gauthier
c1339f56ba Remove unused import 'time' from coder.py.
# Context:
USER: coder.py:9:1: F401 'time' imported but unused
ASSISTANT: I will remove the unused import 'time' from the file.

```python
coder.py
<<<<<<< ORIGINAL
import time
=======
>>>>>>> UPDATED
```
2023-05-08 22:56:29 -07:00
Paul Gauthier
0c40b1828d WIP: Removed unnecessary blank line in coder.py. 2023-05-08 22:47:00 -07:00
Paul Gauthier
5527e8e433 show a . prompt during multiline 2023-05-08 22:46:20 -07:00
Paul Gauthier
42598e2329 Modify get_input() to accumulate input lines between { and } and return the concatenated lines with '\n'.
# Context:
USER: modify get_input(). if the user inputs a line with just { then keep accumulating input lines until you receive a line with just }. in this case, discard the {} lines and return the rest of the lines concatenated with '\n'
ASSISTANT: To modify the `get_input()` function to accumulate input lines between `{` and `}`, we will change the function to handle this case.

Here's the updated code for the `get_input()` function:

```python
coder.py
<<<<<<< ORIGINAL
    def get_input(self):
        if self.pretty:
            self.console.rule()
        else:
            print()

        inp = ""
        if self.pretty:
            print(Fore.GREEN, end="\r")
        else:
            print()

        while not inp.strip():
            try:
                inp = input("> ")
            except EOFError:
                return

        ###
        if self.pretty:
            print(Style.RESET_ALL)
        else:
            print()

        readline.write_history_file(history_file)
        return inp
=======
    def get_input(self):
        if self.pretty:
            self.console.rule()
        else:
            print()

        inp = ""
        multiline_input = False
        if self.pretty:
            print(Fore.GREEN, end="\r")
        else:
            print()

        while True:
            try:
                line = input("> ")
            except EOFError:
                return

            if line.strip() == "{" and not multiline_input:
                multiline_input = True
                continue
            elif line.strip() == "}" and multiline_input:
                break
            elif multiline_input:
                inp += line + "\n"
            else:
                inp = line
                break

        if self.pretty:
            print(Style.RESET_ALL)
        else:
            print()

        readline.write_history_file(history_file)
        return inp
>>>>>>> UPDATED
```

This change will allow the `get_input()` function to accumulate input lines between `{` and `}` and return the concatenated lines with '\n'.
2023-05-08 22:43:39 -07:00
Paul Gauthier
551cc011aa enforce a min similarity to do the edit 2023-05-08 22:42:16 -07:00
Paul Gauthier
7138649bd9 more flexibly search/replace for ORIGINAL/UPDATED 2023-05-08 22:37:16 -07:00
Paul Gauthier
ecdbc762d9 WIP: Added find_block function to coder.py. 2023-05-08 22:06:50 -07:00
Paul Gauthier
6175d05979 WIP: Changed console print statements to include bold text. 2023-05-08 21:58:41 -07:00
Paul Gauthier
396e7b1977 log the relevant conversation in the commit message 2023-05-08 21:38:21 -07:00
Paul Gauthier
d92749f808 only show diffs and commit message if the user is being asked to confirm the commit 2023-05-08 21:30:51 -07:00
Paul Gauthier
daac07c062 explicitly find and report untracked files 2023-05-08 21:24:47 -07:00
Paul Gauthier
d32ae99de9 Update set_repo function to check if file is tracked using git ls-files command. 2023-05-08 21:21:18 -07:00
Paul Gauthier
c9c55aff97 WIP: Updated error messages for git repo detection. 2023-05-08 21:19:33 -07:00
Paul Gauthier
e89588aa01 Refactor set_repo() to add and commit all new files at once. 2023-05-08 21:16:31 -07:00
Paul Gauthier
ec486f8504 Add commit message to new files added in set_repo() method. 2023-05-08 21:14:06 -07:00
Paul Gauthier
6781584d67 Revert "Updated commit message prefix to "Initial commit: Added new files." in coder.py."
This reverts commit 6d298281fc.
2023-05-08 21:13:02 -07:00
Paul Gauthier
6d298281fc Updated commit message prefix to "Initial commit: Added new files." in coder.py. 2023-05-08 21:12:05 -07:00
Paul Gauthier
65e6a0abde Add ability to check if files are untracked and add them to the git repo. 2023-05-08 21:11:34 -07:00
Paul Gauthier
ffc44bd014 warn the user if the files aren't in the same repo 2023-05-08 21:10:40 -07:00
Paul Gauthier
880e90566d Refactor set_repo() to add check_for_local_edits() and remove duplicated code in commit() to rely on self.repo. 2023-05-08 20:59:16 -07:00
Paul Gauthier
5afeb29c94 Add set_repo() function to set self.repo to the single repository that all the files belong to. 2023-05-08 20:57:19 -07:00
Paul Gauthier
cc50c380f8 Add bold formatting to commit hash in console output. 2023-05-08 20:44:21 -07:00
Paul Gauthier
d03a209ed0 WIP: Added file creation and loading messages 2023-05-08 20:42:38 -07:00
Paul Gauthier
d279f9751f lint 2023-05-08 20:31:01 -07:00
Paul Gauthier
aba0b96904 Moved new imports to the top of the file. 2023-05-08 17:37:42 -07:00
Paul Gauthier
06351d3205 Handle openai.error.RateLimitError and retry requests with a delay. 2023-05-08 17:36:53 -07:00
Paul Gauthier
a85cc59120 Added saved_message variable to tell gpt the git hash/msg 2023-05-08 17:35:46 -07:00
Paul Gauthier
e5cbc5cc4c Refactor commit method to accept history parameter. 2023-05-08 17:21:36 -07:00
Paul Gauthier
8b920f778e show hash and message on commit 2023-05-08 17:17:41 -07:00
Paul Gauthier
e2e21fc68e Added ability to customize commit message when prompted. 2023-05-08 17:17:02 -07:00
Paul Gauthier
4be0c6945b Refactor Confirm.ask message in coder.py. 2023-05-08 17:12:54 -07:00
Paul Gauthier
e162f053c8 Print diffs and commit message separately. 2023-05-08 17:11:20 -07:00
Paul Gauthier
ea63f9b31f Add dump function call to main function. 2023-05-08 17:06:02 -07:00
Paul Gauthier
a096c6e5e4 Add --commit flag to commit dirty files without confirmation 2023-05-08 17:04:49 -07:00
Paul Gauthier
f9569e7645 Added ability to commit only dirty files. 2023-05-08 17:00:15 -07:00
Paul Gauthier
e824dd1c68 wip commit 2023-05-08 16:55:15 -07:00
Paul Gauthier
4311b2117a fixed pattern to handle files without extensions 2023-05-08 14:28:37 -07:00
Paul Gauthier
c02501d690 commit wip 2023-05-08 14:16:22 -07:00
Paul Gauthier
1dc8b3cd31 fix send() output 2023-05-08 11:44:51 -07:00
Paul Gauthier
0f040949c4 commit wip 2023-05-08 11:41:51 -07:00
Paul Gauthier
b0d2fafdd5 commit wip 2023-05-08 10:41:54 -07:00
Paul Gauthier
71103dd87f red 2023-05-08 10:32:17 -07:00