diff --git a/Cargo.lock b/Cargo.lock
index 4968a86..35bb919 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -17,6 +17,19 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "getrandom",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
[[package]]
name = "aho-corasick"
version = "1.1.3"
@@ -26,6 +39,12 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "allocator-api2"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
+
[[package]]
name = "anstream"
version = "0.6.13"
@@ -76,9 +95,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.81"
+version = "1.0.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247"
+checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
[[package]]
name = "arbitrary"
@@ -787,9 +806,13 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.14.3"
+version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
[[package]]
name = "heck"
@@ -1321,9 +1344,9 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.10.4"
+version = "1.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c"
+checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f"
dependencies = [
"aho-corasick",
"memchr",
@@ -1410,6 +1433,7 @@ dependencies = [
"rowan",
"rue-clvm",
"rue-parser",
+ "rue-typing",
]
[[package]]
@@ -1455,6 +1479,21 @@ dependencies = [
"walkdir",
]
+[[package]]
+name = "rue-typing"
+version = "0.1.1"
+dependencies = [
+ "ahash",
+ "anyhow",
+ "clvmr 0.6.1",
+ "hashbrown",
+ "id-arena",
+ "indexmap",
+ "num-bigint",
+ "num-traits",
+ "thiserror",
+]
+
[[package]]
name = "rustc-demangle"
version = "0.1.23"
@@ -2326,6 +2365,26 @@ dependencies = [
"linked-hash-map",
]
+[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.61",
+]
+
[[package]]
name = "zeroize"
version = "1.7.0"
diff --git a/Cargo.toml b/Cargo.toml
index a17e72f..f455dee 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -8,12 +8,12 @@ keywords = ["chia", "blockchain", "crypto"]
categories = ["cryptography::cryptocurrencies", "development-tools"]
[workspace.lints.rust]
+rust_2018_idioms = { level = "deny", priority = -1 }
+rust_2021_compatibility = { level = "deny", priority = -1 }
+future_incompatible = { level = "deny", priority = -1 }
+nonstandard_style = { level = "deny", priority = -1 }
unsafe_code = "deny"
-rust_2018_idioms = "deny"
-rust_2021_compatibility = "deny"
-future_incompatible = "deny"
non_ascii_idents = "deny"
-nonstandard_style = "deny"
unused_extern_crates = "deny"
trivial_casts = "deny"
trivial_numeric_casts = "deny"
@@ -26,7 +26,7 @@ missing_debug_implementations = "warn"
missing_copy_implementations = "warn"
[workspace.lints.clippy]
-all = "deny"
+all = { level = "deny", priority = -1 }
pedantic = { level = "warn", priority = -1 }
missing_errors_doc = "allow"
missing_panics_doc = "allow"
@@ -34,3 +34,33 @@ module_name_repetitions = "allow"
multiple_crate_versions = "allow"
must_use_candidate = "allow"
too_many_lines = "allow"
+
+[workspace.dependencies]
+rue-parser = { path = "./crates/rue-parser", version = "0.1.1" }
+rue-compiler = { path = "./crates/rue-compiler", version = "0.1.1" }
+rue-typing = { path = "./crates/rue-typing", version = "0.1.1" }
+rue-clvm = { path = "./crates/rue-clvm", version = "0.1.1" }
+rue-lexer = { path = "./crates/rue-lexer", version = "0.1.1" }
+clvmr_old = { version = "0.3.2", package = "clvmr" }
+clvmr = "0.6.1"
+clap = "4.5.4"
+hex = "0.4.3"
+clvm_tools_rs = "0.1.41"
+thiserror = "1.0.61"
+num-bigint = "0.4.6"
+num-traits = "0.2.19"
+num-derive = "0.4.2"
+id-arena = "2.2.1"
+indexmap = "2.2.6"
+rowan = "0.15.15"
+log = "0.4.21"
+indoc = "2.0.5"
+tokio = "1.37.0"
+tower-lsp = "0.20.0"
+clvm-utils = "0.6.0"
+toml = "0.8.12"
+serde = "1.0.197"
+walkdir = "2.5.0"
+anyhow = "1.0.86"
+hashbrown = "0.14.5"
+ahash = "0.8.11"
diff --git a/crates/rue-cli/Cargo.toml b/crates/rue-cli/Cargo.toml
index 952c6ac..9bc0913 100644
--- a/crates/rue-cli/Cargo.toml
+++ b/crates/rue-cli/Cargo.toml
@@ -15,12 +15,12 @@ categories = { workspace = true }
workspace = true
[dependencies]
-clap = { version = "4.5.4", features = ["derive"] }
-rue-parser = { path = "../../crates/rue-parser", version = "0.1.0" }
-rue-compiler = { path = "../../crates/rue-compiler", version = "0.1.0" }
-rue-clvm = { path = "../../crates/rue-clvm", version = "0.1.0" }
-clvmr = "0.6.1"
-hex = "0.4.3"
+clap = { workspace = true, features = ["derive"] }
+rue-parser = { workspace = true }
+rue-compiler = { workspace = true }
+rue-clvm = { workspace = true }
+clvmr = { workspace = true }
+hex = { workspace = true }
[[bin]]
name = "rue"
diff --git a/crates/rue-cli/src/main.rs b/crates/rue-cli/src/main.rs
index a64d8cc..c32db5c 100644
--- a/crates/rue-cli/src/main.rs
+++ b/crates/rue-cli/src/main.rs
@@ -5,7 +5,7 @@ use std::fs;
use clap::Parser;
use clvmr::{serde::node_to_bytes, Allocator, NodePtr};
use rue_clvm::{parse_clvm, run_clvm, stringify_clvm};
-use rue_compiler::{compile, Diagnostic, DiagnosticKind};
+use rue_compiler::{compile_raw, Diagnostic, DiagnosticKind};
use rue_parser::{line_col, parse, LineCol};
/// CLI tools for working with the Rue compiler.
@@ -20,23 +20,31 @@ enum Command {
/// A list of parameters to run the compiled program with.
#[clap(long, short = 'r')]
run: Option