我正在尝试运行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
中找到的内容。
克服这个问题可以解决我的问题
答案 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)