Skip to content

Commit 08dbe82

Browse files
committed
Template tag name cannot be empty string
1 parent 745e99e commit 08dbe82

31 files changed

+160
-65
lines changed

src/PhpDoc/Tag/TemplateTag.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,16 @@
99
class TemplateTag
1010
{
1111

12+
/**
13+
* @param non-empty-string $name
14+
*/
1215
public function __construct(private string $name, private Type $bound, private TemplateTypeVariance $variance)
1316
{
1417
}
1518

19+
/**
20+
* @return non-empty-string
21+
*/
1622
public function getName(): string
1723
{
1824
return $this->name;

src/Type/CallableType.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class CallableType implements CompoundType, CallableParametersAcceptor
6868
/**
6969
* @api
7070
* @param array<int, ParameterReflection>|null $parameters
71-
* @param array<string, TemplateTag> $templateTags
71+
* @param array<non-empty-string, TemplateTag> $templateTags
7272
*/
7373
public function __construct(
7474
?array $parameters = null,
@@ -89,7 +89,7 @@ public function __construct(
8989
}
9090

9191
/**
92-
* @return array<string, TemplateTag>
92+
* @return array<non-empty-string, TemplateTag>
9393
*/
9494
public function getTemplateTags(): array
9595
{

src/Type/ClosureType.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class ClosureType implements TypeWithClassName, CallableParametersAcceptor
7878
/**
7979
* @api
8080
* @param array<int, ParameterReflection>|null $parameters
81-
* @param array<string, TemplateTag> $templateTags
81+
* @param array<non-empty-string, TemplateTag> $templateTags
8282
* @param SimpleThrowPoint[] $throwPoints
8383
* @param SimpleImpurePoint[] $impurePoints
8484
* @param InvalidateExprNode[] $invalidateExpressions
@@ -108,7 +108,7 @@ public function __construct(
108108
}
109109

110110
/**
111-
* @return array<string, TemplateTag>
111+
* @return array<non-empty-string, TemplateTag>
112112
*/
113113
public function getTemplateTags(): array
114114
{

src/Type/Generic/TemplateArrayType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateArrayType extends ArrayType implements TemplateType
1313
use TemplateTypeTrait;
1414
use UndecidedComparisonCompoundTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateBenevolentUnionType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ final class TemplateBenevolentUnionType extends BenevolentUnionType implements T
1212
/** @use TemplateTypeTrait<BenevolentUnionType> */
1313
use TemplateTypeTrait;
1414

15+
/**
16+
* @param non-empty-string $name
17+
*/
1518
public function __construct(
1619
TemplateTypeScope $scope,
1720
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateBooleanType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateBooleanType extends BooleanType implements TemplateType
1313
use TemplateTypeTrait;
1414
use UndecidedComparisonCompoundTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateConstantArrayType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateConstantArrayType extends ConstantArrayType implements Templ
1313
use TemplateTypeTrait;
1414
use UndecidedComparisonCompoundTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateConstantIntegerType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateConstantIntegerType extends ConstantIntegerType implements T
1313
use TemplateTypeTrait;
1414
use UndecidedComparisonCompoundTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateConstantStringType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateConstantStringType extends ConstantStringType implements Tem
1313
use TemplateTypeTrait;
1414
use UndecidedComparisonCompoundTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateFloatType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateFloatType extends FloatType implements TemplateType
1313
use TemplateTypeTrait;
1414
use UndecidedComparisonCompoundTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateGenericObjectType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateGenericObjectType extends GenericObjectType implements Templ
1313
/** @use TemplateTypeTrait<GenericObjectType> */
1414
use TemplateTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateIntegerType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateIntegerType extends IntegerType implements TemplateType
1313
use TemplateTypeTrait;
1414
use UndecidedComparisonCompoundTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateIntersectionType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ final class TemplateIntersectionType extends IntersectionType implements Templat
1111
/** @use TemplateTypeTrait<IntersectionType> */
1212
use TemplateTypeTrait;
1313

14+
/**
15+
* @param non-empty-string $name
16+
*/
1417
public function __construct(
1518
TemplateTypeScope $scope,
1619
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateKeyOfType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ final class TemplateKeyOfType extends KeyOfType implements TemplateType
1414
use TemplateTypeTrait;
1515
use UndecidedComparisonCompoundTypeTrait;
1616

17+
/**
18+
* @param non-empty-string $name
19+
*/
1720
public function __construct(
1821
TemplateTypeScope $scope,
1922
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateMixedType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ final class TemplateMixedType extends MixedType implements TemplateType
1515
/** @use TemplateTypeTrait<MixedType> */
1616
use TemplateTypeTrait;
1717

18+
/**
19+
* @param non-empty-string $name
20+
*/
1821
public function __construct(
1922
TemplateTypeScope $scope,
2023
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateObjectShapeType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateObjectShapeType extends ObjectShapeType implements TemplateT
1313
use TemplateTypeTrait;
1414
use UndecidedComparisonCompoundTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateObjectType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateObjectType extends ObjectType implements TemplateType
1313
/** @use TemplateTypeTrait<ObjectType> */
1414
use TemplateTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateObjectWithoutClassType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ class TemplateObjectWithoutClassType extends ObjectWithoutClassType implements T
1313
/** @use TemplateTypeTrait<ObjectWithoutClassType> */
1414
use TemplateTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateStrictMixedType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ final class TemplateStrictMixedType extends StrictMixedType implements TemplateT
1515
/** @use TemplateTypeTrait<StrictMixedType> */
1616
use TemplateTypeTrait;
1717

18+
/**
19+
* @param non-empty-string $name
20+
*/
1821
public function __construct(
1922
TemplateTypeScope $scope,
2023
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateStringType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ final class TemplateStringType extends StringType implements TemplateType
1313
use TemplateTypeTrait;
1414
use UndecidedComparisonCompoundTypeTrait;
1515

16+
/**
17+
* @param non-empty-string $name
18+
*/
1619
public function __construct(
1720
TemplateTypeScope $scope,
1821
TemplateTypeStrategy $templateTypeStrategy,

src/Type/Generic/TemplateType.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
interface TemplateType extends CompoundType
1212
{
1313

14+
/** @return non-empty-string */
1415
public function getName(): string;
1516

1617
public function getScope(): TemplateTypeScope;

src/Type/Generic/TemplateTypeFactory.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
final class TemplateTypeFactory
2626
{
2727

28+
/**
29+
* @param non-empty-string $name
30+
*/
2831
public static function create(TemplateTypeScope $scope, string $name, ?Type $bound, TemplateTypeVariance $variance, ?TemplateTypeStrategy $strategy = null): TemplateType
2932
{
3033
$strategy ??= new TemplateTypeParameterStrategy();

src/Type/Generic/TemplateTypeTrait.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
trait TemplateTypeTrait
2626
{
2727

28+
/** @var non-empty-string */
2829
private string $name;
2930

3031
private TemplateTypeScope $scope;
@@ -36,6 +37,7 @@ trait TemplateTypeTrait
3637
/** @var TBound */
3738
private Type $bound;
3839

40+
/** @return non-empty-string */
3941
public function getName(): string
4042
{
4143
return $this->name;

src/Type/Generic/TemplateUnionType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ final class TemplateUnionType extends UnionType implements TemplateType
1111
/** @use TemplateTypeTrait<UnionType> */
1212
use TemplateTypeTrait;
1313

14+
/**
15+
* @param non-empty-string $name
16+
*/
1417
public function __construct(
1518
TemplateTypeScope $scope,
1619
TemplateTypeStrategy $templateTypeStrategy,

tests/PHPStan/Reflection/GenericParametersAcceptorResolverTest.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,15 @@ class GenericParametersAcceptorResolverTest extends PHPStanTestCase
2929
*/
3030
public function dataResolve(): array
3131
{
32-
$templateType = static fn (string $name, ?Type $type = null): Type => TemplateTypeFactory::create(
33-
TemplateTypeScope::createWithFunction('a'),
34-
$name,
35-
$type,
36-
TemplateTypeVariance::createInvariant(),
37-
);
32+
$templateType = static function (string $name, ?Type $type = null): Type {
33+
/** @var non-empty-string $name */
34+
return TemplateTypeFactory::create(
35+
TemplateTypeScope::createWithFunction('a'),
36+
$name,
37+
$type,
38+
TemplateTypeVariance::createInvariant(),
39+
);
40+
};
3841

3942
return [
4043
'one param, one arg' => [

tests/PHPStan/Type/ArrayTypeTest.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,15 @@ public function testDescribe(
179179

180180
public function dataInferTemplateTypes(): array
181181
{
182-
$templateType = static fn (string $name): Type => TemplateTypeFactory::create(
183-
TemplateTypeScope::createWithFunction('a'),
184-
$name,
185-
new MixedType(),
186-
TemplateTypeVariance::createInvariant(),
187-
);
182+
$templateType = static function (string $name): Type {
183+
/** @var non-empty-string $name */
184+
return TemplateTypeFactory::create(
185+
TemplateTypeScope::createWithFunction('a'),
186+
$name,
187+
new MixedType(),
188+
TemplateTypeVariance::createInvariant(),
189+
);
190+
};
188191

189192
return [
190193
'valid templated item' => [

tests/PHPStan/Type/CallableTypeTest.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,12 +177,15 @@ public function dataInferTemplateTypes(): array
177177
null,
178178
);
179179

180-
$templateType = static fn (string $name): Type => TemplateTypeFactory::create(
181-
TemplateTypeScope::createWithFunction('a'),
182-
$name,
183-
new MixedType(),
184-
TemplateTypeVariance::createInvariant(),
185-
);
180+
$templateType = static function (string $name): Type {
181+
/** @var non-empty-string $name */
182+
return TemplateTypeFactory::create(
183+
TemplateTypeScope::createWithFunction('a'),
184+
$name,
185+
new MixedType(),
186+
TemplateTypeVariance::createInvariant(),
187+
);
188+
};
186189

187190
return [
188191
'template param' => [

tests/PHPStan/Type/Constant/ConstantArrayTypeTest.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -610,12 +610,15 @@ public function testIsSuperTypeOf(ConstantArrayType $type, Type $otherType, Trin
610610

611611
public function dataInferTemplateTypes(): array
612612
{
613-
$templateType = static fn (string $name): Type => TemplateTypeFactory::create(
614-
TemplateTypeScope::createWithFunction('a'),
615-
$name,
616-
new MixedType(),
617-
TemplateTypeVariance::createInvariant(),
618-
);
613+
$templateType = static function (string $name): Type {
614+
/** @var non-empty-string $name */
615+
return TemplateTypeFactory::create(
616+
TemplateTypeScope::createWithFunction('a'),
617+
$name,
618+
new MixedType(),
619+
TemplateTypeVariance::createInvariant(),
620+
);
621+
};
619622

620623
return [
621624
'receive constant array' => [

tests/PHPStan/Type/Generic/GenericObjectTypeTest.php

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -351,12 +351,15 @@ public function testAccepts(
351351
/** @return array<string,array{Type,Type,array<string,string>}> */
352352
public function dataInferTemplateTypes(): array
353353
{
354-
$templateType = static fn (string $name, ?Type $bound = null): Type => TemplateTypeFactory::create(
355-
TemplateTypeScope::createWithFunction('a'),
356-
$name,
357-
$bound ?? new MixedType(),
358-
TemplateTypeVariance::createInvariant(),
359-
);
354+
$templateType = static function (string $name, ?Type $bound = null): Type {
355+
/** @var non-empty-string $name */
356+
return TemplateTypeFactory::create(
357+
TemplateTypeScope::createWithFunction('a'),
358+
$name,
359+
$bound ?? new MixedType(),
360+
TemplateTypeVariance::createInvariant(),
361+
);
362+
};
360363

361364
return [
362365
'simple' => [
@@ -464,12 +467,15 @@ public function testResolveTemplateTypes(Type $received, Type $template, array $
464467
/** @return array<array{TemplateTypeVariance,Type,bool,array<TemplateTypeReference>}> */
465468
public function dataGetReferencedTypeArguments(): array
466469
{
467-
$templateType = static fn (string $name, ?Type $bound = null): TemplateType => TemplateTypeFactory::create(
468-
TemplateTypeScope::createWithFunction('a'),
469-
$name,
470-
$bound ?? new MixedType(),
471-
TemplateTypeVariance::createInvariant(),
472-
);
470+
$templateType = static function (string $name, ?Type $bound = null): Type {
471+
/** @var non-empty-string $name */
472+
return TemplateTypeFactory::create(
473+
TemplateTypeScope::createWithFunction('a'),
474+
$name,
475+
$bound ?? new MixedType(),
476+
TemplateTypeVariance::createInvariant(),
477+
);
478+
};
473479

474480
return [
475481
'param: Invariant<T>' => [

0 commit comments

Comments
 (0)