Skip to content

Commit d83b95b

Browse files
committed
Add fully VisitorArray shape
1 parent ae54048 commit d83b95b

File tree

2 files changed

+213
-4
lines changed

2 files changed

+213
-4
lines changed

docs/class-reference.md

+94-2
Original file line numberDiff line numberDiff line change
@@ -1298,8 +1298,100 @@ visitor API:
12981298
]
12991299
]);
13001300

1301-
@phpstan-type NodeVisitor callable(covariant Node): (VisitorOperation|null|false|void)
1302-
@phpstan-type VisitorArray array<string, NodeVisitor>|array<string, array<string, NodeVisitor>>
1301+
@phpstan-type VisitorArray array{
1302+
Name?: array{
1303+
enter?: callable(NameNode): (VisitorOperation|null|false|void),
1304+
leave?: callable(NameNode): (VisitorOperation|null|false|void),
1305+
}|callable(NameNode): (VisitorOperation|null|false|void),
1306+
Document?: array{
1307+
enter?: callable(DocumentNode): (VisitorOperation|null|false|void),
1308+
leave?: callable(DocumentNode): (VisitorOperation|null|false|void),
1309+
}|callable(DocumentNode): (VisitorOperation|null|false|void),
1310+
OperationDefinition?: array{
1311+
enter?: callable(OperationDefinitionNode): (VisitorOperation|null|false|void),
1312+
leave?: callable(OperationDefinitionNode): (VisitorOperation|null|false|void),
1313+
}|callable(OperationDefinitionNode): (VisitorOperation|null|false|void),
1314+
VariableDefinition?: array{
1315+
enter?: callable(VariableDefinitionNode): (VisitorOperation|null|false|void),
1316+
leave?: callable(VariableDefinitionNode): (VisitorOperation|null|false|void),
1317+
}|callable(VariableDefinitionNode): (VisitorOperation|null|false|void),
1318+
SchemaDefinition?: array{
1319+
enter?: callable(SchemaDefinitionNode): (VisitorOperation|null|false|void),
1320+
leave?: callable(SchemaDefinitionNode): (VisitorOperation|null|false|void),
1321+
}|callable(SchemaDefinitionNode): (VisitorOperation|null|false|void),
1322+
OperationTypeDefinition?: array{
1323+
enter?: callable(OperationTypeDefinitionNode): (VisitorOperation|null|false|void),
1324+
leave?: callable(OperationTypeDefinitionNode): (VisitorOperation|null|false|void),
1325+
}|callable(OperationTypeDefinitionNode): (VisitorOperation|null|false|void),
1326+
ScalarTypeDefinition?: array{
1327+
enter?: callable(ScalarTypeDefinitionNode): (VisitorOperation|null|false|void),
1328+
leave?: callable(ScalarTypeDefinitionNode): (VisitorOperation|null|false|void),
1329+
}|callable(ScalarTypeDefinitionNode): (VisitorOperation|null|false|void),
1330+
ObjectTypeDefinition?: array{
1331+
enter?: callable(ObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
1332+
leave?: callable(ObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
1333+
}|callable(ObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
1334+
FieldDefinition?: array{
1335+
enter?: callable(FieldDefinitionNode): (VisitorOperation|null|false|void),
1336+
leave?: callable(FieldDefinitionNode): (VisitorOperation|null|false|void),
1337+
}|callable(FieldDefinitionNode): (VisitorOperation|null|false|void),
1338+
InputValueDefinition?: array{
1339+
enter?: callable(InputValueDefinitionNode): (VisitorOperation|null|false|void),
1340+
leave?: callable(InputValueDefinitionNode): (VisitorOperation|null|false|void),
1341+
}|callable(InputValueDefinitionNode): (VisitorOperation|null|false|void),
1342+
InterfaceTypeDefinition?: array{
1343+
enter?: callable(InterfaceTypeDefinitionNode): (VisitorOperation|null|false|void),
1344+
leave?: callable(InterfaceTypeDefinitionNode): (VisitorOperation|null|false|void),
1345+
}|callable(InterfaceTypeDefinitionNode): (VisitorOperation|null|false|void),
1346+
UnionTypeDefinition?: array{
1347+
enter?: callable(UnionTypeDefinitionNode): (VisitorOperation|null|false|void),
1348+
leave?: callable(UnionTypeDefinitionNode): (VisitorOperation|null|false|void),
1349+
}|callable(UnionTypeDefinitionNode): (VisitorOperation|null|false|void),
1350+
EnumTypeDefinition?: array{
1351+
enter?: callable(EnumTypeDefinitionNode): (VisitorOperation|null|false|void),
1352+
leave?: callable(EnumTypeDefinitionNode): (VisitorOperation|null|false|void),
1353+
}|callable(EnumTypeDefinitionNode): (VisitorOperation|null|false|void),
1354+
EnumValueDefinition?: array{
1355+
enter?: callable(EnumValueDefinitionNode): (VisitorOperation|null|false|void),
1356+
leave?: callable(EnumValueDefinitionNode): (VisitorOperation|null|false|void),
1357+
}|callable(EnumValueDefinitionNode): (VisitorOperation|null|false|void),
1358+
InputObjectTypeDefinition?: array{
1359+
enter?: callable(InputObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
1360+
leave?: callable(InputObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
1361+
}|callable(InputObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
1362+
SchemaExtension?: array{
1363+
enter?: callable(SchemaExtensionNode): (VisitorOperation|null|false|void),
1364+
leave?: callable(SchemaExtensionNode): (VisitorOperation|null|false|void),
1365+
}|callable(SchemaExtensionNode): (VisitorOperation|null|false|void),
1366+
DirectiveDefinition?: array{
1367+
enter?: callable(DirectiveDefinitionNode): (VisitorOperation|null|false|void),
1368+
leave?: callable(DirectiveDefinitionNode): (VisitorOperation|null|false|void),
1369+
}|callable(DirectiveDefinitionNode): (VisitorOperation|null|false|void),
1370+
ScalarTypeExtension?: array{
1371+
enter?: callable(ScalarTypeExtensionNode): (VisitorOperation|null|false|void),
1372+
leave?: callable(ScalarTypeExtensionNode): (VisitorOperation|null|false|void),
1373+
}|callable(ScalarTypeExtensionNode): (VisitorOperation|null|false|void),
1374+
ObjectTypeExtension?: array{
1375+
enter?: callable(ObjectTypeExtensionNode): (VisitorOperation|null|false|void),
1376+
leave?: callable(ObjectTypeExtensionNode): (VisitorOperation|null|false|void),
1377+
}|callable(ObjectTypeExtensionNode): (VisitorOperation|null|false|void),
1378+
InterfaceTypeExtension?: array{
1379+
enter?: callable(InterfaceTypeExtensionNode): (VisitorOperation|null|false|void),
1380+
leave?: callable(InterfaceTypeExtensionNode): (VisitorOperation|null|false|void),
1381+
}|callable(InterfaceTypeExtensionNode): (VisitorOperation|null|false|void),
1382+
UnionTypeExtension?: array{
1383+
enter?: callable(UnionTypeExtensionNode): (VisitorOperation|null|false|void),
1384+
leave?: callable(UnionTypeExtensionNode): (VisitorOperation|null|false|void),
1385+
}|callable(UnionTypeExtensionNode): (VisitorOperation|null|false|void),
1386+
EnumTypeExtension?: array{
1387+
enter?: callable(EnumTypeExtensionNode): (VisitorOperation|null|false|void),
1388+
leave?: callable(EnumTypeExtensionNode): (VisitorOperation|null|false|void),
1389+
}|callable(EnumTypeExtensionNode): (VisitorOperation|null|false|void),
1390+
InputObjectTypeExtension?: array{
1391+
enter?: callable(InputObjectTypeExtensionNode): (VisitorOperation|null|false|void),
1392+
leave?: callable(InputObjectTypeExtensionNode): (VisitorOperation|null|false|void),
1393+
}|callable(InputObjectTypeExtensionNode): (VisitorOperation|null|false|void),
1394+
}
13031395

13041396
@see \GraphQL\Tests\Language\VisitorTest
13051397

src/Language/Visitor.php

+119-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,32 @@
22

33
namespace GraphQL\Language;
44

5+
use GraphQL\Language\AST\DirectiveDefinitionNode;
6+
use GraphQL\Language\AST\DocumentNode;
7+
use GraphQL\Language\AST\EnumTypeDefinitionNode;
8+
use GraphQL\Language\AST\EnumTypeExtensionNode;
9+
use GraphQL\Language\AST\EnumValueDefinitionNode;
10+
use GraphQL\Language\AST\FieldDefinitionNode;
11+
use GraphQL\Language\AST\InputObjectTypeDefinitionNode;
12+
use GraphQL\Language\AST\InputObjectTypeExtensionNode;
13+
use GraphQL\Language\AST\InputValueDefinitionNode;
14+
use GraphQL\Language\AST\InterfaceTypeDefinitionNode;
15+
use GraphQL\Language\AST\InterfaceTypeExtensionNode;
16+
use GraphQL\Language\AST\NameNode;
517
use GraphQL\Language\AST\Node;
618
use GraphQL\Language\AST\NodeKind;
719
use GraphQL\Language\AST\NodeList;
20+
use GraphQL\Language\AST\ObjectTypeDefinitionNode;
21+
use GraphQL\Language\AST\ObjectTypeExtensionNode;
22+
use GraphQL\Language\AST\OperationDefinitionNode;
23+
use GraphQL\Language\AST\OperationTypeDefinitionNode;
24+
use GraphQL\Language\AST\ScalarTypeDefinitionNode;
25+
use GraphQL\Language\AST\ScalarTypeExtensionNode;
26+
use GraphQL\Language\AST\SchemaDefinitionNode;
27+
use GraphQL\Language\AST\SchemaExtensionNode;
28+
use GraphQL\Language\AST\UnionTypeDefinitionNode;
29+
use GraphQL\Language\AST\UnionTypeExtensionNode;
30+
use GraphQL\Language\AST\VariableDefinitionNode;
831
use GraphQL\Utils\TypeInfo;
932
use GraphQL\Utils\Utils;
1033

@@ -89,8 +112,102 @@
89112
* ]
90113
* ]);
91114
*
92-
* @phpstan-type NodeVisitor callable(covariant Node): (VisitorOperation|null|false|void)
93-
* @phpstan-type VisitorArray array<string, NodeVisitor>|array<string, array<string, NodeVisitor>>
115+
* @phpstan-type VisitorArray array{
116+
* enter?: callable(Node): (VisitorOperation|null|false|void),
117+
* leave?: callable(Node): (VisitorOperation|null|false|void),
118+
* Name?: array{
119+
* enter?: callable(NameNode): (VisitorOperation|null|false|void),
120+
* leave?: callable(NameNode): (VisitorOperation|null|false|void),
121+
* }|callable(NameNode): (VisitorOperation|null|false|void),
122+
* Document?: array{
123+
* enter?: callable(DocumentNode): (VisitorOperation|null|false|void),
124+
* leave?: callable(DocumentNode): (VisitorOperation|null|false|void),
125+
* }|callable(DocumentNode): (VisitorOperation|null|false|void),
126+
* OperationDefinition?: array{
127+
* enter?: callable(OperationDefinitionNode): (VisitorOperation|null|false|void),
128+
* leave?: callable(OperationDefinitionNode): (VisitorOperation|null|false|void),
129+
* }|callable(OperationDefinitionNode): (VisitorOperation|null|false|void),
130+
* VariableDefinition?: array{
131+
* enter?: callable(VariableDefinitionNode): (VisitorOperation|null|false|void),
132+
* leave?: callable(VariableDefinitionNode): (VisitorOperation|null|false|void),
133+
* }|callable(VariableDefinitionNode): (VisitorOperation|null|false|void),
134+
* SchemaDefinition?: array{
135+
* enter?: callable(SchemaDefinitionNode): (VisitorOperation|null|false|void),
136+
* leave?: callable(SchemaDefinitionNode): (VisitorOperation|null|false|void),
137+
* }|callable(SchemaDefinitionNode): (VisitorOperation|null|false|void),
138+
* OperationTypeDefinition?: array{
139+
* enter?: callable(OperationTypeDefinitionNode): (VisitorOperation|null|false|void),
140+
* leave?: callable(OperationTypeDefinitionNode): (VisitorOperation|null|false|void),
141+
* }|callable(OperationTypeDefinitionNode): (VisitorOperation|null|false|void),
142+
* ScalarTypeDefinition?: array{
143+
* enter?: callable(ScalarTypeDefinitionNode): (VisitorOperation|null|false|void),
144+
* leave?: callable(ScalarTypeDefinitionNode): (VisitorOperation|null|false|void),
145+
* }|callable(ScalarTypeDefinitionNode): (VisitorOperation|null|false|void),
146+
* ObjectTypeDefinition?: array{
147+
* enter?: callable(ObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
148+
* leave?: callable(ObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
149+
* }|callable(ObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
150+
* FieldDefinition?: array{
151+
* enter?: callable(FieldDefinitionNode): (VisitorOperation|null|false|void),
152+
* leave?: callable(FieldDefinitionNode): (VisitorOperation|null|false|void),
153+
* }|callable(FieldDefinitionNode): (VisitorOperation|null|false|void),
154+
* InputValueDefinition?: array{
155+
* enter?: callable(InputValueDefinitionNode): (VisitorOperation|null|false|void),
156+
* leave?: callable(InputValueDefinitionNode): (VisitorOperation|null|false|void),
157+
* }|callable(InputValueDefinitionNode): (VisitorOperation|null|false|void),
158+
* InterfaceTypeDefinition?: array{
159+
* enter?: callable(InterfaceTypeDefinitionNode): (VisitorOperation|null|false|void),
160+
* leave?: callable(InterfaceTypeDefinitionNode): (VisitorOperation|null|false|void),
161+
* }|callable(InterfaceTypeDefinitionNode): (VisitorOperation|null|false|void),
162+
* UnionTypeDefinition?: array{
163+
* enter?: callable(UnionTypeDefinitionNode): (VisitorOperation|null|false|void),
164+
* leave?: callable(UnionTypeDefinitionNode): (VisitorOperation|null|false|void),
165+
* }|callable(UnionTypeDefinitionNode): (VisitorOperation|null|false|void),
166+
* EnumTypeDefinition?: array{
167+
* enter?: callable(EnumTypeDefinitionNode): (VisitorOperation|null|false|void),
168+
* leave?: callable(EnumTypeDefinitionNode): (VisitorOperation|null|false|void),
169+
* }|callable(EnumTypeDefinitionNode): (VisitorOperation|null|false|void),
170+
* EnumValueDefinition?: array{
171+
* enter?: callable(EnumValueDefinitionNode): (VisitorOperation|null|false|void),
172+
* leave?: callable(EnumValueDefinitionNode): (VisitorOperation|null|false|void),
173+
* }|callable(EnumValueDefinitionNode): (VisitorOperation|null|false|void),
174+
* InputObjectTypeDefinition?: array{
175+
* enter?: callable(InputObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
176+
* leave?: callable(InputObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
177+
* }|callable(InputObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
178+
* SchemaExtension?: array{
179+
* enter?: callable(SchemaExtensionNode): (VisitorOperation|null|false|void),
180+
* leave?: callable(SchemaExtensionNode): (VisitorOperation|null|false|void),
181+
* }|callable(SchemaExtensionNode): (VisitorOperation|null|false|void),
182+
* DirectiveDefinition?: array{
183+
* enter?: callable(DirectiveDefinitionNode): (VisitorOperation|null|false|void),
184+
* leave?: callable(DirectiveDefinitionNode): (VisitorOperation|null|false|void),
185+
* }|callable(DirectiveDefinitionNode): (VisitorOperation|null|false|void),
186+
* ScalarTypeExtension?: array{
187+
* enter?: callable(ScalarTypeExtensionNode): (VisitorOperation|null|false|void),
188+
* leave?: callable(ScalarTypeExtensionNode): (VisitorOperation|null|false|void),
189+
* }|callable(ScalarTypeExtensionNode): (VisitorOperation|null|false|void),
190+
* ObjectTypeExtension?: array{
191+
* enter?: callable(ObjectTypeExtensionNode): (VisitorOperation|null|false|void),
192+
* leave?: callable(ObjectTypeExtensionNode): (VisitorOperation|null|false|void),
193+
* }|callable(ObjectTypeExtensionNode): (VisitorOperation|null|false|void),
194+
* InterfaceTypeExtension?: array{
195+
* enter?: callable(InterfaceTypeExtensionNode): (VisitorOperation|null|false|void),
196+
* leave?: callable(InterfaceTypeExtensionNode): (VisitorOperation|null|false|void),
197+
* }|callable(InterfaceTypeExtensionNode): (VisitorOperation|null|false|void),
198+
* UnionTypeExtension?: array{
199+
* enter?: callable(UnionTypeExtensionNode): (VisitorOperation|null|false|void),
200+
* leave?: callable(UnionTypeExtensionNode): (VisitorOperation|null|false|void),
201+
* }|callable(UnionTypeExtensionNode): (VisitorOperation|null|false|void),
202+
* EnumTypeExtension?: array{
203+
* enter?: callable(EnumTypeExtensionNode): (VisitorOperation|null|false|void),
204+
* leave?: callable(EnumTypeExtensionNode): (VisitorOperation|null|false|void),
205+
* }|callable(EnumTypeExtensionNode): (VisitorOperation|null|false|void),
206+
* InputObjectTypeExtension?: array{
207+
* enter?: callable(InputObjectTypeExtensionNode): (VisitorOperation|null|false|void),
208+
* leave?: callable(InputObjectTypeExtensionNode): (VisitorOperation|null|false|void),
209+
* }|callable(InputObjectTypeExtensionNode): (VisitorOperation|null|false|void),
210+
* }
94211
*
95212
* @see \GraphQL\Tests\Language\VisitorTest
96213
*/

0 commit comments

Comments
 (0)