使用 Duster 优化和修复您的 Laravel 代码

发布日期 作者

Lint and Fix Your Laravel Code with Duster image

今天 Tighten 宣布了以 Laravel 为中心的代码 linter 和修复程序 Duster 的 1.0 版本.

Duster 是一款工具,它将 Laravel PintPHP_CodeSnifferPHP-CS-Fixer 和 Tighten 在 Tlint 中的 Laravel 特定 lints 结合在一起,为 Laravel 应用程序提供强大的综合 linting 和修复工具集。

如果您已经阅读过我们关于 共享 PHPCS 规则共享 PHP-CS-Fixer 规则 的文章,那么您已经熟悉了为项目发布自己规则集的想法。Duster 采用 Laravel 在 Pint 中的基本观点,然后通过它捆绑的其他三种工具添加了更多 linter 和修复程序的强大功能。默认情况下,它坚持 Tighten 的代码风格,但它也可以完全配置为您的偏好。

让我们看看如何安装 Duster、如何运行它、如何将其集成到您的自动化工作流程中,以及如何配置它(如果您愿意——您可能对它的默认规则感到满意!)

安装 Duster

您可以通过几种方式在您的应用程序上运行 Duster,但最简单的入门方法是在您的应用程序中将其安装为 Composer 依赖项。

composer require tightenco/duster --dev

您不需要发布或配置任何内容;Duster 附带了一套开箱即用的风格,如果您喜欢它们,它会在安装完成后立即准备就绪。

运行 Duster

Duster 提供两个主要功能:“linting”和“fixing”。Lint 会告诉您代码中的某些内容是否与规则不符;修复会修复该代码。

首先,我们可以做一些基本操作:对整个代码库进行 linting 或修复。

如果我们运行 lint,它将对整个代码库进行 lint,运行所有 linting 工具

./vendor/bin/duster lint

这将为我们提供每个工具的输出,并且,与任何 linter 一样,将返回一个成功或失败代码,可用于 CI 工具或其他脚本中。

我们还可以运行 fix 来告诉所有包含的工具修复它们在整个代码库中可以修复的任何问题

./vendor/bin/duster fix

仅对“脏”文件进行 linting

在将 linter/fixer 引入现有代码库时,它通常看起来很让人不知所措:您需要进行许多小的修复,您可能会倾向于将整个东西都扔掉。

您可以避免对目前没有处理的代码运行任何修复(或获得大量 lint 失败)的一种方法是 Duster 的 --dirty 标志,它只对具有未提交更改的文件运行 linter/fixer。

./vendor/bin/duster lint --dirty
./vendor/bin/duster fix --dirty

为什么修复和 linting?

Duster 以及许多类似的工具提供 linting 和修复功能有两个主要原因。为什么添加 linting,而您可以始终只修复所有内容?

首先,某些团队可能更喜欢一个工作流程,其中不正确的代码作为失败的构建(例如作为 GitHub Action)显示,而不是被修复。

其次,某些 lint 无法自动修复。计算机可以判断您的代码是否已损坏,但它不够智能,无法为您修复它。

将 Duster 集成到您的 CI 中

与大多数代码分析工具一样,Duster 的 lint 命令根据 lint 是否成功返回成功或错误代码。这意味着您可以在任何 CI 管道中使用 ./vendor/bin/duster lint,如果您的 lint 未匹配,则会使您的构建失败。您还可以将 ./vendor/bin/duster fix 用作 Husky 钩子或 CI 钩子的部分,以自动格式化您的代码。

如果您使用 GitHub Actions,Duster 可以轻松发布一个操作配置,该配置将对您的代码进行 lintfix。运行 ./vendor/bin/duster github-actions 并按照那里的提示将 GitHub Action 添加到您的代码库中。

配置 Duster(及其工具)

与 Pint 一样,Duster 体现了其创建者(Tighten)关于代码风格的观点。但 Duster 本身以及它导入的每个工具都可以根据您的喜好进行配置。

duster.json

Duster 提供自己的配置文件 duster.json。该文件允许您定义要 includeexclude 的文件和文件夹,这些文件和文件夹来自它默认情况下针对的 Laravel 默认文件。您也可以使用它来定义您希望在 duster 流中运行的额外脚本。

例如,您可以在 lint 命令中添加 PHPStan,使用以下 duster.json

{
"scripts": {
"lint": {
"phpstan": ["./vendor/bin/phpstan", "analyse"]
}
}
}

您也可以定义您自己的 fix 命令的自定义添加。

Duster 的依赖项

您可以使用它们的本地配置文件来配置 Duster 的每个依赖项;您可以在 Duster 自述文件的“自定义”部分 中了解有关如何操作的更多信息。

  • Pint:pint.json
  • PHP_CodeSniffer:.phpcs.xml.dist
  • PHP-CS-Fixer:.php-cs-fixer.dist.php
  • Tlint:tlint.json

总结

就是这样!总之,Duster 是一款用于检查和修复 Laravel 应用程序中代码风格问题的工具。它有自己的观点,开箱即用地遵循 Tighten 的首选标准,但它也可以配置为您喜欢的任何内容——包括您自己的自定义标准,如果您已经发布了它们。

Matt Stauffer photo

Tighten 的联合创始人兼首席执行官。 Laravel:快速入门 的作者以及 Laravel 播客Laravel 商业播客 的主持人。

Cube

Laravel 时事通讯

加入 40,000 多名其他开发人员,不错过任何新提示、教程等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动补全和对本地和生产环境的即时反馈进行调试。

Tinkerwell
No Compromises logo

绝不妥协

Joel 和 Aaron,来自绝不妥协播客的两名经验丰富的开发人员,现在可以为您的 Laravel 项目聘用。⬧ 固定价格为 7500 美元/月。⬧ 没有冗长的销售流程。⬧ 没有合同。⬧ 100% 退款保证。

绝不妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

转换

运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,让您的应用程序保持新鲜。

转换
Bacancy logo

Bacancy

只需 2500 美元/月,即可用经验丰富的 Laravel 开发人员(4-6 年经验)为您的项目提供强大支持。获得 160 小时的专业知识和 15 天的无风险试用。立即安排电话会议!

Bacancy
Lucky Media logo

Lucky Media

立即获得 Lucky - Laravel 开发的理想选择,拥有十多年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar: Laravel 电子商务

Laravel 的电子商务。一个开源包,将现代无头电子商务功能的强大功能带入 Laravel。

Lunar: Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 职位板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动套件

SaaSykit 是一个 Laravel SaaS 启动套件,包含运行现代 SaaS 所需的所有功能。支付、精美结账、管理面板、用户仪表板、身份验证、即用型组件、统计信息、博客、文档等等。

SaaSykit:Laravel SaaS 启动套件
Rector logo

Rector

您无缝 Laravel 升级的合作伙伴,降低成本,加快创新,帮助企业取得成功

Rector
MongoDB logo

MongoDB

通过强大的 MongoDB 和 Laravel 集成增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务性、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解灵活、现代的 MongoDB 数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的零依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

在您的 Laravel 应用程序中添加 Swagger UI

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel Prompts 构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包在您的 Laravel 应用程序中添加评论

阅读文章