SuperAPI AI 工具集

nushell-plugin-builder

编程与开发

查看项目

更新于 10-16 02:18

技能介绍

用途

nushell-plugin-builder 用于指导开发者用 Rust 创建 Nushell 插件。插件是独立的可执行文件,可以为 Nushell 扩展自定义命令、数据转换和集成能力。

主要能力

  • 提供从零创建插件项目的快速开始流程,包括使用 cargo 新建项目并添加 nu-plugin、nu-protocol 依赖。
  • 给出基础插件结构示例,涵盖 Plugin、PluginCommand、SimplePluginCommand 等 trait 的实现方式。
  • 说明两类命令:SimplePluginCommand 用于处理单个值(输入 &Value,输出 Result<Value, LabeledError>),适合转换、简单过滤、单值操作;PluginCommand 用于处理流(输入 PipelineData,输出 Result<PipelineData, LabeledError>),适合流式转换、惰性处理、大数据集。
  • 介绍命令签名定义,包括输入输出类型(String、Int、Float、Bool、List、Record、Any 等)、命名标志、开关、位置参数、必选/可选/剩余参数,以及通过 call.get_flag、call.has_flag、call.req、call.opt、call.rest 访问参数。
  • 说明错误处理应返回带 span 信息的 LabeledError,以便用户定位错误位置。
  • 介绍序列化选择:MsgPackSerializer(二进制、更快,推荐生产使用)与 JsonSerializer(文本、可读,便于调试)。
  • 提供常见模式示例:字符串转换、列表生成、记录(表格行)、表格(记录列表)。
  • 介绍开发工作流:迭代开发中的构建、注册、重载步骤,以及使用 nu-plugin-test-support 进行自动化测试。
  • 介绍进阶特性:使用 PipelineData 进行流式数据处理、通过 EngineInterface 获取环境变量、设置环境变量、读取插件配置、获取当前目录,以及自定义值。
  • 列出重要约束:插件不能使用 stdin/stdout(保留给协议),访问前需检查 engine.is_using_stdio();路径应基于 engine.get_current_dir(),不要假设当前工作目录;nu-plugin 与 nu-protocol 版本需匹配,并与目标 Nushell 版本一致。
  • 提供参考文档入口:plugin-protocol.md、advanced-features.md、examples.md、testing-debugging.md,以及外部资源(官方插件指南、nu-plugin API 文档、插件示例仓库、Awesome Nu 社区插件、nushellWith Nix flake、模板脚本 scripts/init_plugin.py)。

使用方式

  1. 创建插件项目:cargo new nu_plugin_<name>,进入目录后 cargo add nu-plugin nu-protocol。
  2. 按示例编写插件结构与命令实现。
  3. 构建与安装:cargo build --release;cargo install --path . --locked;使用 plugin add ~/.cargo/bin/nu_plugin_<name>(Windows 加 .exe)注册,再 plugin use <name>;测试如 "hello" | my-command。
  4. 迭代开发:cargo build 后 plugin add target/debug/nu_plugin_<name>,plugin use <name>;修改后 plugin rm <name> 再重新添加。
  5. 自动化测试:添加 dev-dependency nu-plugin-test-support,使用 PluginTest 编写测试。
  6. 可使用 scripts/init_plugin.py 脚手架生成插件模板:python3 scripts/init_plugin.py <plugin-name> [--output-dir <path>]。

适用场景

适合需要为 Nushell 构建自定义命令、扩展 Nushell 功能、进行数据转换与集成,以及需要流式处理大数据集或与引擎环境交互的开发者。

限制

插件不能使用 stdin/stdout;路径处理需基于 engine.get_current_dir();nu-plugin 与 nu-protocol 版本需匹配目标 Nushell 版本。其他未在资料中说明的收费、价格、平台或效果信息暂未提供。