slither.utils.using_for

 1from typing import Dict, List, TYPE_CHECKING, Union
 2from slither.core.solidity_types import Type, UserDefinedType
 3
 4if TYPE_CHECKING:
 5    from slither.core.declarations import Function
 6
 7USING_FOR_KEY = Union[str, Type]  # "*" is wildcard
 8USING_FOR_ITEM = List[Union[UserDefinedType, "Function"]]  # UserDefinedType.type is a library
 9USING_FOR = Dict[USING_FOR_KEY, USING_FOR_ITEM]
10
11
12def merge_using_for(uf1: USING_FOR, uf2: USING_FOR) -> USING_FOR:
13    result = {**uf1, **uf2}
14    for key, value in result.items():
15        if key in uf1 and key in uf2:
16            result[key] = value + uf1[key]
17    return result
USING_FOR_KEY = typing.Union[str, slither.core.solidity_types.type.Type]
USING_FOR_ITEM = typing.List[typing.Union[slither.core.solidity_types.user_defined_type.UserDefinedType, ForwardRef('Function')]]
USING_FOR = typing.Dict[typing.Union[str, slither.core.solidity_types.type.Type], typing.List[typing.Union[slither.core.solidity_types.user_defined_type.UserDefinedType, ForwardRef('Function')]]]
13def merge_using_for(uf1: USING_FOR, uf2: USING_FOR) -> USING_FOR:
14    result = {**uf1, **uf2}
15    for key, value in result.items():
16        if key in uf1 and key in uf2:
17            result[key] = value + uf1[key]
18    return result