Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Tighten linter for Laravel conventions.

License

NotificationsYou must be signed in to change notification settings

tighten/tlint

Repository files navigation

TLint Logo


Latest Version on Packagist

Install (Requires PHP 8.1+)

NoteTLint is intended to work with the tools included inDuster. To receive the best coverage we recommend using Duster to install and configure TLint.

# Include in projectcomposer require tightenco/tlint --dev# Include globallycomposer global require tightenco/tlint

Upgrade

# Upgrade in projectcomposer update tightenco/tlint#Upgrade globallycomposer global update tightenco/tlint

Upgrading from 8.x to 9.x

TLint 9 requires PHP >= 8.1.

tformat.json has been dropped in favor of a singletlint.json file.

Now linting the following files and directories:

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

To continue excluding these files and directories add them to yourtlint.json file underexcluded.

Upgrading from 7.x to 8.x

A significant number of formatters were added between the 7.x and 8.x releases.If you want to roll these out gradually or disable them altogether, you can use thedisabled setting in yourtlint.json config.

Upgrading from 6.x to 7.x

TLint focuses on linting and formatting issues other tools are not able to catch.The7.x release removes lints and formatters covered by tools inDuster. If you need to add these back you can grab them from an earlier version of TLint and follow theCustom Configuration documentation.

What Is It?

This is an opinionated code linter (with growing support for auto-formatting!) for Tighten flavored code conventions for Laravel and PHP.

For example, Laravel has many available ways to pass variables from a controller to a view:

A)

$value ='Hello, World!';returnview('view',compact('value'));

B)

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

C)

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

In this case TLint will warn if you are not using theB) method.This example is a sort of "meta layer" of code linting, allowing teams to avoid higher level sticking points of code review / discussions.

Usage

For entire project (you must pass the lint command to use other options)

tlint

For individual files and specific directories

tlint lint index.phptlint lint app

You can also lint only diff files by running the following with unstaged git changes

tlint lint --difftlint lint src --diff

Want the output from a file as JSON? (Primarily used for integration with editor plugins)

tlint lint test.php --json

Want the output from a file as acheckstyle XML report? (Primarily used with CI tools likereviewdog andcs2pr)

tlint lint test.php --checkstyle

Want to only run a single linter?

tlint lint --only=ArrayParametersOverViewWith

Example Output

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

Formatting

Using the same conventions as above, but using the format command, you can auto-fix some lints:

tlint format

Linting Configuration

TLint Ships with 2 "preset" styles: Laravel & Tighten.The Laravel preset is intended to match the conventions agreed upon by the Laravel framework contributors, while the Tighten preset is intended to match those agreed upon by Tighten team members.

The default configuration is "tighten" flavored, but you may change this by adding atlint.json file to your project's root directory with the following schema:

You may further customize the linters used by adding specific lint names to the"disabled" list.You may disable linting for specific directories by adding them to the"excluded" list.You may provide custom paths by adding them to the"paths" lists.

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

Custom Configuration & Presets

You can also add your own custom preset and linters by providing a fully-qualified class name as the preset. For example, if you created a custom preset class:

namespaceApp\Support\Linting;useTighten\TLint\Presets\PresetInterface;class Presetimplements PresetInterface{publicfunctiongetLinters() :array  {return [      CustomLinter::class,    ];  }publicfunctiongetFormatters() :array  {return [        CustomFormatter::class,    ];  }}

Then your config could look like:

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

This lets you define custom linting/formatting functionality, or modify the existing linters/formatters to your liking.

Editor Integrations

Available Linters

LinterDescription
ApplyMiddlewareInRoutesApply middleware in routes (not controllers).
ArrayParametersOverViewWithPreferview(..., [...]) overview(...)->with(...).
FullyQualifiedFacadesImport facades using their full namespace.
MailableMethodsInBuildMailable values (from and subject etc) should be set in build().
NoDatesPropertyOnModelsThe$dates property was deprecated in Laravel 8. Use$casts instead.
NoDocBlocksForMigrationUpDownRemove doc blocks from the up and down method in migrations.
NoJsonDirectiveUse blade{{ $model }} auto escaping for models, and double quotes via json_encode over @json blade directive:<vue-comp :values='@json($var)'> -><vue-comp :values="{{ $model }}"> OR<vue-comp :values="{!! json_encode($var) !!}">
NoLeadingSlashesOnRoutePathsNo leading slashes on route paths.
NoRequestAllNorequest()->all(). Userequest()->only(...) to retrieve specific input values.
NoSpaceAfterBladeDirectivesNo space between blade template directive names and the opening paren:@section ( ->@section(
OneLineBetweenClassVisibilityChangesClass members of differing visibility must be separated by a blank line
PureRestControllersYou should not mix restful and non-restful public methods in a controller
QualifiedNamesOnlyForClassNameFully Qualified Class Names should only be used for accessing class names
RemoveLeadingSlashNamespacesPreferNamespace\... over\Namespace\....
RequestHelperFunctionWherePossibleUse the request(...) helper function directly to access request values wherever possible
RequestValidationUserequest()->validate(...) helper function or extract a FormRequest instead of using$this->validate(...) in controllers
SpaceAfterBladeDirectivesPut a space between blade control structure names and the opening paren:@if( ->@if (
SpacesAroundBladeRenderContentSpaces around blade rendered content:{{1 + 1}} ->{{ 1 + 1 }}
UseAnonymousMigrationsPrefer anonymous class migrations.

General PHP

  • OneLineBetweenClassVisibilityChanges
  • QualifiedNamesOnlyForClassName
  • RemoveLeadingSlashNamespaces

Laravel

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

Available Formatters

Notes about formatting

  • Formatting is designed to alter the least amount of code possible.
  • Import related formatters are not designed to alter grouped imports.
FormatterDescription
ArrayParametersOverViewWithPreferview(..., [...]) overview(...)->with(...).
FullyQualifiedFacadesImport facades using their full namespace.
MailableMethodsInBuildMailable values (from and subject etc) should be set in build().
NoDatesPropertyOnModelsUse$casts instead of$dates on Eloquent models.
NoDocBlocksForMigrationUpDownRemoves doc blocks from the up and down method in migrations.
NoLeadingSlashesOnRoutePathsNo leading slashes on route paths.
NoSpaceAfterBladeDirectivesNo space between blade template directive names and the opening paren:@section ( ->@section(
OneLineBetweenClassVisibilityChangesClass members of differing visibility must be separated by a blank line
RemoveLeadingSlashNamespacesPreferNamespace\... over\Namespace\....
RequestHelperFunctionWherePossibleUse the request(...) helper function directly to access request values wherever possible
RequestValidationUserequest()->validate(...) helper function or extract a FormRequest instead of using$this->validate(...) in controllers
SpaceAfterBladeDirectivesPut a space between blade control structure names and the opening paren:@if( ->@if (
SpacesAroundBladeRenderContentSpaces around blade rendered content:{{1 + 1}} ->{{ 1 + 1 }}
UseAnonymousMigrationsPrefer anonymous class migrations.

General PHP

  • OneLineBetweenClassVisibilityChanges
  • RemoveLeadingSlashNamespaces

Laravel

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

Contributing

Please seeCONTRIBUTING for details.

Security

If you discover any security related issues, please emailhello@tighten.co instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please seeLicense File for more information.


[8]ページ先頭

©2009-2025 Movatter.jp