-
Notifications
You must be signed in to change notification settings - Fork 981
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This ensures PATH is correctly configured, and hints the user about what they might need to do to configure it correctly.
- Loading branch information
Showing
2 changed files
with
58 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
from pathlib import Path | ||
from typing import List, Optional, Tuple | ||
import shutil | ||
import sysconfig | ||
|
||
from slither.utils.colors import yellow, green, red | ||
|
||
|
||
def check_path_config(name: str) -> Tuple[bool, Optional[Path], List[Path]]: | ||
binary_path = shutil.which(name) | ||
possible_paths = [] | ||
|
||
for scheme in sysconfig.get_scheme_names(): | ||
script_path = Path(sysconfig.get_path("scripts", scheme)) | ||
purelib_path = Path(sysconfig.get_path("purelib", scheme)) | ||
script_binary_path = shutil.which(name, path=script_path) | ||
if script_binary_path is not None: | ||
possible_paths.append((script_path, purelib_path)) | ||
|
||
binary_here = False | ||
if binary_path is not None: | ||
binary_path = Path(binary_path) | ||
this_code = Path(__file__) | ||
this_binary = list(filter(lambda x: this_code.is_relative_to(x[1]), possible_paths)) | ||
binary_here = len(this_binary) > 0 and all( | ||
binary_path.is_relative_to(script) for script, _ in this_binary | ||
) | ||
|
||
return binary_here, binary_path, list(set(script for script, _ in possible_paths)) | ||
|
||
|
||
def check_slither_path(**_kwargs) -> None: | ||
binary_here, binary_path, possible_paths = check_path_config("slither") | ||
show_paths = False | ||
|
||
if binary_path: | ||
print(green(f"`slither` found in PATH at `{binary_path}`.")) | ||
if binary_here: | ||
print(green("Its location matches this slither-doctor installation.")) | ||
else: | ||
print( | ||
yellow( | ||
f"This path does not correspond to this slither-doctor installation.\n" | ||
+ "Double-check the order of directories in PATH if you have several slither installations." | ||
) | ||
) | ||
show_paths = True | ||
else: | ||
print(red("`slither` was not found in PATH.")) | ||
show_paths = True | ||
|
||
if show_paths: | ||
print() | ||
print("Consider adding one of the following directories to PATH:") | ||
for path in possible_paths: | ||
print(f" * {path}") |