tightenco/tlint

用于Laravel规范的代码检查工具


README

TLint Logo

Latest Version on Packagist

安装(需要PHP 8.1+)

注意 TLint旨在与Duster工具集配合使用。为了获得最佳覆盖范围,我们建议使用Duster来安装和配置TLint。

# Include in project
composer require tightenco/tlint --dev

# Include globally
composer global require tightenco/tlint

升级

# Upgrade in project
composer update tightenco/tlint

#Upgrade globally
composer global update tightenco/tlint

从8.x升级到9.x

TLint 9需要PHP >= 8.1。

tformat.json已被弃用,改为使用单个tlint.json文件。

现在检查以下文件和目录

  • public/
  • bootstrap/
  • server.php
  • app/Http/Middleware/RedirectIfAuthenticated.php
  • Exceptions/Handler.php
  • app/Http/Controllers/Auth/
  • app/Http/Kernel.php

要继续排除这些文件和目录,请将它们添加到tlint.json文件中的excluded部分。

从7.x升级到8.x

在7.x和8.x版本之间添加了许多格式化工具。如果您想逐步推出这些工具或完全禁用它们,可以在tlint.json配置文件中使用disabled设置。

从6.x升级到7.x

TLint专注于检查其他工具无法捕获的代码问题和格式问题。7.x版本删除了由Duster工具集覆盖的检查和格式化工具。如果您需要重新添加这些工具,可以从TLint的早期版本中获取它们,并遵循自定义配置文档。

它是做什么的?

这是一个针对Tighten风格的Laravel和PHP代码规范的代码检查工具(并逐步支持自动格式化!)。

例如,Laravel有许多方法可以从控制器传递变量到视图

A)

$value = 'Hello, World!';

return view('view', compact('value'));

B)

return view('view', ['value' => 'Hello, World!']);

C)

return view('view')
    ->with('value', 'Hello, World!');

在这种情况下,TLint会警告您没有使用B)方法。这个例子是一种代码检查的“元层”,允许团队避免代码审查/讨论中的高层次问题。

用法

对于整个项目(您必须传递lint命令才能使用其他选项)

tlint

对于单个文件和特定目录

tlint lint index.php
tlint lint app

您还可以通过运行以下命令来检查未提交的git更改中的diff文件

tlint lint --diff
tlint lint src --diff

您想将文件输出作为JSON吗?(主要用于与编辑器插件集成)

tlint lint test.php --json

您想将文件输出作为checkstyle XML报告吗?(主要用于与CI工具如reviewdogcs2pr

tlint lint test.php --checkstyle

您只想运行单个检查器吗?

tlint lint --only=ArrayParametersOverViewWith

示例输出

Linting TestLaravelApp/routes/web.php
============
Lints:
============
! Prefer `view(...)->with(...)` over `view(..., [...])`.
5 : `    return view('test', ['test' => 'test']);``

格式化

使用与上述相同的约定,但使用格式命令,您可以自动修复一些检查问题

tlint format

检查配置

TLint附带2种“预设”风格:Laravel和Tighten。Laravel预设旨在与Laravel框架贡献者达成的约定相匹配,而Tighten预设旨在与Tighten团队成员达成的约定相匹配。

默认配置为“紧致”风格,但您可以通过在项目的根目录中添加一个 tlint.json 文件来更改此设置,其结构如下:

您还可以通过向 "disabled" 列表中添加特定的 linter 名称来自定义使用的 linter。您可以通过将它们添加到 "excluded" 列表中来禁用特定目录的 linting。您还可以通过将它们添加到 "paths" 列表中来提供自定义路径。

{
    "preset": "laravel",
    "disabled": ["ArrayParametersOverViewWith"],
    "excluded": ["tests/"],
    "paths": [
        {
            "controllers": ["app/Domain/Http/Controllers"]
        }
    ]
}

自定义配置 & 预设

您还可以通过提供预设的完全限定类名来添加自己的自定义预设和 linter。例如,如果您创建了一个自定义预设类

namespace App\Support\Linting;

use Tighten\TLint\Presets\PresetInterface;

class Preset implements PresetInterface
{
  public function getLinters() : array
  {
    return [
      CustomLinter::class,
    ];
  }

  public function getFormatters() : array
  {
    return [
        CustomFormatter::class,
    ];
  }
}

那么您的配置可能看起来像这样

{
    "preset": "App\\Support\\Linting\\Preset"
}

这允许您定义自定义的 linting/formatting 功能,或根据您的喜好修改现有的 linter/formatter。

编辑器集成

PHPStorm

Sublime

VSCode

可用 Linter

通用 PHP

  • OneLineBetweenClassVisibilityChanges
  • QualifiedNamesOnlyForClassName
  • RemoveLeadingSlashNamespaces

Laravel

  • ApplyMiddlewareInRoutes
  • ArrayParametersOverViewWith
  • FullyQualifiedFacades
  • MailableMethodsInBuild
  • NoLeadingSlashesOnRoutePaths
  • NoDocBlocksForMigrationUpDown
  • NoJsonDirective
  • NoSpaceAfterBladeDirectives, SpaceAfterBladeDirectives
  • PureRestControllers
  • RequestHelperFunctionWherePossible
  • RequestValidation
  • SpacesAroundBladeRenderContent
  • UseAnonymousMigrations

可用格式化工具

关于格式化的说明

  • 格式化设计为尽可能少地更改代码。
  • 导入相关的格式化工具未设计为更改分组导入。

通用 PHP

  • OneLineBetweenClassVisibilityChanges
  • RemoveLeadingSlashNamespaces

Laravel

  • ArrayParametersOverViewWith
  • FullyQualifiedFacades
  • MailableMethodsInBuild
  • NoDatesPropertyOnModels
  • NoDocBlocksForMigrationUpDown
  • NoLeadingSlashesOnRoutePaths
  • NoSpaceAfterBladeDirectives
  • RequestHelperFunctionWherePossible
  • RequestValidation
  • SpaceAfterBladeDirectives
  • SpacesAroundBladeRenderContent
  • UseAnonymousMigrations

贡献

请参阅 CONTRIBUTING 以获取详细信息。

安全

如果您发现任何与安全相关的问题,请通过电子邮件 hello@tighten.co 而不是使用问题跟踪器。

致谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件