Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,31 @@ return FractorConfiguration::configure()
]);
```

### Skipping FileProcessors

If skipping rules, files, or folders is not sufficient, you can also skip entire processors.

#### Example

```php
use a9f\FractorFluid\FluidFileProcessor;
use a9f\FractorHtaccess\HtaccessFileProcessor;
use a9f\FractorTypoScript\TypoScriptFileProcessor;
use a9f\FractorXml\XmlFileProcessor;
use a9f\FractorYaml\YamlFileProcessor;

return FractorConfiguration::configure()
->withSkip([
'*/node_modules',
'*/vendor/*',
FluidFileProcessor::class,
HtaccessFileProcessor::class,
TypoScriptFileProcessor::class,
XmlFileProcessor::class,
YamlFileProcessor::class,
]);
```

### Configure code style

Fractor tries to format the code as good as possible.
Expand Down
5 changes: 5 additions & 0 deletions packages/fractor/src/Application/FractorRunner.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public function __construct(
private FileWriter $fileWriter,
private FileDiffFactory $fileDiffFactory,
private RuleSkipper $ruleSkipper,
private ProcessorSkipper $processorSkipper,
private ChangedFilesDetector $changedFilesDetector,
private ConfigurationRuleFilter $configurationRuleFilter
) {
Expand Down Expand Up @@ -70,6 +71,10 @@ public function run(Configuration $configuration): ProcessResult
$this->symfonyStyle->progressAdvance();
}
foreach ($this->processors as $processor) {
if ($this->processorSkipper->shouldSkip($processor::class)) {
continue;
}

if (! $processor->canHandle($file)) {
continue;
}
Expand Down
28 changes: 28 additions & 0 deletions packages/fractor/src/Application/ProcessorSkipper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

declare(strict_types=1);

namespace a9f\Fractor\Application;

use a9f\Fractor\Application\Contract\FileProcessor;
use a9f\Fractor\Application\Contract\FractorRule;
use a9f\Fractor\Configuration\ValueObject\SkipConfiguration;

final readonly class ProcessorSkipper
{
public function __construct(
private SkipConfiguration $configuration
) {
}

/**
* @param class-string<FileProcessor<FractorRule>> $processor
*/
public function shouldSkip(string $processor): bool
{
$configuredSkip = $this->configuration->getSkip();

// Check if the processor class is directly in the skip array
return in_array($processor, $configuredSkip, true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use a9f\Fractor\Application\Contract\FileProcessor;
use a9f\Fractor\Application\Contract\FractorRule;
use a9f\Fractor\Application\ProcessorSkipper;
use Webmozart\Assert\Assert;

final readonly class AllowedFileExtensionsResolver
Expand All @@ -14,7 +15,8 @@
* @param iterable<FileProcessor<FractorRule>> $processors
*/
public function __construct(
private iterable $processors
private iterable $processors,
private ProcessorSkipper $processorSkipper
) {
Assert::allIsInstanceOf($this->processors, FileProcessor::class);
}
Expand All @@ -26,6 +28,10 @@ public function resolve(): array
{
$fileExtensions = [];
foreach ($this->processors as $processor) {
if ($this->processorSkipper->shouldSkip($processor::class)) {
continue;
}

$fileExtensions = array_merge($processor->allowedFileExtensions(), $fileExtensions);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@
* An instance of the builder can be obtained via {@see FractorConfiguration::configure()} or from an instance
* of {@see ContainerBuilder} passed to the callable returned by fractor.php.
*
* @phpstan-import-type TSkipForRules from SkipConfiguration
* @phpstan-import-type TGlobalSkip from SkipConfiguration
* @phpstan-import-type TSkipConfiguration from SkipConfiguration
*/
final class FractorConfigurationBuilder
{
Expand All @@ -39,7 +38,7 @@ final class FractorConfigurationBuilder
private array $paths = [];

/**
* @var TSkipForRules|TGlobalSkip
* @var TSkipConfiguration
*/
private array $skip = [];

Expand Down Expand Up @@ -163,7 +162,7 @@ public function withPaths(array $paths): self
}

/**
* @param TSkipForRules|TGlobalSkip $skip
* @param TSkipConfiguration $skip
*/
public function withSkip(array $skip): self
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,33 @@

namespace a9f\Fractor\Configuration\ValueObject;

use a9f\Fractor\Application\Contract\FileProcessor;
use a9f\Fractor\Application\Contract\FractorRule;

/**
* The configuration which paths to skip, optionally narrowed to single rules.
* The configuration which paths to skip, optionally narrowed to single rules or processors.
*
* @phpstan-type TSkipForRules array<class-string<FractorRule>, string|list<string>>
* @phpstan-type TSkipForProcessors array<class-string<FileProcessor<FractorRule>>, string|list<string>>
* @phpstan-type TGlobalSkip array<int, string>
* @phpstan-type TProcessorSkip array<int, class-string<FileProcessor<FractorRule>>>
* @phpstan-type TSkipConfiguration TSkipForRules|TSkipForProcessors|TGlobalSkip|TProcessorSkip
*/
final readonly class SkipConfiguration
{
/**
* @param TSkipForRules|TGlobalSkip $skip
* @param TSkipConfiguration $skip
*/
public function __construct(
/**
* @phpstan-var TSkipConfiguration
*/
private array $skip
) {
}

/**
* @return TSkipForRules|TGlobalSkip
* @return TSkipConfiguration
*/
public function getSkip(): array
{
Expand Down
Loading