diff --git a/Cargo.lock b/Cargo.lock index 501c3f79fa..6854f7bb86 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -395,6 +395,7 @@ dependencies = [ "nu-json", "nu-parser", "nu-path", + "nu-plugin", "nu-protocol", "nu-table", "nu-term-grid", @@ -668,7 +669,6 @@ dependencies = [ "nu-json", "nu-parser", "nu-path", - "nu-plugin", "nu-protocol", "nu-table", "nu-term-grid", diff --git a/Cargo.toml b/Cargo.toml index 973fae44cc..fe99034f7e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,12 +26,17 @@ nu-json = { path="./crates/nu-json" } nu-parser = { path="./crates/nu-parser" } nu-path = { path="./crates/nu-path" } nu-protocol = { path = "./crates/nu-protocol" } +nu-plugin = { path = "./crates/nu-plugin", optional = true } nu-table = { path = "./crates/nu-table" } nu-term-grid = { path = "./crates/nu-term-grid" } miette = "3.0.0" ctrlc = "3.2.1" # mimalloc = { version = "*", default-features = false } +[features] +plugin = ["nu-plugin", "nu-parser/plugin", "nu-command/plugin"] +default = ["plugin"] + [dev-dependencies] tempfile = "3.2.0" assert_cmd = "1.0.7" diff --git a/crates/nu-command/Cargo.toml b/crates/nu-command/Cargo.toml index 99d13d33c3..6e03532062 100644 --- a/crates/nu-command/Cargo.toml +++ b/crates/nu-command/Cargo.toml @@ -13,7 +13,6 @@ nu-protocol = { path = "../nu-protocol" } nu-table = { path = "../nu-table" } nu-term-grid = { path = "../nu-term-grid" } nu-parser = { path = "../nu-parser" } -nu-plugin = { path = "../nu-plugin" } trash = { version = "1.3.0", optional = true } unicode-segmentation = "1.8.0" @@ -34,3 +33,4 @@ titlecase = "1.1.0" [features] trash-support = ["trash"] +plugin = ["nu-parser/plugin"] diff --git a/crates/nu-command/src/core_commands/mod.rs b/crates/nu-command/src/core_commands/mod.rs index 626ac16cda..86ff25b648 100644 --- a/crates/nu-command/src/core_commands/mod.rs +++ b/crates/nu-command/src/core_commands/mod.rs @@ -9,8 +9,6 @@ mod hide; mod if_; mod let_; mod module; -mod register; -mod run_plugin; mod source; mod use_; @@ -25,7 +23,11 @@ pub use hide::Hide; pub use if_::If; pub use let_::Let; pub use module::Module; -pub use register::Register; -pub use run_plugin::RunPlugin; pub use source::Source; pub use use_::Use; + +#[cfg(feature = "plugin")] +mod register; + +#[cfg(feature = "plugin")] +pub use register::Register; diff --git a/crates/nu-command/src/core_commands/run_plugin.rs b/crates/nu-command/src/core_commands/run_plugin.rs deleted file mode 100644 index c8b448fb02..0000000000 --- a/crates/nu-command/src/core_commands/run_plugin.rs +++ /dev/null @@ -1,30 +0,0 @@ -use nu_protocol::ast::Call; -use nu_protocol::engine::{Command, EngineState, Stack}; -use nu_protocol::{PipelineData, Signature}; - -#[derive(Clone)] -pub struct RunPlugin; - -impl Command for RunPlugin { - fn name(&self) -> &str { - "run_plugin" - } - - fn usage(&self) -> &str { - "test for plugin encoding" - } - - fn signature(&self) -> nu_protocol::Signature { - Signature::build("run_plugin") - } - - fn run( - &self, - _context: &EngineState, - _stack: &mut Stack, - _call: &Call, - _input: PipelineData, - ) -> Result { - Ok(PipelineData::new()) - } -} diff --git a/crates/nu-command/src/default_context.rs b/crates/nu-command/src/default_context.rs index 52dc3f309b..ee5d6da30c 100644 --- a/crates/nu-command/src/default_context.rs +++ b/crates/nu-command/src/default_context.rs @@ -73,10 +73,8 @@ pub fn create_default_context() -> EngineState { Mv, ParEach, Ps, - Register, Range, Rm, - RunPlugin, Select, Size, Split, @@ -94,6 +92,9 @@ pub fn create_default_context() -> EngineState { Zip ); + #[cfg(feature = "plugin")] + bind_command!(Register); + // This is a WIP proof of concept bind_command!(ListGitBranches, Git, GitCheckout, Source); diff --git a/crates/nu-parser/Cargo.toml b/crates/nu-parser/Cargo.toml index 2dc4d6dc27..2eb26d7f1f 100644 --- a/crates/nu-parser/Cargo.toml +++ b/crates/nu-parser/Cargo.toml @@ -7,4 +7,7 @@ edition = "2018" miette = "3.0.0" thiserror = "1.0.29" nu-protocol = { path = "../nu-protocol"} -nu-plugin = { path = "../nu-plugin"} +nu-plugin = { path = "../nu-plugin", optional=true} + +[features] +plugin = ["nu-plugin"] diff --git a/crates/nu-parser/src/lib.rs b/crates/nu-parser/src/lib.rs index dc5534c9e6..639c43d5a4 100644 --- a/crates/nu-parser/src/lib.rs +++ b/crates/nu-parser/src/lib.rs @@ -11,6 +11,9 @@ pub use flatten::{flatten_block, FlatShape}; pub use lex::{lex, Token, TokenContents}; pub use lite_parse::{lite_parse, LiteBlock}; pub use parse_keywords::{ - parse_alias, parse_def, parse_def_predecl, parse_let, parse_module, parse_plugin, parse_use, + parse_alias, parse_def, parse_def_predecl, parse_let, parse_module, parse_use, }; pub use parser::{find_captures_in_expr, parse, Import, VarDecl}; + +#[cfg(feature = "plugin")] +pub use parse_keywords::parse_plugin; diff --git a/crates/nu-parser/src/parse_keywords.rs b/crates/nu-parser/src/parse_keywords.rs index 200fb9d7c5..f3df2f2528 100644 --- a/crates/nu-parser/src/parse_keywords.rs +++ b/crates/nu-parser/src/parse_keywords.rs @@ -1,4 +1,3 @@ -use nu_plugin::plugin::{get_signature, PluginDeclaration}; use nu_protocol::{ ast::{Block, Call, Expr, Expression, ImportPattern, ImportPatternMember, Pipeline, Statement}, engine::StateWorkingSet, @@ -6,6 +5,9 @@ use nu_protocol::{ }; use std::path::Path; +#[cfg(feature = "plugin")] +use nu_plugin::plugin::{get_signature, PluginDeclaration}; + use crate::{ lex, lite_parse, parser::{ @@ -925,6 +927,7 @@ pub fn parse_source( ) } +#[cfg(feature = "plugin")] pub fn parse_plugin( working_set: &mut StateWorkingSet, spans: &[Span], diff --git a/crates/nu-parser/src/parser.rs b/crates/nu-parser/src/parser.rs index 25be7f6d79..5a33d30c03 100644 --- a/crates/nu-parser/src/parser.rs +++ b/crates/nu-parser/src/parser.rs @@ -15,10 +15,12 @@ use nu_protocol::{ }; use crate::parse_keywords::{ - parse_alias, parse_def, parse_def_predecl, parse_hide, parse_let, parse_module, parse_plugin, - parse_use, + parse_alias, parse_def, parse_def_predecl, parse_hide, parse_let, parse_module, parse_use, }; +#[cfg(feature = "plugin")] +use crate::parse_keywords::parse_plugin; + #[derive(Debug, Clone)] pub enum Import {} @@ -3007,6 +3009,7 @@ pub fn parse_statement( Some(ParseError::UnexpectedKeyword("export".into(), spans[0])), ), b"hide" => parse_hide(working_set, spans), + #[cfg(feature = "plugin")] b"register" => parse_plugin(working_set, spans), _ => { let (expr, err) = parse_expression(working_set, spans, true); diff --git a/crates/nu-plugin/src/plugin.rs b/crates/nu-plugin/src/plugin.rs index 672c648463..f83eedd544 100644 --- a/crates/nu-plugin/src/plugin.rs +++ b/crates/nu-plugin/src/plugin.rs @@ -138,7 +138,7 @@ impl Command for PluginDeclaration { } fn usage(&self) -> &str { - "plugin name plus arguments" + self.signature.usage.as_str() } fn run(