Hotreload the contents of for loops, if chains, component bodies, props, attributes, and any literals discovered in rsx!
Add a TUI renderer to the CLI.
Improve the CLI build system to be async and parallel.
Refactor RSX to allow partial expansion of expressions.
Merge autofmt implementations for consistency.
Merge the representation of elements and components under the hood.
Add a diagnostics system for rsx for improved error messages.
Drop interprocess and move to websockets for communication between the CLI and the server.
Assign IDs to nodes and attributes in a stable way to be used in non compiler contexts.
Add hotreloading to any body of component/for loop/if chain/etc.
---------
Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
Co-authored-by: Liam Mitchell <liamkarlmitchell@gmail.com>
* autocomplete rsx
* hide the completions module
* fix autocomplete for identifiers that start with a raw identifier
* add field completion hints for props
* remove extra import
* Revert "add field completion hints for props"
This reverts commit 194899c73783e0f9b5d601d53365746d838f2048.
* fix autocomplete inside raw expressions
* fix autofmt
* feat: just use regular ifmt if it's compatible
reuses the tokens for ifmt so RA provides its HIR lowering on simple formatted strings
* fix merging ifmt strings
* add a better error message for components called like functions
---------
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
This commit adds subtree memoization to Dioxus.
Subtree memoization is basically a compile-time step that drastically
reduces the amount of work the diffing engine needs to do at runtime by
extracting non-changing nodes out into a static "template." Templates
are then understood by the various renderers in the ecosystem as a
faster way of rendering the same items.
For example, in the web, templates are simply a set of DOM Nodes created
once and then cloned later. This is the same pattern frameworks like Lithtml
and SolidJS use to achieve near-perfect performance.
Subtree memoization adds an additional level of complexity to Dioxus. The RSX
macro needs to be much smarter to identify changing/nonchanging nodes and
generate a mapping between the Template and its runtime counterparts.
This commit represents a working starter point for this work, adding support
for templates for the web, desktop, liveview, ssr, and native-core renderers.
In the future we will try to shrink code generation, generally improve
performance, and simplify our implementation.