mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-27 11:59:05 +00:00
feat: add pack
subcommand
This commit is contained in:
parent
5b74077955
commit
1aa0123ce6
4 changed files with 42 additions and 3 deletions
|
@ -27,6 +27,7 @@ pub enum ErgMode {
|
|||
Execute,
|
||||
LanguageServer,
|
||||
Read,
|
||||
Pack,
|
||||
}
|
||||
|
||||
impl TryFrom<&str> for ErgMode {
|
||||
|
@ -43,6 +44,7 @@ impl TryFrom<&str> for ErgMode {
|
|||
"run" | "execute" => Ok(Self::Execute),
|
||||
"server" | "language-server" => Ok(Self::LanguageServer),
|
||||
"byteread" | "read" | "reader" | "dis" => Ok(Self::Read),
|
||||
"pack" | "package" => Ok(Self::Pack),
|
||||
_ => Err(()),
|
||||
}
|
||||
}
|
||||
|
@ -61,6 +63,7 @@ impl From<ErgMode> for &str {
|
|||
ErgMode::Execute => "execute",
|
||||
ErgMode::LanguageServer => "language-server",
|
||||
ErgMode::Read => "read",
|
||||
ErgMode::Pack => "pack",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -404,6 +407,12 @@ USAGE:
|
|||
_ => {
|
||||
if let Ok(mode) = ErgMode::try_from(&arg[..]) {
|
||||
cfg.mode = mode;
|
||||
if cfg.mode == ErgMode::Pack {
|
||||
for arg in args {
|
||||
cfg.runtime_args.push(Box::leak(arg.into_boxed_str()));
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
let path = PathBuf::from_str(&arg[..])
|
||||
.unwrap_or_else(|_| panic!("invalid file path: {arg}"));
|
||||
|
|
31
src/dummy.rs
31
src/dummy.rs
|
@ -1,7 +1,7 @@
|
|||
use std::fs::remove_file;
|
||||
use std::io::{Read, Write};
|
||||
use std::net::{Ipv4Addr, SocketAddrV4, TcpListener, TcpStream};
|
||||
use std::process;
|
||||
use std::process::{self, Command, Stdio};
|
||||
use std::thread::sleep;
|
||||
use std::time::Duration;
|
||||
|
||||
|
@ -396,3 +396,32 @@ impl DummyVM {
|
|||
Runnable::eval(self, src)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
pub struct PackageManagerRunner {}
|
||||
|
||||
impl PackageManagerRunner {
|
||||
pub fn new() -> Self {
|
||||
Self {}
|
||||
}
|
||||
|
||||
pub fn run(cfg: ErgConfig) -> ExitStatus {
|
||||
if Command::new("poise").arg("--version").output().is_err() {
|
||||
eprintln!("Error: poise is not installed");
|
||||
return ExitStatus::ERR1;
|
||||
}
|
||||
match Command::new("poise")
|
||||
.stdin(Stdio::inherit())
|
||||
.stdout(Stdio::inherit())
|
||||
.stderr(Stdio::inherit())
|
||||
.args(&cfg.runtime_args)
|
||||
.output()
|
||||
{
|
||||
Ok(out) => ExitStatus::new(out.status.code().unwrap_or(0), 0, 0),
|
||||
Err(err) => {
|
||||
eprintln!("Error: {}", err);
|
||||
ExitStatus::ERR1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
extern crate erg_common;
|
||||
extern crate erg_compiler;
|
||||
mod dummy;
|
||||
pub use dummy::DummyVM;
|
||||
pub use dummy::{DummyVM, PackageManagerRunner};
|
||||
|
|
|
@ -14,7 +14,7 @@ use erg_compiler::transpile::Transpiler;
|
|||
use erg_compiler::ty::deserialize::Deserializer;
|
||||
use erg_compiler::{ASTBuilder, Compiler};
|
||||
|
||||
use erg::DummyVM;
|
||||
use erg::{DummyVM, PackageManagerRunner};
|
||||
|
||||
fn run() {
|
||||
let cfg = ErgConfig::parse();
|
||||
|
@ -28,6 +28,7 @@ fn run() {
|
|||
Transpile => Transpiler::run(cfg),
|
||||
Execute => DummyVM::run(cfg),
|
||||
Read => Deserializer::run(cfg),
|
||||
Pack => PackageManagerRunner::run(cfg),
|
||||
LanguageServer => {
|
||||
#[cfg(feature = "els")]
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue