nu-cli 0.113.0

CLI-related functionality for Nushell
Documentation
use nu_engine::command_prelude::*;

#[derive(Clone)]
pub struct AbbreviationsList;

impl Command for AbbreviationsList {
    fn name(&self) -> &str {
        "abbr list"
    }

    fn signature(&self) -> Signature {
        Signature::build(self.name())
            .input_output_types(vec![(Type::Nothing, Type::table())])
            .category(Category::Platform)
    }

    fn description(&self) -> &str {
        "List all defined abbreviations."
    }

    fn examples(&self) -> Vec<Example<'_>> {
        vec![Example {
            description: "List all abbreviations",
            example: "abbr list",
            result: None,
        }]
    }

    fn run(
        &self,
        engine_state: &EngineState,
        stack: &mut Stack,
        call: &Call,
        _input: PipelineData,
    ) -> Result<PipelineData, ShellError> {
        let config = stack.get_config(engine_state);
        let span = call.head;

        let mut abbreviations: Vec<(&String, &String)> = config.abbreviations.iter().collect();
        abbreviations.sort_by_key(|(k, _)| *k);

        let records = abbreviations
            .into_iter()
            .map(|(name, expansion)| {
                Value::record(
                    record! {
                        "name" => Value::string(name, span),
                        "expansion" => Value::string(expansion, span),
                    },
                    span,
                )
            })
            .collect();

        Ok(Value::list(records, span).into_pipeline_data())
    }
}