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,
|
Execute,
|
||||||
LanguageServer,
|
LanguageServer,
|
||||||
Read,
|
Read,
|
||||||
|
Pack,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<&str> for ErgMode {
|
impl TryFrom<&str> for ErgMode {
|
||||||
|
@ -43,6 +44,7 @@ impl TryFrom<&str> for ErgMode {
|
||||||
"run" | "execute" => Ok(Self::Execute),
|
"run" | "execute" => Ok(Self::Execute),
|
||||||
"server" | "language-server" => Ok(Self::LanguageServer),
|
"server" | "language-server" => Ok(Self::LanguageServer),
|
||||||
"byteread" | "read" | "reader" | "dis" => Ok(Self::Read),
|
"byteread" | "read" | "reader" | "dis" => Ok(Self::Read),
|
||||||
|
"pack" | "package" => Ok(Self::Pack),
|
||||||
_ => Err(()),
|
_ => Err(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,6 +63,7 @@ impl From<ErgMode> for &str {
|
||||||
ErgMode::Execute => "execute",
|
ErgMode::Execute => "execute",
|
||||||
ErgMode::LanguageServer => "language-server",
|
ErgMode::LanguageServer => "language-server",
|
||||||
ErgMode::Read => "read",
|
ErgMode::Read => "read",
|
||||||
|
ErgMode::Pack => "pack",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -404,6 +407,12 @@ USAGE:
|
||||||
_ => {
|
_ => {
|
||||||
if let Ok(mode) = ErgMode::try_from(&arg[..]) {
|
if let Ok(mode) = ErgMode::try_from(&arg[..]) {
|
||||||
cfg.mode = mode;
|
cfg.mode = mode;
|
||||||
|
if cfg.mode == ErgMode::Pack {
|
||||||
|
for arg in args {
|
||||||
|
cfg.runtime_args.push(Box::leak(arg.into_boxed_str()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
let path = PathBuf::from_str(&arg[..])
|
let path = PathBuf::from_str(&arg[..])
|
||||||
.unwrap_or_else(|_| panic!("invalid file path: {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::fs::remove_file;
|
||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
use std::net::{Ipv4Addr, SocketAddrV4, TcpListener, TcpStream};
|
use std::net::{Ipv4Addr, SocketAddrV4, TcpListener, TcpStream};
|
||||||
use std::process;
|
use std::process::{self, Command, Stdio};
|
||||||
use std::thread::sleep;
|
use std::thread::sleep;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
|
@ -396,3 +396,32 @@ impl DummyVM {
|
||||||
Runnable::eval(self, src)
|
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_common;
|
||||||
extern crate erg_compiler;
|
extern crate erg_compiler;
|
||||||
mod dummy;
|
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::ty::deserialize::Deserializer;
|
||||||
use erg_compiler::{ASTBuilder, Compiler};
|
use erg_compiler::{ASTBuilder, Compiler};
|
||||||
|
|
||||||
use erg::DummyVM;
|
use erg::{DummyVM, PackageManagerRunner};
|
||||||
|
|
||||||
fn run() {
|
fn run() {
|
||||||
let cfg = ErgConfig::parse();
|
let cfg = ErgConfig::parse();
|
||||||
|
@ -28,6 +28,7 @@ fn run() {
|
||||||
Transpile => Transpiler::run(cfg),
|
Transpile => Transpiler::run(cfg),
|
||||||
Execute => DummyVM::run(cfg),
|
Execute => DummyVM::run(cfg),
|
||||||
Read => Deserializer::run(cfg),
|
Read => Deserializer::run(cfg),
|
||||||
|
Pack => PackageManagerRunner::run(cfg),
|
||||||
LanguageServer => {
|
LanguageServer => {
|
||||||
#[cfg(feature = "els")]
|
#[cfg(feature = "els")]
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue