Skip to content

Commit

Permalink
Add CustomError as printable output (#2063)
Browse files Browse the repository at this point in the history
  • Loading branch information
smonicas authored Aug 3, 2023
1 parent d905058 commit e009890
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 0 deletions.
2 changes: 2 additions & 0 deletions slither/core/declarations/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,5 @@
from .function_contract import FunctionContract
from .function_top_level import FunctionTopLevel
from .custom_error_contract import CustomErrorContract
from .custom_error_top_level import CustomErrorTopLevel
from .custom_error import CustomError
4 changes: 4 additions & 0 deletions slither/core/declarations/custom_error_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,7 @@ def is_declared_by(self, contract: "Contract") -> bool:
:return:
"""
return self.contract == contract

@property
def canonical_name(self) -> str:
return self.contract.name + "." + self.full_name
4 changes: 4 additions & 0 deletions slither/core/declarations/custom_error_top_level.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@ class CustomErrorTopLevel(CustomError, TopLevel):
def __init__(self, compilation_unit: "SlitherCompilationUnit", scope: "FileScope") -> None:
super().__init__(compilation_unit)
self.file_scope: "FileScope" = scope

@property
def canonical_name(self) -> str:
return self.full_name
29 changes: 29 additions & 0 deletions slither/utils/output.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
Structure,
Pragma,
FunctionContract,
CustomError,
)
from slither.core.source_mapping.source_mapping import SourceMapping
from slither.core.variables.local_variable import LocalVariable
Expand Down Expand Up @@ -438,6 +439,8 @@ def add(self, add: SupportedOutput, additional_fields: Optional[Dict] = None) ->
self.add_event(add, additional_fields=additional_fields)
elif isinstance(add, Structure):
self.add_struct(add, additional_fields=additional_fields)
elif isinstance(add, CustomError):
self.add_custom_error(add, additional_fields=additional_fields)
elif isinstance(add, Pragma):
self.add_pragma(add, additional_fields=additional_fields)
elif isinstance(add, Node):
Expand Down Expand Up @@ -585,6 +588,32 @@ def add_event(self, event: Event, additional_fields: Optional[Dict] = None) -> N

self._data["elements"].append(element)

# endregion
###################################################################################
###################################################################################
# region CustomError
###################################################################################
###################################################################################

def add_custom_error(
self, custom_error: CustomError, additional_fields: Optional[Dict] = None
) -> None:
if additional_fields is None:
additional_fields = {}
type_specific_fields = {
"parent": _create_parent_element(custom_error),
"signature": custom_error.full_name,
}
element = _create_base_element(
"custom_error",
custom_error.name,
custom_error.source_mapping.to_json(),
type_specific_fields,
additional_fields,
)

self._data["elements"].append(element)

# endregion
###################################################################################
###################################################################################
Expand Down

0 comments on commit e009890

Please sign in to comment.