2017-05-05 6 views
2

私はsymfony(これは私が慣れていない)に基づいていると思われるPHP CS Fixerを実行しようとしていて、いくつかのパスを除外する際に問題があります。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フィクサーは、ファインダとしての任意のiterableを受け入れることができる、私の問題を解決するだろう。 実際、デフォルトのsymfony/finder(https://github.com/symfony/finder/blob/master/Finder.php)です。

ご覧のとおり、excludeはグロブを受け入れていません。 あなたが使用することができ、例えば、notPath: $のls -lR :

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

みましょうあなたが構造を以下していると言う。合計drwxr-XR-X 2 keradusのkeradus 4096チェンマイ5 20時32 drwxr-XR-X 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

関連する問題