Import contract summary printer

pull/78/head
Josselin 6 years ago
parent c40776121a
commit 95e94beb32
  1. 6
      slither/core/declarations/function.py
  2. 35
      slither/printers/summary/contract.py

@ -616,10 +616,10 @@ class Function(ChildContract, SourceMapping):
"""
Return the function summary
Returns:
(str, str, list(str), list(str), listr(str), list(str), list(str);
name, visibility, modifiers, vars read, vars written, internal_calls, external_calls_as_expressions
(str, str, str, list(str), list(str), listr(str), list(str), list(str);
contract_name, name, visibility, modifiers, vars read, vars written, internal_calls, external_calls_as_expressions
"""
return (self.name, self.visibility,
return (self.contract.name, self.full_name, self.visibility,
[str(x) for x in self.modifiers],
[str(x) for x in self.state_variables_read + self.solidity_variables_read],
[str(x) for x in self.state_variables_written],

@ -1,7 +1,7 @@
"""
Module printing summary of the contract
"""
import collections
from slither.printers.abstract_printer import AbstractPrinter
from slither.utils.colors import blue, green, magenta
@ -21,12 +21,29 @@ class ContractSummary(AbstractPrinter):
for c in self.contracts:
(name, _inheritance, _var, func_summaries, _modif_summaries) = c.get_summary()
txt += blue("\n+ Contract %s\n"%name)
for (f_name, visi, _, _, _, _, _) in func_summaries:
txt += " - "
if visi in ['external', 'public']:
txt += green("%s (%s)\n"%(f_name, visi))
elif visi in ['internal', 'private']:
txt += magenta("%s (%s)\n"%(f_name, visi))
else:
txt += "%s (%s)\n"%(f_name, visi)
# (c_name, f_name, visi, _, _, _, _, _) in func_summaries
public = [(elem[0], (elem[1], elem[2]) ) for elem in func_summaries]
# private = [(elem[0], (elem[1], elem[2])) for elem in func_summaries if elem[2] in ['internal', 'private']]
# should never happen
# other = [(elem[0], (elem[1], elem[2])) for elem in func_summaries if elem[2] not in ['external', 'public', 'internal', 'private']]
# assert not other
collect = collections.defaultdict(list)
for a,b in public:
collect[a].append(b)
public = list(collect.items())
for contract, functions in public:
txt += blue(" - From {}\n".format(contract))
functions = sorted(functions)
for (function, visi) in functions:
if visi in ['external', 'public']:
txt += green(" - {} ({})\n".format(function, visi))
for (function, visi) in functions:
if visi in ['internal', 'private']:
txt += magenta(" - {} ({})\n".format(function, visi))
for (function, visi) in functions:
if visi not in ['external', 'public', 'internal', 'private']:
txt += " - {}  ({})\n".format(function, visi)
self.info(txt)

Loading…
Cancel
Save