PhpStorm 2020.2 最新变化

PHP 8 联合类型支持、适用于 PHP 的新控制流引擎、Extract Class 重构、对 GitHub Pull Request 的全面支持、全新的 Inspection 微件以及对 OpenAPI 的支持。

PHP 8 联合类型

我们已开始支持 PHP 8 与联合类型。 在 PHP 8.0 中,您可以为属性、参数和返回类型声明多个类型。 PhpStorm 已经完全支持此功能,可以帮助您高效地迁移。

将 PHPDoc 转换为原生联合类型

将 PHPDoc 转换为原生联合类型

联合类型过去通过 PHPDoc 提供,现在 PhpStorm 会高亮显示此类匹配项。

利用 Alt+Enter 快速修复,现在可以将它们转换为原生联合类型。

此修复适用于可使用联合类型的每个对象,包括函数参数、返回类型和属性。 对于属性,也会考虑默认值。

将语言级别切换为 PHP 8

将语言级别切换为 PHP 8

要启用 PHP 8 相关功能,请使用以下任何一种方式将语言级别切换为 PHP 8:

  • 直接在代码编辑器中使用 Alt+Enter 快速修复。
  • 转到 Preferences | Languages & Frameworks | PHP,然后使用 PHP language level 列表。
  • composer.json 中指定 PHP 版本要求,PhpStorm 会自动选择相关要求。
执行类型验证

执行类型验证

PhpStorm 会分析调用,计算可能的类型并高亮显示与联合类型相关的问题区域。

这些检查适用于所有级别:属性、参数和返回值。

在复杂的代码库中,您可以通过检查快速发现问题。 PhpStorm 甚至会在代码运行前高亮显示需要注意的地方。

检测重复和冗余类型

检测重复和冗余类型

有许多禁止或冗余的类型组合。 例如:

  • bool|false
  • Foo|Foo
  • object|User
  • iterable|arrayiterable|Traversable

PhpStorm 会将全部这些内容高亮显示为无效。

处理可为 null 的类型

处理可为 null 的类型

有单个可空类型时,PHP 8 让您可以使用 ?Type 符号或 Type|null

但有时会有多个类型与 null 组合,使用 ?Type1|Type2 会因为模糊而被禁止。

PhpStorm 会高亮显示这些违规,并提供 Alt+Enter 快速修复来转换它们。

遵守差异规则

遵守差异规则

继承期间,如果您遵守以下这些基本规则,PHP 将允许您修改类型:

  • 参数类型为逆变,也就是可以扩展。
  • 返回类型为协变,也就是只可以缩小。
  • 必须评估属性类型是否为同一类型。

幸运的是,借助 PhpStorm,现在无需记住这些规则,因为它会检查代码并高亮显示任何违规。

使用假型 false

使用假型 false

在 PHP 8 中,将有一个特殊的 false 假型,仅可以在联合类型声明中使用。

它在标准库中广泛使用,例如,strpos()array_search() 可用于其他地方来指示阴性结果。

PhpStorm 会突出显示不正确的用法并考虑类型推断

移除冗余 PHPDoc

移除冗余 PHPDoc

添加原生联合类型声明后,PHPDoc 可能不必要,因为它不会提供任何其他信息。

您现在可以使用快速修复 Alt+Enter 将其移除。

新控制流引擎

条件始终为 true

条件始终为真

PhpStorm 现在可以分析复杂的代码路径并检测 if-else 块中的条件是有意义还是冗余。

‘instanceof’ 的结果始终为真

‘instanceof’ 的结果始终为真

PhpStorm 可以检测 instanceof 检查何时合适(与条件类似),或依据类型层次结构中的推断类型评估它们是否始终为 true。

新操作:Type Info

新操作:Type Info

这一新操作让您可以了解任何选定表达式的推断类型。

编码时,您可以选择表达式并使用 Ctrl+Shift+P 快捷键或 View | Type Info 菜单检查其类型。

表达式始终为 ‘null’

表达式始终为 ‘null’

PhpStorm 可以检测变量何时保证仅为 null。 在这种情况下,IDE 会建议简化表达式来使其更清晰。

质量工具改进

质量工具改进
  • 现在可以通过 Docker Compose 运行质量工具。
    要执行此操作,请转到 Preferences/Settings | Languages & Frameworks | PHP,并根据 Docker Compose 添加新的远程解释器。
  • 适用于 PHP-CS-FixerPHPCBF 的 Reformat 操作现在也可以通过远程解释器运行。
  • 如果 PHP_CodeSnifferruleset.xml 包含 "exclude-pattern" 部分,PhpStorm 现在会考虑这一情况,且不会分析指定路径下的文件。

Composer 改进

可以直接在编辑器中的 composer.json 文件内管理 Composer 依赖项。

支持自定义 Satis/Packagist 包

支持自定义 Satis/Packagist 包

如果 “repositories” 部分中有指定的自定义源,您将能够对自定义包进行补全。

现在,会有一个装订区域图标显示缓存自定义仓库的当前状态。

多个版本的补全

多个版本的补全

如果包具有以逗号或管道 (||) 分隔的多个版本,PhpStorm 会提供补全,包括可用于此包的全部版本。

之前在输入 ~^>= 后补全就会丢失,但现在借助 composer.json 中的这些范围约束,它可以按预期工作。

快速访问作为依赖项添加的工具设置

快速访问作为依赖项添加的工具设置

PhpStorm 可与许多第三方工具集成。 现在,如果在 composer.json 中声明了受支持的工具,它旁边的装订区域中就会出现一个扳手图标。 点击这个图标,就可以直接前往偏好设置的相关部分。

Extract Class 重构

Extract Class 重构

如果许多其他工作使类变得混乱且负荷过重,现在可以使用 Extract Class 重构将方法和属性移动到新类,对其进行重构。

选择您要移动的函数、方法或属性,按 Ctrl+T,然后选择 Extract class

该重构会创建新文件,对构造函数中类的对象进行实例化,并自动调整用法。

命令行工具改进

命令行工具改进

对远程解释器的支持现在可用于 PHP 命令行工具。

Preferences/Settings | Tools | Command Line Tool Support 下面,添加新工具条目,然后选择配置的其中一个远程解释器。

现在会自动检测 Laravel Artisan! 这意味着,在打开 Laravel 项目时,您可以按 Ctrl-Ctrl,然后开始输入命令。 PhpStorm 会提供补全,并建议可用的命令。

新检查

仅与写入权限一起使用的数组

仅与写入权限一起使用的数组

如果代码中的某一处声明并更新了数组,但从未读取它,这就说明此数组很可能冗余,并会为代码带来噪声。

该检查会检测这种用例,并提示您移除数组来使代码更整洁。

可能未赋值的类型属性

可能未赋值的类型属性

如果类型属性没有默认值,它会被视为未初始化。 读取未初始化的属性将生成 TypeError(除非定义了魔法 __get())。

PhpStorm 会检测未初始化的属性并高亮显示试图读取它们的代码。

全面支持 GitHub Pull Request

现在可以在 PhpStorm 中完成整个 Pull Request 工作流,无需切换到浏览器。 您可以管理 Pull Request;查看时间线和内联注释;添加评论和审查;并接受更改。

全面支持 GitHub Pull Request

要开始使用 GitHub Pull Request,请从工具栏或从主菜单中打开 Pull Requests 工具窗口或从主菜单中打开 VCS | Git | View Pull Requests(查看 Pull Request)。

然后在列表中选择 Pull Request 以查看其全部详细信息:消息、分支名称、作者,等等。

在这里,您可以检查更改的文件并(在提交级别和行级别)评论这些更改,开始审查过程。

还可以在不离开 IDE 的情况下合并 Pull Request。 无需从 Pull Request 创建本地分支,全部开箱即用。

OpenAPI 支持

PhpStorm 2020.2 支持 OpenAPI Specifications 插件。 这是一款由 JetBrains 开发的免费插件,可在 OpenAPI 规范文件中提供补全、导航和验证(openapi.yaml/openapi.json 和 swagger.yaml/swagger.json)。

OpenAPI 支持

此插件还提供:

  • Swagger UI 集成。
  • 代码生成。
  • OpenAPI 规范之间的内置结构差异。
  • 装订区域图标,用于从规范创建 HTTP 客户端请求。
  • 在 HTTP 客户端中对端点进行自动补全。

新 Inspections 微件和 Problems 视图

新 Inspections 微件和 Problems 视图

在编辑器的右上角,您会看到一个全新的 Inspections 微件,该微件汇总了当前文件中的问题。

  • 点击箭头可以在问题之间跳转(或使用快捷键 F2 / Shift+F2)。
  • 点击此微件可以在 Problems 工具窗口中查看文件中所有问题的列表。
  • 悬停在微件上可以查看设置弹出窗口并选择要高亮显示的问题。

Web 技术

WebStorm 2020.2 中的所有新功能和改进都适用于 PhpStorm 2020.2,要么开箱即用,要么通过插件 Marketplace 中的免费插件提供。

将 Prettier 作为 JavaScript 项目中的默认格式化程序

想要使用 Prettier 而不是内置的格式化程序来整理代码? 借助此更新,这会变得比以前更容易。 只需勾选新的 On code reformat 复选框,IDE 就会在您重新格式化 .js、.ts、.jsx 和 .tsx 文件时使用 Prettier。 也可以轻松添加其他文件类型。

一流的 Vue.js 支持

Nuxt.js 支持、Vue 特定的代码样式设置、TypeScript 项目中围绕 Vue 的改进以及我们在过去一年中添加的许多其他功能。 PhpStorm 中的 Vue 支持从未如此先进!

利用适合 JavaScript 的新功能节省时间

新智能 Alt+Enter 意图会帮助您更快地执行一些操作。 例如,您现在可以将带有数字索引的 for 循环快速转换为 forEach 数组方法。 浏览 JavaScript 和 TypeScript 文件中的文档注释也变得更容易,因为您现在可以在编辑器中直接呈现它们,这将最大程度地减少分心。

版本控制

支持 WSL 2 中安装的 Git

支持 WSL 2 中安装的 Git

PhpStorm 2020.2 支持 WSL 2 中安装的 Git,您可以使用它处理 Linux 和 Windows 文件系统中的项目。

IDE 可以根据项目位置在 Git 可执行文件之间切换。 从 WSL(通过 \\wsl$ 路径)打开项目时,IDE 会自动从 WSL 切换到 Git,还让您能够使用 IDE 中的所有 Git 相关功能。

用于比较分支的新 UI

在您想要比较两个分支以了解哪些提交不属于彼此时,PhpStorm 2020.2 会在编辑器中(而不是在 Git 工具窗口中)显示日志。 这会确保有足够的空间来显示全部信息。

从 Git Branches 弹出窗口菜单 VCS | Branches 中选择 Compare with Current 操作。

Drop Commit 操作

Drop Commit 操作

现在,在 Git 工具窗口的 Log 标签页中选择冗余的本地提交,然后从上下文菜单中选择 Drop Commit,即可轻松地将其移除。

Squash 本地提交

Squash 本地提交

还可以将多个本地提交合并到一个提交中,例如,在推送前清理历史记录。

在 Git 工具窗口中,选择提交,然后从上下文菜单中选择 Squash Commits…

IDE 会在后台运行交互式变基。

数据库工具

查看 DataGrip 2020.2 最新变化——可以在 PhpStorm 中使用所有这些功能。

单独的单元格值编辑器

单独的单元格值编辑器

现在,如果您的单元格中有一个巨大的值,可以在单独的面板中进行查看或编辑。 您还可以使用右侧工具栏切换自动换行模式。 为您的数据使用我们的代码编辑器的所有功能。

Google BigQuery 方言

Google BigQuery 方言

我们添加了一个新的 SQL 方言:Google BigQuery。 尚未完全支持 BigQuery,但万事皆有始。 到目前为止,如果您使用 Google BigQuery,PhpStorm 可以正确高亮显示您的查询并为查询提供编码辅助。

DML 预览

DML 预览

您可以在数据编辑器中检查表示您的更改的查询。 存在未决更改时,会有一个 DML 按钮处于活动状态。 此查询不是将要运行以修改您的数据的确切 SQL,因为 PhpStorm 使用 JDBC 驱动程序来更新表,但大多数情况下它是相同的。

其他改进

  • 自定义 getter 和 setter
  • 在一个窗口中为多个项目使用 Resolve
  • 新操作:Add Carets to Ends of Selected Lines