Skip to content

Commit ecfdb3b

Browse files
committed
Merge branch 'dminkovsky-visitor-edit-root-node'
2 parents 75e7be0 + d2c005a commit ecfdb3b

File tree

2 files changed

+75
-1
lines changed

2 files changed

+75
-1
lines changed

src/language/__tests__/visitor.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,80 @@ import { getNamedType, isCompositeType } from '../../type';
2020

2121

2222
describe('Visitor', () => {
23+
24+
it('allows editing a node both on enter and on leave', () => {
25+
26+
const ast = parse('{ a, b, c { a, b, c } }', { noLocation: true });
27+
28+
let selectionSet;
29+
30+
const editedAst = visit(ast, {
31+
OperationDefinition: {
32+
enter(node) {
33+
selectionSet = node.selectionSet;
34+
return {
35+
...node,
36+
selectionSet: {
37+
kind: 'SelectionSet',
38+
selections: []
39+
},
40+
didEnter: true,
41+
};
42+
},
43+
leave(node) {
44+
return {
45+
...node,
46+
selectionSet,
47+
didLeave: true,
48+
};
49+
}
50+
}
51+
});
52+
53+
expect(editedAst).to.deep.equal({
54+
...ast,
55+
definitions: [
56+
{
57+
...ast.definitions[0],
58+
didEnter: true,
59+
didLeave: true
60+
}
61+
]
62+
});
63+
});
64+
65+
it('allows editing the root node on enter and on leave', () => {
66+
67+
const ast = parse('{ a, b, c { a, b, c } }', { noLocation: true });
68+
69+
const { definitions } = ast;
70+
71+
const editedAst = visit(ast, {
72+
Document: {
73+
enter(node) {
74+
return {
75+
...node,
76+
definitions: [],
77+
didEnter: true,
78+
};
79+
},
80+
leave(node) {
81+
return {
82+
...node,
83+
definitions,
84+
didLeave: true,
85+
};
86+
}
87+
}
88+
});
89+
90+
expect(editedAst).to.deep.equal({
91+
...ast,
92+
didEnter: true,
93+
didLeave: true
94+
});
95+
});
96+
2397
it('allows for editing on enter', () => {
2498

2599
const ast = parse('{ a, b, c { a, b, c } }', { noLocation: true });

src/language/visitor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ export function visit(root, visitor, keyMap) {
254254
} while (stack !== undefined);
255255

256256
if (edits.length !== 0) {
257-
newRoot = edits[0][1];
257+
newRoot = edits[edits.length - 1][1];
258258
}
259259

260260
return newRoot;

0 commit comments

Comments
 (0)