diff --git a/psalm.xml b/psalm.xml index 510148d..feccc34 100644 --- a/psalm.xml +++ b/psalm.xml @@ -14,4 +14,7 @@ + + + diff --git a/src/Expansion.php b/src/Expansion.php index 7c6f372..ef22bac 100644 --- a/src/Expansion.php +++ b/src/Expansion.php @@ -37,6 +37,7 @@ private function __construct( * * @param Sequence $expressions */ + #[\NoDiscard] public static function of(Str $template, Sequence $expressions): self { return new self( @@ -53,6 +54,7 @@ public static function of(Str $template, Sequence $expressions): self * * @param non-empty-string $name */ + #[\NoDiscard] public function with(string $name, string ...$values): self { if (\count($values) === 1) { @@ -80,6 +82,7 @@ public function with(string $name, string ...$values): self * @param non-empty-string $name * @param array{string, string} ...$keys */ + #[\NoDiscard] public function withKeys(string $name, array ...$keys): self { return new self( @@ -94,6 +97,7 @@ public function withKeys(string $name, array ...$keys): self ); } + #[\NoDiscard] public function expand(): Url { $url = $this->expressions->reduce( diff --git a/src/Expression.php b/src/Expression.php index 9c6c6a2..cdfb7e9 100644 --- a/src/Expression.php +++ b/src/Expression.php @@ -15,6 +15,7 @@ */ interface Expression { + #[\NoDiscard] public function expansion(): Expression\Expansion; /** @@ -22,11 +23,15 @@ public function expansion(): Expression\Expansion; * @param Map> $lists * @param Map> $keys */ + #[\NoDiscard] public function expand(Map $values, Map $lists, Map $keys): string; /** * @return Attempt */ + #[\NoDiscard] public function regex(): Attempt; + + #[\NoDiscard] public function toString(): string; } diff --git a/src/Expression/Expansion.php b/src/Expression/Expansion.php index 310cc2f..385448f 100644 --- a/src/Expression/Expansion.php +++ b/src/Expression/Expansion.php @@ -23,6 +23,7 @@ enum Expansion /** * @psalm-pure */ + #[\NoDiscard] public static function matchesLevel4(Str $value): bool { return $value->matches(\sprintf( @@ -32,6 +33,7 @@ public static function matchesLevel4(Str $value): bool )); } + #[\NoDiscard] public function clean(Str $value): Str { $drop = match ($this) { @@ -42,11 +44,13 @@ public function clean(Str $value): Str return $value->drop($drop)->dropEnd(1); } + #[\NoDiscard] public function cleanExplode(Str $value): Str { return $this->clean($value)->dropEnd(1); } + #[\NoDiscard] public function matches(Str $value): bool { return $value->matches(\sprintf( @@ -56,6 +60,7 @@ public function matches(Str $value): bool )); } + #[\NoDiscard] public function matchesExplode(Str $value): bool { return $value->matches(\sprintf( @@ -65,6 +70,7 @@ public function matchesExplode(Str $value): bool )); } + #[\NoDiscard] public function matchesLimit(Str $value): bool { return $value->matches(\sprintf( @@ -74,6 +80,7 @@ public function matchesLimit(Str $value): bool )); } + #[\NoDiscard] public function matchesMany(Str $value): bool { return $value->matches(\sprintf( @@ -84,6 +91,7 @@ public function matchesMany(Str $value): bool )); } + #[\NoDiscard] public function continuation(): self { return match ($this) { @@ -92,6 +100,7 @@ public function continuation(): self }; } + #[\NoDiscard] public function separator(): string { return match ($this) { @@ -102,6 +111,7 @@ public function separator(): string }; } + #[\NoDiscard] public function separatorRegex(): string { return match ($this->separator()) { @@ -110,6 +120,7 @@ public function separatorRegex(): string }; } + #[\NoDiscard] public function explodeSeparator(): string { return match ($this) { @@ -119,6 +130,7 @@ public function explodeSeparator(): string }; } + #[\NoDiscard] public function regex(): string { return match ($this) { @@ -127,6 +139,7 @@ public function regex(): string }; } + #[\NoDiscard] public function toString(): string { return match ($this) { diff --git a/src/Expression/Level3/NamedValues.php b/src/Expression/Level3/NamedValues.php index 10f3b24..702431c 100644 --- a/src/Expression/Level3/NamedValues.php +++ b/src/Expression/Level3/NamedValues.php @@ -36,6 +36,7 @@ private function __construct( * * @param Sequence $names */ + #[\NoDiscard] public static function parameters(Sequence $names): self { return new self(Expansion::parameter, $names, true); @@ -46,6 +47,7 @@ public static function parameters(Sequence $names): self * * @param Sequence $names */ + #[\NoDiscard] public static function query(Sequence $names): self { return new self(Expansion::query, $names, false); @@ -56,6 +58,7 @@ public static function query(Sequence $names): self * * @param Sequence $names */ + #[\NoDiscard] public static function queryContinuation(Sequence $names): self { return new self(Expansion::queryContinuation, $names, false); @@ -66,6 +69,7 @@ public static function queryContinuation(Sequence $names): self * @param Map> $lists * @param Map> $keys */ + #[\NoDiscard] public function expand(Map $values, Map $lists, Map $keys): string { $expanded = $this @@ -93,6 +97,7 @@ public function expand(Map $values, Map $lists, Map $keys): string /** * @return Attempt */ + #[\NoDiscard] public function regex(): Attempt { return $this @@ -111,6 +116,7 @@ public function regex(): Attempt ->map(fn($regex) => $regex->prepend($this->expansion->regex())->toString()); } + #[\NoDiscard] public function toString(): string { /** @psalm-suppress InvalidArgument */ diff --git a/src/Expression/Level4/Parse.php b/src/Expression/Level4/Parse.php index aead883..36ce7e8 100644 --- a/src/Expression/Level4/Parse.php +++ b/src/Expression/Level4/Parse.php @@ -29,6 +29,7 @@ final class Parse * * @return Attempt */ + #[\NoDiscard] public static function of( Str $string, callable $standard, diff --git a/src/Expression/Name.php b/src/Expression/Name.php index 932b7ad..f6dee93 100644 --- a/src/Expression/Name.php +++ b/src/Expression/Name.php @@ -28,6 +28,7 @@ private function __construct(private string $value) * * @throws \DomainException */ + #[\NoDiscard] public static function of(string $value): self { $characters = self::characters(); @@ -45,6 +46,7 @@ public static function of(string $value): self * * @return Attempt */ + #[\NoDiscard] public static function one( Str $value, Expansion $expansion, @@ -67,6 +69,7 @@ public static function one( * * @return Attempt */ + #[\NoDiscard] public static function explode( Str $value, Expansion $expansion, @@ -89,6 +92,7 @@ public static function explode( * * @return Attempt}> */ + #[\NoDiscard] public static function limit( Str $value, Expansion $expansion, @@ -127,6 +131,7 @@ public static function limit( * * @return Attempt> */ + #[\NoDiscard] public static function many( Str $value, Expansion $expansion, @@ -151,6 +156,7 @@ public static function many( /** * @psalm-pure */ + #[\NoDiscard] public static function characters(): string { return '[a-zA-Z0-9_]+'; @@ -159,6 +165,7 @@ public static function characters(): string /** * @return non-empty-string */ + #[\NoDiscard] public function toString(): string { return $this->value; diff --git a/src/Expressions.php b/src/Expressions.php index 0ea5d50..bd96b9f 100644 --- a/src/Expressions.php +++ b/src/Expressions.php @@ -20,6 +20,7 @@ final class Expressions * * @return Attempt */ + #[\NoDiscard] public static function of(Str $string): Attempt { return self::expressions() diff --git a/src/Template.php b/src/Template.php index 16b20a9..4883da8 100644 --- a/src/Template.php +++ b/src/Template.php @@ -33,6 +33,7 @@ private function __construct( * * @throws \Exception */ + #[\NoDiscard] public static function of(string $template): self { return self::attempt($template)->unwrap(); @@ -43,6 +44,7 @@ public static function of(string $template): self * * @return Attempt */ + #[\NoDiscard] public static function attempt(string $template): Attempt { $template = Str::of($template); @@ -57,11 +59,13 @@ public static function attempt(string $template): Attempt * * @return Maybe */ + #[\NoDiscard] public static function maybe(string $template): Maybe { return self::attempt($template)->maybe(); } + #[\NoDiscard] public function expansion(): Expansion { return Expansion::of($this->template, $this->expressions); @@ -73,6 +77,7 @@ public function expansion(): Expansion * * @return Attempt> */ + #[\NoDiscard] public function extract(Url $url): Attempt { /** @var Attempt> */ @@ -92,6 +97,7 @@ public function extract(Url $url): Attempt * * @return Attempt */ + #[\NoDiscard] public function matches(Url $url): Attempt { return $this->regex()->map( @@ -99,6 +105,7 @@ public function matches(Url $url): Attempt ); } + #[\NoDiscard] public function toString(): string { return $this->template->toString(); diff --git a/src/UrlEncode.php b/src/UrlEncode.php index 9d2357d..fc269ad 100644 --- a/src/UrlEncode.php +++ b/src/UrlEncode.php @@ -17,6 +17,7 @@ enum UrlEncode case everything; case allowReservedCharacters; + #[\NoDiscard] public function encode(string $string): string { if ($this === self::everything) { @@ -35,6 +36,7 @@ public function encode(string $string): string /** * @psalm-pure */ + #[\NoDiscard] private static function map(string $char): string { $allowed = [ diff --git a/tests/Expression/NameTest.php b/tests/Expression/NameTest.php index b69c2c2..22f0aef 100644 --- a/tests/Expression/NameTest.php +++ b/tests/Expression/NameTest.php @@ -44,7 +44,7 @@ public function testThrowWhenInvalidName(): BlackBox\Proof $this->expectException(\DomainException::class); $this->expectExceptionMessage($string); - Name::of($string); + $_ = Name::of($string); }); } }