Skip to content

Commit 834ad74

Browse files
committed
misc
1 parent 29fc000 commit 834ad74

File tree

3 files changed

+48
-8
lines changed

3 files changed

+48
-8
lines changed

src/Analyzer/MaskAnalyzer.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Behastan\Analyzer;
6+
7+
final class MaskAnalyzer
8+
{
9+
/**
10+
* @var string
11+
*/
12+
private const MASK_REGEX = '#(\:[\W\w]+)#';
13+
14+
public static function isRegex(string $rawMask): bool
15+
{
16+
if (str_starts_with($rawMask, '/')) {
17+
return true;
18+
}
19+
20+
return str_ends_with($rawMask, '#');
21+
}
22+
23+
public static function isValueMask(string $rawMask): bool
24+
{
25+
preg_match(self::MASK_REGEX, $rawMask, $match);
26+
27+
return $match !== [];
28+
}
29+
}

src/Command/StatsCommand.php

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Behastan\Command;
66

77
use Behastan\Analyzer\ClassMethodContextDefinitionsAnalyzer;
8+
use Behastan\Analyzer\MaskAnalyzer;
89
use Behastan\Finder\BehatMetafilesFinder;
910
use Behastan\UsedInstructionResolver;
1011
use Symfony\Component\Console\Command\Command;
@@ -59,14 +60,24 @@ protected function execute(InputInterface $input, OutputInterface $output): int
5960
$featureInstructions = $this->usedInstructionResolver->resolveInstructionsFromFeatureFiles($featureFiles);
6061
$classMethodContextDefinitions = $this->classMethodContextDefinitionsAnalyzer->resolve($contextFiles);
6162

62-
foreach ($classMethodContextDefinitions as $i => $classMethodContextDefinition) {
63-
$section = sprintf('%d) %s', $i + 1, $classMethodContextDefinition->getMask());
64-
$this->symfonyStyle->section($section);
63+
$i = 0;
64+
foreach ($classMethodContextDefinitions as $classMethodContextDefinition) {
65+
// @todo handle later, as dynamic
66+
if (MaskAnalyzer::isRegex($classMethodContextDefinition->getMask())) {
67+
continue;
68+
}
69+
70+
if (MaskAnalyzer::isValueMask($classMethodContextDefinition->getMask())) {
71+
continue;
72+
}
73+
74+
$this->symfonyStyle->writeln(sprintf('%d) <fg=green>%s</>', $i + 1, $classMethodContextDefinition->getMask()));
6575

6676
$classMethodContextDefinition->recordUsage($featureInstructions);
6777

6878
$this->symfonyStyle->writeln(' * ' . $classMethodContextDefinition->getUsageCount() . ' usages');
69-
$this->symfonyStyle->newLine(2);
79+
$this->symfonyStyle->newLine();
80+
++$i;
7081
}
7182

7283
return Command::SUCCESS;

src/DefinitionMasksResolver.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Behastan;
66

7+
use Behastan\Analyzer\MaskAnalyzer;
78
use Behastan\PhpParser\SimplePhpParser;
89
use Behastan\Resolver\ClassMethodMasksResolver;
910
use Behastan\ValueObject\ClassMethodContextDefinition;
@@ -19,6 +20,7 @@
1920

2021
final class DefinitionMasksResolver
2122
{
23+
2224
public function __construct(
2325
private readonly SimplePhpParser $simplePhpParser,
2426
private readonly NodeFinder $nodeFinder,
@@ -50,7 +52,7 @@ public function resolve(array $contextFiles): MaskCollection
5052
}
5153

5254
// regex pattern, handled else-where
53-
if (str_starts_with($rawMask, '/')) {
55+
if (MaskAnalyzer::isRegex($rawMask)) {
5456
$masks[] = new RegexMask(
5557
$rawMask,
5658
$classMethodContextDefinition->getFilePath(),
@@ -61,9 +63,7 @@ public function resolve(array $contextFiles): MaskCollection
6163
}
6264

6365
// handled in mask one
64-
preg_match('#(\:[\W\w]+)#', $rawMask, $match);
65-
66-
if ($match !== []) {
66+
if (MaskAnalyzer::isValueMask($rawMask)) {
6767
// if (str_contains($rawMask, ':')) {
6868
$masks[] = new NamedMask(
6969
$rawMask,

0 commit comments

Comments
 (0)