2017 © Pedro Peláez
 

library code-refactor

Toolset for generating PHP code

image

azhai/code-refactor

Toolset for generating PHP code

  • Tuesday, March 13, 2018
  • by azhai
  • Repository
  • 1 Watchers
  • 1 Stars
  • 112 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 7 Versions
  • 6 % Grown

The README.md

CodeRefactor

基于PHP-Parser的代码重构工具,只在PHP-Parser v3.1.0 (要求php v5.5+)下测试, (*1)

基本用法

<?php
error_reporting(E_ALL);
defined('VENDOR_DIR') or define('VENDOR_DIR', dirname(__DIR__) . '/vendor');
require_once VENDOR_DIR . '/azhai/coderefactor/src/bootstrap.php';
ClassLoader::register('PhpParser', VENDOR_DIR . '/nikic/php-parser/lib/PhpParser/');

use CodeRefactor\Refactor;
use CodeRefactor\Visitor\BlankVisitor;
use CodeRefactor\Mixin\VisitorMixin;

/**
 * 找出 $this->setName(...); 的代码
 */
function ft_set_name($node)
{
    $name = VisitorMixin::getExprAttr($node, 'name');
    $var = VisitorMixin::getExprAttr($node, 'var', 'name');
    if ('setName' === $name && 'this' === $var) {
        return $node->args;
    }
}

/**
 * 将上面的代码改为 $this->setName2(..., ...);
 */
function cb_set_name2($node, $args)
{
    $full_name = VisitorMixin::getExprAttr($args[0], 'value', 'value');
    @list($first_name, $last_name) = explode(' ', strval($full_name), 2);
    $node->args[0]->value->value = trim($first_name);
    $node->args[] = VisitorMixin::createArg(trim($last_name) ?: '');
    return $node;
}

//遍历和修改工具
$visitor = new BlankVisitor();
$visitor->addRule('Stmt_Class'); //遍历Class的子节点,找出所有Method
$visitor->addRule('Stmt_ClassMethod'); //遍历Method的子节点,找出所有代码块
$visitor->addRule('Expr_MethodCall', 'ft_set_name', 'cb_set_name2');

$files = Refactor::listFiles(__DIR__, '/\.class\.php$/');
$ref = new Refactor(['phpVersion' => 'ONLY_PHP5']);
$ref->addVisitor($visitor);
$codes = $ref->parseFiles($files);
foreach ($codes as $path => $code) {
    //添加一个常量和一个属性(粗粒度)
    $code->find('classes', false, function ($offset, $code) {
        $class = $code->stmts[$offset];
        $class->setConst('MONTHES_PER_YEAR', 12);
        $class->setProperty('monthes_per_year', 12);
    });
    //使用Visitor检查和修改所有代码(细粒度)
    $code->fixedBy($ref);
    //写入新文件
    $ref->writeFile($path, $path . '.new');
}

The Versions

13/03 2018

dev-master

9999999-dev

Toolset for generating PHP code

  Sources   Download

MIT

The Requires

 

code generation

13/03 2018

v1.1

1.1.0.0

Toolset for generating PHP code

  Sources   Download

MIT

The Requires

 

code generation

15/01 2018

v1.0

1.0.0.0

Toolset for generating PHP code

  Sources   Download

MIT

The Requires

 

code generation

31/10 2017

v0.7

0.7.0.0

Toolset for generating PHP code

  Sources   Download

MIT

The Requires

 

code generation

06/09 2017

v0.5

0.5.0.0

Toolset for generating PHP code

  Sources   Download

MIT

The Requires

 

code generation

05/09 2017

v0.4

0.4.0.0

Toolset for generating PHP code

  Sources   Download

MIT

The Requires

 

code generation

24/08 2017

v0.2

0.2.0.0

Toolset for generating PHP code

  Sources   Download

MIT

The Requires

 

code generation