qafoolabs/php-refactoring-browser

此软件包已被废弃且不再维护。作者建议使用rector/rector软件包。

PHP重构浏览器

v0.1 2015-04-14 11:32 UTC

This package is auto-updated.

Last update: 2021-04-12 07:38:58 UTC


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.

Build Status

通过生成描述重构步骤的差异文件来自动化PHP代码的重构。为了防止在重构过程中出现简单错误,自动工具非常出色。

请查看提取方法功能的截图

该库站在巨人的肩膀上,使用了多个现有库。

基于这些来源的数据,重构浏览器由两个不同的组件组成。

  • Patches 允许根据对文件的更改操作构建补丁。
  • Refactoring 包含实际的重构领域和适配第三方库。
  • Collections 在PHP数组之上添加了一些集合语义。目前包含一个Set类型。

安装 & 基本用法

下载PHAR

重构浏览器与以下工具一起使用

php refactor.phar <refactoring> <arg1>...<argN>

它将差异输出到屏幕,您可以通过将管道传递到 patch -p1 来将差异应用到您的代码。

php refactor.phar <refactoring> <arg1>...<argN> | patch -p1

编辑器插件

有第三方插件可用于在不同文本编辑器中使用PHP重构。以下链接可以找到这些独立维护的项目

为什么?

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)
  • 应用领域驱动设计,并在其中找到合适的边界上下文和通用语言
  • 通过在领域中有用的构造中引入值对象来避免原始痴迷