Compile Time Errors
The html-macro
provides compile time errors to help catch mistakes.
Every compile time error is tested in crates/html-macro-ui
using the trybuild
crate.
If you have an idea for an error that you don't see here open an issue!
Here are a few examples:
Wrong closing tag
You've opened with one tag but are attempting to close with another.
extern crate percy_dom;
use percy_dom::prelude::*;
// Expected a closing div tag, found a closing strong tag
fn main() {
html! {
<div> </strong>
};
}
error: Wrong closing tag. Try changing "strong" into "div"
--> $DIR/wrong_closing_tag.rs:7:17
|
7 | <div> </strong>
| ^^^^^^
Should be self closing tag
The tag that you are trying to use is a self closing tagl
extern crate percy_dom;
use percy_dom::prelude::*;
// We are using open and close tags for a tag that should
// actually be a self closing tag
fn main() {
html! {
<br></br>
};
}
error: br is a self closing tag. Try "<br>" or "<br />"
--> $DIR/should_be_self_closing_tag.rs:8:15
|
8 | <br></br>
| ^^
Invalid HTML tag
You're trying to use a tag that isn't in the HTML specification. This might happen if you've made a typo.
//! # To Run
//!
//! cargo test -p html-macro-test --lib ui -- trybuild=invalid_html_tag.rs
extern crate percy_dom;
use percy_dom::prelude::*;
// Used a tag name that does not exist in the HTML spec
fn main() {
html! {
<invalidtagname></invalidtagname>
};
}
error: invalidtagname is not a valid HTML tag.
If you are trying to use a valid HTML tag, perhaps there's a typo?
If you are trying to use a custom component, please capitalize the component name.
custom components: https://chinedufn.github.io/percy/html-macro/custom-components/index.html
--> src/tests/ui/invalid_html_tag.rs
|
| <invalidtagname></invalidtagname>
| ^^^^^^^^^^^^^^
on create element without key
You set the on_create_element
but did not set a key.
//! # To Run
//!
//! cargo test -p html-macro-test --lib ui -- trybuild=on_create_element_without_key.rs
extern crate percy_dom;
use percy_dom::prelude::*;
// Used the `on_create_element` attribute without providing a key attribute.
fn main() {
html! {
<div on_create_element = ||{} >
</div>
};
}
error: Whenever you use the `on_create_element=...` attribute,
you must also use must use the `key="..."` attribute.
Documentation:
-> https://chinedufn.github.io/percy/html-macro/real-elements-and-nodes/on-create-elem/index.html
--> src/tests/ui/on_create_element_without_key.rs
|
| <div on_create_element = ||{} >
| ^^^^^^^^^^^^^^^^^
on remove element without key
You set the on_remove_element
but did not set a key.
//! # To Run
//!
//! cargo test -p html-macro-test --lib ui -- trybuild=on_remove_element_without_key.rs
extern crate percy_dom;
use percy_dom::prelude::*;
// Used the `on_remove_element` attribute without providing a key attribute.
fn main() {
html! {
<div on_remove_element = ||{} >
</div>
};
}
error: Whenever you use the `on_remove_element=...` attribute,
you must also use must use the `key="..."` attribute.
Documentation:
-> https://chinedufn.github.io/percy/html-macro/real-elements-and-nodes/on-remove-elem/index.html
--> src/tests/ui/on_remove_element_without_key.rs
|
| <div on_remove_element = ||{} >
| ^^^^^^^^^^^^^^^^^