diff --git a/.gitignore b/.gitignore index 2f7896d..0b00ca9 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ target/ +tests/ diff --git a/Cargo.lock b/Cargo.lock index 61fd370..ae8a130 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -77,9 +77,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "atomic-waker" @@ -147,6 +147,46 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clap" +version = "4.5.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed93b9805f8ba930df42c2590f05453d5ec36cbb85d018868a5b24d31f6ac000" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "379026ff283facf611b0ea629334361c4211d1b12ee01024eec1591133b04120" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + [[package]] name = "colorchoice" version = "1.0.2" @@ -364,6 +404,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.3.9" @@ -533,6 +579,16 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jrpc-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "libjrpc", + "log", +] + [[package]] name = "jrpc-syntax" version = "0.0.1" @@ -589,9 +645,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "log" -version = "0.4.22" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "memchr" @@ -1034,6 +1090,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "subtle" version = "2.6.1" @@ -1525,7 +1587,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8a39a15d1ae2077688213611209849cad40e9e5cccf6e61951a425850677ff3" dependencies = [ "anyhow", - "heck", + "heck 0.4.1", "indexmap", "wasm-metadata", "wit-bindgen-core", diff --git a/Cargo.toml b/Cargo.toml index 5dde922..d92b644 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,14 @@ +[package] +edition = "2021" +name = "jrpc-cli" +version = "0.1.0" + [workspace] resolver = "2" -members = ["crates/zed", "crates/libjrpc"] +members = [".", "zed", "libjrpc"] + +[dependencies] +anyhow = "1" +clap = { version = "4", features = ["derive"] } +libjrpc = { path = "libjrpc" } +log = "0.4.27" diff --git a/crates/libjrpc/.gitignore b/libjrpc/.gitignore similarity index 100% rename from crates/libjrpc/.gitignore rename to libjrpc/.gitignore diff --git a/crates/libjrpc/Cargo.toml b/libjrpc/Cargo.toml similarity index 100% rename from crates/libjrpc/Cargo.toml rename to libjrpc/Cargo.toml diff --git a/crates/libjrpc/import.jrpc b/libjrpc/import.jrpc similarity index 100% rename from crates/libjrpc/import.jrpc rename to libjrpc/import.jrpc diff --git a/crates/libjrpc/src/compile.rs b/libjrpc/src/compile.rs similarity index 100% rename from crates/libjrpc/src/compile.rs rename to libjrpc/src/compile.rs diff --git a/crates/libjrpc/src/ir.rs b/libjrpc/src/ir.rs similarity index 100% rename from crates/libjrpc/src/ir.rs rename to libjrpc/src/ir.rs diff --git a/crates/libjrpc/src/lib.rs b/libjrpc/src/lib.rs similarity index 98% rename from crates/libjrpc/src/lib.rs rename to libjrpc/src/lib.rs index 0457980..b3175e6 100644 --- a/crates/libjrpc/src/lib.rs +++ b/libjrpc/src/lib.rs @@ -3,7 +3,7 @@ mod ir; mod parser; mod process; mod shared; -mod targets; +pub mod targets; mod tokenizer; pub use ir::IR; diff --git a/crates/libjrpc/src/parser.rs b/libjrpc/src/parser.rs similarity index 100% rename from crates/libjrpc/src/parser.rs rename to libjrpc/src/parser.rs diff --git a/crates/libjrpc/src/process.rs b/libjrpc/src/process.rs similarity index 100% rename from crates/libjrpc/src/process.rs rename to libjrpc/src/process.rs diff --git a/crates/libjrpc/src/shared.rs b/libjrpc/src/shared.rs similarity index 100% rename from crates/libjrpc/src/shared.rs rename to libjrpc/src/shared.rs diff --git a/crates/libjrpc/src/targets/mod.rs b/libjrpc/src/targets/mod.rs similarity index 100% rename from crates/libjrpc/src/targets/mod.rs rename to libjrpc/src/targets/mod.rs diff --git a/crates/libjrpc/src/targets/rust.rs b/libjrpc/src/targets/rust.rs similarity index 100% rename from crates/libjrpc/src/targets/rust.rs rename to libjrpc/src/targets/rust.rs diff --git a/crates/libjrpc/src/tokenizer.rs b/libjrpc/src/tokenizer.rs similarity index 100% rename from crates/libjrpc/src/tokenizer.rs rename to libjrpc/src/tokenizer.rs diff --git a/crates/libjrpc/templates/CSharp/CSharp.csproj b/libjrpc/templates/CSharp/CSharp.csproj similarity index 100% rename from crates/libjrpc/templates/CSharp/CSharp.csproj rename to libjrpc/templates/CSharp/CSharp.csproj diff --git a/crates/libjrpc/templates/CSharp/JRpcClient.cs b/libjrpc/templates/CSharp/JRpcClient.cs similarity index 100% rename from crates/libjrpc/templates/CSharp/JRpcClient.cs rename to libjrpc/templates/CSharp/JRpcClient.cs diff --git a/crates/libjrpc/templates/CSharp/JRpcServer.cs b/libjrpc/templates/CSharp/JRpcServer.cs similarity index 100% rename from crates/libjrpc/templates/CSharp/JRpcServer.cs rename to libjrpc/templates/CSharp/JRpcServer.cs diff --git a/crates/libjrpc/templates/CSharp/JRpcTransport.cs b/libjrpc/templates/CSharp/JRpcTransport.cs similarity index 100% rename from crates/libjrpc/templates/CSharp/JRpcTransport.cs rename to libjrpc/templates/CSharp/JRpcTransport.cs diff --git a/crates/libjrpc/templates/Dart/analysis_options.yaml b/libjrpc/templates/Dart/analysis_options.yaml similarity index 100% rename from crates/libjrpc/templates/Dart/analysis_options.yaml rename to libjrpc/templates/Dart/analysis_options.yaml diff --git a/crates/libjrpc/templates/Dart/base.dart b/libjrpc/templates/Dart/base.dart similarity index 100% rename from crates/libjrpc/templates/Dart/base.dart rename to libjrpc/templates/Dart/base.dart diff --git a/crates/libjrpc/templates/Dart/pubspec.yaml b/libjrpc/templates/Dart/pubspec.yaml similarity index 100% rename from crates/libjrpc/templates/Dart/pubspec.yaml rename to libjrpc/templates/Dart/pubspec.yaml diff --git a/crates/libjrpc/templates/Dart/service_client.dart b/libjrpc/templates/Dart/service_client.dart similarity index 100% rename from crates/libjrpc/templates/Dart/service_client.dart rename to libjrpc/templates/Dart/service_client.dart diff --git a/crates/libjrpc/templates/Rust/.editorconfig b/libjrpc/templates/Rust/.editorconfig similarity index 100% rename from crates/libjrpc/templates/Rust/.editorconfig rename to libjrpc/templates/Rust/.editorconfig diff --git a/crates/libjrpc/templates/Rust/.gitignore b/libjrpc/templates/Rust/.gitignore similarity index 100% rename from crates/libjrpc/templates/Rust/.gitignore rename to libjrpc/templates/Rust/.gitignore diff --git a/crates/libjrpc/templates/Rust/Cargo.toml b/libjrpc/templates/Rust/Cargo.toml similarity index 100% rename from crates/libjrpc/templates/Rust/Cargo.toml rename to libjrpc/templates/Rust/Cargo.toml diff --git a/crates/libjrpc/templates/Rust/src/lib.rs b/libjrpc/templates/Rust/src/lib.rs similarity index 100% rename from crates/libjrpc/templates/Rust/src/lib.rs rename to libjrpc/templates/Rust/src/lib.rs diff --git a/crates/libjrpc/templates/TypeScript/ts_base.ts b/libjrpc/templates/TypeScript/ts_base.ts similarity index 100% rename from crates/libjrpc/templates/TypeScript/ts_base.ts rename to libjrpc/templates/TypeScript/ts_base.ts diff --git a/crates/libjrpc/templates/TypeScript/ts_service_base.ts b/libjrpc/templates/TypeScript/ts_service_base.ts similarity index 100% rename from crates/libjrpc/templates/TypeScript/ts_service_base.ts rename to libjrpc/templates/TypeScript/ts_service_base.ts diff --git a/crates/libjrpc/templates/TypeScript/ts_service_client.ts b/libjrpc/templates/TypeScript/ts_service_client.ts similarity index 100% rename from crates/libjrpc/templates/TypeScript/ts_service_client.ts rename to libjrpc/templates/TypeScript/ts_service_client.ts diff --git a/crates/libjrpc/templates/TypeScript/ts_service_server.ts b/libjrpc/templates/TypeScript/ts_service_server.ts similarity index 100% rename from crates/libjrpc/templates/TypeScript/ts_service_server.ts rename to libjrpc/templates/TypeScript/ts_service_server.ts diff --git a/crates/libjrpc/test.jrpc b/libjrpc/test.jrpc similarity index 100% rename from crates/libjrpc/test.jrpc rename to libjrpc/test.jrpc diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..630bafd --- /dev/null +++ b/src/main.rs @@ -0,0 +1,52 @@ +use anyhow::Result; +use clap::{Parser, Subcommand}; +use libjrpc::{targets::rust::RustCompiler, FileProcessor}; + +#[derive(Parser)] +struct Cli { + #[command(subcommand)] + command: Commands, + #[arg(short, long, global = true)] + verbose: bool, +} + +#[derive(Subcommand)] +enum Commands { + Compile { + input: String, + output: String, + #[arg(short, long)] + definition: Option, + }, + Targets, +} + +pub fn main() -> Result<()> { + let cli = Cli::parse(); + + if cli.verbose { + log::set_max_level(log::LevelFilter::Trace); + } else { + log::set_max_level(log::LevelFilter::Warn); + } + + match cli.command { + Commands::Compile { + input, + output, + definition, + } => { + let mut fp = FileProcessor::new(); + let ir = fp.start_compile(&input)?; + + libjrpc::targets::compile::(ir, &output)?; + + //TODO: Implement definition output! + } + Commands::Targets => { + panic!("Not yet implemented!") + } + } + + Ok(()) +} diff --git a/test.ts b/test.ts new file mode 100644 index 0000000..e69de29 diff --git a/crates/zed/.gitignore b/zed/.gitignore similarity index 100% rename from crates/zed/.gitignore rename to zed/.gitignore diff --git a/crates/zed/Cargo.toml b/zed/Cargo.toml similarity index 100% rename from crates/zed/Cargo.toml rename to zed/Cargo.toml diff --git a/crates/zed/extension.toml b/zed/extension.toml similarity index 100% rename from crates/zed/extension.toml rename to zed/extension.toml diff --git a/crates/zed/src/lib.rs b/zed/src/lib.rs similarity index 100% rename from crates/zed/src/lib.rs rename to zed/src/lib.rs