diff options
| author | mat <github@matdoes.dev> | 2022-04-17 21:38:57 -0500 |
|---|---|---|
| committer | mat <github@matdoes.dev> | 2022-04-17 21:38:57 -0500 |
| commit | 1d28c7cfb5260b7c7905fb5561ffcc7ceead1b77 (patch) | |
| tree | 5e37f4842d4ae107dd6ba627736299dea854a33a | |
| parent | d68233e0b1ff61d09ab2c4e22a42f3326054539b (diff) | |
| download | azalea-drasl-1d28c7cfb5260b7c7905fb5561ffcc7ceead1b77.tar.xz | |
forking stuff
| -rw-r--r-- | azalea-brigadier/src/builder/argument_builder.rs | 4 | ||||
| -rw-r--r-- | azalea-brigadier/src/context.rs | 19 | ||||
| -rw-r--r-- | azalea-brigadier/src/dispatcher.rs | 13 | ||||
| -rw-r--r-- | azalea-brigadier/src/modifier.rs | 6 | ||||
| -rw-r--r-- | azalea-brigadier/src/parse_results.rs | 2 |
5 files changed, 30 insertions, 14 deletions
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<S> ArgumentBuilder<S> { 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<S> CommandContextBuilder<S> { command: None, dispatcher, nodes: vec![], - // rootNode, - // start, child: None, modifier: None, forks: false, @@ -157,6 +155,23 @@ impl<S> Clone for CommandContext<S> { } } +impl<S> Debug for CommandContext<S> { + 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<S> CommandContext<S> { pub fn copy_for(&self, source: Rc<S>) -> 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<S> CommandDispatcher<S> { 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<S> CommandDispatcher<S> { ); } + println!("forked: {}, successful forks: {}", forked, successful_forks); Ok(if forked { successful_forks } else { result }) } } @@ -248,7 +250,6 @@ impl<S> Clone for CommandDispatcher<S> { } } -/* #[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<Rc<CommandSource>>| -> Result<Vec<Rc<CommandSource>>, CommandSyntaxException> { + let modifier = move |source: &CommandContext<CommandSource>| -> Result<Vec<Rc<CommandSource>>, 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<S> { -// fn apply(&self, context: &CommandContext<S>) -> Result<Vec<S>, CommandSyntaxException>; -// } - pub type RedirectModifier<S> = dyn Fn(&CommandContext<S>) -> Result<Vec<Rc<S>>, 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<S> { pub context: CommandContextBuilder<S>, |
