Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 68a289b

Browse files
committedApr 26, 2024·
Add detectors_to_include to override exclude args
1 parent ded705d commit 68a289b

File tree

2 files changed

+34
-13
lines changed

2 files changed

+34
-13
lines changed
 

‎slither/__main__.py

+33-13
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import sys
1212
import traceback
1313
from importlib import metadata
14-
from typing import Tuple, Optional, List, Dict, Type, Union, Any, Sequence
14+
from typing import Any, Dict, List, Optional, Sequence, Set, Tuple, Type, Union
1515

1616

1717
from crytic_compile import cryticparser, CryticCompile, InvalidCompilation
@@ -211,18 +211,8 @@ def choose_detectors(
211211

212212
if args.detectors_to_run == "all":
213213
detectors_to_run = all_detector_classes
214-
if args.detectors_to_exclude:
215-
detectors_excluded = args.detectors_to_exclude.split(",")
216-
for detector in detectors:
217-
if detector in detectors_excluded:
218-
detectors_to_run.remove(detectors[detector])
219214
else:
220-
for detector in args.detectors_to_run.split(","):
221-
if detector in detectors:
222-
detectors_to_run.append(detectors[detector])
223-
else:
224-
raise ValueError(f"Error: {detector} is not a detector")
225-
detectors_to_run = sorted(detectors_to_run, key=lambda x: x.IMPACT)
215+
detectors_to_run = __include_detectors(set(detectors_to_run), args.detectors_to_run, detectors)
226216
return detectors_to_run
227217

228218
if args.exclude_optimization:
@@ -234,24 +224,46 @@ def choose_detectors(
234224
detectors_to_run = [
235225
d for d in detectors_to_run if d.IMPACT != DetectorClassification.INFORMATIONAL
236226
]
227+
237228
if args.exclude_low:
238229
detectors_to_run = [d for d in detectors_to_run if d.IMPACT != DetectorClassification.LOW]
230+
239231
if args.exclude_medium:
240232
detectors_to_run = [
241233
d for d in detectors_to_run if d.IMPACT != DetectorClassification.MEDIUM
242234
]
235+
243236
if args.exclude_high:
244237
detectors_to_run = [d for d in detectors_to_run if d.IMPACT != DetectorClassification.HIGH]
238+
245239
if args.detectors_to_exclude:
246240
detectors_to_run = [
247241
d for d in detectors_to_run if d.ARGUMENT not in args.detectors_to_exclude
248242
]
249243

250-
detectors_to_run = sorted(detectors_to_run, key=lambda x: x.IMPACT)
244+
if args.detectors_to_include:
245+
detectors_to_run = __include_detectors(set(detectors_to_run), args.detectors_to_include, detectors)
251246

252247
return detectors_to_run
253248

254249

250+
def __include_detectors(
251+
detectors_to_run: Set[Type[AbstractDetector]],
252+
detectors_to_include: str,
253+
detectors: Dict[str, Type[AbstractDetector]],
254+
) -> List[Type[AbstractDetector]]:
255+
include_detectors = detectors_to_include.split(",")
256+
257+
for detector in include_detectors:
258+
if detector in detectors:
259+
detectors_to_run.add(detectors[detector])
260+
else:
261+
raise ValueError(f"Error: {detector} is not a detector")
262+
263+
detectors_to_run = sorted(detectors_to_run, key=lambda x: x.IMPACT)
264+
return detectors_to_run
265+
266+
255267
def choose_printers(
256268
args: argparse.Namespace, all_printer_classes: List[Type[AbstractPrinter]]
257269
) -> List[Type[AbstractPrinter]]:
@@ -407,6 +419,14 @@ def parse_args(
407419
default=defaults_flag_in_config["exclude_high"],
408420
)
409421

422+
group_detector.add_argument(
423+
"--include-detectors",
424+
help="Comma-separated list of detectors that should be included",
425+
action="store",
426+
dest="detectors_to_include",
427+
default=defaults_flag_in_config["detectors_to_include"],
428+
)
429+
410430
fail_on_group = group_detector.add_mutually_exclusive_group()
411431
fail_on_group.add_argument(
412432
"--fail-pedantic",

‎slither/utils/command_line.py

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class FailOnLevel(enum.Enum):
4848
"detectors_to_run": "all",
4949
"printers_to_run": None,
5050
"detectors_to_exclude": None,
51+
"detectors_to_include": None,
5152
"exclude_dependencies": False,
5253
"exclude_informational": False,
5354
"exclude_optimization": False,

0 commit comments

Comments
 (0)
Please sign in to comment.