Skip to content

Commit

Permalink
refactor(ast_tools): add Derive::snake_name method (#6717)
Browse files Browse the repository at this point in the history
Follow-on after #6404. Add `Derive::snake_name` method which defaults to `Self::trait_name().to_case(Case::Snake)`, but can be overridden. This allows moving the "special case" code for `ESTree` filename into `estree.rs`.
  • Loading branch information
overlookmotel committed Oct 21, 2024
1 parent fc647ab commit 41a6ad6
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 8 deletions.
4 changes: 4 additions & 0 deletions tasks/ast_tools/src/derives/estree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ impl Derive for DeriveESTree {
"ESTree"
}

fn snake_name() -> String {
"estree".to_string()
}

fn derive(&mut self, def: &TypeDef, _: &LateCtx) -> TokenStream {
let ts_type_def = match def {
TypeDef::Enum(def) => typescript_enum(def),
Expand Down
17 changes: 9 additions & 8 deletions tasks/ast_tools/src/derives/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use std::path::PathBuf;

use convert_case::{Case, Casing};
use proc_macro2::TokenStream;

use crate::{codegen::LateCtx, schema::TypeDef};
Expand All @@ -18,7 +19,13 @@ pub use get_span::{DeriveGetSpan, DeriveGetSpanMut};

pub trait Derive {
fn trait_name() -> &'static str;

fn snake_name() -> String {
Self::trait_name().to_case(Case::Snake)
}

fn derive(&mut self, def: &TypeDef, ctx: &LateCtx) -> TokenStream;

fn prelude() -> TokenStream {
TokenStream::default()
}
Expand Down Expand Up @@ -80,13 +87,13 @@ macro_rules! define_derive {

fn run(&mut self, ctx: &$crate::codegen::LateCtx) -> $crate::Result<Self::Output> {
use std::vec::Vec;
use convert_case::{Case, Casing};
use itertools::Itertools;
use rustc_hash::{FxHashMap, FxHashSet};

use $crate::derives::DeriveTemplate;

let trait_name = Self::trait_name();
let filename = format!("derive_{}.rs", Self::snake_name());
let output = ctx
.schema()
.into_iter()
Expand All @@ -109,16 +116,10 @@ macro_rules! define_derive {
let mut modules = Vec::from_iter(modules);
modules.sort();

let file_name = Self::trait_name().to_case(Case::Snake);
let file_name = match file_name.as_str() {
"es_tree" => "estree",
f => f,
};

acc.push((
$crate::output(
format!("crates/{}", path.split("::").next().unwrap()).as_str(),
format!("derive_{}.rs", file_name).as_str()
&filename,
),
Self::template(
modules,
Expand Down

0 comments on commit 41a6ad6

Please sign in to comment.