From 83e5e98641fdb35b164c80e3f62d931ca94bcc84 Mon Sep 17 00:00:00 2001 From: Selimaj Dev Date: Fri, 29 May 2026 08:52:30 +0200 Subject: [PATCH 1/6] Added mist.toml --- Mist.toml | 1 + mist-test/Mist.toml | 1 + 2 files changed, 2 insertions(+) create mode 100644 Mist.toml create mode 100644 mist-test/Mist.toml diff --git a/Mist.toml b/Mist.toml new file mode 100644 index 0000000..7a019d9 --- /dev/null +++ b/Mist.toml @@ -0,0 +1 @@ +package = "main.mist" diff --git a/mist-test/Mist.toml b/mist-test/Mist.toml new file mode 100644 index 0000000..7a019d9 --- /dev/null +++ b/mist-test/Mist.toml @@ -0,0 +1 @@ +package = "main.mist" From b74da3255a9dd05d5b0b078a91f3d512a2572904 Mon Sep 17 00:00:00 2001 From: Selimaj Dev Date: Fri, 29 May 2026 08:58:42 +0200 Subject: [PATCH 2/6] Init mist-api --- Cargo.lock | 4 ++++ Cargo.toml | 2 ++ crates/mist-api/Cargo.toml | 10 ++++++++++ crates/mist-api/src/lib.mist | 2 ++ 4 files changed, 18 insertions(+) create mode 100644 crates/mist-api/Cargo.toml create mode 100644 crates/mist-api/src/lib.mist diff --git a/Cargo.lock b/Cargo.lock index 70d4730..410ddd2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -455,6 +455,10 @@ dependencies = [ "tower-lsp", ] +[[package]] +name = "mist-api" +version = "0.1.0" + [[package]] name = "mist-codegen" version = "0.1.2" diff --git a/Cargo.toml b/Cargo.toml index d02d359..db6ae06 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,7 @@ members = [ "crates/parser", "crates/analyzer", "crates/codegen", + "crates/mist-api", ] exclude = [ @@ -39,6 +40,7 @@ exclude = [ mist-parser = { path = "crates/parser", version = "0.1.6" } mist-analyzer = { path = "crates/analyzer", version = "0.0.3" } mist-codegen = { path = "crates/codegen", version = "0.1.2" } +mist-api = { path = "crates/mist-api", version = "0.1.0" } [[bin]] name = "mist" diff --git a/crates/mist-api/Cargo.toml b/crates/mist-api/Cargo.toml new file mode 100644 index 0000000..162d0a9 --- /dev/null +++ b/crates/mist-api/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "mist-api" +version = "0.1.0" +edition = "2024" + +[dependencies] + +[lib] +name = "mist-api" +path = ".mist/src/lib.rs" diff --git a/crates/mist-api/src/lib.mist b/crates/mist-api/src/lib.mist new file mode 100644 index 0000000..bdff885 --- /dev/null +++ b/crates/mist-api/src/lib.mist @@ -0,0 +1,2 @@ +void test() { +} \ No newline at end of file From 371365b8cf42e71d7e9fa6d044885ec137dd5205 Mon Sep 17 00:00:00 2001 From: Selimaj Dev Date: Fri, 29 May 2026 09:04:58 +0200 Subject: [PATCH 3/6] Separated mist api --- Cargo.lock | 13 ++++++++----- Cargo.toml | 11 +---------- crates/mist-api/Cargo.toml | 7 ++++++- {src => crates/mist-api/src}/builder.rs | 0 crates/mist-api/src/lib.mist | 4 ++-- {src => crates/mist-api/src}/transpiler.mist | 0 src/_header.rs | 3 --- src/main.mist | 5 ++--- 8 files changed, 19 insertions(+), 24 deletions(-) rename {src => crates/mist-api/src}/builder.rs (100%) rename {src => crates/mist-api/src}/transpiler.mist (100%) delete mode 100644 src/_header.rs diff --git a/Cargo.lock b/Cargo.lock index 410ddd2..ed7f616 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -458,6 +458,13 @@ dependencies = [ [[package]] name = "mist-api" version = "0.1.0" +dependencies = [ + "cargo_metadata", + "mist-codegen", + "mist-parser", + "serde", + "serde_json", +] [[package]] name = "mist-codegen" @@ -470,12 +477,8 @@ dependencies = [ name = "mist-lang" version = "0.0.5-alpha0" dependencies = [ - "cargo_metadata", "mist-analyzer", - "mist-codegen", - "mist-parser", - "serde", - "serde_json", + "mist-api", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index db6ae06..429fcec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,13 +16,8 @@ include = [ ] [dependencies] -mist-parser = { workspace = true } mist-analyzer = { workspace = true } -mist-codegen = { workspace = true } - -serde = { version = "1.0.228", features = ["serde_derive"] } -serde_json = "1.0.149" -cargo_metadata = "0.23.1" +mist-api = { workspace = true } [workspace] members = [ @@ -50,10 +45,6 @@ path = ".mist/src/main.rs" name = "mist-lsp" path = ".mist/lsp/main.rs" -[[bin]] -name = "mist-header" -path = "src/_header.rs" - [[bin]] name = "mist-analyzer" path = ".mist/src/analyzer.rs" diff --git a/crates/mist-api/Cargo.toml b/crates/mist-api/Cargo.toml index 162d0a9..6f17795 100644 --- a/crates/mist-api/Cargo.toml +++ b/crates/mist-api/Cargo.toml @@ -4,7 +4,12 @@ version = "0.1.0" edition = "2024" [dependencies] +serde = { version = "1.0.228", features = ["serde_derive"] } +serde_json = "1.0.149" +cargo_metadata = "0.23.1" +mist-parser = { workspace = true } +mist-codegen = { workspace = true } [lib] -name = "mist-api" +name = "mist_api" path = ".mist/src/lib.rs" diff --git a/src/builder.rs b/crates/mist-api/src/builder.rs similarity index 100% rename from src/builder.rs rename to crates/mist-api/src/builder.rs diff --git a/crates/mist-api/src/lib.mist b/crates/mist-api/src/lib.mist index bdff885..450ee41 100644 --- a/crates/mist-api/src/lib.mist +++ b/crates/mist-api/src/lib.mist @@ -1,2 +1,2 @@ -void test() { -} \ No newline at end of file +pub mod builder; +pub mod transpiler; \ No newline at end of file diff --git a/src/transpiler.mist b/crates/mist-api/src/transpiler.mist similarity index 100% rename from src/transpiler.mist rename to crates/mist-api/src/transpiler.mist diff --git a/src/_header.rs b/src/_header.rs deleted file mode 100644 index 6f096e5..0000000 --- a/src/_header.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod builder; - -fn main() {} diff --git a/src/main.mist b/src/main.mist index 757b079..cf8ead0 100644 --- a/src/main.mist +++ b/src/main.mist @@ -1,9 +1,8 @@ use ; use ; use ; - -pub mod builder; -pub mod transpiler; +use ; +use ; void main() { Vec args = env::args().collect(); From 3fa04cddd0270206516a758cdebcaa204245b933 Mon Sep 17 00:00:00 2001 From: Selimaj Dev Date: Fri, 29 May 2026 09:17:51 +0200 Subject: [PATCH 4/6] mist api lsp --- crates/mist-api/Cargo.toml | 4 ++++ crates/mist-api/src/main.mist | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 crates/mist-api/src/main.mist diff --git a/crates/mist-api/Cargo.toml b/crates/mist-api/Cargo.toml index 6f17795..3e112ea 100644 --- a/crates/mist-api/Cargo.toml +++ b/crates/mist-api/Cargo.toml @@ -13,3 +13,7 @@ mist-codegen = { workspace = true } [lib] name = "mist_api" path = ".mist/src/lib.rs" + +[[bin]] +name = "mist_lsp" +path = ".mist/lsp/main.rs" diff --git a/crates/mist-api/src/main.mist b/crates/mist-api/src/main.mist new file mode 100644 index 0000000..87e4cda --- /dev/null +++ b/crates/mist-api/src/main.mist @@ -0,0 +1,4 @@ +pub mod builder; +pub mod transpiler; + +void main() {} \ No newline at end of file From 86a1df7ad529f08dcb5e3e027217a2d78e805047 Mon Sep 17 00:00:00 2001 From: Selimaj Dev Date: Fri, 29 May 2026 16:13:52 +0200 Subject: [PATCH 5/6] Mist Module system basic structure --- crates/mist-api/src/lib.mist | 3 +- crates/mist-api/src/main.mist | 1 + crates/mist-api/src/modules.mist | 61 ++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 crates/mist-api/src/modules.mist diff --git a/crates/mist-api/src/lib.mist b/crates/mist-api/src/lib.mist index 450ee41..ac42ad7 100644 --- a/crates/mist-api/src/lib.mist +++ b/crates/mist-api/src/lib.mist @@ -1,2 +1,3 @@ pub mod builder; -pub mod transpiler; \ No newline at end of file +pub mod transpiler; +pub mod modules; \ No newline at end of file diff --git a/crates/mist-api/src/main.mist b/crates/mist-api/src/main.mist index 87e4cda..a9d9a94 100644 --- a/crates/mist-api/src/main.mist +++ b/crates/mist-api/src/main.mist @@ -1,4 +1,5 @@ pub mod builder; pub mod transpiler; +pub mod modules; void main() {} \ No newline at end of file diff --git a/crates/mist-api/src/modules.mist b/crates/mist-api/src/modules.mist new file mode 100644 index 0000000..fa806cc --- /dev/null +++ b/crates/mist-api/src/modules.mist @@ -0,0 +1,61 @@ +use ; +use ; +use ; +use ; + +pub class Module { + pub String name; + pub PathBuf path; + pub Vec children; + + pub constructor(PathBuf mist_path) { + self.children = new Vec(); + self.name = mist_path.file_stem() + .and_then(|var s| s.to_str()).expect("Failed to get module name").to_string(); + self.path = mist_path; + + if (self.path.is_dir()) { + var entries = match (fs::read_dir(&self.path)) { + Ok[entries] => entries; + Err[e] => { + eprintln!( + "error: failed to read directory {}\n {}", + self.path.display(), + e + ); + + process::exit(1); + } + }; + + for (entry : entries) { + var entry = match (entry) { + Ok[entry] => entry; + Err[e] => { + eprintln!("error: failed to read directory entry\n {}", e); + + process::exit(1); + } + }; + + PathBuf child_path = entry.path(); + + self.children.push(new Module(child_path)); + } + } + } +} + +bool should_skip(Path* source, Path* output) { + var src_time = fs::metadata(source) + .ok() + .and_then(|var v| v.modified().ok()); + + var out_time = fs::metadata(output) + .ok() + .and_then(|var v| v.modified().ok()); + + out_time + .map(|var out_time| out_time >= src_time.unwrap()) + .unwrap_or_default() +} From 0b3c4b81439d170b4e1f85f0eee95a582115f694 Mon Sep 17 00:00:00 2001 From: Selimaj Dev Date: Fri, 29 May 2026 20:33:30 +0200 Subject: [PATCH 6/6] Module structure --- crates/mist-api/src/modules.mist | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/crates/mist-api/src/modules.mist b/crates/mist-api/src/modules.mist index fa806cc..c186634 100644 --- a/crates/mist-api/src/modules.mist +++ b/crates/mist-api/src/modules.mist @@ -8,10 +8,9 @@ pub class Module { pub PathBuf path; pub Vec children; - pub constructor(PathBuf mist_path) { + pub constructor(String name, PathBuf mist_path, PathBuf rust_path) { self.children = new Vec(); - self.name = mist_path.file_stem() - .and_then(|var s| s.to_str()).expect("Failed to get module name").to_string(); + self.name = name; self.path = mist_path; if (self.path.is_dir()) { @@ -40,12 +39,32 @@ pub class Module { PathBuf child_path = entry.path(); - self.children.push(new Module(child_path)); + String child_name = child_path.file_stem() + .and_then(|var s| s.to_str()) + .expect("Failed to get module name") + .to_string(); + + PathBuf child_output = rust_path.join(&child_name).with_extension("rs"); + + if (should_skip(&child_path, &child_output)) { + continue; + } + + self.children.push(new Module(child_name, child_path, child_output)); } } } } +pub Module new_package(PathBuf mist_path, PathBuf rust_path) { + String name = mist_path.file_stem() + .and_then(|var s| s.to_str()) + .expect("Failed to get module name") + .to_string(); + + new Module(name, mist_path, rust_path) +} + bool should_skip(Path* source, Path* output) { var src_time = fs::metadata(source) .ok()