• Stars
    star
    177
  • Rank 208,360 (Top 5 %)
  • Language
    PHP
  • License
    MIT License
  • Created almost 3 years ago
  • Updated 10 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A tool to automatically fix Twig Coding Standards issues

Twig CS Fixer

PHP Version Latest Stable Version License Actions Status Coverage Type Coverage Infection MSI

Installation

This standard can be installed with Composer.

Add the coding standard as a dependency of your project

composer require --dev vincentlanglet/twig-cs-fixer

Then, use it!

vendor/bin/twig-cs-fixer lint /path/to/code
vendor/bin/twig-cs-fixer lint --fix /path/to/code

Twig Coding Standard Rules

From the official one.

Delimiter spacing

Ensures there is a single space after a delimiter opening ({{, {% and {#) and before a delimiter closing (}}, %} and #}).

When using a whitespace control character, do not put any spaces between it and the delimiter.

Operator spacing

Ensures there is a single space before and after the following operators: comparison operators (==, !=, <, >, >=, <=), math operators (+, -, /, *, %, //, **), logic operators (not, and, or), ~, is, in, and the ternary operator (?:).

Removes any space before and after the .. operator.

Punctuation spacing

Ensures there is a single space after : in hashes and , in arrays and hashes.

Removes any space after an opening parenthesis and before a closing parenthesis in expressions.

Removes any space before and after the following operators: |, ., [].

Removes any space before and after parenthesis in filter and function calls.

Removes any space before and after opening and closing of arrays and hashes.

Custom configuration

Standard

By default, the twig-cs-fixer standard is enabled with the twig coding standard rules and the following rules:

  • BlankEOFRule: ensures that files end with one blank line.
  • BlockNameSpacingRule: ensure there is one space before and after block names.
  • EmptyLinesRule: ensures that 2 empty lines do not follow each other.
  • IndentRule: ensures that files are not indented with tabs.
  • TrailingCommaSingleLineRule: ensures that single-line arrays, objects and argument lists do not have a trailing comma.
  • TrailingSpaceRule: ensures that files have no trailing spaces.

If you want to use the basic Twig standard, another standard and/or add/disable a rule, you can provide your own configuration with a .twig-cs-fixer.php file which returns a TwigCsFixer\Config\Config class:

<?php

$ruleset = new TwigCsFixer\Ruleset\Ruleset();
$ruleset->addStandard(new TwigCsFixer\Standard\Twig());
$ruleset->addRule(\TwigCsFixer\Rules\Whitespace\EmptyLinesRule::class);

$config = new TwigCsFixer\Config\Config();
$config->setRuleset($ruleset);

return $config;

If your config is not located in your current directory, you can specify its path using --config when running the command:

vendor/bin/twig-cs-fixer lint --config=dir/.twig-cs-fixer.php /path/to/code

Files

By default, all .twig files in the current directory are linted, except the ones in the vendor directory.

If you want to lint specific files or directories you can pass them as argument. If you want a more sophisticated rule, you can configure it in the .twig-cs-fixer.php file:

<?php

$finder = new TwigCsFixer\File\Finder();
$finder->exclude('myCustomDirectory');

$config = new TwigCsFixer\Config\Config();
$config->setFinder($finder);

return $config;

Cache

By default, cache is enabled and stored in .twig-cs-fixer.cache. Further runs are therefore much faster. Cache is invalidated when a different PHP version, twig-cs-fixer version or ruleset is used.

If you want a custom cache location you can configure it in .twig-cs-fixer.php:

<?php

$config = new TwigCsFixer\Config\Config();
$config->setCacheFile('/tmp/.twig-cs-fixer.cache');

return $config;

To disable cache you can either pass --no-cache when running the command:

vendor/bin/twig-cs-fixer lint --no-cache

or set the cache file to null in your config:

<?php

$config = new TwigCsFixer\Config\Config();
$config->setCacheFile(null);

return $config;

Token parser

If you're using custom token parsers or binary/unary operators, they can be added in your config:

<?php

$config = new TwigCsFixer\Config\Config();
$config->addTwigExtension(new App\Twig\CustomTwigExtension());
$config->addTokenParser(new App\Twig\CustomTokenParser());

return $config;

Reporter

The --report option allows to choose the output format for the linter report.

Supported formats are:

  • text selected by default.
  • checkstyle following the common checkstyle XML schema.
  • github if you want annotations on GitHub actions.
  • junit following JUnit schema XML from Jenkins.
  • null if you don't want any reporting.