@@ -8,16 +8,23 @@ mod enum_generator;
88mod format;
99mod state;
1010mod struct_generator;
11- const IMPORTS : & str = "
12- use std::sync::Arc;
13- use tree_sitter;
14- use derive_more::Debug;
15- use codegen_sdk_common::*;
16- use std::backtrace::Backtrace;
17- use bytes::Bytes;
18- use rkyv::{Archive, Deserialize, Serialize, Portable};
19- " ;
11+ use std:: io:: Write ;
2012
13+ use proc_macro2:: TokenStream ;
14+ use quote:: quote;
15+ fn get_imports ( ) -> TokenStream {
16+ quote ! {
17+
18+ use std:: sync:: Arc ;
19+ use tree_sitter;
20+ use derive_more:: Debug ;
21+ use codegen_sdk_common:: * ;
22+ use std:: backtrace:: Backtrace ;
23+ use bytes:: Bytes ;
24+ use rkyv:: { Archive , Deserialize , Serialize , Portable } ;
25+
26+ }
27+ }
2128pub ( crate ) fn generate_cst ( node_types : & Vec < Node > ) -> anyhow:: Result < String > {
2229 let mut state = State :: default ( ) ;
2330 let mut nodes = HashSet :: new ( ) ;
@@ -47,15 +54,21 @@ pub(crate) fn generate_cst(node_types: &Vec<Node>) -> anyhow::Result<String> {
4754 generate_struct ( node, & mut state, & name) ;
4855 }
4956 }
50- let mut result = IMPORTS . to_string ( ) ;
51- result. push_str ( & state. enums ) ;
52- result. push_str ( & state. structs ) ;
53- let formatted = format:: format_cst ( & result) ;
57+ let mut result = get_imports ( ) ;
58+ result. extend_one ( state. enums ) ;
59+ result. extend_one ( state. structs ) ;
60+ let formatted = format:: format_cst ( & result. to_string ( ) ) ;
5461 match formatted {
5562 Ok ( formatted) => return Ok ( formatted) ,
5663 Err ( e) => {
57- log:: error!( "Failed to format CST: {}" , e) ;
58- return Ok ( result. to_string ( ) ) ;
64+ let mut out_file = tempfile:: NamedTempFile :: with_suffix ( ".rs" ) ?;
65+ log:: error!(
66+ "Failed to format CST, writing to temp file at {}" ,
67+ out_file. path( ) . display( )
68+ ) ;
69+ out_file. write_all ( result. to_string ( ) . as_bytes ( ) ) ?;
70+ out_file. keep ( ) ?;
71+ return Err ( e) ;
5972 }
6073 }
6174}
0 commit comments