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