code: private function annotationIsSuperfluous(Annotation $annotation, array $info, array $symbolShortNames)
      {
          if ('param' === $annotation->getTag()->getName()) {
              $regex = '/@param\s+(?:\S|\s(?!\$))+\s\$\S+\s+\S/';
          } else {
              $regex = '/@return\s+\S+\s+\S/';
          }
  
          if (Preg::match($regex, $annotation->getContent())) {
              return false;
          }
  
          $annotationTypes = $this->toComparableNames($annotation->getTypes(), $symbolShortNames);
  
          if (['null'] === $annotationTypes) {
              return false;
          }
  
          if (['mixed'] === $annotationTypes && null === $info['type']) {
              return !$this->configuration['allow_mixed'];
          }
  
          $actualTypes = null === $info['type'] ? [] : [$info['type']];
          if ($info['allows_null']) {
              $actualTypes[] = 'null';
          }
  
          return $annotationTypes === $this->toComparableNames($actualTypes, $symbolShortNames);
      }
docs: @param Annotation            $annotation
  @param array                 $info
  @param array<string, string> $symbolShortNames
  
  @return bool