4 from ._utils
import get_linter_option
7 __all__
= ["UnusedMustUse", "MustUse"]
10 class UnusedMustUse(Warning):
15 _MustUse__silence
= False
16 _MustUse__warning
= UnusedMustUse
18 def __new__(cls
, *args
, src_loc_at
=0, **kwargs
):
19 frame
= sys
._getframe
(1 + src_loc_at
)
20 self
= super().__new
__(cls
)
21 self
._MustUse
__used
= False
22 self
._MustUse
__context
= dict(
23 filename
=frame
.f_code
.co_filename
,
24 lineno
=frame
.f_lineno
,
29 if self
._MustUse
__silence
:
31 if hasattr(self
, "_MustUse__used") and not self
._MustUse
__used
:
32 if get_linter_option(self
._MustUse
__context
["filename"],
33 self
._MustUse
__warning
.__name
__, bool, True):
34 warnings
.warn_explicit(
35 "{!r} created but never used".format(self
), self
._MustUse
__warning
,
36 **self
._MustUse
__context
)
39 _old_excepthook
= sys
.excepthook
40 def _silence_elaboratable(type, value
, traceback
):
41 # Don't show anything if the interpreter crashed; that'd just obscure the exception
42 # traceback instead of helping.
43 MustUse
._MustUse
__silence
= True
44 _old_excepthook(type, value
, traceback
)
45 sys
.excepthook
= _silence_elaboratable