Skip to content

Commit

Permalink
Constants
Browse files Browse the repository at this point in the history
  • Loading branch information
brendt committed Mar 16, 2024
1 parent 7900299 commit 65c1949
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,25 @@
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(
input: 'int $pad_type = STR_PAD_RIGHT,',
output: 'STR_PAD_RIGHT',
)]
#[PatternTest(
input: 'private const BAR = "bar";',
output: 'BAR',
)]
#[PatternTest(
input: 'private const string BAR = ""',
output: 'BAR',
)]
final readonly class TypedConstantNamePattern implements Pattern
final readonly class ConstantNamePattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return 'const\s[\w]+\s(?<match>[\w]+)\s=';
return '\b(?<match>[A-Z_]+)\b';
}

public function getTokenType(): TokenType
Expand Down
29 changes: 0 additions & 29 deletions src/Languages/Php/Patterns/UntypedConstantNamePattern.php

This file was deleted.

6 changes: 2 additions & 4 deletions src/Languages/Php/PhpLanguage.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Tempest\Highlight\Languages\Php\Patterns\AttributeTypePattern;
use Tempest\Highlight\Languages\Php\Patterns\ClassNamePattern;
use Tempest\Highlight\Languages\Php\Patterns\ClassPropertyPattern;
use Tempest\Highlight\Languages\Php\Patterns\ConstantNamePattern;
use Tempest\Highlight\Languages\Php\Patterns\ConstantPropertyPattern;
use Tempest\Highlight\Languages\Php\Patterns\ExtendsPattern;
use Tempest\Highlight\Languages\Php\Patterns\FunctionCallPattern;
Expand All @@ -27,8 +28,6 @@
use Tempest\Highlight\Languages\Php\Patterns\ReturnTypePattern;
use Tempest\Highlight\Languages\Php\Patterns\SinglelineDocCommentPattern;
use Tempest\Highlight\Languages\Php\Patterns\StaticClassCallPattern;
use Tempest\Highlight\Languages\Php\Patterns\TypedConstantNamePattern;
use Tempest\Highlight\Languages\Php\Patterns\UntypedConstantNamePattern;
use Tempest\Highlight\Languages\Php\Patterns\UsePattern;

class PhpLanguage implements Language
Expand Down Expand Up @@ -142,8 +141,7 @@ public function getPatterns(): array
new NestedFunctionCallPattern(),
new FunctionCallPattern(),
new ConstantPropertyPattern(),
new UntypedConstantNamePattern(),
new TypedConstantNamePattern(),
new ConstantNamePattern(),
];
}
}
25 changes: 15 additions & 10 deletions tests/PatternsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,30 @@

namespace Tempest\Highlight\Tests;

use Generator;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;
use ReflectionClass;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;

final class PatternsTest extends TestCase
{
use TestsPatterns;

#[Test]
public function test_patterns_with_attribute()
#[DataProvider('patterns')]
public function test_patterns_with_attribute(Pattern $pattern, PatternTest $patternTest)
{
$this->assertMatches(
pattern: $pattern,
content: htmlentities($patternTest->input),
expected: $patternTest->output,
);
}

public static function patterns(): Generator
{
$patternFiles = glob(__DIR__ . '/../src/Languages/*/Patterns/**.php');

Expand All @@ -29,19 +42,11 @@ public function test_patterns_with_attribute()

$attributes = $reflectionClass->getAttributes(PatternTest::class);

// if ($attributes === []) {
// $this->fail("No #[PatternTest] attribute found on {$reflectionClass->getName()}");
// }

foreach ($attributes as $attribute) {
/** @var PatternTest $patternTest */
$patternTest = $attribute->newInstance();

$this->assertMatches(
pattern: $reflectionClass->newInstance(),
content: htmlentities($patternTest->input),
expected: $patternTest->output,
);
yield [$reflectionClass->newInstance(), $patternTest];
}
}
}
Expand Down

0 comments on commit 65c1949

Please sign in to comment.