PhpStorm 2020.2:PHP 8串联类型,新控制流引擎,GitHub Pull请求,OpenAPI





哈Ha!我们很高兴介绍今年PhpStorm的第二个主要版本!



切口下方是所有显着变化和新功能的详细分析。小心-很多图片。



PHP 8中的联合类型



PHP 8将具有许多新功能,在某种程度上甚至是一种新语言。我们开始为八种早期版本提供支持,第一个主要功能是合并类型。可以在现在可以指定类型的任何地方使用



串联类型T1|T2|...:在参数,属性和返回值中。在这种情况下,变量可以采用列出的类型之一。



实际上,连接类型已经在PHPDoc中使用了很长时间,但是现在解释器实际上将在运行时检查它们。



切换语言版本



要查看所有可能性,您可以在Languages&Frameworks |中将语言版本手动切换到PHP 8。PHP | PHP语言级别



或者,如果代码已经使用了新功能,则可以使用快速修复(Alt + Enter)进行切换。



如果在composer.json中指定了PHP版本,则PhpStorm将自动将其拉起。







将PHPDoc转换为本机组合类型



您可以对具有组合类型的PHPDoc标记调用快速修复(Alt + Enter)。







删除不必要的PHPDoc



如果PHPDoc仅包含类型声明,则可以将其作为多余的快速修复(Alt + Enter)删除。







这样的删除能否始终被认为是安全的,并在提交之前自动完成?我们正在考虑添加这样的功能。


类型验证



PhpStorm过去能够解析类型并通过PHPDoc标记中的信息查找违规。使用本地声明,这些可能性得到了扩展。



检查所有内容:属性,参数,返回值。







这在不立即发现违规的复杂代码中特别有用。







伪类型为false



一些旧版功能可能会false在错误时返回例如,这是他们的言行举止strpos()array_search()和310种标准功能。



在这种情况下,可以将返回类型指定为连接的,例如int|bool,但是实际上true它永远不会存在。



对于这种情况,引入了伪类型false它只能在联接中使用。否则,PhpStorm将突出显示无效代码。







重复和冗余类型



类型联合中的许多组合都是被禁止或根本不必要的。例如:



  • bool|false-因为包含假bool;
  • Foo|Fooint|string|INT-重复;
  • object|User-object故意包含其他所有内容;
  • iterable|arrayiterable|Traversable-iterable包括数组和Traversable;
  • void -只能在返回值中使用,并且只能单独使用;
  • falsenull-仅作为协会的一部分。




PhpStorm将突出显示所有此类违规行为。







可空类型



旧语法?Type现在被视为的简写Type|null



但是速记c?不能用于联接中,因为存在无法解决的歧义。



对于此类情况,PhpStorm具有快速修复(Alt + Enter)。







通过继承更改类型



方法有两个规则:



参数类型是convariant,即可以扩展。







返回类型是covariant,即只能缩小。







在这种情况下,类型的顺序无关紧要,并且Type1|Type2等效Type2|Type1



不能更改属性的

类型必须将继承的属性类型减小为父级,例如:







新的控制流引擎



对控制流引擎的更新使我们能够添加新的检查并修复许多旧的错误。因此,PhpStorm可以更好地理解代码。



在某些地方,有可能会注意到新检查中的突出显示和警告。其中一些可能会引起您的注意,因为它们可能是潜在的错误来源。修复其他问题只会使代码更干净。



以下是一些检查示例。



变量始终为true或false来自doctrine / orm的Parser.php

文件中的示例条件始终true。symfony / form中的FormValidator.php文件中的示例Instanceof结果始终true。symfony / monolog-bridgeLogger.php文件中的示例将永远是类型



























$thisResetInterface因为那个在层次结构中更高。







表达式始终

null。symfony / process中的ProcessUtils.php文件中的示例







新操作:键入信息(⌃⇧P / Ctrl + Shift + P)

您可以将插入符号悬停在任何表达式上,然后调用此操作以查看PhpStorm为该表达式推断的类型。可从“查看”菜单| 键入信息或通过热键⌃⇧P / Ctrl + Shift +P。







作曲家改进



从2020.1版开始,所有具有Composer依赖项的操作都可以直接在PhpStorm中的composer.json文件中执行。此版本中有几处改进。



支持自定义存储库Satis / Packagist

如果在“存储库”部分中指定自定义源,则代码完成将可用于其中的所有软件包。软件包和版本信息将缓存在PhpStorm中。







另外,如果指定了多个版本,

如果列出的版本之间用逗号或竖线(||分隔,则PhpStorm现在将正常工作并显示可用选项。







链接到代码和站点

带有信息的弹出窗口中的每个软件包都有指向站点的链接。







代码质量工具设置

如果依赖项列表包含PhpStorm支持的代码质量工具,则在它们对面将有一个扳手图标可转到设置。







改进代码质量工具



顺便说一下,关于优质工具。PhpStorm 2020.2有一些有用的补充。



Docker Compose

支持PHP_CodeSniffer,PHP CS Fixer和PHP Mess Detector可以通过docker compose运行。







PHP_CodeSniffer的例外列表

如果custom中ruleset.xml有一个部分"exclude-pattern",则现在将其考虑在内,并且不会在IDE中分析指定路径上的文件。



通过远程解释器进行格式化

PHP CS Fixer和PHPCBF可以通过SSH,Docker,Docker Compose,Vagrant等与解释器一起运行。



命令行工具



所有Symfony,Laravel Artisan,Drupal Drush,WP-CLI和Composer脚本都可以在PhpStorm中快速运行,而无需打开终端。



为此,请在“工具” |“工具”中添加适当的工具。命令行工具支持



然后,通过单击,Ctrl-Ctrl出现运行任何行行,其中所有具有自动完成功能的命令均可用。



从此版本开始,您甚至不需要为Symfony,Laravel和Drush进行任何配置。打开项目,单击Ctrl-Ctrl并开始输入命令就足够了。







️对于macOS上的Laravel,文件artisan必须是可执行文件(chmod +x artisan)。



此外,现在可以通过任何远程解释器(SSH,Docker,Docker Compose,Vagrant)运行工具。例如,您可以通过从image添加Docker解释器来快速测试PHP 8应用程序php:rc-cli



新的重构:类提取



一开始,类看起来整洁干净。然后,越来越多的新方法和属性被添加到它们中,该类迟早已经“肿胀”,并且在各个方面都承担着过多的责任。



将一堆相关的方法和属性分配到一个新类中可以在这里有所帮助。这正是新的Extract Class重构所提供的。



要尝试它,您需要在类内部单击Ctrl+T并选择Extract ClassPhpStorm将提示您输入新类的名称,您可以立即选择更多方法和类进行检索。







此重构也适用于常规功能。



PHP的更多内容



新检查:键入的属性可能未分配



如果已声明但未初始化类型化的属性,则尝试读取它会导致错误TypeError(除非定义了magic属性__get())。PhpStorm将突出显示来自未初始化属性的读数。







新检查:阵列仅用于写访问



来自doctrine / orm的 文件SchemaTool.php中的示例方法中







的数组$pkColumnsgatherColumns()更新,但从未读取。



自定义生成的getter和setter



现在,您可以通过在camelCase()之间进行选择来自定义方法命名snake_case()



并自定义将它们添加到类的顺序。



这两个选项在“编辑器” |编辑器”中均可用代码样式| 代码生成”选项卡中的PHP







在一个窗口中为许多项目提供正确的分辨率



如果在一个窗口中打开多个项目,则经常会看到该类已定义多次的错误。而当尝试定义一个类时,您仍然必须选择哪个类。



PhpStorm 2020.2没有这些错误,并且过渡按预期进行。







供应商课程的优先级较低



在自动完成列表中,将直接为项目中的类赋予优先级,并且文件夹vendor和PHAR文件中的实体将带有较低的类



将光标添加到所有选中的行



新操作“每条选定行插入插入符号”将光标添加到每条选定行的末尾,并取消选择它。可以使用⌥⇧G/ Alt + Shift + G键来调用。







全面支持GitHub拉取请求



PhpStorm 2018.3中提供了基本的请求请求支持。此后进行了更新,但是仍然需要切换到浏览器进行许多操作。



在PhpStorm 2020.2中,所有拉取请求工作都可以在IDE中完成!







您可以从VCS访问拉请求。 Git |从工具栏或通过单击查看拉取请求Alt+7。第一个是带有搜索和过滤选项的可用请求列表。



单击请求请求将打开有关请求的详细信息:审阅者,标签,更改的文件,时间轴。



整个审核流程可以在此处完成。开始并请求审阅,在行或提交级别对更改进行评论,提交审阅,合并。



检查结果(包括来自CI的检查结果)将显示在时间轴下。



以前,要合并拉取请求,您必须创建一个本地分支。现在,它不是必需的,您可以通过按一个按钮进行合并。



OpenAPI支持



OpenAPI规范 插件可用于所有JetBrains IDE,并且从版本2020.2开始工作。在Open API规范文件(openapi.yaml/openapi.jsonswagger.yaml/ swagger.json)中,它提供了突出显示,增强,验证和导航的功能。



此外,还提供以下选项:



  • 与Swagger UI集成-直接在IDE窗口中呈现。
  • 代码生成。
  • OpenAPI规格的结构差异-允许您快速检测到重大变化。
  • Gatter图标,用于在HTTP客户端中快速创建请求。
  • 在HTTP客户端中完成端点。
  • 重命名重构-如果您在规范中重命名端点,则它将在HTTP客户端的请求中自动重命名。








新的检查小部件



现在,编辑器的右上角显示一个小部件,其中包含当前文件中的问题数量。



使用箭头,您可以快速跳至下一个/上一个问题(之前可以使用F2/键完成Shift+F2)。



在窗口小部件中,您可以选择显示什么级别的问题,例如,仅显示语法错误或所有问题。



通过单击小部件,将打开一个新的“问题”窗口,其中列出了文件中所有检测到的问题。







版本控制



来自WSL 2的Git



PhpStorm现在可以使用WSL Git二进制文件。而且,IDE本身会确定是否安装了WSL,以及其中是否提供了Git。



这些设置可在“首选项” |“选项” 版本控制| Git的



️Git仅适用于WSL2,因为来自WSL1的Git不稳定,并且可能导致Git命令产生错误的结果。



改进的用于比较分支的UI



PhpStorm允许您比较任何分支,并查看哪个提交进入了另一个提交。为此,请从“ VCS”弹出窗口|“可用”中选择任何分支分支并从上下文菜单中选择“与当前比较”



在PhpStorm 2020.2中,日志和提交差异将直接在编辑器中显示。这样可以在屏幕上显示更多信息。







更新的命令对话框



重新设计和统一了Git Merge,Pull和Rebase命令的对话。添加了缺少的选项,现在您可以看到将执行的完整Git命令。



所有命令在VCS | Git的







新动作:删除提交



现在可以直接从PhpStorm中的日志中删除额外的或临时的本地提交。为此,请从commit的上下文菜单中选择Drop Commit







新动作:将提交合并为一个(压缩)



您也可以将多个提交合并为一个。例如,在创建拉取请求之前或在推送更改之前清除历史记录会很方便。



在日志中选择多个提交,然后从上下文菜单中选择Squash Commits...。







对于这两种动作,都在幕后完成git rebase



数据库工具



PhpStorm开箱即用,几乎包含我们同事在DataGrip 2020.2版本概述中涵盖的几乎所有DataGrip功能



网页



而且,一如既往,PhpStorm也包含来自WebStorm 2020.2的所有更新例如,使用插件,Prettier也可以用作PHP文件的默认格式化程序。






可以在“新增功能页面上下载PhpStorm 2020.2



以下是一个视频(英文),显示了该版本的主要功能:





这就是所有时间。感谢您阅读到底!我们将很高兴在评论中提出问题,希望,错误报告和只是想法。



您的JetBrains PhpStorm团队



All Articles