1212use TypeLang \Parser \Node \Literal \IntLiteralNode ;
1313use TypeLang \Parser \Node \Literal \StringLiteralNode ;
1414use TypeLang \Parser \Node \Stmt \NamedTypeNode ;
15- use TypeLang \Parser \Node \Stmt \Template \TemplateArgumentNode ;
15+ use TypeLang \Parser \Node \Stmt \Template \TemplateArgumentNode as ArgNode ;
1616use TypeLang \Parser \Node \Stmt \TypeStatement ;
1717use TypeLang \Parser \Node \Stmt \UnionTypeNode ;
1818
@@ -29,13 +29,8 @@ public function build(TypeStatement $statement, RepositoryInterface $types): Int
2929
3030 return match (\count ($ arguments )) {
3131 0 => new IntType (),
32- 1 => new IntType (
33- min: $ this ->fetchTemplateArgumentValue ($ statement , $ arguments [0 ]),
34- ),
35- 2 => new IntType (
36- min: $ this ->fetchTemplateArgumentValue ($ statement , $ arguments [0 ]),
37- max: $ this ->fetchTemplateArgumentValue ($ statement , $ arguments [1 ]),
38- ),
32+ 1 => $ this ->buildWithMinValue ($ statement , $ arguments [0 ]),
33+ 2 => $ this ->buildWithMinMaxValues ($ statement , $ arguments [0 ], $ arguments [1 ]),
3934 default => throw TooManyTemplateArgumentsException::becauseTemplateArgumentsRangeOverflows (
4035 passedArgumentsCount: \count ($ arguments ),
4136 minSupportedArgumentsCount: 0 ,
@@ -49,7 +44,30 @@ public function build(TypeStatement $statement, RepositoryInterface $types): Int
4944 * @throws InvalidTemplateArgumentException
5045 * @throws TemplateArgumentHintsNotSupportedException
5146 */
52- private function fetchTemplateArgumentValue (TypeStatement $ statement , TemplateArgumentNode $ argument ): int
47+ private function buildWithMinValue (NamedTypeNode $ statement , ArgNode $ min ): IntType
48+ {
49+ $ value = $ this ->fetchTemplateArgumentValue ($ statement , $ min );
50+
51+ return new IntType ($ value );
52+ }
53+
54+ /**
55+ * @throws InvalidTemplateArgumentException
56+ * @throws TemplateArgumentHintsNotSupportedException
57+ */
58+ private function buildWithMinMaxValues (NamedTypeNode $ statement , ArgNode $ min , ArgNode $ max ): IntType
59+ {
60+ $ from = $ this ->fetchTemplateArgumentValue ($ statement , $ min );
61+ $ to = $ this ->fetchTemplateArgumentValue ($ statement , $ max );
62+
63+ return new IntType ($ from , $ to );
64+ }
65+
66+ /**
67+ * @throws InvalidTemplateArgumentException
68+ * @throws TemplateArgumentHintsNotSupportedException
69+ */
70+ private function fetchTemplateArgumentValue (TypeStatement $ statement , ArgNode $ argument ): int
5371 {
5472 $ this ->expectNoTemplateArgumentHint ($ statement , $ argument );
5573
0 commit comments