dioxus/packages/autofmt
2022-12-23 15:53:39 -06:00
..
src Merge branch 'upstream' into fix-non-str-attributes 2022-12-23 15:53:39 -06:00
tests chore: fix rsx printer 2022-12-19 16:20:02 -08:00
Cargo.toml Renderers are now packages, not features. (#387) 2022-07-09 15:15:20 -04:00
README.md wip: add whitespace parsing to rsx 2022-09-30 10:51:53 -07:00

This crate autofmts blocks of rsx!

This crate formats rsx! by parsing call bodies and pretty-printing them back out.

Todo:

Sorted roughly in order of what's possible

  • Oneline rsx! calls - blocker because this wrecks formatting
  • Nested RSX calls (important) - unnecessary but desirable
  • RSX edits overstepping each other
  • Collapse components and elements under syntax -
  • Don't eat comments in exprs
  • Format regular exprs
  • Fix prettyplease around chaining
  • Don't eat comments in prettyplease

Technique

div { div {} div {} }

div

possible line break div div

string of possible items within a nesting div { attr_pair expr text comment } a nesting is either a component or an element

idea: collect all items into a queue q

section {
    div {
        h1 { p { "asdasd" } }
        h1 { p { "asdasd" } }
    }
}

section {}

// space // space // space

3 - section 3 - section div 3 - section div h1 3 - section div h1 p 3 - section div h1 p text 3 - section 3 - section div 3 - section div h1 3 - section div h1 p 3 - section div h1 p text

block

  • when we hit the end of a trail, we can make a decision what needs to be hard breaked
  • most nestings cannot be merged into a single one, so at some point we need to write the line break
  • this is the scan section. we scan forward until it's obvious where to place a hard break
  • when a line is finished, we can print it out by unloading our queued items
  • never double nested

Terms

  • break is a whitespace than can flex, dependent on the situation