Skip to content

Commit a7fee27

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

File tree

2 files changed

+231
-4
lines changed

2 files changed

+231
-4
lines changed

docs/class-reference.md

Lines changed: 94 additions & 2 deletions
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

Lines changed: 137 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,52 @@
22

33
namespace GraphQL\Language;
44

5+
use GraphQL\Language\AST\ArgumentNode;
6+
use GraphQL\Language\AST\BooleanValueNode;
7+
use GraphQL\Language\AST\DirectiveDefinitionNode;
8+
use GraphQL\Language\AST\DirectiveNode;
9+
use GraphQL\Language\AST\DocumentNode;
10+
use GraphQL\Language\AST\EnumTypeDefinitionNode;
11+
use GraphQL\Language\AST\EnumTypeExtensionNode;
12+
use GraphQL\Language\AST\EnumValueDefinitionNode;
13+
use GraphQL\Language\AST\EnumValueNode;
14+
use GraphQL\Language\AST\FieldDefinitionNode;
15+
use GraphQL\Language\AST\FieldNode;
16+
use GraphQL\Language\AST\FloatValueNode;
17+
use GraphQL\Language\AST\FragmentDefinitionNode;
18+
use GraphQL\Language\AST\FragmentSpreadNode;
19+
use GraphQL\Language\AST\InlineFragmentNode;
20+
use GraphQL\Language\AST\InputObjectTypeDefinitionNode;
21+
use GraphQL\Language\AST\InputObjectTypeExtensionNode;
22+
use GraphQL\Language\AST\InputValueDefinitionNode;
23+
use GraphQL\Language\AST\InterfaceTypeDefinitionNode;
24+
use GraphQL\Language\AST\InterfaceTypeExtensionNode;
25+
use GraphQL\Language\AST\IntValueNode;
26+
use GraphQL\Language\AST\ListTypeNode;
27+
use GraphQL\Language\AST\ListValueNode;
28+
use GraphQL\Language\AST\NamedTypeNode;
29+
use GraphQL\Language\AST\NameNode;
530
use GraphQL\Language\AST\Node;
631
use GraphQL\Language\AST\NodeKind;
732
use GraphQL\Language\AST\NodeList;
33+
use GraphQL\Language\AST\NonNullTypeNode;
34+
use GraphQL\Language\AST\NullValueNode;
35+
use GraphQL\Language\AST\ObjectFieldNode;
36+
use GraphQL\Language\AST\ObjectTypeDefinitionNode;
37+
use GraphQL\Language\AST\ObjectTypeExtensionNode;
38+
use GraphQL\Language\AST\ObjectValueNode;
39+
use GraphQL\Language\AST\OperationDefinitionNode;
40+
use GraphQL\Language\AST\OperationTypeDefinitionNode;
41+
use GraphQL\Language\AST\ScalarTypeDefinitionNode;
42+
use GraphQL\Language\AST\ScalarTypeExtensionNode;
43+
use GraphQL\Language\AST\SchemaDefinitionNode;
44+
use GraphQL\Language\AST\SchemaExtensionNode;
45+
use GraphQL\Language\AST\SelectionSetNode;
46+
use GraphQL\Language\AST\StringValueNode;
47+
use GraphQL\Language\AST\UnionTypeDefinitionNode;
48+
use GraphQL\Language\AST\UnionTypeExtensionNode;
49+
use GraphQL\Language\AST\VariableDefinitionNode;
50+
use GraphQL\Language\AST\VariableNode;
851
use GraphQL\Utils\TypeInfo;
952
use GraphQL\Utils\Utils;
1053

@@ -89,8 +132,100 @@
89132
* ]
90133
* ]);
91134
*
92-
* @phpstan-type NodeVisitor callable(covariant Node): (VisitorOperation|null|false|void)
93-
* @phpstan-type VisitorArray array<string, NodeVisitor>|array<string, array<string, NodeVisitor>>
135+
* @phpstan-type VisitorArray array{
136+
* Name?: array{
137+
* enter?: callable(NameNode): (VisitorOperation|null|false|void),
138+
* leave?: callable(NameNode): (VisitorOperation|null|false|void),
139+
* }|callable(NameNode): (VisitorOperation|null|false|void),
140+
* Document?: array{
141+
* enter?: callable(DocumentNode): (VisitorOperation|null|false|void),
142+
* leave?: callable(DocumentNode): (VisitorOperation|null|false|void),
143+
* }|callable(DocumentNode): (VisitorOperation|null|false|void),
144+
* OperationDefinition?: array{
145+
* enter?: callable(OperationDefinitionNode): (VisitorOperation|null|false|void),
146+
* leave?: callable(OperationDefinitionNode): (VisitorOperation|null|false|void),
147+
* }|callable(OperationDefinitionNode): (VisitorOperation|null|false|void),
148+
* VariableDefinition?: array{
149+
* enter?: callable(VariableDefinitionNode): (VisitorOperation|null|false|void),
150+
* leave?: callable(VariableDefinitionNode): (VisitorOperation|null|false|void),
151+
* }|callable(VariableDefinitionNode): (VisitorOperation|null|false|void),
152+
* SchemaDefinition?: array{
153+
* enter?: callable(SchemaDefinitionNode): (VisitorOperation|null|false|void),
154+
* leave?: callable(SchemaDefinitionNode): (VisitorOperation|null|false|void),
155+
* }|callable(SchemaDefinitionNode): (VisitorOperation|null|false|void),
156+
* OperationTypeDefinition?: array{
157+
* enter?: callable(OperationTypeDefinitionNode): (VisitorOperation|null|false|void),
158+
* leave?: callable(OperationTypeDefinitionNode): (VisitorOperation|null|false|void),
159+
* }|callable(OperationTypeDefinitionNode): (VisitorOperation|null|false|void),
160+
* ScalarTypeDefinition?: array{
161+
* enter?: callable(ScalarTypeDefinitionNode): (VisitorOperation|null|false|void),
162+
* leave?: callable(ScalarTypeDefinitionNode): (VisitorOperation|null|false|void),
163+
* }|callable(ScalarTypeDefinitionNode): (VisitorOperation|null|false|void),
164+
* ObjectTypeDefinition?: array{
165+
* enter?: callable(ObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
166+
* leave?: callable(ObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
167+
* }|callable(ObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
168+
* FieldDefinition?: array{
169+
* enter?: callable(FieldDefinitionNode): (VisitorOperation|null|false|void),
170+
* leave?: callable(FieldDefinitionNode): (VisitorOperation|null|false|void),
171+
* }|callable(FieldDefinitionNode): (VisitorOperation|null|false|void),
172+
* InputValueDefinition?: array{
173+
* enter?: callable(InputValueDefinitionNode): (VisitorOperation|null|false|void),
174+
* leave?: callable(InputValueDefinitionNode): (VisitorOperation|null|false|void),
175+
* }|callable(InputValueDefinitionNode): (VisitorOperation|null|false|void),
176+
* InterfaceTypeDefinition?: array{
177+
* enter?: callable(InterfaceTypeDefinitionNode): (VisitorOperation|null|false|void),
178+
* leave?: callable(InterfaceTypeDefinitionNode): (VisitorOperation|null|false|void),
179+
* }|callable(InterfaceTypeDefinitionNode): (VisitorOperation|null|false|void),
180+
* UnionTypeDefinition?: array{
181+
* enter?: callable(UnionTypeDefinitionNode): (VisitorOperation|null|false|void),
182+
* leave?: callable(UnionTypeDefinitionNode): (VisitorOperation|null|false|void),
183+
* }|callable(UnionTypeDefinitionNode): (VisitorOperation|null|false|void),
184+
* EnumTypeDefinition?: array{
185+
* enter?: callable(EnumTypeDefinitionNode): (VisitorOperation|null|false|void),
186+
* leave?: callable(EnumTypeDefinitionNode): (VisitorOperation|null|false|void),
187+
* }|callable(EnumTypeDefinitionNode): (VisitorOperation|null|false|void),
188+
* EnumValueDefinition?: array{
189+
* enter?: callable(EnumValueDefinitionNode): (VisitorOperation|null|false|void),
190+
* leave?: callable(EnumValueDefinitionNode): (VisitorOperation|null|false|void),
191+
* }|callable(EnumValueDefinitionNode): (VisitorOperation|null|false|void),
192+
* InputObjectTypeDefinition?: array{
193+
* enter?: callable(InputObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
194+
* leave?: callable(InputObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
195+
* }|callable(InputObjectTypeDefinitionNode): (VisitorOperation|null|false|void),
196+
* SchemaExtension?: array{
197+
* enter?: callable(SchemaExtensionNode): (VisitorOperation|null|false|void),
198+
* leave?: callable(SchemaExtensionNode): (VisitorOperation|null|false|void),
199+
* }|callable(SchemaExtensionNode): (VisitorOperation|null|false|void),
200+
* DirectiveDefinition?: array{
201+
* enter?: callable(DirectiveDefinitionNode): (VisitorOperation|null|false|void),
202+
* leave?: callable(DirectiveDefinitionNode): (VisitorOperation|null|false|void),
203+
* }|callable(DirectiveDefinitionNode): (VisitorOperation|null|false|void),
204+
* ScalarTypeExtension?: array{
205+
* enter?: callable(ScalarTypeExtensionNode): (VisitorOperation|null|false|void),
206+
* leave?: callable(ScalarTypeExtensionNode): (VisitorOperation|null|false|void),
207+
* }|callable(ScalarTypeExtensionNode): (VisitorOperation|null|false|void),
208+
* ObjectTypeExtension?: array{
209+
* enter?: callable(ObjectTypeExtensionNode): (VisitorOperation|null|false|void),
210+
* leave?: callable(ObjectTypeExtensionNode): (VisitorOperation|null|false|void),
211+
* }|callable(ObjectTypeExtensionNode): (VisitorOperation|null|false|void),
212+
* InterfaceTypeExtension?: array{
213+
* enter?: callable(InterfaceTypeExtensionNode): (VisitorOperation|null|false|void),
214+
* leave?: callable(InterfaceTypeExtensionNode): (VisitorOperation|null|false|void),
215+
* }|callable(InterfaceTypeExtensionNode): (VisitorOperation|null|false|void),
216+
* UnionTypeExtension?: array{
217+
* enter?: callable(UnionTypeExtensionNode): (VisitorOperation|null|false|void),
218+
* leave?: callable(UnionTypeExtensionNode): (VisitorOperation|null|false|void),
219+
* }|callable(UnionTypeExtensionNode): (VisitorOperation|null|false|void),
220+
* EnumTypeExtension?: array{
221+
* enter?: callable(EnumTypeExtensionNode): (VisitorOperation|null|false|void),
222+
* leave?: callable(EnumTypeExtensionNode): (VisitorOperation|null|false|void),
223+
* }|callable(EnumTypeExtensionNode): (VisitorOperation|null|false|void),
224+
* InputObjectTypeExtension?: array{
225+
* enter?: callable(InputObjectTypeExtensionNode): (VisitorOperation|null|false|void),
226+
* leave?: callable(InputObjectTypeExtensionNode): (VisitorOperation|null|false|void),
227+
* }|callable(InputObjectTypeExtensionNode): (VisitorOperation|null|false|void),
228+
* }
94229
*
95230
* @see \GraphQL\Tests\Language\VisitorTest
96231
*/

0 commit comments

Comments
 (0)