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

1"""Models for mypy issues.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass, field 

6 

7from lintro.parsers.base_issue import BaseIssue 

8 

9 

10@dataclass 

11class MypyIssue(BaseIssue): 

12 """Represents a mypy type-checking issue. 

13 

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. 

17 

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. 

27 

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. 

32 

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 """ 

43 

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)