Constants detector: Also detect Contract types

pull/1375/head
JorgeAtPaladin 2 years ago
parent 719e4e98d8
commit efe103c79c
  1. 17
      slither/detectors/variables/possible_const_state_variables.py

@ -3,8 +3,10 @@ Module detecting state variables that could be declared as constant
""" """
from slither.core.compilation_unit import SlitherCompilationUnit from slither.core.compilation_unit import SlitherCompilationUnit
from slither.core.solidity_types.elementary_type import ElementaryType from slither.core.solidity_types.elementary_type import ElementaryType
from slither.core.solidity_types.user_defined_type import UserDefinedType
from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification
from slither.visitors.expression.export_values import ExportValues from slither.visitors.expression.export_values import ExportValues
from slither.core.declarations import Contract
from slither.core.declarations.solidity_variables import SolidityFunction from slither.core.declarations.solidity_variables import SolidityFunction
from slither.core.variables.state_variable import StateVariable from slither.core.variables.state_variable import StateVariable
from slither.formatters.variables.possible_const_state_variables import custom_format from slither.formatters.variables.possible_const_state_variables import custom_format
@ -29,9 +31,22 @@ class ConstCandidateStateVars(AbstractDetector):
WIKI_DESCRIPTION = "Constant state variables should be declared constant to save gas." WIKI_DESCRIPTION = "Constant state variables should be declared constant to save gas."
WIKI_RECOMMENDATION = "Add the `constant` attributes to state variables that never change." WIKI_RECOMMENDATION = "Add the `constant` attributes to state variables that never change."
@staticmethod
def _is_valid_type(v):
t = v.type
if isinstance(t, ElementaryType):
return True
if isinstance(t, UserDefinedType):
type_t = t.type
if isinstance(type_t, Contract):
return True
return False
@staticmethod @staticmethod
def _valid_candidate(v): def _valid_candidate(v):
return isinstance(v.type, ElementaryType) and not (v.is_constant or v.is_immutable) return _is_valid_type(v) and not (v.is_constant or v.is_immutable)
# https://solidity.readthedocs.io/en/v0.5.2/contracts.html#constant-state-variables # https://solidity.readthedocs.io/en/v0.5.2/contracts.html#constant-state-variables
valid_solidity_function = [ valid_solidity_function = [

Loading…
Cancel
Save