Symfony Finder排除了glob

时间:2017-05-05 07:24:25

标签: php symfony php-cs-fixer symfony-finder

我正在尝试运行PHP CS Fixer,我认为它基于Symfony(我不熟悉),并且在排除某些路径方面存在问题。

我的设置如下:

$finder = PhpCsFixer\Finder::create()
    ->in(__DIR__)
    ->exclude('lib/adodb')
    ->exclude('lib/bbcode')
    ->exclude('lib/joomla')
    ->exclude('lib/JSON')
    ->exclude('lib/pear')
    ->exclude('lib/phpass')
    ->exclude('lib/smarty')
    ->exclude('lib/smtp')
    ->exclude('modules/*/lib')  
    ->name('*.class')
    ->name('*.inc')
    ->name('*.php')
;

基本上,我想排除:

modules/ANYNAME/lib/ANYFILE
modules/ANYNAME/lib/ANYSUBDIR/ANYFILE

但是我发现->exclude('modules/*/lib')行没有抓住这些。例如,modules/somemodule/lib/somefile.inc仍在处理中。

我原以为这是因为我有->name('*.inc'),但似乎有或没有那条线。

->exclude('modules/*/lib')之外,其他工作正常。

任何指针?

**更正/更新**

似乎问题出在名称选择器上。似乎不允许使用*.inc选择name,然后尝试排除modules/xyz/lib中找到的内容。

克服这个问题可以解决我的问题

1 个答案:

答案 0 :(得分:3)

PHP CS Fixer可以接受任何可迭代的查找程序。 实际上,默认的只是一个symfony / finder(https://github.com/symfony/finder/blob/master/Finder.php)。

如您所见,exclude不接受全局。 您可以使用,例如notPath

$finder = PhpCsFixer\Finder::create()
    ->in(__DIR__)
    ->notPath('#modules/.*/lib#')
    ->name('*.inc');

假设您有以下结构:     $ ls -lR     。:     总共8     drwxr-xr-x 2 keradus keradus 4096 Mai 5 20:32 a     drwxr-xr-x 3 keradus keradus 4096 Mai 5 20:31模块

./a:
total 4
-rw-r--r-- 1 keradus keradus 24 Mai  5 20:35 a.inc

./modules:
total 4
drwxr-xr-x 3 keradus keradus 4096 Mai  5 20:31 ANYNAME

./modules/ANYNAME:
total 4
drwxr-xr-x 3 keradus keradus 4096 Mai  5 20:31 lib

./modules/ANYNAME/lib:
total 8
-rw-r--r-- 1 keradus keradus   24 Mai  5 20:35 b.inc
drwxr-xr-x 2 keradus keradus 4096 Mai  5 20:32 sub

./modules/ANYNAME/lib/sub:
total 4
-rw-r--r-- 1 keradus keradus 24 Mai  5 20:35 c.inc

即使所有3个文件都违反了编码标准,也只会修复一个(未被发现者排除):

$ php-cs-fixer fix --dry-run -vvv
Loaded config default from "/home/keradus/tmp/.php_cs.dist".
F
Legend: ?-unknown, I-invalid file syntax, file ignored, S-Skipped, .-no changes, F-fixed, E-error
   1) a/a.inc (braces)