sdk-builder: can pretty-print sdk in rust now presumably
This commit is contained in:
		
							parent
							
								
									117e8878d6
								
							
						
					
					
						commit
						01feff8cf5
					
				|  | @ -17,3 +17,5 @@ unreal-sdk = {path = "../unreal-sdk"} | |||
| quote = "1.0.28" | ||||
| proc-macro2 = "1.0.60" | ||||
| clap = { version = "4.3.9", features = ["derive"] } | ||||
| prettyplease = "0.2.9" | ||||
| syn = { version = "2.0.22", features = ["full"] } | ||||
|  |  | |||
|  | @ -190,13 +190,13 @@ pub mod path_helper { | |||
|                         .unwrap_or(quote!(crate::engine::UObject)); | ||||
| 
 | ||||
|                     tokens.extend(quote!( | ||||
|                         crate::engine::TAssetPtr<#inner>, | ||||
|                         crate::engine::TAssetPtr<#inner> | ||||
|                     )); | ||||
|                 } | ||||
|                 Type::Array(inner) => { | ||||
|                     let inner = self.child(*inner.clone()); | ||||
|                     tokens.extend(quote!( | ||||
|                         crate::engine::TArray<#inner>, | ||||
|                         crate::engine::TArray<#inner> | ||||
|                     )); | ||||
|                 } | ||||
|                 Type::Primitive(prim) => { | ||||
|  | @ -204,7 +204,7 @@ pub mod path_helper { | |||
|                 } | ||||
|                 Type::RawArray { ty, len } => { | ||||
|                     let ty = self.child(*ty.clone()); | ||||
|                     quote!([#ty; #len]); | ||||
|                     tokens.extend(quote! { [ #ty; #len ] }); | ||||
|                 } | ||||
|                 Type::Name => tokens.extend(quote!(crate::engine::FName)), | ||||
|                 Type::String => tokens.extend(quote!(crate::engine::FString)), | ||||
|  | @ -279,9 +279,9 @@ pub mod rust { | |||
|         "i64", "i128", "usize", "isize", | ||||
|     ]; | ||||
| 
 | ||||
|     const CHARS: [char; 20] = [ | ||||
|     const CHARS: [char; 21] = [ | ||||
|         ' ', '?', '+', '-', ':', '/', '^', '(', ')', '[', ']', '<', '>', '&', '.', '#', '\'', '"', | ||||
|         '%', ',', | ||||
|         '%', ',', '|', | ||||
|     ]; | ||||
| 
 | ||||
|     pub struct Builder { | ||||
|  | @ -456,7 +456,16 @@ pub mod rust { | |||
|                         } | ||||
|                     }); | ||||
|                 } else { | ||||
|                     std::fs::write(path.join(format!("{name}.rs")), tokens.to_string())?; | ||||
|                     let path = path.join(format!("{name}.rs")); | ||||
| 
 | ||||
|                     log::info!("parsing {name}.."); | ||||
|                     let file = syn::parse_file(&tokens.to_string()) | ||||
|                         .context("syn failed to parse generated code")?; | ||||
| 
 | ||||
|                     log::info!("pretty printing {name}.."); | ||||
|                     let contents = prettyplease::unparse(&file); | ||||
|                     log::info!("writing to {}..", path.display()); | ||||
|                     std::fs::write(path, contents)?; | ||||
| 
 | ||||
|                     mod_rs.extend(quote! { | ||||
|                         pub mod #name; | ||||
|  | @ -464,7 +473,10 @@ pub mod rust { | |||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             std::fs::write(path.join("mod.rs"), mod_rs.to_string())?; | ||||
|             let contents = prettyplease::unparse( | ||||
|                 &syn::parse_file(&mod_rs.to_string()).context("syn failed to parse root module")?, | ||||
|             ); | ||||
|             std::fs::write(path.join("mod.rs"), contents)?; | ||||
| 
 | ||||
|             Ok(()) | ||||
|         } | ||||
|  | @ -617,7 +629,7 @@ pub mod rust { | |||
|             let size = class.size; | ||||
| 
 | ||||
|             let typedef = quote! { | ||||
|                 pub struct #name(pub ::core::cell::UnsafeCell<u8; #size>); | ||||
|                 pub struct #name(pub ::core::cell::UnsafeCell<[u8; #size]>); | ||||
|             }; | ||||
| 
 | ||||
|             let impls = quote! { | ||||
|  | @ -930,6 +942,7 @@ pub mod rust { | |||
|             let name = name.to_string(); | ||||
|             let not_found = format!("static object \"{name}\" not found!"); | ||||
|             quote! { | ||||
|                 { | ||||
|                 static OBJECT: ::once_cell::sync::OnceCell<::core::option::Option<UObject>> = ::once_cell::sync::OnceCell::new(); | ||||
|                 OBJECT.get_or_init(|| { | ||||
|                     match find_object(::obfstr::obfstr!(#name)) { | ||||
|  | @ -940,6 +953,7 @@ pub mod rust { | |||
|                     } | ||||
|                 }) | ||||
|                     .map(|object| unsafe {object.cast()}) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue