sink.rs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. use dioxus_autofmt::*;
  2. use proc_macro2::TokenStream as TokenStream2;
  3. use syn::{Attribute, Meta};
  4. #[test]
  5. fn formats_block() {
  6. let block = r#"
  7. div {
  8. div {
  9. class: "asd",
  10. class: "asd",class: "asd",class: "asd",class: "asd",class: "asd",
  11. key: "ddd",
  12. onclick: move |_| {
  13. let blah = 120;
  14. true
  15. },
  16. blah: 123,
  17. onclick: move |_| {
  18. let blah = 120;
  19. true
  20. },
  21. onclick: move |_| {
  22. let blah = 120;
  23. true
  24. },
  25. onclick: move |_| {
  26. let blah = 120;
  27. true
  28. },
  29. div {
  30. div {
  31. "hi"
  32. }
  33. h2 {
  34. class: "asd",
  35. }
  36. }
  37. }
  38. }
  39. "#;
  40. let formatted = fmt_block(block).unwrap();
  41. print!("{formatted}");
  42. }
  43. #[test]
  44. fn parse_comment() {
  45. let block = r#"
  46. div {
  47. adsasd: "asd", // this is a comment
  48. }
  49. "#;
  50. let parsed: TokenStream2 = syn::parse_str(block).unwrap();
  51. dbg!(parsed);
  52. }
  53. #[test]
  54. fn formats_component() {
  55. let block = r#"
  56. Component {
  57. adsasd: "asd", // this is a comment
  58. onclick: move |_| {
  59. let blah = 120;
  60. let blah = 120;
  61. },
  62. }
  63. "#;
  64. let formatted = fmt_block(block).unwrap();
  65. print!("{formatted}");
  66. }
  67. #[test]
  68. fn formats_component_man_props() {
  69. let block = r#"
  70. Component {
  71. ..MyProps {
  72. val: 123
  73. },
  74. adsasd: "asd", // this is a comment
  75. onclick: move |_| {
  76. let blah = 120;
  77. },
  78. }
  79. "#;
  80. let formatted = fmt_block(block).unwrap();
  81. print!("{formatted}");
  82. }
  83. #[test]
  84. fn formats_document() {
  85. let block = r#"
  86. rsx!{
  87. Component {
  88. adsasd: "asd", // this is a comment
  89. onclick: move |_| {
  90. let blah = 120;
  91. },
  92. }
  93. }
  94. "#;
  95. let formatted = get_format_blocks(block);
  96. print!("{formatted:?}");
  97. }
  98. #[test]
  99. fn formats_valid_rust_src() {
  100. let src = r#"
  101. //
  102. rsx! {
  103. div {}
  104. div {
  105. h3 {"asd"
  106. }
  107. }
  108. }
  109. "#;
  110. let formatted = get_format_blocks(src);
  111. println!("{formatted:?}");
  112. }
  113. #[test]
  114. fn formats_valid_rust_src_with_indents() {
  115. let mut src = r#"
  116. #[inline_props]
  117. fn NavItem<'a>(cx: Scope, to: &'static str, children: Element<'a>, icon: Shape) -> Element {
  118. const ICON_SIZE: u32 = 36;
  119. rsx! {
  120. div {
  121. h1 {"thing"}
  122. }
  123. }
  124. }
  125. "#
  126. .to_string();
  127. let formatted = get_format_blocks(&src);
  128. let block = formatted.into_iter().next().unwrap();
  129. // println!("{}", &src[block.start..block.end]);
  130. // println!("{}", &src[block.start..block.end - 1]);
  131. src.replace_range(
  132. block.start - 1..block.end + 1,
  133. &format!("{{ {} }}", &block.formatted),
  134. // &format!("{{ {} }}", &block.formatted),
  135. );
  136. println!("{src}");
  137. println!("\tthing");
  138. // for block in formatted {
  139. // println!("{}", block.formatted);
  140. // }
  141. }