original_string: private function match($candidate, $name, LinkConstraintInterface $constraint = null)
      {
          $candidateName = $candidate->getName();
          $candidateVersion = $candidate->getVersion();
          $isDev = $candidate->getStability() === 'dev';
          $isAlias = $candidate instanceof AliasPackage;
  
          if (!$isDev && !$isAlias && isset($this->filterRequires[$name])) {
              $requireFilter = $this->filterRequires[$name];
          } else {
              $requireFilter = new EmptyConstraint;
          }
  
          if ($candidateName === $name) {
              $pkgConstraint = new VersionConstraint('==', $candidateVersion);
  
              if ($constraint === null || $constraint->matches($pkgConstraint)) {
                  return $requireFilter->matches($pkgConstraint) ? self::MATCH : self::MATCH_FILTERED;
              }
  
              return self::MATCH_NAME;
          }
  
          $provides = $candidate->getProvides();
          $replaces = $candidate->getReplaces();
  
          // aliases create multiple replaces/provides for one target so they can not use the shortcut below
          if (isset($replaces[0]) || isset($provides[0])) {
              foreach ($provides as $link) {
                  if ($link->getTarget() === $name && ($constraint === null || $constraint->matches($link->getConstraint()))) {
                      return $requireFilter->matches($link->getConstraint()) ? self::MATCH_PROVIDE : self::MATCH_FILTERED;
                  }
              }
  
              foreach ($replaces as $link) {
                  if ($link->getTarget() === $name && ($constraint === null || $constraint->matches($link->getConstraint()))) {
                      return $requireFilter->matches($link->getConstraint()) ? self::MATCH_REPLACE : self::MATCH_FILTERED;
                  }
              }
  
              return self::MATCH_NONE;
          }
  
          if (isset($provides[$name]) && ($constraint === null || $constraint->matches($provides[$name]->getConstraint()))) {
              return $requireFilter->matches($provides[$name]->getConstraint()) ? self::MATCH_PROVIDE : self::MATCH_FILTERED;
          }
  
          if (isset($replaces[$name]) && ($constraint === null || $constraint->matches($replaces[$name]->getConstraint()))) {
              return $requireFilter->matches($replaces[$name]->getConstraint()) ? self::MATCH_REPLACE : self::MATCH_FILTERED;
          }
  
          return self::MATCH_NONE;
      }
code: private function match($candidate, $name, LinkConstraintInterface $constraint = null)
      {
          $candidateName = $candidate->getName();
          $candidateVersion = $candidate->getVersion();
          $isDev = $candidate->getStability() === 'dev';
          $isAlias = $candidate instanceof AliasPackage;
  
          if (!$isDev && !$isAlias && isset($this->filterRequires[$name])) {
              $requireFilter = $this->filterRequires[$name];
          } else {
              $requireFilter = new EmptyConstraint;
          }
  
          if ($candidateName === $name) {
              $pkgConstraint = new VersionConstraint('==', $candidateVersion);
  
              if ($constraint === null || $constraint->matches($pkgConstraint)) {
                  return $requireFilter->matches($pkgConstraint) ? self::MATCH : self::MATCH_FILTERED;
              }
  
              return self::MATCH_NAME;
          }
  
          $provides = $candidate->getProvides();
          $replaces = $candidate->getReplaces();
  
          // aliases create multiple replaces/provides for one target so they can not use the shortcut below
          if (isset($replaces[0]) || isset($provides[0])) {
              foreach ($provides as $link) {
                  if ($link->getTarget() === $name && ($constraint === null || $constraint->matches($link->getConstraint()))) {
                      return $requireFilter->matches($link->getConstraint()) ? self::MATCH_PROVIDE : self::MATCH_FILTERED;
                  }
              }
  
              foreach ($replaces as $link) {
                  if ($link->getTarget() === $name && ($constraint === null || $constraint->matches($link->getConstraint()))) {
                      return $requireFilter->matches($link->getConstraint()) ? self::MATCH_REPLACE : self::MATCH_FILTERED;
                  }
              }
  
              return self::MATCH_NONE;
          }
  
          if (isset($provides[$name]) && ($constraint === null || $constraint->matches($provides[$name]->getConstraint()))) {
              return $requireFilter->matches($provides[$name]->getConstraint()) ? self::MATCH_PROVIDE : self::MATCH_FILTERED;
          }
  
          if (isset($replaces[$name]) && ($constraint === null || $constraint->matches($replaces[$name]->getConstraint()))) {
              return $requireFilter->matches($replaces[$name]->getConstraint()) ? self::MATCH_REPLACE : self::MATCH_FILTERED;
          }
  
          return self::MATCH_NONE;
      }
code_tokens: private function match ( $ candidate , $ name , LinkConstraintInterface $ constraint = null ) { $ candidateName = $ candidate -> getName ( ) ; $ candidateVersion = $ candidate -> getVersion ( ) ; $ isDev = $ candidate -> getStability ( ) === 'dev' ; $ isAlias = $ candidate instanceof AliasPackage ; if ( ! $ isDev && ! $ isAlias && isset ( $ this -> filterRequires [ $ name ] ) ) { $ requireFilter = $ this -> filterRequires [ $ name ] ; } else { $ requireFilter = new EmptyConstraint ; } if ( $ candidateName === $ name ) { $ pkgConstraint = new VersionConstraint ( '==' , $ candidateVersion ) ; if ( $ constraint === null || $ constraint -> matches ( $ pkgConstraint ) ) { return $ requireFilter -> matches ( $ pkgConstraint ) ? self :: MATCH : self :: MATCH_FILTERED ; } return self :: MATCH_NAME ; } $ provides = $ candidate -> getProvides ( ) ; $ replaces = $ candidate -> getReplaces ( ) ; // aliases create multiple replaces/provides for one target so they can not use the shortcut below if ( isset ( $ replaces [ 0 ] ) || isset ( $ provides [ 0 ] ) ) { foreach ( $ provides as $ link ) { if ( $ link -> getTarget ( ) === $ name && ( $ constraint === null || $ constraint -> matches ( $ link -> getConstraint ( ) ) ) ) { return $ requireFilter -> matches ( $ link -> getConstraint ( ) ) ? self :: MATCH_PROVIDE : self :: MATCH_FILTERED ; } } foreach ( $ replaces as $ link ) { if ( $ link -> getTarget ( ) === $ name && ( $ constraint === null || $ constraint -> matches ( $ link -> getConstraint ( ) ) ) ) { return $ requireFilter -> matches ( $ link -> getConstraint ( ) ) ? self :: MATCH_REPLACE : self :: MATCH_FILTERED ; } } return self :: MATCH_NONE ; } if ( isset ( $ provides [ $ name ] ) && ( $ constraint === null || $ constraint -> matches ( $ provides [ $ name ] -> getConstraint ( ) ) ) ) { return $ requireFilter -> matches ( $ provides [ $ name ] -> getConstraint ( ) ) ? self :: MATCH_PROVIDE : self :: MATCH_FILTERED ; } if ( isset ( $ replaces [ $ name ] ) && ( $ constraint === null || $ constraint -> matches ( $ replaces [ $ name ] -> getConstraint ( ) ) ) ) { return $ requireFilter -> matches ( $ replaces [ $ name ] -> getConstraint ( ) ) ? self :: MATCH_REPLACE : self :: MATCH_FILTERED ; } return self :: MATCH_NONE ; }
docstring: Checks if the package matches the given constraint directly or through
  provided or replaced packages
  
  @param  array|PackageInterface  $candidate
  @param  string                  $name       Name of the package to be matched
  @param  LinkConstraintInterface $constraint The constraint to verify
  @return int                     One of the MATCH* constants of this class or 0 if there is no match
docstring_tokens: Checks if the package matches the given constraint directly or through provided or replaced packages