diff --git a/app/Concerns/ConfiguresForLintOrFix.php b/app/Concerns/ConfiguresForLintOrFix.php index 3b85565..7b40575 100644 --- a/app/Concerns/ConfiguresForLintOrFix.php +++ b/app/Concerns/ConfiguresForLintOrFix.php @@ -36,6 +36,11 @@ protected function configure(): void mode: InputOption::VALUE_REQUIRED, description: 'Only fix files that have changed since branching off from the given branch', ), + new InputOption( + name: 'exclude', + mode: InputOption::VALUE_REQUIRED, + description: 'Exclude paths (comma separated)', + ), ] ); } diff --git a/app/Providers/DusterServiceProvider.php b/app/Providers/DusterServiceProvider.php index 9132088..564087e 100644 --- a/app/Providers/DusterServiceProvider.php +++ b/app/Providers/DusterServiceProvider.php @@ -21,13 +21,14 @@ public function register(): void }; $dusterConfig = DusterConfig::loadLocal(); + $excludeFromCli = array_filter(explode(',', (string) $input->getOption('exclude'))); return new DusterConfig([ 'paths' => Project::paths($input), 'using' => $input->getOption('using'), 'mode' => $mode, 'include' => $dusterConfig['include'] ?? [], - 'exclude' => $dusterConfig['exclude'] ?? [], + 'exclude' => array_merge($dusterConfig['exclude'] ?? [], $excludeFromCli), 'scripts' => $dusterConfig['scripts'] ?? [], ]); }); diff --git a/app/Providers/PintServiceProvider.php b/app/Providers/PintServiceProvider.php index 969f4b0..00a3eee 100644 --- a/app/Providers/PintServiceProvider.php +++ b/app/Providers/PintServiceProvider.php @@ -68,9 +68,9 @@ public function register(): void base_path('standards/pint.json'), ])->first(fn ($path) => file_exists($path)); - $dusterConfig = DusterConfig::scopeConfigPaths(DusterConfig::loadLocal()); + $dusterConfig = resolve(DusterConfig::class); - return new PintConfigurationJsonRepository($config, null, $dusterConfig['exclude']); + return new PintConfigurationJsonRepository($config, null, $dusterConfig->get('exclude', [])); }); $this->app->singleton(PathsRepository::class, fn () => new GitPathsRepository( diff --git a/tests/Feature/LintCommandTest.php b/tests/Feature/LintCommandTest.php index 8076fab..1c44af8 100755 --- a/tests/Feature/LintCommandTest.php +++ b/tests/Feature/LintCommandTest.php @@ -141,6 +141,18 @@ ->not->toContain('Linting using PHP CS Fixer'); }); +it('excludes paths passed via --exclude option', function () { + [$statusCode, $output] = run('lint', [ + 'path' => base_path('tests'), + '--exclude' => 'Fixtures/PintFixableIssues', + '--using' => 'pint', + ]); + + expect($output) + ->toContain('Linting using Pint') + ->not->toContain('PintFixableIssues'); +}); + it('lints multiple provided files', function () { [$statusCode, $output] = run('lint', [ 'path' => [