@@ -198,6 +198,7 @@ private function resolveIdentifierTypeNode(IdentifierTypeNode $typeNode, NameSco
198198 case 'class-string ' :
199199 case 'interface-string ' :
200200 case 'trait-string ' :
201+ case 'enum-string ' :
201202 return new ClassStringType ();
202203
203204 case 'callable-string ' :
@@ -215,6 +216,18 @@ private function resolveIdentifierTypeNode(IdentifierTypeNode $typeNode, NameSco
215216
216217 return new UnionType ([new IntegerType (), new FloatType (), new StringType (), new BooleanType ()]);
217218
219+ case 'empty-scalar ' :
220+ return TypeCombinator::intersect (
221+ new UnionType ([new IntegerType (), new FloatType (), new StringType (), new BooleanType ()]),
222+ StaticTypeFactory::falsey (),
223+ );
224+
225+ case 'non-empty-scalar ' :
226+ return TypeCombinator::remove (
227+ new UnionType ([new IntegerType (), new FloatType (), new StringType (), new BooleanType ()]),
228+ StaticTypeFactory::falsey (),
229+ );
230+
218231 case 'number ' :
219232 $ type = $ this ->tryResolvePseudoTypeClassType ($ typeNode , $ nameScope );
220233
@@ -260,6 +273,13 @@ private function resolveIdentifierTypeNode(IdentifierTypeNode $typeNode, NameSco
260273 new AccessoryNonFalsyStringType (),
261274 ]);
262275
276+ case 'non-empty-literal-string ' :
277+ return new IntersectionType ([
278+ new StringType (),
279+ new AccessoryNonEmptyStringType (),
280+ new AccessoryLiteralStringType (),
281+ ]);
282+
263283 case 'bool ' :
264284 return new BooleanType ();
265285
@@ -307,6 +327,7 @@ private function resolveIdentifierTypeNode(IdentifierTypeNode $typeNode, NameSco
307327 return new IterableType (new MixedType (), new MixedType ());
308328
309329 case 'callable ' :
330+ case 'pure-callable ' :
310331 return new CallableType ();
311332
312333 case 'resource ' :
@@ -318,9 +339,15 @@ private function resolveIdentifierTypeNode(IdentifierTypeNode $typeNode, NameSco
318339
319340 return new ResourceType ();
320341
342+ case 'closed-resource ' :
343+ return new ResourceType ();
344+
321345 case 'mixed ' :
322346 return new MixedType (true );
323347
348+ case 'non-empty-mixed ' :
349+ return new MixedType (true , StaticTypeFactory::falsey ());
350+
324351 case 'void ' :
325352 return new VoidType ();
326353
@@ -330,6 +357,9 @@ private function resolveIdentifierTypeNode(IdentifierTypeNode $typeNode, NameSco
330357 case 'callable-object ' :
331358 return new IntersectionType ([new ObjectWithoutClassType (), new CallableType ()]);
332359
360+ case 'callable-array ' :
361+ return new IntersectionType ([new ArrayType (new MixedType (), new MixedType ()), new CallableType ()]);
362+
333363 case 'never ' :
334364 case 'noreturn ' :
335365 $ type = $ this ->tryResolvePseudoTypeClassType ($ typeNode , $ nameScope );
0 commit comments