Browse Source

wip: use stateful buffer

Jonathan Kelley 3 years ago
parent
commit
a2a194ca40

+ 17 - 0
packages/autofmt/src/buffer.rs

@@ -0,0 +1,17 @@
+use std::fmt::Result;
+
+struct Buffer {
+    buf: String,
+    cur_line: usize,
+    cur_indent: usize,
+}
+
+impl Buffer {
+    fn write_tabs(&mut self, num: usize) -> Result {
+        todo!()
+    }
+
+    fn new_line(&mut self) -> Result {
+        todo!()
+    }
+}

+ 10 - 5
packages/autofmt/src/element.rs

@@ -1,12 +1,18 @@
 use crate::{util::*, write_ident};
 use dioxus_rsx::*;
-use std::{fmt, fmt::Write};
+use std::{fmt, fmt::Result, fmt::Write};
 
 enum ShortOptimization {
     // Special because we want to print the closing bracket immediately
     Empty,
+
+    // Special optimization to put everything on the same line
     Oneliner,
+
+    // Optimization where children flow but props remain fixed on top
     PropsOnTop,
+
+    // The noisiest optimization where everything flows
     NoOpt,
 }
 
@@ -20,9 +26,8 @@ pub fn write_element(
     }: &Element,
     buf: &mut String,
     lines: &[&str],
-    node: &BodyNode,
     indent: usize,
-) -> fmt::Result {
+) -> Result {
     /*
         1. Write the tag
         2. Write the key
@@ -157,7 +162,7 @@ fn write_attributes(
     attributes: &[ElementAttrNamed],
     sameline: bool,
     indent: usize,
-) -> fmt::Result {
+) -> Result {
     let mut attr_iter = attributes.iter().peekable();
 
     while let Some(attr) = attr_iter.next() {
@@ -178,7 +183,7 @@ fn write_attributes(
     Ok(())
 }
 
-fn write_attribute(buf: &mut String, attr: &ElementAttrNamed, indent: usize) -> fmt::Result {
+fn write_attribute(buf: &mut String, attr: &ElementAttrNamed, indent: usize) -> Result {
     match &attr.attr {
         ElementAttr::AttrText { name, value } => {
             write!(buf, "{name}: \"{value}\"", value = value.value())?;

+ 1 - 1
packages/autofmt/src/ident.rs

@@ -11,7 +11,7 @@ pub fn write_ident(
     indent: usize,
 ) -> fmt::Result {
     match node {
-        BodyNode::Element(el) => write_element(el, buf, lines, node, indent),
+        BodyNode::Element(el) => write_element(el, buf, lines, indent),
         BodyNode::Component(component) => write_component(component, buf, indent, lines),
         BodyNode::Text(text) => write_text(text, buf, indent),
         BodyNode::RawExpr(exp) => write_raw_expr(exp, indent, lines, buf),

+ 1 - 0
packages/autofmt/src/lib.rs

@@ -5,6 +5,7 @@ use proc_macro2::TokenStream as TokenStream2;
 use quote::ToTokens;
 
 mod block;
+mod buffer;
 mod children;
 mod component;
 mod element;