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
5 changes: 5 additions & 0 deletions .changeset/wicked-needles-thank.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@codama/renderers-rust': patch
---

Use latest RenderMap type from renderers-core
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@
"test:unit": "vitest run"
},
"dependencies": {
"@codama/errors": "^1.3.7",
"@codama/nodes": "^1.3.7",
"@codama/renderers-core": "^1.2.2",
"@codama/visitors-core": "^1.3.7",
"@codama/errors": "^1.4.1",
"@codama/nodes": "^1.4.1",
"@codama/renderers-core": "^1.3.0",
"@codama/visitors-core": "^1.4.1",
"@solana/codecs-strings": "^5.0.0",
"nunjucks": "^3.2.4"
},
"devDependencies": {
"@codama/nodes-from-anchor": "^1.2.9",
"@codama/nodes-from-anchor": "^1.3.3",
"@changesets/changelog-github": "^0.5.1",
"@changesets/cli": "^2.29.7",
"@solana/eslint-config-solana": "^5.0.0",
Expand Down
26 changes: 13 additions & 13 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

50 changes: 26 additions & 24 deletions src/getRenderMapVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,8 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
imports.mergeWith(seedsImports);
}

return createRenderMap(
`accounts/${snakeCase(node.name)}.rs`,
render('accountsPage.njk', {
return createRenderMap(`accounts/${snakeCase(node.name)}.rs`, {
content: render('accountsPage.njk', {
account: node,
anchorTraits,
constantSeeds,
Expand All @@ -130,21 +129,20 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
seeds,
typeManifest,
}),
);
});
},

visitDefinedType(node) {
const typeManifest = visit(node, typeManifestVisitor);
const imports = new ImportMap().mergeWithManifest(typeManifest);

return createRenderMap(
`types/${snakeCase(node.name)}.rs`,
render('definedTypesPage.njk', {
return createRenderMap(`types/${snakeCase(node.name)}.rs`, {
content: render('definedTypesPage.njk', {
definedType: node,
imports: imports.remove(`generatedTypes::${pascalCase(node.name)}`).toString(dependencyMap),
typeManifest,
}),
);
});
},

visitInstruction(node) {
Expand Down Expand Up @@ -235,9 +233,8 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
const dataTraits = getTraitsFromNode(node);
imports.mergeWith(dataTraits.imports);

return createRenderMap(
`instructions/${snakeCase(node.name)}.rs`,
render('instructionsPage.njk', {
return createRenderMap(`instructions/${snakeCase(node.name)}.rs`, {
content: render('instructionsPage.njk', {
dataTraits: dataTraits.render,
discriminatorConstants: discriminatorConstants.render,
hasArgs,
Expand All @@ -251,7 +248,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
program,
typeManifest,
}),
);
});
},

visitProgram(node, { self }) {
Expand All @@ -266,15 +263,13 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {

// Errors.
if (node.errors.length > 0) {
renders = addToRenderMap(
renders,
`errors/${snakeCase(node.name)}.rs`,
render('errorsPage.njk', {
renders = addToRenderMap(renders, `errors/${snakeCase(node.name)}.rs`, {
content: render('errorsPage.njk', {
errors: node.errors,
imports: new ImportMap().toString(dependencyMap),
program: node,
}),
);
});
}

program = null;
Expand Down Expand Up @@ -306,15 +301,22 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
return mergeRenderMaps([
createRenderMap({
['accounts/mod.rs']:
accountsToExport.length > 0 ? render('accountsMod.njk', ctx) : undefined,
['errors/mod.rs']: programsToExport.length > 0 ? render('errorsMod.njk', ctx) : undefined,
accountsToExport.length > 0 ? { content: render('accountsMod.njk', ctx) } : undefined,
['errors/mod.rs']:
programsToExport.length > 0 ? { content: render('errorsMod.njk', ctx) } : undefined,
['instructions/mod.rs']:
instructionsToExport.length > 0 ? render('instructionsMod.njk', ctx) : undefined,
['mod.rs']: render('rootMod.njk', ctx),
['programs.rs']: programsToExport.length > 0 ? render('programsMod.njk', ctx) : undefined,
['shared.rs']: accountsToExport.length > 0 ? render('sharedPage.njk', ctx) : undefined,
instructionsToExport.length > 0
? { content: render('instructionsMod.njk', ctx) }
: undefined,
['mod.rs']: { content: render('rootMod.njk', ctx) },
['programs.rs']:
programsToExport.length > 0 ? { content: render('programsMod.njk', ctx) } : undefined,
['shared.rs']:
accountsToExport.length > 0 ? { content: render('sharedPage.njk', ctx) } : undefined,
['types/mod.rs']:
definedTypesToExport.length > 0 ? render('definedTypesMod.njk', ctx) : undefined,
definedTypesToExport.length > 0
? { content: render('definedTypesMod.njk', ctx) }
: undefined,
}),
...getAllPrograms(node).map(p => visit(p, self)),
]);
Expand Down
12 changes: 6 additions & 6 deletions test/accountsPage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ test('it renders a byte array seed used on an account', () => {

// Then we expect the following identifier and reference to the byte array
// as a parameters to be rendered.
codeContains(getFromRenderMap(renderMap, 'accounts/test_account.rs'), [
codeContains(getFromRenderMap(renderMap, 'accounts/test_account.rs').content, [
`byte_array_seed: [u8; 32],`,
`&byte_array_seed,`,
]);
Expand Down Expand Up @@ -74,7 +74,7 @@ test('it renders an empty array of seeds for seedless PDAs', () => {

// Then we expect the following identifier and reference to the byte array
// as a parameters to be rendered.
codeContains(getFromRenderMap(renderMap, 'accounts/test_account.rs'), [/pub fn find_pda\(/, /&\[\s*\]/]);
codeContains(getFromRenderMap(renderMap, 'accounts/test_account.rs').content, [/pub fn find_pda\(/, /&\[\s*\]/]);
});

test('it renders constant PDA seeds as prefix consts', () => {
Expand All @@ -99,7 +99,7 @@ test('it renders constant PDA seeds as prefix consts', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect the following const helpers for constant seeds.
codeContains(getFromRenderMap(renderMap, 'accounts/test_account.rs'), [
codeContains(getFromRenderMap(renderMap, 'accounts/test_account.rs').content, [
'/// 0. `TestAccount::PREFIX.0`',
'/// 1. my_account (`Pubkey`)',
'/// 2. `TestAccount::PREFIX.1`',
Expand Down Expand Up @@ -131,7 +131,7 @@ test('it renders anchor traits impl', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect the following Anchor traits impl.
codeContains(getFromRenderMap(renderMap, 'accounts/test_account.rs'), [
codeContains(getFromRenderMap(renderMap, 'accounts/test_account.rs').content, [
'#[cfg(feature = "anchor")]',
'impl anchor_lang::AccountDeserialize for TestAccount',
'impl anchor_lang::AccountSerialize for TestAccount {}',
Expand Down Expand Up @@ -163,7 +163,7 @@ test('it renders fetch functions', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect the following fetch functions to be rendered.
codeContains(getFromRenderMap(renderMap, 'accounts/test_account.rs'), [
codeContains(getFromRenderMap(renderMap, 'accounts/test_account.rs').content, [
'pub fn fetch_test_account',
'pub fn fetch_maybe_test_account',
'pub fn fetch_all_test_account',
Expand Down Expand Up @@ -195,7 +195,7 @@ test('it renders account without anchor traits', () => {
const renderMap = visit(node, getRenderMapVisitor({ anchorTraits: false }));

// Then we do not expect Anchor traits.
codeDoesNotContains(getFromRenderMap(renderMap, 'accounts/test_account.rs'), [
codeDoesNotContains(getFromRenderMap(renderMap, 'accounts/test_account.rs').content, [
'#[cfg(feature = "anchor")]',
'#[cfg(feature = "anchor-idl-build")]',
]);
Expand Down
11 changes: 7 additions & 4 deletions test/definedTypesPage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ test('it renders a prefix string on a defined type', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect the following use and identifier to be rendered.
codeContains(getFromRenderMap(renderMap, 'types/blob.rs'), [
codeContains(getFromRenderMap(renderMap, 'types/blob.rs').content, [
`use kaigan::types::U8PrefixString;`,
`content_type: U8PrefixString,`,
]);
Expand All @@ -62,7 +62,7 @@ test('it renders a scalar enum with Copy derive', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect the following use and identifier to be rendered.
codeContains(getFromRenderMap(renderMap, 'types/tag.rs'), [`#[derive(`, `Copy`, `pub enum Tag`]);
codeContains(getFromRenderMap(renderMap, 'types/tag.rs').content, [`#[derive(`, `Copy`, `pub enum Tag`]);
});

test('it renders a non-scalar enum without Copy derive', () => {
Expand Down Expand Up @@ -93,7 +93,10 @@ test('it renders a non-scalar enum without Copy derive', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect the following use and identifier to be rendered.
codeContains(getFromRenderMap(renderMap, 'types/tag_with_struct.rs'), [`#[derive(`, `pub enum TagWithStruct`]);
codeContains(getFromRenderMap(renderMap, 'types/tag_with_struct.rs').content, [
`#[derive(`,
`pub enum TagWithStruct`,
]);
// And we expect the Copy derive to be missing.
codeDoesNotContains(getFromRenderMap(renderMap, 'types/tag_with_struct.rs'), `Copy`);
codeDoesNotContains(getFromRenderMap(renderMap, 'types/tag_with_struct.rs').content, `Copy`);
});
2 changes: 1 addition & 1 deletion test/errorsPage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ test('it renders codes for errors', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect the following errors with codes.
codeContains(getFromRenderMap(renderMap, 'errors/spl_token.rs'), [
codeContains(getFromRenderMap(renderMap, 'errors/spl_token.rs').content, [
`InvalidInstruction = 0x1770,`,
`InvalidProgram = 0x1B58,`,
]);
Expand Down
6 changes: 3 additions & 3 deletions test/instructionsPage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ test('it renders a public instruction data struct', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect the following pub struct.
codeContains(getFromRenderMap(renderMap, 'instructions/mint_tokens.rs'), [
codeContains(getFromRenderMap(renderMap, 'instructions/mint_tokens.rs').content, [
`pub struct MintTokensInstructionData`,
`pub fn new(`,
]);
Expand Down Expand Up @@ -46,7 +46,7 @@ test('it renders an instruction with a remainder str', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect the following pub struct.
codeContains(getFromRenderMap(renderMap, 'instructions/add_memo.rs'), [
codeContains(getFromRenderMap(renderMap, 'instructions/add_memo.rs').content, [
`use kaigan::types::RemainderStr`,
`pub memo: RemainderStr`,
]);
Expand All @@ -64,7 +64,7 @@ test('it renders a default impl for instruction data struct', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect the following Default trait to be implemented.
codeContains(getFromRenderMap(renderMap, 'instructions/mint_tokens.rs'), [
codeContains(getFromRenderMap(renderMap, 'instructions/mint_tokens.rs').content, [
`impl Default for MintTokensInstructionData`,
`fn default(`,
]);
Expand Down
6 changes: 3 additions & 3 deletions test/types/array.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ test('it exports short vecs', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect a short vec to be exported.
codeContains(getFromRenderMap(renderMap, 'types/my_short_vec.rs'), [
codeContains(getFromRenderMap(renderMap, 'types/my_short_vec.rs').content, [
/pub type MyShortVec = ShortVec<Pubkey>;/,
/use solana_pubkey::Pubkey/,
/use solana_short_vec::ShortVec/,
]);
codeDoesNotContains(getFromRenderMap(renderMap, 'types/my_short_vec.rs'), [
codeDoesNotContains(getFromRenderMap(renderMap, 'types/my_short_vec.rs').content, [
/use borsh::BorshSerialize/,
/use borsh::BorshDeserialize/,
]);
Expand All @@ -52,7 +52,7 @@ test('it exports short vecs as struct fields', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect a short vec to be exported as a struct field.
codeContains(getFromRenderMap(renderMap, 'types/my_short_vec.rs'), [
codeContains(getFromRenderMap(renderMap, 'types/my_short_vec.rs').content, [
/pub value: ShortVec<Pubkey>,/,
/use solana_pubkey::Pubkey/,
/use solana_short_vec::ShortVec/,
Expand Down
6 changes: 3 additions & 3 deletions test/types/number.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ test('it exports short u16 numbers', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect a short u16 to be exported.
codeContains(getFromRenderMap(renderMap, 'types/my_short_u16.rs'), [
codeContains(getFromRenderMap(renderMap, 'types/my_short_u16.rs').content, [
/pub type MyShortU16 = ShortU16/,
/use solana_short_vec::ShortU16/,
]);
codeDoesNotContains(getFromRenderMap(renderMap, 'types/my_short_u16.rs'), [
codeDoesNotContains(getFromRenderMap(renderMap, 'types/my_short_u16.rs').content, [
/use borsh::BorshSerialize/,
/use borsh::BorshDeserialize/,
]);
Expand All @@ -38,7 +38,7 @@ test('it exports short u16 numbers as struct fields', () => {
const renderMap = visit(node, getRenderMapVisitor());

// Then we expect a short u16 to be exported as a struct field.
codeContains(getFromRenderMap(renderMap, 'types/my_short_u16.rs'), [
codeContains(getFromRenderMap(renderMap, 'types/my_short_u16.rs').content, [
/pub value: ShortU16/,
/use solana_short_vec::ShortU16/,
]);
Expand Down
Loading