I am trying to run PHP CS Fixer, which I believe is based on Symfony (which I am not familiar with), and having a problem with excluding some paths.
My setup is below:
$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')
;
Basically, I will like to exclude:
modules/ANYNAME/lib/ANYFILE
modules/ANYNAME/lib/ANYSUBDIR/ANYFILE
But I find that the ->exclude('modules/*/lib')
line is not catching these. For instance, modules/somemodule/lib/somefile.inc
is still processed.
I had thought that this was because I had ->name('*.inc')
but it seems to happen with or without that line.
The other excludes work fine except the ->exclude('modules/*/lib')
one.
Any pointers?
** Correction/Update **
It does seem that the issue is with the name selector. Seems it is not allowed to select *.inc
using name
for instance and then try to exclude those found in modules/xyz/lib
.
Overcoming this would solve my issue
PHP CS Fixer could accept any iterable as finder. Indeed, default one is just a symfony/finder (https://github.com/symfony/finder/blob/master/Finder.php).
As you can see,
exclude
is not accepting a glob. You could use, eg,notPath
:Let say you have following structure: $ 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 modules
Even when all of that 3 files violates coding standards, only one (not excluded by finder) would be fixed: