code: public function search($query, $mode = 0, $type = null)
      {
          $regex = '{(?:'.implode('|', preg_split('{\s+}', $query)).')}i';
  
          $matches = array();
          foreach ($this->getPackages() as $package) {
              $name = $package->getName();
              if (isset($matches[$name])) {
                  continue;
              }
              if (preg_match($regex, $name)
                  || ($mode === self::SEARCH_FULLTEXT && $package instanceof CompletePackageInterface && preg_match($regex, implode(' ', (array) $package->getKeywords()) . ' ' . $package->getDescription()))
              ) {
                  if (null !== $type && $package->getType() !== $type) {
                      continue;
                  }
  
                  $matches[$name] = array(
                      'name' => $package->getPrettyName(),
                      'description' => $package instanceof CompletePackageInterface ? $package->getDescription() : null,
                  );
              }
          }
  
          return array_values($matches);
      }
docs: {@inheritDoc}