fix(derive): keep components incremental

Let #[slhx::component] preserve inline modules when generated symbols are absent, while still enforcing handler completeness when slhx.syms exists.

req: component/005

req: test/002
This commit is contained in:
slhx agent
2026-05-25 22:33:56 +02:00
parent d223a1d215
commit 102e3247bc
2 changed files with 13 additions and 15 deletions
+2 -14
View File
@@ -89,22 +89,10 @@ pub fn component(_attr: TokenStream, item: TokenStream) -> TokenStream {
.into();
};
let Some(syms_path) = syms_path() else {
return quote!(
#module
compile_error!("#[slhx::component] requires OUT_DIR; run inside a Cargo crate with slhx_build::app() in build.rs");
)
.into();
return quote!(#module).into();
};
if !syms_path.exists() {
let message = format!(
"#[slhx::component] could not find {}; add slhx_build::app().run()? to build.rs or check template generation",
syms_path.display()
);
return quote!(
#module
compile_error!(#message);
)
.into();
return quote!(#module).into();
}
let missing = missing_component_handlers(&syms_path, items);
if !missing.is_empty() {
+11 -1
View File
@@ -1,4 +1,9 @@
use slhx_derive::surface;
use slhx_derive::{component, surface};
#[component]
mod local_component {
pub const EXISTING: u8 = 1;
}
#[surface]
mod ui {
@@ -9,3 +14,8 @@ mod ui {
fn surface_macro_preserves_inline_module_with_generated_file() {
assert_eq!(ui::EXISTING, 1);
}
#[test]
fn component_macro_preserves_inline_module_without_generated_symbols() {
assert_eq!(local_component::EXISTING, 1);
}