mirror of
https://github.com/nushell/nushell.git
synced 2025-05-30 06:39:33 +02:00
# Description Now that we've landed the debug commands we were working on, let's relocate them to an easier place to find all of them. That's what this PR does. The only actual code change was changing the `timeit` command to a `Category::Debug` command. The rest is just moving things around and hooking them up. # User-Facing Changes # Tests + Formatting Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass # After Submitting If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date.
65 lines
2.0 KiB
Rust
65 lines
2.0 KiB
Rust
use super::inspect_table;
|
|
use nu_protocol::{
|
|
ast::Call,
|
|
engine::{Command, EngineState, Stack},
|
|
Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, Type, Value,
|
|
};
|
|
use terminal_size::{terminal_size, Height, Width};
|
|
|
|
#[derive(Clone)]
|
|
pub struct Inspect;
|
|
|
|
impl Command for Inspect {
|
|
fn name(&self) -> &str {
|
|
"inspect"
|
|
}
|
|
|
|
fn usage(&self) -> &str {
|
|
"Inspect pipeline results while running a pipeline"
|
|
}
|
|
|
|
fn signature(&self) -> nu_protocol::Signature {
|
|
Signature::build("inspect")
|
|
.input_output_types(vec![(Type::Any, Type::Any)])
|
|
.allow_variants_without_examples(true)
|
|
.category(Category::Debug)
|
|
}
|
|
|
|
fn run(
|
|
&self,
|
|
_engine_state: &EngineState,
|
|
_stack: &mut Stack,
|
|
call: &Call,
|
|
input: PipelineData,
|
|
) -> Result<PipelineData, ShellError> {
|
|
let input_metadata = input.metadata();
|
|
let input_val = input.into_value(call.head);
|
|
let original_input = input_val.clone();
|
|
let description = match input_val {
|
|
Value::CustomValue { ref val, .. } => val.value_string(),
|
|
_ => input_val.get_type().to_string(),
|
|
};
|
|
|
|
let (cols, _rows) = match terminal_size() {
|
|
Some((w, h)) => (Width(w.0), Height(h.0)),
|
|
None => (Width(0), Height(0)),
|
|
};
|
|
|
|
let table = inspect_table::build_table(input_val, description, cols.0 as usize);
|
|
|
|
// Note that this is printed to stderr. The reason for this is so it doesn't disrupt the regular nushell
|
|
// tabular output. If we printed to stdout, nushell would get confused with two outputs.
|
|
eprintln!("{table}\n");
|
|
|
|
Ok(original_input.into_pipeline_data_with_metadata(input_metadata))
|
|
}
|
|
|
|
fn examples(&self) -> Vec<Example> {
|
|
vec![Example {
|
|
description: "Inspect pipeline results",
|
|
example: "ls | inspect | get name | inspect",
|
|
result: None,
|
|
}]
|
|
}
|
|
}
|