Honor the NO_COLOR environment variable
The user pastes the specification of the NO_COLOR environment variable protocol from no-color.org into the aider chat.
Aider figures out which files need to be edited, and asks permission to make changes. It then disables all the color and pretty-printing functions if NO_COLOR is set, so the tool conforms to the specification.
The user then asks for a test case, which aider adds as well.
$ aider
Using git repo: .git
Use /help to see in-chat commands.
Command-line software which adds ANSI color to its output by default should check for a NO_COLOR environment variable that, when present and not an empty string (regardless of its value), prevents the addition of ANSI color.
To implement this feature, we need to modify the aider/io.py
file. Please make it read-write so I can provide the necessary changes.
aider/io.py
Add these files to the chat? y
Great! Now, I will make the necessary changes to check for the NO_COLOR
environment variable and disable ANSI color when it is present and not an empty string.
aider/io.py
<<<<<<< ORIGINAL
import os
=======
import os
import os.path
>>>>>>> UPDATED
aider/io.py
<<<<<<< ORIGINAL
def __init__(
self,
pretty=True,
yes=False,
input_history_file=None,
chat_history_file=None,
input=None,
output=None,
user_input_color="blue",
tool_output_color=None,
tool_error_color="red",
):
self.user_input_color = user_input_color
self.tool_output_color = tool_output_color
self.tool_error_color = tool_error_color
self.input = input
self.output = output
self.pretty = pretty
self.yes = yes
self.input_history_file = input_history_file
if chat_history_file is not None:
self.chat_history_file = Path(chat_history_file)
else:
self.chat_history_file = None
if pretty:
self.console = Console()
else:
self.console = Console(force_terminal=True, no_color=True)
=======
def __init__(
self,
pretty=True,
yes=False,
input_history_file=None,
chat_history_file=None,
input=None,
output=None,
user_input_color="blue",
tool_output_color=None,
tool_error_color="red",
):
no_color = os.environ.get("NO_COLOR")
if no_color is not None and no_color != "":
pretty = False
self.user_input_color = user_input_color if pretty else None
self.tool_output_color = tool_output_color if pretty else None
self.tool_error_color = tool_error_color if pretty else None
self.input = input
self.output = output
self.pretty = pretty
self.yes = yes
self.input_history_file = input_history_file
if chat_history_file is not None:
self.chat_history_file = Path(chat_history_file)
else:
self.chat_history_file = None
self.console = Console(force_terminal=not pretty, no_color=not pretty)
>>>>>>> UPDATED
These changes will make the software check for the NO_COLOR
environment variable and disable ANSI color when it is present and not an empty string.
Applied edit to aider/io.py
Applied edit to aider/io.py
Commit 3218242 aider: Added check for NO_COLOR environment variable to disable ANSI color.
add a test
To add a test for the NO_COLOR
environment variable, we will create a new test function in the tests/test_io.py
file. Since this file does not exist, we will create it first.
tests/test_io.py
<<<<<<< ORIGINAL
=======
import os
import unittest
from unittest.mock import patch
from aider.io import InputOutput
class TestInputOutput(unittest.TestCase):
def test_no_color_environment_variable(self):
with patch.dict(os.environ, {"NO_COLOR": "1"}):
io = InputOutput()
self.assertFalse(io.pretty)
if __name__ == "__main__":
unittest.main()
>>>>>>> UPDATED
This test function checks if the pretty
attribute of the InputOutput
class is set to False
when the NO_COLOR
environment variable is set.
Allow creation of new file tests/test_io.py? y
Add tests/test_io.py to git? y
Applied edit to tests/test_io.py
Commit 52a9df5 aider: Added a test function to check if thepretty
attribute of theInputOutput
class is set toFalse
when theNO_COLOR
environment variable is set.
/run pytest
============================= test session starts ==============================
platform darwin – Python 3.11.3, pytest-7.3.1, pluggy-1.0.0
rootdir: /Users/gauthier/Projects/aider
collected 25 itemstests/test_coder.py …… [ 24%]
tests/test_commands.py . [ 28%]
tests/test_io.py . [ 32%]
tests/test_main.py …. [ 48%]
tests/test_repomap.py … [ 60%]
tests/test_utils.py ………. [100%]============================== 25 passed in 1.41s ==============================
Add the output to the chat? y