code: def _detect(self):
          
  
          results = []
          for contract in self.contracts:
              shadows = self.detect_shadowing_definitions(contract)
              if shadows:
                  for shadow in shadows:
                      local_parent_name = shadow[1]
                      local_variable = shadow[2]
                      overshadowed = shadow[3]
                      info = '{}.{}.{} (local variable @ {}) shadows:\n'.format(contract.name,
                                                                                local_parent_name,
                                                                                local_variable.name,
                                                                                local_variable.source_mapping_str)
                      for overshadowed_entry in overshadowed:
                          info += "\t- {}.{} ({} @ {})\n".format(overshadowed_entry[1],
                                                                 overshadowed_entry[2],
                                                                 overshadowed_entry[0],
                                                                 overshadowed_entry[2].source_mapping_str)
  
  
                      # Generate relevant JSON data for this shadowing definition.
                      json = self.generate_json_result(info)
                      self.add_variable_to_json(local_variable, json)
                      for overshadowed_entry in overshadowed:
                          if overshadowed_entry[0] in [self.OVERSHADOWED_FUNCTION, self.OVERSHADOWED_MODIFIER,
                                                       self.OVERSHADOWED_EVENT]:
                              self.add_function_to_json(overshadowed_entry[2], json)
                          elif overshadowed_entry[0] == self.OVERSHADOWED_STATE_VARIABLE:
                              self.add_variable_to_json(overshadowed_entry[2], json)
                      results.append(json)
  
          return results
docs: Detect shadowing local variables
  
          Recursively visit the calls
          Returns:
              list: {'vuln', 'filename,'contract','func', 'shadow'}