Coverage for lintro / enums / severity_level.py: 100%
17 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
1"""Severity level enum definitions.
3This module defines the supported severity levels for issues.
4"""
6from __future__ import annotations
8from enum import auto
10from lintro.enums.uppercase_str_enum import UppercaseStrEnum
13class SeverityLevel(UppercaseStrEnum):
14 """Supported severity levels for issues.
16 Values are uppercase string identifiers matching enum member names.
17 """
19 ERROR = auto()
20 WARNING = auto()
21 INFO = auto()
24# Alias table mapping native tool severity strings (upper-cased) to SeverityLevel.
25# This lets normalize_severity_level() handle every known tool's native values
26# without requiring per-parser changes.
27_SEVERITY_ALIASES: dict[str, SeverityLevel] = {
28 # Canonical names
29 "ERROR": SeverityLevel.ERROR,
30 "WARNING": SeverityLevel.WARNING,
31 "INFO": SeverityLevel.INFO,
32 # Common alternatives → INFO
33 "NOTE": SeverityLevel.INFO,
34 "HINT": SeverityLevel.INFO,
35 "STYLE": SeverityLevel.INFO,
36 "HELP": SeverityLevel.INFO,
37 # Bandit / cargo-audit severity levels
38 "HIGH": SeverityLevel.ERROR,
39 "CRITICAL": SeverityLevel.ERROR,
40 "MEDIUM": SeverityLevel.WARNING,
41 "UNKNOWN": SeverityLevel.WARNING,
42 "LOW": SeverityLevel.INFO,
43 # Semgrep / Svelte-check
44 "WARN": SeverityLevel.WARNING,
45 # Pytest outcomes
46 "FAILED": SeverityLevel.ERROR,
47 "SKIPPED": SeverityLevel.INFO,
48 "PASSED": SeverityLevel.INFO,
49}
52def normalize_severity_level(value: str | SeverityLevel) -> SeverityLevel:
53 """Normalize a raw value to a SeverityLevel enum.
55 Looks up the upper-cased value in the alias table, which maps every known
56 native tool severity string to one of ERROR / WARNING / INFO.
58 Args:
59 value: str or SeverityLevel to normalize.
61 Returns:
62 SeverityLevel: Normalized enum value.
64 Raises:
65 ValueError: If the value is not a recognized severity string.
66 """
67 if isinstance(value, SeverityLevel):
68 return value
69 upper = value.upper()
70 result = _SEVERITY_ALIASES.get(upper)
71 if result is not None:
72 return result
73 supported = f"Supported levels: {sorted(_SEVERITY_ALIASES)}"
74 raise ValueError(
75 f"Unknown severity level: {value!r}. {supported}",
76 ) from None