friendsoftwig/twigcs 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

friendsoftwig/twigcs

Composer 安装命令:

composer require friendsoftwig/twigcs

包简介

Checkstyle automation for Twig

README 文档

README

Integrate

Code Coverage

Latest Stable Version Total Downloads Monthly Downloads

The missing checkstyle for twig!

Twigcs aims to be what phpcs is to php. It checks your codebase for violations on coding standards.

How to install

Run

composer require --dev friendsoftwig/twigcs

to install friendsoftwig/twigcs with composer.

Run

phive install friendsoftwig/twigcs

to install friendsoftwig/twigcs with phive.

How to run

Basically, just run:

twigcs /path/to/views

On Symfony projects, you can run, for instance:

twigcs /project/dir/app/Resources/views

You will get a summary of the violations in the console. The exit code of the command is based on the severity of any violation found. By default, twigcs only tolerates info, this can be changed at run time:

twigcs /path/to/views --severity error   # Allows info and warnings
twigcs /path/to/views --severity warning # Allows info
twigcs /path/to/views --severity info    # Disallows info
twigcs /path/to/views --severity ignore  # Allows everything

With the example above, info is still displayed but not altering the exit code.

You can also exclude relative subfolders of path like this:

twigcs /path/to/views --exclude vendor

Tips: You can use multiple exclude parameters.

Restricting output

By default TwigCS will output all lines that have violations regardless of whether they match the severity level specified or not. If you only want to see violations that are greater than or equal to the severity level you've specified you can use the --display option. For example.

twigcs /path/to/views --severity error --display blocking

Would only display errors and not warnings.

Alternatively you can use --display all which is the default behaviour as described above.

Continuous Integration

Twigcs can be used with your favorite CI server. The command itself will return a consistent exit code telling the CI job if it failed or succeeded. You can also have a nice xml report (checkstyle format):

twigcs /path/to/views --reporter checkstyle > /path/to/report.xml

Reporters

Twigcs currently supports to following reporters:

twigcs /path/to/views --reporter console
twigcs /path/to/views --reporter checkstyle
twigcs /path/to/views --reporter junit
twigcs /path/to/views --reporter emacs
twigcs /path/to/views --reporter json
twigcs /path/to/views --reporter csv
twigcs /path/to/views --reporter githubAction
twigcs /path/to/views --reporter gitlab

Using older twig versions

By default twigcs is using Twig 3. This means that features like filter tags or filtered loops using if are not supported anymore. You can use an older twig version using the twig-version option:

twigcs /path/to/views --twig-version 2

Custom coding standard

At the moment the only available standard is the official one from twig.

You can create a class implementing RulesetInterface and supply it as a --ruleset option to the CLI script:

twigcs /path/to/views --ruleset \MyApp\TwigCsRuleset

Note: twigcs needs to be used via composer and the ruleset class must be reachable via composer's autoloader for this feature to work. Also note that depending on your shell, you might need to escape backslashes in the fully qualified class name:

twigcs /path/to/views --ruleset \\MyApp\\TwigCsRuleset

For more complex needs, have a look at the custom ruleset documentation.

File-based configuration

Using configuration, you can easily store per-project settings:

// ~/.twig_cs.dist.php
<?php

declare(strict_types=1);

use FriendsOfTwig\Twigcs;

return Twigcs\Config\Config::create()
    ->setName('my-config')
    ->setSeverity('warning')
    ->setReporter('json')
    ->setRuleSet(Twigcs\Ruleset\Official::class)
    ->setSpecificRuleSets([ // Every file matching the pattern will use a different ruleset.
        '*/template.html.twig' => Acme\Project\CustomRuleset::class,
    ])
;

This configuration will be applied if you call twigcs from the ~/ directory. If you run twigcs from outside this directory, you must use the --config option:

cd ~/dirA
twigcs --config ~/dirB/.twig_cs.dist.php # Will lint templates in ~/dirA with the config of ~/dirB

By default, the files

  • .twig_cs.php
  • .twig_cs
  • .twig_cs.dist.php
  • .twig_cs.dist

are looked up in your current working directory (CWD).

You can also provide finders inside config files, they will completely replace the path in the CLI:

// ~/.twig_cs.dist.php
<?php

declare(strict_types=1);

use FriendsOfTwig\Twigcs;

$finderA = Twigcs\Finder\TemplateFinder::create()->in(__DIR__.'/dirA');
$finderB = Twigcs\Finder\TemplateFinder::create()->in(__DIR__.'/dirB');

return Twigcs\Config\Config::create()
    // ...
    ->addFinder($finderA)
    ->addFinder($finderB)
    ->setName('my-config')
;

In this case, calling twigcs from the ~/ directory of the config will run the linter on the directories pointed by the finders. If you explicitly supply a path to the CLI, it will be added to the list of linted directories:

twigcs ~/dirC # This will lint ~/dirA, ~/dirB and ~/dirC using the configuration file of the current directory.

Template resolution

Using file based configuration, you can provide a way for twigcs to resolve template. This enables better unused variable/macro detection. Here's the simplest example when you have only one directory of templates.

<?php

declare(strict_types=1);

use FriendsOfTwig\Twigcs;

return Twigcs\Config\Config::create()
    // ...
    ->setTemplateResolver(new Twigcs\TemplateResolver\FileResolver(__DIR__))
    ->setRuleSet(FriendsOfTwig\Twigcs\Ruleset\Official::class)
;

Here is a more complex example that uses a chain resolver and a namespaced resolver to handle vendor templates:

<?php

declare(strict_types=1);

use FriendsOfTwig\Twigcs;

return Twigcs\Config\Config::create()
    ->setFinder($finder)
    ->setTemplateResolver(new Twigcs\TemplateResolver\ChainResolver([
        new Twigcs\TemplateResolver\FileResolver(__DIR__ . '/templates'),
        new Twigcs\TemplateResolver\NamespacedResolver([
            'acme' =>  new Twigcs\TemplateResolver\FileResolver(__DIR__ . '/vendor/Acme/AcmeLib/templates')
        ]),
    ]))
;

This handles twig namespaces of the form @acme/<templatepath>.

Upgrading

If you're upgrading from 3.x to 4.x or later, please read the upgrade guide.

Community

Join us on Symfony Devs via the twigcs channel.

Changelog

Please have a look at CHANGELOG.md.

Contributing

The main branch is the development branch. If you find any bug or false positive during style checking, please open an issue or submit a pull request.

When creating or changing a class, don't forget to add you as an @author at the top of the file.

Please have a look at CONTRIBUTING.md.

friendsoftwig/twigcs 适用场景与选型建议

friendsoftwig/twigcs 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 6.55M 次下载、GitHub Stars 达 358, 最近一次更新时间为 2019 年 06 月 07 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 friendsoftwig/twigcs 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 friendsoftwig/twigcs 我们能提供哪些服务?
定制开发 / 二次开发

基于 friendsoftwig/twigcs 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 6.55M
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 359
  • 点击次数: 22
  • 依赖项目数: 63
  • 推荐数: 4

GitHub 信息

  • Stars: 358
  • Watchers: 33
  • Forks: 35
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-06-07