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:
+2
-14
@@ -89,22 +89,10 @@ pub fn component(_attr: TokenStream, item: TokenStream) -> TokenStream {
|
|||||||
.into();
|
.into();
|
||||||
};
|
};
|
||||||
let Some(syms_path) = syms_path() else {
|
let Some(syms_path) = syms_path() else {
|
||||||
return quote!(
|
return quote!(#module).into();
|
||||||
#module
|
|
||||||
compile_error!("#[slhx::component] requires OUT_DIR; run inside a Cargo crate with slhx_build::app() in build.rs");
|
|
||||||
)
|
|
||||||
.into();
|
|
||||||
};
|
};
|
||||||
if !syms_path.exists() {
|
if !syms_path.exists() {
|
||||||
let message = format!(
|
return quote!(#module).into();
|
||||||
"#[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();
|
|
||||||
}
|
}
|
||||||
let missing = missing_component_handlers(&syms_path, items);
|
let missing = missing_component_handlers(&syms_path, items);
|
||||||
if !missing.is_empty() {
|
if !missing.is_empty() {
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
use slhx_derive::surface;
|
use slhx_derive::{component, surface};
|
||||||
|
|
||||||
|
#[component]
|
||||||
|
mod local_component {
|
||||||
|
pub const EXISTING: u8 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
#[surface]
|
#[surface]
|
||||||
mod ui {
|
mod ui {
|
||||||
@@ -9,3 +14,8 @@ mod ui {
|
|||||||
fn surface_macro_preserves_inline_module_with_generated_file() {
|
fn surface_macro_preserves_inline_module_with_generated_file() {
|
||||||
assert_eq!(ui::EXISTING, 1);
|
assert_eq!(ui::EXISTING, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn component_macro_preserves_inline_module_without_generated_symbols() {
|
||||||
|
assert_eq!(local_component::EXISTING, 1);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user