2017-05-05 109 views
2

我想運行PHP CS Fixer,我相信它是基於Symfony(我不熟悉),並且排除某些路徑時出現問題。Symfony Finder排除與glob

我的設置是如下:

$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')之一。

任何指針?

**更正/更新**

看起來問題在於名稱選擇器。似乎不允許使用name作爲例子選擇*.inc,然後嘗試排除在modules/xyz/lib中找到的那些。

克服這個問題將解決我的問題

+0

有'notPath()'方法http://api.symfony.com/3.2/Symfony/Component/Finder/Finder.html#method_notPath它會工作嗎? –

+0

謝謝。做了一些測試,似乎問題出在'name'選擇器上。似乎不允許使用'name'來選擇'* .inc',然後嘗試排除在'modules/xyz/lib'中找到的那些' – Dayo

+0

@Dayo我有點迷路,所以我的理解是正確的?你想排除'modules'下的所有內容? – BentCoder

回答

1

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 : 共8 drwxr-XR-X 2個keradus keradus 4096麥5 20:32一 drwxr-XR-×3個keradus keradus 4096麥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) 
+0

接受對這個最小設置的測試按照說明進行。需要弄清楚爲什麼我的實際設置仍然存在問題。 – Dayo