66from collections import defaultdict
77from collections .abc import Iterable , Iterator
88from itertools import chain
9- from typing import Callable , Final , NoReturn , Optional , TextIO , TypeVar
9+ from typing import Callable , Final , Literal , NoReturn , Optional , TextIO , TypeVar
1010from typing_extensions import Literal , Self , TypeAlias as _TypeAlias
1111
1212from mypy import errorcodes as codes
@@ -494,7 +494,7 @@ def report(
494494 code : ErrorCode | None = None ,
495495 * ,
496496 blocker : bool = False ,
497- severity : str = "error" ,
497+ severity : Literal [ "note" , "error" ] = "error" ,
498498 file : str | None = None ,
499499 only_once : bool = False ,
500500 origin_span : Iterable [int ] | None = None ,
@@ -509,7 +509,7 @@ def report(
509509 line: line number of error
510510 column: column number of error
511511 message: message to report
512- code: error code (not shown for notes), may be None
512+ code: error code (defaults to misc; or None for notes), not shown for notes
513513 blocker: if True, don't continue analysis after this error
514514 severity: 'error' or 'note'
515515 file: if non-None, override current file as context
@@ -548,6 +548,11 @@ def report(
548548 end_line = line
549549
550550 code = code or (parent_error .code if parent_error else None )
551+ if code is None :
552+ if blocker or (severity == 'note' ):
553+ code = None # do we even need to do this for blockers?
554+ else :
555+ code = codes .MISC
551556
552557 info = ErrorInfo (
553558 import_ctx = self .import_context (),
0 commit comments