@@ -164,14 +164,18 @@ def __init__(self,
164
164
show_error_codes : bool = False ,
165
165
pretty : bool = False ,
166
166
read_source : Optional [Callable [[str ], Optional [List [str ]]]] = None ,
167
- show_absolute_path : bool = False ) -> None :
167
+ show_absolute_path : bool = False ,
168
+ enabled_error_codes : Optional [Set [ErrorCode ]] = None ,
169
+ disabled_error_codes : Optional [Set [ErrorCode ]] = None ) -> None :
168
170
self .show_error_context = show_error_context
169
171
self .show_column_numbers = show_column_numbers
170
172
self .show_error_codes = show_error_codes
171
173
self .show_absolute_path = show_absolute_path
172
174
self .pretty = pretty
173
175
# We use fscache to read source code when showing snippets.
174
176
self .read_source = read_source
177
+ self .enabled_error_codes = enabled_error_codes or set ()
178
+ self .disabled_error_codes = disabled_error_codes or set ()
175
179
self .initialize ()
176
180
177
181
def initialize (self ) -> None :
@@ -195,7 +199,9 @@ def copy(self) -> 'Errors':
195
199
self .show_error_codes ,
196
200
self .pretty ,
197
201
self .read_source ,
198
- self .show_absolute_path )
202
+ self .show_absolute_path ,
203
+ self .enabled_error_codes ,
204
+ self .disabled_error_codes )
199
205
new .file = self .file
200
206
new .import_ctx = self .import_ctx [:]
201
207
new .function_or_member = self .function_or_member [:]
@@ -351,15 +357,25 @@ def add_error_info(self, info: ErrorInfo) -> None:
351
357
self ._add_error_info (file , info )
352
358
353
359
def is_ignored_error (self , line : int , info : ErrorInfo , ignores : Dict [int , List [str ]]) -> bool :
354
- if line not in ignores :
360
+ if info .code and self .is_error_code_enabled (info .code ) is False :
361
+ return True
362
+ elif line not in ignores :
355
363
return False
356
364
elif not ignores [line ]:
357
365
# Empty list means that we ignore all errors
358
366
return True
359
- elif info .code :
367
+ elif info .code and self . is_error_code_enabled ( info . code ) is True :
360
368
return info .code .code in ignores [line ]
361
369
return False
362
370
371
+ def is_error_code_enabled (self , error_code : ErrorCode ) -> bool :
372
+ if error_code in self .disabled_error_codes :
373
+ return False
374
+ elif error_code in self .enabled_error_codes :
375
+ return True
376
+ else :
377
+ return error_code .default_enabled
378
+
363
379
def clear_errors_in_targets (self , path : str , targets : Set [str ]) -> None :
364
380
"""Remove errors in specific fine-grained targets within a file."""
365
381
if path in self .error_info_map :
0 commit comments