Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/spicy-camels-tease.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@codama/visitors-core': minor
'@codama/visitors': minor
---

Allow passing `NodeStacks` to nested visitors
2 changes: 1 addition & 1 deletion packages/library/test/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ test('it exports visitors', () => {

test('it accepts visitors', () => {
const codama = createFromRoot(rootNode(programNode({ name: 'myProgram', publicKey: '1111' })));
const visitor = voidVisitor(['rootNode']);
const visitor = voidVisitor({ keys: ['rootNode'] });
const result = codama.accept(visitor) satisfies void;
expect(typeof result).toBe('undefined');
});
Expand Down
2 changes: 1 addition & 1 deletion packages/renderers-js-umi/src/getRenderMapVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}): Visitor<
});
const typeManifestVisitor = getTypeManifestVisitor();
const resolvedInstructionInputVisitor = getResolvedInstructionInputsVisitor();
const byteSizeVisitor = getByteSizeVisitor(linkables, stack);
const byteSizeVisitor = getByteSizeVisitor(linkables, { stack });

function getInstructionAccountType(account: ResolvedInstructionAccount): string {
if (account.isPda && account.isSigner === false) return 'Pda';
Expand Down
18 changes: 10 additions & 8 deletions packages/renderers-js-umi/src/getTypeManifestVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,14 +85,16 @@ export function getTypeManifestVisitor(input: {
value: '',
valueImports: new ImportMap(),
}) as TypeManifest,
[
...REGISTERED_TYPE_NODE_KINDS,
...REGISTERED_VALUE_NODE_KINDS,
'definedTypeLinkNode',
'definedTypeNode',
'accountNode',
'instructionNode',
],
{
keys: [
...REGISTERED_TYPE_NODE_KINDS,
...REGISTERED_VALUE_NODE_KINDS,
'definedTypeLinkNode',
'definedTypeNode',
'accountNode',
'instructionNode',
],
},
),
v =>
extendVisitor(v, {
Expand Down
7 changes: 3 additions & 4 deletions packages/renderers-js/src/getRenderMapVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,9 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
};

return pipe(
staticVisitor(
() => new RenderMap(),
['rootNode', 'programNode', 'pdaNode', 'accountNode', 'definedTypeNode', 'instructionNode'],
),
staticVisitor(() => new RenderMap(), {
keys: ['rootNode', 'programNode', 'pdaNode', 'accountNode', 'definedTypeNode', 'instructionNode'],
}),
v =>
extendVisitor(v, {
visitAccount(node) {
Expand Down
18 changes: 10 additions & 8 deletions packages/renderers-js/src/getTypeManifestVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,16 @@ export function getTypeManifestVisitor(input: {
strictType: fragment(''),
value: fragment(''),
}) as TypeManifest,
[
...REGISTERED_TYPE_NODE_KINDS,
...REGISTERED_VALUE_NODE_KINDS,
'definedTypeLinkNode',
'definedTypeNode',
'accountNode',
'instructionNode',
],
{
keys: [
...REGISTERED_TYPE_NODE_KINDS,
...REGISTERED_VALUE_NODE_KINDS,
'definedTypeLinkNode',
'definedTypeNode',
'accountNode',
'instructionNode',
],
},
),
visitor =>
extendVisitor(visitor, {
Expand Down
7 changes: 3 additions & 4 deletions packages/renderers-rust/src/getRenderMapVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,9 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
const anchorTraits = options.anchorTraits ?? true;

return pipe(
staticVisitor(
() => new RenderMap(),
['rootNode', 'programNode', 'instructionNode', 'accountNode', 'definedTypeNode'],
),
staticVisitor(() => new RenderMap(), {
keys: ['rootNode', 'programNode', 'instructionNode', 'accountNode', 'definedTypeNode'],
}),
v =>
extendVisitor(v, {
visitAccount(node) {
Expand Down
2 changes: 1 addition & 1 deletion packages/renderers-rust/src/getTypeManifestVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export function getTypeManifestVisitor(options: {
...mergeManifests(values),
type: values.map(v => v.type).join('\n'),
}),
[...REGISTERED_TYPE_NODE_KINDS, 'definedTypeLinkNode', 'definedTypeNode', 'accountNode'],
{ keys: [...REGISTERED_TYPE_NODE_KINDS, 'definedTypeLinkNode', 'definedTypeNode', 'accountNode'] },
),
v =>
extendVisitor(v, {
Expand Down
6 changes: 3 additions & 3 deletions packages/visitors-core/src/bottomUpTransformerVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export type BottomUpNodeTransformerWithSelector = {

export function bottomUpTransformerVisitor<TNodeKind extends NodeKind = NodeKind>(
transformers: (BottomUpNodeTransformer | BottomUpNodeTransformerWithSelector)[],
nodeKeys?: TNodeKind[],
options: { keys?: TNodeKind[]; stack?: NodeStack } = {},
): Visitor<Node | null, TNodeKind> {
const transformerFunctions = transformers.map((transformer): BottomUpNodeTransformer => {
if (typeof transformer === 'function') return transformer;
Expand All @@ -27,9 +27,9 @@ export function bottomUpTransformerVisitor<TNodeKind extends NodeKind = NodeKind
: node;
});

const stack = new NodeStack();
const stack = options.stack ?? new NodeStack();
return pipe(
identityVisitor(nodeKeys),
identityVisitor(options),
v =>
interceptVisitor(v, (node, next) => {
return transformerFunctions.reduce(
Expand Down
4 changes: 2 additions & 2 deletions packages/visitors-core/src/deleteNodesVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { TopDownNodeTransformerWithSelector, topDownTransformerVisitor } from '.

export function deleteNodesVisitor<TNodeKind extends NodeKind = NodeKind>(
selectors: NodeSelector[],
nodeKeys?: TNodeKind[],
options?: Parameters<typeof topDownTransformerVisitor<TNodeKind>>[1],
) {
return topDownTransformerVisitor<TNodeKind>(
selectors.map(
Expand All @@ -14,6 +14,6 @@ export function deleteNodesVisitor<TNodeKind extends NodeKind = NodeKind>(
transform: () => null,
}),
),
nodeKeys,
options,
);
}
22 changes: 13 additions & 9 deletions packages/visitors-core/src/getByteSizeVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ export type ByteSizeVisitorKeys =

export function getByteSizeVisitor(
linkables: LinkableDictionary,
stack: NodeStack,
options: { stack?: NodeStack } = {},
): Visitor<number | null, ByteSizeVisitorKeys> {
const stack = options.stack ?? new NodeStack();

const visitedDefinedTypes = new Map<string, number | null>();
const definedTypeStack: string[] = [];

Expand All @@ -30,14 +32,16 @@ export function getByteSizeVisitor(
const baseVisitor = mergeVisitor(
() => null as number | null,
(_, values) => sumSizes(values),
[
...REGISTERED_TYPE_NODE_KINDS,
'definedTypeLinkNode',
'definedTypeNode',
'accountNode',
'instructionNode',
'instructionArgumentNode',
],
{
keys: [
...REGISTERED_TYPE_NODE_KINDS,
'definedTypeLinkNode',
'definedTypeNode',
'accountNode',
'instructionNode',
'instructionArgumentNode',
],
},
);

return pipe(
Expand Down
Loading