5

我正在尝试运行 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.

克服这将解决我的问题

4

1 回答 1

3

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

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

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

假设您有以下结构: $ ls -lR .: total 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)
于 2017-05-05T18:50:58.923 回答