Coverage for lintro / parsers / mypy / mypy_issue.py: 100%
9 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"""Models for mypy issues."""
3from __future__ import annotations
5from dataclasses import dataclass, field
7from lintro.parsers.base_issue import BaseIssue
10@dataclass
11class MypyIssue(BaseIssue):
12 """Represents a mypy type-checking issue.
14 This class extends BaseIssue with mypy-specific fields for type checking
15 errors, warnings, and notes. All fields are optional to handle cases where
16 mypy doesn't provide complete location information.
18 Attributes:
19 code: Mypy error code (e.g., "attr-defined", "name-defined", "type-arg").
20 Empty string if mypy doesn't provide an error code.
21 severity: Severity level reported by mypy (e.g., "error", "warning", "note").
22 None if severity is not specified.
23 end_line: Optional end line number for multi-line issues.
24 None if the issue is on a single line or end position is unknown.
25 end_column: Optional end column number for issues spanning multiple columns.
26 None if the issue is at a single column or end position is unknown.
28 Note:
29 Most fields are optional to handle cases where mypy doesn't provide
30 complete location information. ``code`` defaults to an empty string
31 to avoid None handling in downstream output.
33 Examples:
34 >>> issue = MypyIssue(
35 ... file="src/main.py",
36 ... line=10,
37 ... column=5,
38 ... code="attr-defined",
39 ... severity="error",
40 ... message="Module has no attribute 'foo'"
41 ... )
42 """
44 code: str = field(default="")
45 severity: str | None = field(default=None)
46 end_line: int | None = field(default=None)
47 end_column: int | None = field(default=None)