mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
32 lines
838 B
JavaScript
32 lines
838 B
JavaScript
import { camelToSnake } from './utils.mjs';
|
|
|
|
/**
|
|
* @param {import('./parse.mjs').Types} types
|
|
*/
|
|
export default function generateTraverseTraitCode(types) {
|
|
const typesArr = Object.values(types);
|
|
typesArr.push({ name: 'Statements', rawName: "Vec<'a, Statement<'a>>" });
|
|
|
|
let traverseMethods = '';
|
|
for (const type of typesArr) {
|
|
const snakeName = camelToSnake(type.name);
|
|
traverseMethods += `
|
|
#[inline]
|
|
fn enter_${snakeName}(&mut self, node: &mut ${type.rawName}, ctx: &mut TraverseCtx<'a>) {}
|
|
#[inline]
|
|
fn exit_${snakeName}(&mut self, node: &mut ${type.rawName}, ctx: &mut TraverseCtx<'a>) {}
|
|
`;
|
|
}
|
|
|
|
return `
|
|
use oxc_allocator::Vec;
|
|
use oxc_ast::ast::*;
|
|
|
|
use crate::TraverseCtx;
|
|
|
|
#[allow(unused_variables)]
|
|
pub trait Traverse<'a> {
|
|
${traverseMethods}
|
|
}
|
|
`;
|
|
}
|