mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-11-23 20:53:06 +00:00
WIP update templates
This commit is contained in:
parent
15ec138320
commit
6da1b531bb
4 changed files with 212 additions and 65 deletions
166
Cargo.lock
generated
166
Cargo.lock
generated
|
@ -29,6 +29,17 @@ dependencies = [
|
|||
"opaque-debug",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ahash"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
|
||||
dependencies = [
|
||||
"getrandom 0.2.8",
|
||||
"once_cell",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "0.7.20"
|
||||
|
@ -598,6 +609,40 @@ dependencies = [
|
|||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling"
|
||||
version = "0.14.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"darling_macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_core"
|
||||
version = "0.14.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"ident_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_macro"
|
||||
version = "0.14.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "data-encoding"
|
||||
version = "2.3.3"
|
||||
|
@ -630,6 +675,8 @@ dependencies = [
|
|||
"colored 2.0.0",
|
||||
"convert_case",
|
||||
"ctrlc",
|
||||
"dioxus-core",
|
||||
"dioxus-html",
|
||||
"dioxus-rsx",
|
||||
"dirs 4.0.0",
|
||||
"fern",
|
||||
|
@ -661,12 +708,43 @@ dependencies = [
|
|||
"zip 0.6.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dioxus-core"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bumpalo",
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
"indexmap",
|
||||
"log",
|
||||
"longest-increasing-subsequence",
|
||||
"rustc-hash",
|
||||
"serde",
|
||||
"slab",
|
||||
"smallbox",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dioxus-html"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"dioxus-core",
|
||||
"dioxus-rsx",
|
||||
"enumset",
|
||||
"euclid",
|
||||
"keyboard-types",
|
||||
"serde",
|
||||
"serde_repr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dioxus-rsx"
|
||||
version = "0.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dbbc06efd42a94671472910bd5aeb55b28d0d2683d30dfc6af0508917478beb5"
|
||||
dependencies = [
|
||||
"dioxus-core",
|
||||
"internment",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"serde",
|
||||
|
@ -737,6 +815,37 @@ dependencies = [
|
|||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "enumset"
|
||||
version = "1.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "19be8061a06ab6f3a6cf21106c873578bf01bd42ad15e0311a9c76161cb1c753"
|
||||
dependencies = [
|
||||
"enumset_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "enumset_derive"
|
||||
version = "0.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03e7b551eba279bf0fa88b83a46330168c1560a52a94f5126f892f0b364ab3e0"
|
||||
dependencies = [
|
||||
"darling",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "euclid"
|
||||
version = "0.22.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "failure"
|
||||
version = "0.1.8"
|
||||
|
@ -996,6 +1105,9 @@ name = "hashbrown"
|
|||
version = "0.12.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "headers"
|
||||
|
@ -1206,6 +1318,12 @@ version = "2.2.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005"
|
||||
|
||||
[[package]]
|
||||
name = "ident_case"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "0.2.3"
|
||||
|
@ -1278,6 +1396,16 @@ dependencies = [
|
|||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "internment"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2a798d7677f07d6f1e77be484ea8626ddb1566194de399f1206306820c406371"
|
||||
dependencies = [
|
||||
"hashbrown",
|
||||
"parking_lot",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ipconfig"
|
||||
version = "0.3.1"
|
||||
|
@ -1338,6 +1466,17 @@ dependencies = [
|
|||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "keyboard-types"
|
||||
version = "0.6.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"serde",
|
||||
"unicode-segmentation",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "kqueue"
|
||||
version = "1.0.7"
|
||||
|
@ -1422,6 +1561,12 @@ dependencies = [
|
|||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "longest-increasing-subsequence"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86"
|
||||
|
||||
[[package]]
|
||||
name = "lru-cache"
|
||||
version = "0.1.2"
|
||||
|
@ -2227,6 +2372,17 @@ dependencies = [
|
|||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_repr"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_urlencoded"
|
||||
version = "0.7.1"
|
||||
|
@ -2296,6 +2452,12 @@ dependencies = [
|
|||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallbox"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4679d6eef28b85020158619fc09769de89e90886c5de7157587d87cb72648faa"
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.10.0"
|
||||
|
|
|
@ -72,7 +72,10 @@ mlua = { version = "0.8.1", features = [
|
|||
"macros",
|
||||
] }
|
||||
ctrlc = "3.2.3"
|
||||
dioxus-rsx = "0.0.1"
|
||||
# dioxus-rsx = "0.0.1"
|
||||
dioxus-rsx = { path = "/home/evan/Desktop/github/dioxus/packages/rsx" }
|
||||
dioxus-html = { path = "/home/evan/Desktop/github/dioxus/packages/html" }
|
||||
dioxus-core = { path = "/home/evan/Desktop/github/dioxus/packages/core" }
|
||||
|
||||
[[bin]]
|
||||
path = "src/main.rs"
|
||||
|
|
|
@ -9,6 +9,7 @@ use std::{path::PathBuf, sync::Arc};
|
|||
use super::BuildManager;
|
||||
pub use crate::hot_reload::{find_rsx, DiffResult};
|
||||
use crate::CrateConfig;
|
||||
use dioxus_core::Template;
|
||||
pub use proc_macro2::TokenStream;
|
||||
pub use std::collections::HashMap;
|
||||
pub use std::sync::Mutex;
|
||||
|
@ -20,7 +21,7 @@ use syn::spanned::Spanned;
|
|||
use tokio::sync::broadcast;
|
||||
|
||||
pub struct HotReloadState {
|
||||
pub messages: broadcast::Sender<String>,
|
||||
pub messages: broadcast::Sender<Template<'static>>,
|
||||
pub build_manager: Arc<BuildManager>,
|
||||
pub last_file_rebuild: Arc<Mutex<FileMap>>,
|
||||
pub watcher_config: CrateConfig,
|
||||
|
@ -171,14 +172,3 @@ pub async fn hot_reload_handler(
|
|||
hot_reload_handle.await.unwrap();
|
||||
})
|
||||
}
|
||||
|
||||
// pub fn get_location(crate_path: &Path, path: &Path, ts: TokenStream) -> CodeLocation {
|
||||
// let span = ts.span().start();
|
||||
// let relative = path.strip_prefix(crate_path).unwrap();
|
||||
// CodeLocation::Dynamic(Box::new(OwnedCodeLocation {
|
||||
// file_path: relative.display().to_string(),
|
||||
// crate_path: crate_path.display().to_string(),
|
||||
// line: span.line as u32,
|
||||
// column: span.column as u32 + 1,
|
||||
// }))
|
||||
// }
|
||||
|
|
|
@ -8,7 +8,8 @@ use axum::{
|
|||
};
|
||||
use cargo_metadata::diagnostic::Diagnostic;
|
||||
use colored::Colorize;
|
||||
// use dioxus_rsx::try_parse_template;
|
||||
use dioxus_core::Template;
|
||||
use dioxus_rsx::CallBody;
|
||||
use notify::{RecommendedWatcher, Watcher};
|
||||
use syn::spanned::Spanned;
|
||||
|
||||
|
@ -116,7 +117,7 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> {
|
|||
std::thread::sleep(std::time::Duration::from_millis(100));
|
||||
let mut updated = false;
|
||||
if let Ok(evt) = evt {
|
||||
let mut messages = Vec::new();
|
||||
let mut messages: Vec<Template<'static>> = Vec::new();
|
||||
let mut needs_rebuild = false;
|
||||
for path in evt.paths.clone() {
|
||||
if path.extension().map(|p| p.to_str()).flatten() != Some("rs") {
|
||||
|
@ -138,55 +139,46 @@ pub async fn startup_hot_reload(port: u16, config: CrateConfig) -> Result<()> {
|
|||
}
|
||||
DiffResult::RsxChanged(changed) => {
|
||||
log::info!("🪁 reloading rsx");
|
||||
// for (old, new) in changed.into_iter() {
|
||||
// let hr = get_location(
|
||||
// &crate_dir,
|
||||
// &path.to_path_buf(),
|
||||
// old.to_token_stream(),
|
||||
// );
|
||||
// // get the original source code to preserve whitespace
|
||||
// let span = new.span();
|
||||
// let start = span.start();
|
||||
// let end = span.end();
|
||||
// let mut lines: Vec<_> = src
|
||||
// .lines()
|
||||
// .skip(start.line - 1)
|
||||
// .take(end.line - start.line + 1)
|
||||
// .collect();
|
||||
// if let Some(first) = lines.first_mut() {
|
||||
// *first = first.split_at(start.column).1;
|
||||
// }
|
||||
// if let Some(last) = lines.last_mut() {
|
||||
// // if there is only one line the start index of last line will be the start of the rsx!, not the start of the line
|
||||
// if start.line == end.line {
|
||||
// *last = last
|
||||
// .split_at(end.column - start.column)
|
||||
// .0;
|
||||
// } else {
|
||||
// *last = last.split_at(end.column).0;
|
||||
// }
|
||||
// }
|
||||
// let rsx = lines.join("\n");
|
||||
for (old, new) in changed.into_iter() {
|
||||
let old_start = old.span().start();
|
||||
|
||||
// let old_dyn_ctx = try_parse_template(
|
||||
// &format!("{}", old.tokens),
|
||||
// hr.to_owned(),
|
||||
// None,
|
||||
// )
|
||||
// .map(|(_, old_dyn_ctx)| old_dyn_ctx);
|
||||
// // if let Ok((template, _)) = try_parse_template(
|
||||
// // &rsx,
|
||||
// // hr.to_owned(),
|
||||
// // old_dyn_ctx.ok(),
|
||||
// // ) {
|
||||
// // messages.push(SetTemplateMsg(
|
||||
// // TemplateId(hr),
|
||||
// // template,
|
||||
// // ));
|
||||
// // } else {
|
||||
// // needs_rebuild = true;
|
||||
// // }
|
||||
// }
|
||||
if let (Ok(old_call_body), Ok(new_call_body)) = (
|
||||
syn::parse2::<CallBody>(old.tokens),
|
||||
syn::parse2::<CallBody>(new),
|
||||
) {
|
||||
let spndbg = format!(
|
||||
"{:?}",
|
||||
old_call_body.roots[0].span()
|
||||
);
|
||||
let root_col =
|
||||
spndbg[9..].split("..").next().unwrap();
|
||||
if let Ok(file) = path.strip_prefix(&crate_dir)
|
||||
{
|
||||
let line = old_start.line;
|
||||
let column = old_start.column;
|
||||
let location = file.display().to_string()
|
||||
+ ":"
|
||||
+ &line.to_string()
|
||||
+ ":"
|
||||
+ &column.to_string()
|
||||
+ ":"
|
||||
+ root_col;
|
||||
|
||||
if let Some(template) = new_call_body
|
||||
.update_template(
|
||||
Some(old_call_body),
|
||||
Box::leak(
|
||||
location.into_boxed_str(),
|
||||
),
|
||||
)
|
||||
{
|
||||
messages.push(template);
|
||||
} else {
|
||||
needs_rebuild = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue