From 9e0cf4cd35d160bce757ff2b7e28aad6b320a358 Mon Sep 17 00:00:00 2001 From: Richard Feldman Date: Sun, 2 Aug 2020 22:04:31 -0400 Subject: [PATCH] Restore CLI --- Cargo.lock | 145 +++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 4 +- cli/src/main.rs | 44 +++++---------- 3 files changed, 161 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4d26f9adda..6f505e2dc7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -214,6 +214,35 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "clap" +version = "3.0.0-beta.1" +source = "git+https://github.com/rtfeldman/clap#e1d83a78804a271b053d4d21f69b67f7eb01ad01" +dependencies = [ + "atty", + "bitflags", + "clap_derive", + "indexmap", + "lazy_static", + "strsim", + "termcolor", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap_derive" +version = "3.0.0-beta.1" +source = "git+https://github.com/rtfeldman/clap#e1d83a78804a271b053d4d21f69b67f7eb01ad01" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2 1.0.19", + "quote 1.0.7", + "syn 1.0.35", +] + [[package]] name = "cloudabi" version = "0.0.3" @@ -336,7 +365,7 @@ checksum = "70daa7ceec6cf143990669a04c7df13391d55fb27bd4079d252fca774ba244d8" dependencies = [ "atty", "cast", - "clap", + "clap 2.33.1", "criterion-plot", "csv", "itertools", @@ -891,6 +920,24 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d36fab90f82edc3c747f9d438e06cf0a491055896f2a279638bb5beed6c40177" +[[package]] +name = "hashbrown" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34f595585f103464d8d2f6e9864682d74c1601fed5e07d62b1c9058dba8246fb" +dependencies = [ + "autocfg 1.0.0", +] + +[[package]] +name = "heck" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "hermit-abi" version = "0.1.15" @@ -946,6 +993,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "indexmap" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b88cd59ee5f71fea89a62248fc8f387d44400cefe05ef548466d61ced9029a7" +dependencies = [ + "autocfg 1.0.0", + "hashbrown", +] + [[package]] name = "indoc" version = "0.3.6" @@ -1545,6 +1602,32 @@ dependencies = [ "toml", ] +[[package]] +name = "proc-macro-error" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18f33027081eba0a6d8aba6d1b1c3a3be58cbb12106341c2d5759fcd9b5277e7" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2 1.0.19", + "quote 1.0.7", + "syn 1.0.35", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a5b4b77fdb63c1eca72173d68d24501c54ab1269409f6b672c85deb18af69de" +dependencies = [ + "proc-macro2 1.0.19", + "quote 1.0.7", + "syn 1.0.35", + "syn-mid", + "version_check", +] + [[package]] name = "proc-macro-hack" version = "0.5.16" @@ -1869,6 +1952,43 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "roc-cli" +version = "0.1.0" +dependencies = [ + "bumpalo", + "clap 3.0.0-beta.1", + "im", + "im-rc", + "indoc", + "inkwell", + "inlinable_string", + "maplit", + "pretty_assertions", + "quickcheck", + "quickcheck_macros", + "roc_build", + "roc_builtins", + "roc_can", + "roc_collections", + "roc_constrain", + "roc_editor", + "roc_gen", + "roc_load", + "roc_module", + "roc_mono", + "roc_parse", + "roc_problem", + "roc_region", + "roc_reporting", + "roc_solve", + "roc_types", + "roc_unify", + "roc_uniq", + "target-lexicon", + "tokio", +] + [[package]] name = "roc_build" version = "0.1.0" @@ -2474,6 +2594,12 @@ dependencies = [ "lock_api", ] +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + [[package]] name = "syn" version = "0.15.44" @@ -2496,6 +2622,17 @@ dependencies = [ "unicode-xid 0.2.1", ] +[[package]] +name = "syn-mid" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" +dependencies = [ + "proc-macro2 1.0.19", + "quote 1.0.7", + "syn 1.0.35", +] + [[package]] name = "synstructure" version = "0.12.4" @@ -2621,6 +2758,12 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" +[[package]] +name = "unicode-segmentation" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" + [[package]] name = "unicode-width" version = "0.1.8" diff --git a/Cargo.toml b/Cargo.toml index e1a0b75824..594ea02533 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,8 +24,8 @@ members = [ "vendor/ena", "vendor/pathfinding", "vendor/pretty", - "editor" - # "cli" + "editor", + "cli" ] # Optimizations based on https://deterministic.space/high-performance-rust.html diff --git a/cli/src/main.rs b/cli/src/main.rs index b8e641a208..add0dd0ed6 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -2,19 +2,17 @@ extern crate clap; use bumpalo::Bump; +use clap::{App, Arg, ArgMatches}; use roc_build::program::gen; use roc_collections::all::MutMap; use roc_gen::llvm::build::OptLevel; use roc_load::file::LoadingProblem; -use std::time::SystemTime; - -use clap::{App, Arg, ArgMatches}; use std::io::{self, ErrorKind}; use std::path::{Path, PathBuf}; use std::process; +use std::process::Command; +use std::time::SystemTime; use target_lexicon::Triple; -use tokio::process::Command; -use tokio::runtime::Builder; pub mod repl; @@ -105,14 +103,6 @@ pub fn build(matches: &ArgMatches, run_after_build: bool) -> io::Result<()> { let path = Path::new(filename).canonicalize().unwrap(); let src_dir = path.parent().unwrap().canonicalize().unwrap(); - // Create the runtime - let mut rt = Builder::new() - .thread_name("roc") - .threaded_scheduler() - .enable_io() - .build() - .expect("Error spawning initial compiler thread."); // TODO make this error nicer. - // Spawn the root task let path = path.canonicalize().unwrap_or_else(|err| { use ErrorKind::*; @@ -131,22 +121,17 @@ pub fn build(matches: &ArgMatches, run_after_build: bool) -> io::Result<()> { } } }); - let binary_path = rt - .block_on(build_file(src_dir, path, opt_level)) - .expect("TODO gracefully handle block_on failing"); + + let binary_path = + build_file(src_dir, path, opt_level).expect("TODO gracefully handle build_file failing"); if run_after_build { // Run the compiled app - rt.block_on(async { - Command::new(binary_path) - .spawn() - .unwrap_or_else(|err| panic!("Failed to run app after building it: {:?}", err)) - .await - .map_err(|_| { - todo!("gracefully handle error after `app` spawned"); - }) - }) - .expect("TODO gracefully handle block_on failing"); + Command::new(binary_path) + .spawn() + .unwrap_or_else(|err| panic!("Failed to run app after building it: {:?}", err)) + .wait() + .expect("TODO gracefully handle block_on failing"); } Ok(()) @@ -168,7 +153,8 @@ fn build_file( OptLevel::Normal => roc_builtins::std::standard_stdlib(), OptLevel::Optimize => roc_builtins::unique::uniq_stdlib(), }; - let loaded = roc_load::file::load(&stdlib, src_dir, filename.clone(), subs_by_module).await?; + let loaded = + roc_load::file::load(filename.clone(), &stdlib, src_dir.as_path(), subs_by_module)?; let dest_filename = filename.with_extension("o"); gen( @@ -201,7 +187,7 @@ fn build_file( .map_err(|_| { todo!("gracefully handle `ar` failing to spawn."); })? - .await + .wait() .map_err(|_| { todo!("gracefully handle error after `ar` spawned"); })?; @@ -224,7 +210,7 @@ fn build_file( .map_err(|_| { todo!("gracefully handle `rustc` failing to spawn."); })? - .await + .wait() .map_err(|_| { todo!("gracefully handle error after `rustc` spawned"); })?;