Skip to content

Commit

Permalink
Change error displaying (colors!)
Browse files Browse the repository at this point in the history
- For each file, the "OK!" and "Error!" are changed
  to [OK] and [KO] and moved to the left of the
  file names.
- The [OK] are green and the [KO] are red.
- If there is a "Notice:" for a file,
  the [OK] becomes yellow.
  • Loading branch information
mcolonna committed Mar 1, 2024
1 parent a9e1a3d commit e4aa1a5
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion norminette/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,10 @@ def add(self, *args, **kwargs) -> None:
def status(self) -> Literal["OK", "Error"]:
return "OK" if all(it.level == "Notice" for it in self._inner) else "Error"

@property
def has_notice(self) -> bool:
return any(it.level == "Notice" for it in self._inner)

def append(self, value: Union[NormError, NormWarning]) -> None:
# TODO Remove NormError and NormWarning since it does not provide `length` data
assert isinstance(value, (NormError, NormWarning))
Expand All @@ -172,9 +176,20 @@ def __init_subclass__(cls) -> None:

class HumanizedErrorsFormatter(_formatter):
def __str__(self) -> str:

def colorize(status: Literal["OK", "Error", "Notice"], txt: str) -> str:
return "\033[9" + (
"1" if status == "Error" else (
"2" if status == "OK" else "3"
)) + "m" + txt + "\033[0m"

output = ''
for file in self.files:
output += f"{file.basename}: {file.errors.status}!"
status = file.errors.status
if status == "OK" and file.errors.has_notice:
status = "Notice"
output += colorize(status, f"[{'KO' if status == 'Error' else 'OK'}]")
output += f" {file.basename}"
for error in file.errors:
highlight = error.highlights[0]
output += f"\n{error.level}: {error.name:<20} "
Expand Down

0 comments on commit e4aa1a5

Please sign in to comment.