You are here

phpstorm.drush.inc in http:BL 8

Generate PhpStorm metadata file.

File

drush/phpstorm.drush.inc
View source
<?php

/**
 * @file
 * Generate PhpStorm metadata file.
 */

/**
 * Implements of hook_drush_command().
 */
function phpstorm_drush_command() {
  $items = array();
  $items['phpstorm-metadata'] = array(
    'description' => 'Save the PhpStorm Metadata file to Drupal root.',
    'core' => array(
      '8+',
    ),
    'aliases' => array(
      'phpm',
    ),
    'category' => 'devel',
  );
  return $items;
}

/**
 * Implements hook_drush_help_alter().
 */
function phpstorm_drush_help_alter(&$command) {
  if ($command['command'] == 'cache-rebuild') {
    $command['options']['storm'] = 'Write a new PHPstorm metadata file to Drupal root.';
  }
}

/*
 * Implements drush_hook_post_COMMAND().
 */
function drush_phpstorm_post_cache_rebuild() {
  if (drush_get_option('storm')) {
    drush_invoke_process('@self', 'phpstorm-metadata');
  }
}

/**
 * Generate PhpStorm Metadata file.
 *
 * @see http://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata
 */
function drush_phpstorm_metadata() {
  $container = \Drupal::getContainer();
  $reflectedClass = new ReflectionClass($container);
  $map = array();

  // Map for all services of the container.
  // @see \Symfony\Component\DependencyInjection\Container::getServiceIds().
  foreach ($reflectedClass
    ->getMethods() as $method) {
    if (preg_match('/^get(.+)Service$/', $method->name, $match)) {
      $id = strtolower(preg_replace(array(
        '/([A-Z]+)([A-Z][a-z])/',
        '/([a-z\\d])([A-Z])/',
      ), array(
        '\\1_\\2',
        '\\1_\\2',
      ), strtr($match[1], '_', '.')));
      $service = \Drupal::service($id);
      if (is_object($service)) {
        $map["\\Drupal::service('')"][$id] = '\\' . get_class($service);
      }
    }
  }

  // Entity Manager - getStorage
  foreach (\Drupal::entityTypeManager()
    ->getDefinitions() as $type => $definition) {
    $class = Drupal::entityTypeManager()
      ->getStorage($type);
    $map["\\Drupal::entityManager()->getStorage('')"][$type] = '\\' . get_class($class);
    $map["\\Drupal::entityTypeManager()->getStorage('')"][$type] = '\\' . get_class($class);
  }
  $content = _drush_phpstorm_metadata_phpstorm_metadata_template($map);
  file_put_contents(DRUPAL_ROOT . '/.phpstorm.meta.php', $content);
}
function _drush_phpstorm_metadata_phpstorm_metadata_template($data) {
  $file = '<?php

namespace PHPSTORM_META {

  /** @noinspection PhpUnusedLocalVariableInspection */
  /** @noinspection PhpIllegalArrayKeyTypeInspection */
  $STATIC_METHOD_TYPES = [
';
  foreach ($data as $method => $map) {
    $file .= "\n";
    $file .= "    {$method} => [\n";
    foreach ($map as $argument => $class) {
      $file .= "      '{$argument}' instanceof {$class},\n";
    }
    $file .= "    ],";
    $file .= "\n";
  }
  $file .= '
    ];
  }
  ';
  return $file;
}

Functions

Namesort descending Description
drush_phpstorm_metadata Generate PhpStorm Metadata file.
drush_phpstorm_post_cache_rebuild
phpstorm_drush_command Implements of hook_drush_command().
phpstorm_drush_help_alter Implements hook_drush_help_alter().
_drush_phpstorm_metadata_phpstorm_metadata_template