opensource-nepal / commitlint

commitlint is a tool designed to lint your commit messages according to the Conventional Commits standard for your pre-commit hook and GitHub Actions.
GNU General Public License v3.0
22 stars 9 forks source link

Add color for success and error messages #5

Open aj3sh opened 10 months ago

aj3sh commented 10 months ago

Adding color to CLI messages would be helpful for users to distinguish between error, success, or normal messages. Let's attempt to implement this without using any additional dependencies initially; if that's not possible, we can explore and discuss the packages to use.

Here is my POC for the color message (tested on Mac's terminal and iterm):

import sys
from typing import List, Union

class Styles:
    RESET = "\033[0m"
    BOLD = "\033[1m"
    UNDERLINE = "\033[4m"
    ITALIC = "\033[3m"
    SELECTED = "\033[7m"

    BLACK = "\033[30m"
    GREY = "\33[90m"
    CYAN = "\033[96m"
    RED = "\033[91m"
    GREEN = "\033[92m"
    BLUE = "\033[34m"
    YELLOW = "\033[93m"
    MAGENTA = "\033[35m"
    WHITE = "\033[37m"

class StyledText:
    def __init__(self, text: str, style: Union[str, List[str]]):
        self.text = text
        self.styles = style if isinstance(style, List) else [style]

        # creating styled text
        joined_styles = "".join(self.styles)
        self._styled_text = f"{joined_styles}{text}{Styles.RESET}"

    def __str__(self) -> str:
        return self._styled_text

    def __repr__(self) -> str:
        return self._styled_text

sys.stdout.write(str(StyledText("I am red.\n", Styles.RED)))
sys.stdout.write(str(StyledText("I am green.\n", Styles.GREEN)))
sys.stdout.write(str(StyledText("I am underlined.\n", Styles.UNDERLINE)))
sys.stdout.write(
    str(StyledText("I am italic and blue.\n", [Styles.UNDERLINE, Styles.BLUE]))
)
sys.stdout.write(
    str(StyledText("I am yellow selected.\n", [Styles.SELECTED, Styles.YELLOW]))
)

Ref: https://stackoverflow.com/questions/287871/how-do-i-print-colored-text-to-the-terminal

aj3sh commented 8 months ago

Tested on Windows 11 Command Prompt, Power Shell, and Git bash: Working fine. Tested on Windows 10 Command Prompt: Not working (displays the color character \033[0m).

kiyoon commented 1 week ago

I suggest to use rich. Although it adds a dependency, it makes the code much cleaner and it's a common dependency that is used in many python projects.