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 = ||{} >
   |              ^^^^^^^^^^^^^^^^^