Various line editor fixes and optimizations

This commit is contained in:
2026-02-25 15:43:08 -05:00
parent 415c9b4a53
commit 28ce008234
18 changed files with 359 additions and 152 deletions

View File

@@ -2,7 +2,7 @@ use std::sync::Arc;
use fmt::Display;
use crate::{parse::lex::Tk, prelude::*};
use crate::{libsh::error::ShResult, parse::lex::Tk, prelude::*};
pub type OptSet = Arc<[Opt]>;
@@ -67,8 +67,12 @@ pub fn get_opts(words: Vec<String>) -> (Vec<String>, Vec<Opt>) {
(non_opts, opts)
}
pub fn get_opts_from_tokens(tokens: Vec<Tk>, opt_specs: &[OptSpec]) -> (Vec<Tk>, Vec<Opt>) {
let mut tokens_iter = tokens.into_iter();
pub fn get_opts_from_tokens(tokens: Vec<Tk>, opt_specs: &[OptSpec]) -> ShResult<(Vec<Tk>, Vec<Opt>)> {
let mut tokens_iter = tokens
.into_iter()
.map(|t| t.expand())
.collect::<ShResult<Vec<_>>>()?
.into_iter();
let mut opts = vec![];
let mut non_opts = vec![];
@@ -111,5 +115,5 @@ pub fn get_opts_from_tokens(tokens: Vec<Tk>, opt_specs: &[OptSpec]) -> (Vec<Tk>,
}
}
}
(non_opts, opts)
Ok((non_opts, opts))
}