forked from extern/nushell
Reasoning: Most missing math commands are implemented with #7258. The `meval` crate itself declares that it doesn't strive to stringent standards (https://docs.rs/meval/latest/meval/#related-projects). For example no particular special casing or transformations are performed to ensure numerical stability. It uses the same rust `std` library functions we use or have access to (and `f64`). While the command call syntax in nushell may be a bit more verbose, having a single source of truth and common commands is beneficial. Furthermore the `math` commands can themselves implement broadcasting over lists (or table columns). Closes #7073 Removed dependencies: - `meval` - `nom 1.2.4` (duplicate) User-Facing Changes: Scripts using `math eval` will break. We remove a further `eval` like behavior to get results through runtime evaluation (albeit limited in scope) Tests: - Updated tests that internally used `math eval`. - Removed one test that primarily used `math eval` to obtain a result from `str join`
41 lines
997 B
Rust
41 lines
997 B
Rust
use nu_protocol::ast::Call;
|
|
use nu_protocol::engine::{Command, EngineState, Stack};
|
|
use nu_protocol::{Category, PipelineData, ShellError, Signature, SyntaxShape};
|
|
|
|
#[derive(Clone)]
|
|
pub struct SubCommand;
|
|
|
|
impl Command for SubCommand {
|
|
fn name(&self) -> &str {
|
|
"math eval"
|
|
}
|
|
|
|
fn signature(&self) -> Signature {
|
|
Signature::build("math eval")
|
|
.rest(
|
|
"ignored",
|
|
SyntaxShape::Any,
|
|
"arguments to deprecated command are ignored",
|
|
)
|
|
.category(Category::Deprecated)
|
|
}
|
|
|
|
fn usage(&self) -> &str {
|
|
"Deprecated command"
|
|
}
|
|
|
|
fn run(
|
|
&self,
|
|
_engine_state: &EngineState,
|
|
_stack: &mut Stack,
|
|
call: &Call,
|
|
_input: PipelineData,
|
|
) -> Result<PipelineData, ShellError> {
|
|
Err(ShellError::DeprecatedCommand(
|
|
self.name().to_string(),
|
|
"math <subcommands>".to_string(),
|
|
call.head,
|
|
))
|
|
}
|
|
}
|