Skip to content

Commit b67ed17

Browse files
visitor: remove visitorKeys argument (#2930)
1 parent 2af9885 commit b67ed17

File tree

7 files changed

+6
-164
lines changed

7 files changed

+6
-164
lines changed

src/index.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@ export {
229229
ASTVisitor,
230230
Visitor,
231231
VisitFn,
232-
VisitorKeyMap,
233232
// AST nodes
234233
ASTNode,
235234
ASTKindToNode,

src/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,6 @@ export type {
216216
ASTVisitor,
217217
Visitor,
218218
VisitFn,
219-
VisitorKeyMap,
220219
// AST nodes
221220
ASTNode,
222221
ASTKindToNode,

src/language/__tests__/visitor-test.js

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { invariant } from '../../jsutils/invariant';
88
import type { ASTNode } from '../ast';
99
import { Kind } from '../kinds';
1010
import { parse } from '../parser';
11-
import { visit, visitInParallel, BREAK, QueryDocumentKeys } from '../visitor';
11+
import { visit, visitInParallel, BREAK } from '../visitor';
1212

1313
function checkVisitorFnArgs(ast: any, args: any, isEdited: boolean = false) {
1414
const [node, key, parent, path, ancestors] = args;
@@ -913,45 +913,6 @@ describe('Visitor', () => {
913913
['leave', 'Document', undefined],
914914
]);
915915
});
916-
917-
it('does traverse unknown node kinds with visitor keys', () => {
918-
const customQueryDocumentKeys = { ...QueryDocumentKeys };
919-
(customQueryDocumentKeys: any).CustomField = ['name', 'selectionSet'];
920-
921-
const visited = [];
922-
const visitor = {
923-
enter(node) {
924-
visited.push(['enter', node.kind, getValue(node)]);
925-
},
926-
leave(node) {
927-
visited.push(['leave', node.kind, getValue(node)]);
928-
},
929-
};
930-
visit(customAST, visitor, customQueryDocumentKeys);
931-
932-
expect(visited).to.deep.equal([
933-
['enter', 'Document', undefined],
934-
['enter', 'OperationDefinition', undefined],
935-
['enter', 'SelectionSet', undefined],
936-
['enter', 'Field', undefined],
937-
['enter', 'Name', 'a'],
938-
['leave', 'Name', 'a'],
939-
['leave', 'Field', undefined],
940-
['enter', 'CustomField', undefined],
941-
['enter', 'Name', 'b'],
942-
['leave', 'Name', 'b'],
943-
['enter', 'SelectionSet', undefined],
944-
['enter', 'CustomField', undefined],
945-
['enter', 'Name', 'c'],
946-
['leave', 'Name', 'c'],
947-
['leave', 'CustomField', undefined],
948-
['leave', 'SelectionSet', undefined],
949-
['leave', 'CustomField', undefined],
950-
['leave', 'SelectionSet', undefined],
951-
['leave', 'OperationDefinition', undefined],
952-
['leave', 'Document', undefined],
953-
]);
954-
});
955916
});
956917

957918
describe('visitInParallel', () => {

src/language/index.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ export {
1616
ASTVisitor,
1717
Visitor,
1818
VisitFn,
19-
VisitorKeyMap,
2019
} from './visitor';
2120

2221
export {

src/language/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export type { ParseOptions } from './parser';
1919
export { print } from './printer';
2020

2121
export { visit, visitInParallel, getVisitFn, BREAK } from './visitor';
22-
export type { ASTVisitor, Visitor, VisitFn, VisitorKeyMap } from './visitor';
22+
export type { ASTVisitor, Visitor, VisitFn } from './visitor';
2323

2424
export { Location, Token } from './ast';
2525
export type {

src/language/visitor.d.ts

Lines changed: 1 addition & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -47,106 +47,6 @@ export type VisitFn<TAnyNode, TVisitedNode = TAnyNode> = (
4747
ancestors: ReadonlyArray<TAnyNode | ReadonlyArray<TAnyNode>>,
4848
) => any;
4949

50-
/**
51-
* A KeyMap describes each the traversable properties of each kind of node.
52-
*/
53-
export type VisitorKeyMap<T> = { [P in keyof T]: ReadonlyArray<keyof T[P]> };
54-
55-
// TODO: Should be `[]`, but that requires TypeScript@3
56-
type EmptyTuple = Array<never>;
57-
58-
export const QueryDocumentKeys: {
59-
Name: EmptyTuple;
60-
61-
Document: ['definitions'];
62-
// Prettier forces trailing commas, but TS pre 3.2 doesn't allow them.
63-
// prettier-ignore
64-
OperationDefinition: [
65-
'name',
66-
'variableDefinitions',
67-
'directives',
68-
'selectionSet'
69-
];
70-
VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'];
71-
Variable: ['name'];
72-
SelectionSet: ['selections'];
73-
Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'];
74-
Argument: ['name', 'value'];
75-
76-
FragmentSpread: ['name', 'directives'];
77-
InlineFragment: ['typeCondition', 'directives', 'selectionSet'];
78-
// prettier-ignore
79-
FragmentDefinition: [
80-
'name',
81-
// Note: fragment variable definitions are deprecated and will removed in v17.0.0
82-
'variableDefinitions',
83-
'typeCondition',
84-
'directives',
85-
'selectionSet'
86-
];
87-
88-
IntValue: EmptyTuple;
89-
FloatValue: EmptyTuple;
90-
StringValue: EmptyTuple;
91-
BooleanValue: EmptyTuple;
92-
NullValue: EmptyTuple;
93-
EnumValue: EmptyTuple;
94-
ListValue: ['values'];
95-
ObjectValue: ['fields'];
96-
ObjectField: ['name', 'value'];
97-
98-
Directive: ['name', 'arguments'];
99-
100-
NamedType: ['name'];
101-
ListType: ['type'];
102-
NonNullType: ['type'];
103-
104-
SchemaDefinition: ['description', 'directives', 'operationTypes'];
105-
OperationTypeDefinition: ['type'];
106-
107-
ScalarTypeDefinition: ['description', 'name', 'directives'];
108-
// prettier-ignore
109-
ObjectTypeDefinition: [
110-
'description',
111-
'name',
112-
'interfaces',
113-
'directives',
114-
'fields'
115-
];
116-
FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'];
117-
// prettier-ignore
118-
InputValueDefinition: [
119-
'description',
120-
'name',
121-
'type',
122-
'defaultValue',
123-
'directives'
124-
];
125-
// prettier-ignore
126-
InterfaceTypeDefinition: [
127-
'description',
128-
'name',
129-
'interfaces',
130-
'directives',
131-
'fields'
132-
];
133-
UnionTypeDefinition: ['description', 'name', 'directives', 'types'];
134-
EnumTypeDefinition: ['description', 'name', 'directives', 'values'];
135-
EnumValueDefinition: ['description', 'name', 'directives'];
136-
InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'];
137-
138-
DirectiveDefinition: ['description', 'name', 'arguments', 'locations'];
139-
140-
SchemaExtension: ['directives', 'operationTypes'];
141-
142-
ScalarTypeExtension: ['name', 'directives'];
143-
ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'];
144-
InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'];
145-
UnionTypeExtension: ['name', 'directives', 'types'];
146-
EnumTypeExtension: ['name', 'directives', 'values'];
147-
InputObjectTypeExtension: ['name', 'directives', 'fields'];
148-
};
149-
15050
export const BREAK: any;
15151

15252
/**
@@ -235,11 +135,7 @@ export const BREAK: any;
235135
* }
236136
* })
237137
*/
238-
export function visit(
239-
root: ASTNode,
240-
visitor: Visitor<ASTKindToNode>,
241-
visitorKeys?: VisitorKeyMap<ASTKindToNode>, // default: QueryDocumentKeys
242-
): any;
138+
export function visit(root: ASTNode, visitor: Visitor<ASTKindToNode>): any;
243139

244140
/**
245141
* Creates a new visitor instance which delegates to many visitors to run in

src/language/visitor.js

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,7 @@ export type VisitFn<TAnyNode, TVisitedNode: TAnyNode = TAnyNode> = (
3939
ancestors: $ReadOnlyArray<TAnyNode | $ReadOnlyArray<TAnyNode>>,
4040
) => any;
4141

42-
/**
43-
* A KeyMap describes each the traversable properties of each kind of node.
44-
*/
45-
export type VisitorKeyMap<KindToNode> = $ObjMap<
46-
KindToNode,
47-
<T>(T) => $ReadOnlyArray<$Keys<T>>,
48-
>;
49-
50-
export const QueryDocumentKeys: VisitorKeyMap<ASTKindToNode> = {
42+
const QueryDocumentKeys = {
5143
Name: [],
5244

5345
Document: ['definitions'],
@@ -221,11 +213,7 @@ export const BREAK: { ... } = Object.freeze({});
221213
* }
222214
* })
223215
*/
224-
export function visit(
225-
root: ASTNode,
226-
visitor: Visitor<ASTKindToNode>,
227-
visitorKeys: VisitorKeyMap<ASTKindToNode> = QueryDocumentKeys,
228-
): any {
216+
export function visit(root: ASTNode, visitor: Visitor<ASTKindToNode>): any {
229217
/* eslint-disable no-undef-init */
230218
let stack: any = undefined;
231219
let inArray = Array.isArray(root);
@@ -330,7 +318,7 @@ export function visit(
330318
} else {
331319
stack = { inArray, index, keys, edits, prev: stack };
332320
inArray = Array.isArray(node);
333-
keys = inArray ? node : visitorKeys[node.kind] ?? [];
321+
keys = inArray ? node : QueryDocumentKeys[node.kind] ?? [];
334322
index = -1;
335323
edits = [];
336324
if (parent) {

0 commit comments

Comments
 (0)