diff --git a/azalea-brigadier/src/builder/argument_builder.rs b/azalea-brigadier/src/builder/argument_builder.rs index 39edfbd3..038b68a2 100644 --- a/azalea-brigadier/src/builder/argument_builder.rs +++ b/azalea-brigadier/src/builder/argument_builder.rs @@ -111,7 +111,9 @@ impl ArgumentBuilder { redirect: self.target, modifier: self.modifier, forks: self.forks, - ..Default::default() + arguments: Default::default(), + children: Default::default(), + literals: Default::default(), }; for (_, argument) in &self.arguments.children { diff --git a/azalea-brigadier/src/context.rs b/azalea-brigadier/src/context.rs index b798397b..4c36a32c 100644 --- a/azalea-brigadier/src/context.rs +++ b/azalea-brigadier/src/context.rs @@ -53,8 +53,6 @@ impl CommandContextBuilder { command: None, dispatcher, nodes: vec![], - // rootNode, - // start, child: None, modifier: None, forks: false, @@ -157,6 +155,23 @@ impl Clone for CommandContext { } } +impl Debug for CommandContext { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("CommandContext") + // .field("source", &self.source) + .field("input", &self.input) + // .field("arguments", &self.arguments) + // .field("command", &self.command) + // .field("root_node", &self.root_node) + // .field("nodes", &self.nodes) + .field("range", &self.range) + .field("child", &self.child) + // .field("modifier", &self.modifier) + .field("forks", &self.forks) + .finish() + } +} + impl CommandContext { pub fn copy_for(&self, source: Rc) -> Self { if Rc::ptr_eq(&source, &self.source) { diff --git a/azalea-brigadier/src/dispatcher.rs b/azalea-brigadier/src/dispatcher.rs index 6031452e..3abb2238 100644 --- a/azalea-brigadier/src/dispatcher.rs +++ b/azalea-brigadier/src/dispatcher.rs @@ -190,6 +190,7 @@ impl CommandDispatcher { for context in contexts.iter() { let child = &context.child; if let Some(child) = child { + println!("aaaaaaa {:?}", child); forked |= child.forks; if child.has_nodes() { found_command = true; @@ -235,6 +236,7 @@ impl CommandDispatcher { ); } + println!("forked: {}, successful forks: {}", forked, successful_forks); Ok(if forked { successful_forks } else { result }) } } @@ -248,7 +250,6 @@ impl Clone for CommandDispatcher { } } -/* #[cfg(test)] mod tests { use super::*; @@ -258,6 +259,7 @@ mod tests { parsers::integer, }; + #[derive(Debug, PartialEq)] struct CommandSource {} fn input_with_offset(input: &str, offset: usize) -> StringReader { @@ -775,13 +777,13 @@ mod tests { let source1 = Rc::new(CommandSource {}); let source2 = Rc::new(CommandSource {}); - let modifier = move |source: &CommandContext>| -> Result>, CommandSyntaxException> { + let modifier = move |source: &CommandContext| -> Result>, CommandSyntaxException> { Ok(vec![source1.clone(), source2.clone()]) }; let concrete_node = subject.register(literal("actual").executes(|_| 42)); let redirect_node = - subject.register(literal("redirected").fork(subject.root.clone(), modifier)); + subject.register(literal("redirected").fork(subject.root.clone(), Rc::new(modifier))); let input = "redirected actual"; let parse = subject.parse(input.into(), Rc::new(CommandSource {})); @@ -799,7 +801,8 @@ mod tests { assert_eq!(parse.context.root, subject.root); assert_eq!(parent.nodes[0].range, parent.range); assert_eq!(parent.nodes[0].node, concrete_node); - // assert_eq!(parent.source, Rc::new(CommandSource {})); + assert_eq!(parent.source, Rc::new(CommandSource {})); + + assert_eq!(CommandDispatcher::execute_parsed(parse).unwrap(), 2); } } -*/ diff --git a/azalea-brigadier/src/modifier.rs b/azalea-brigadier/src/modifier.rs index c1a9aaf0..68a3304e 100644 --- a/azalea-brigadier/src/modifier.rs +++ b/azalea-brigadier/src/modifier.rs @@ -1,12 +1,8 @@ -use std::{any::Any, rc::Rc}; +use std::rc::Rc; use crate::{ context::CommandContext, exceptions::command_syntax_exception::CommandSyntaxException, }; -// pub trait RedirectModifier { -// fn apply(&self, context: &CommandContext) -> Result, CommandSyntaxException>; -// } - pub type RedirectModifier = dyn Fn(&CommandContext) -> Result>, CommandSyntaxException>; diff --git a/azalea-brigadier/src/parse_results.rs b/azalea-brigadier/src/parse_results.rs index e5db0400..c9f26a04 100644 --- a/azalea-brigadier/src/parse_results.rs +++ b/azalea-brigadier/src/parse_results.rs @@ -2,7 +2,7 @@ use crate::{ context::CommandContextBuilder, exceptions::command_syntax_exception::CommandSyntaxException, string_reader::StringReader, tree::CommandNode, }; -use std::{any::Any, collections::HashMap, fmt::Debug, rc::Rc}; +use std::{collections::HashMap, fmt::Debug, rc::Rc}; pub struct ParseResults { pub context: CommandContextBuilder,