drupalmoduleupgrader-8.x-1.5/src/Plugin/DMU/Indexer/FunctionCalls.php

src/Plugin/DMU/Indexer/FunctionCalls.php
<?php

namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Indexer;

use Drupal\drupalmoduleupgrader\IndexerBase;
use Pharborist\Filter;
use Pharborist\Parser;
use Pharborist\Functions\FunctionCallNode;
use Pharborist\NodeCollection;

/**
 * @Indexer(
 *  id = "function_call",
 *  description = @Translation("Indexes all function calls in a target module."),
 *  exclude = { "t" }
 * )
 */
class FunctionCalls extends IndexerBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    /** @var \Symfony\Component\Finder\SplFileInfo $file */
    foreach ($this->target->getFinder() as $file) {
      $path = $file->getPathname();

      $this->target
        ->open($path)
        ->find(Filter::isInstanceOf('\Pharborist\Functions\FunctionCallNode'))
        ->not(function (FunctionCallNode $function_call) {
          return in_array($function_call->getName()->getText(), $this->pluginDefinition['exclude']);
        })
        ->each([$this, 'add']);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function get($id) {
    $all = new NodeCollection([]);

    $files = $this
      ->getQuery(['file'])
      ->distinct(TRUE)
      ->condition('id', $id)
      ->execute()
      ->fetchCol();

    array_walk($files, function ($file) use ($all, $id) {
      $all->add($this->target->open($file)->find(Filter::isFunctionCall($id)));
    });

    return $all;
  }

  /**
   * {@inheritdoc}
   */
  public function addFile($path) {
    $doc = Parser::parseFile($path);

    $doc
      ->find(Filter::isInstanceOf('\Pharborist\Functions\FunctionCallNode'))
      ->each([$this, 'add']);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc