qafoolabs / php-refactoring-browser
v0.1
2015-04-14 11:32 UTC
Requires
- andrewsville/php-token-reflection: @stable
- beberlei/assert: @stable
- nikic/php-parser: @stable
- symfony/console: ~2.4@stable
- symfony/finder: ~2.4@stable
- tomphp/patch-builder: ~0.1
Requires (Dev)
- php: >=5.4
- behat/behat: ~2.5@stable
- mikey179/vfsstream: @stable
- phake/phake: @stable
- phpunit/phpunit: ~4.6@stable
- symfony/process: @stable
README
Note: This software is under development and in alpha state. Refactorings
do not contain all necessary pre-conditions and might mess up your code.
Check the diffs carefully before applying the patches.
通过生成描述重构步骤的差异文件来自动化PHP代码的重构。为了防止在重构过程中出现简单错误,自动工具非常出色。
请查看提取方法功能的截图。
该库站在巨人的肩膀上,使用了多个现有库。
- PHP Parser by Nikic
- PHP Token Reflection from Ondřej Nešpor
基于这些来源的数据,重构浏览器由两个不同的组件组成。
Patches
允许根据对文件的更改操作构建补丁。Refactoring
包含实际的重构领域和适配第三方库。Collections
在PHP数组之上添加了一些集合语义。目前包含一个Set类型。
安装 & 基本用法
重构浏览器与以下工具一起使用
php refactor.phar <refactoring> <arg1>...<argN>
它将差异输出到屏幕,您可以通过将管道传递到 patch -p1
来将差异应用到您的代码。
php refactor.phar <refactoring> <arg1>...<argN> | patch -p1
编辑器插件
有第三方插件可用于在不同文本编辑器中使用PHP重构。以下链接可以找到这些独立维护的项目
- vim : https://github.com/vim-php/vim-php-refactoring
- emacs : https://github.com/keelerm84/php-refactor-mode.el
为什么?
PHPStorm(或Netbeans)的用户可能会想知道为什么存在此项目,因为所有重构都在此IDE中可用。我们认为在PHP中拥有此类工具有几个原因
- 我们是VIM用户,不想使用IDE进行重构。我们还独立于IDE,任何(非PHP Storm)编辑器的用户现在都可以从自动化重构的实践中受益。
- 简单重构工具的不存在导致程序员“为了安全起见”不重构。这损害了代码的长期可维护性。重构是开发过程中最重要的步骤之一,而且很容易做到。
- 在应用重构之前生成补丁,可以轻松地自行验证操作或将它发送给同事。
- 用于构建此类工具的库(见上文)是可用的,为什么不这样做呢。
- 该项目在某种程度上也是一个学术项目,如您在设计目标中看到的,我们试图非常严格地遵循端口和适配器架构以及领域驱动设计。
重构
提取方法
将一系列行提取到新方法中,并从原始位置调用此方法
php refactor.phar extract-method <file> <line-range> <new-method>
此重构自动检测函数的所有必要输入和输出,并相应地生成参数列表和返回语句。
重命名局部变量
将一个局部变量从一名称更改为另一名称
php refactor.phar rename-local-variable <file> <line> <old-name> <new-name>
将局部变量转换为实例变量
将局部变量转换为实例变量,创建属性,并将所选方法中所有出现的地方更改为使用实例变量
php refactor.phar convert-local-to-instance-variable <file> <line> <variable>
重命名类和命名空间
通过将类名(IS状态)同步到文件系统名(SHOULD状态)来批量重命名类和命名空间,基于PSR-0的假设。
修复类和命名空间名称以与当前文件系统布局相对应,前提是项目使用PSR-0。这意味着您可以通过重命名文件夹和文件,然后应用命令来修复类和命名空间来重命名类和命名空间。
php refactor.phar fix-class-names <dir>
优化use语句
优化文件中完全限定名(FQN)的使用,使FQN在文件顶部使用"use"导入,并用其类名替换FQN。
所有其他use语句将保持不变,只有新的将被添加。
php refactor.phar optimize-use <file>
路线图
未优先考虑。
集成
- Vim插件,在Vim内部应用重构。
要实现的重构列表
- 提取方法(原型完成)
- 重命名局部变量(原型完成)
- 优化use语句(完成)
- 将局部变量转换为实例变量(原型完成)
- 重命名类PSR-0感知(完成)
- 重命名命名空间PSR-0感知(完成)
- 将魔法值转换为常量
- 重命名方法
- 仅首先重命名私有方法
- 重命名实例变量
- 仅首先重命名私有变量
- 提取接口
内部
设计目标
- 通过端口+适配器独立于第三方库和任何类型推断引擎(PDepend、PHP Analyzer)
- 应用领域驱动设计,并在其中找到合适的边界上下文和通用语言
- 通过在领域中有用的构造中引入值对象来避免原始痴迷