From 512b5eb5dc1200712a6a04826bd95658399014e6 Mon Sep 17 00:00:00 2001 From: Fahmi Akbar Wildana Date: Sun, 26 May 2019 01:27:25 +0700 Subject: [PATCH] Remove core::iterators module in favor of #14 Update Justfile due to https://github.com/casey/just/issues/379 --- Justfile | 2 +- packages/core/src/lib.rs | 2 +- packages/core/src/utils/iterators.rs | 24 -------- packages/core/src/utils/mod.rs | 2 - packages/core/src/utils/state/iterators.rs | 72 ---------------------- packages/core/src/utils/state/macros.rs | 10 --- packages/core/src/utils/state/mod.rs | 5 -- 7 files changed, 2 insertions(+), 115 deletions(-) delete mode 100644 packages/core/src/utils/iterators.rs delete mode 100644 packages/core/src/utils/state/iterators.rs delete mode 100644 packages/core/src/utils/state/macros.rs delete mode 100644 packages/core/src/utils/state/mod.rs diff --git a/Justfile b/Justfile index 988aa17d..66eb6d8f 100644 --- a/Justfile +++ b/Justfile @@ -1,4 +1,4 @@ -export MPLBACKEND="Qt5Agg" +export MPLBACKEND := "Qt5Agg" # Start development start: clear diff --git a/packages/core/src/lib.rs b/packages/core/src/lib.rs index f403bd22..27bb7a02 100644 --- a/packages/core/src/lib.rs +++ b/packages/core/src/lib.rs @@ -11,7 +11,7 @@ pub use crate::core::{parse, Scdlang}; pub use external::Parser as Transpiler; pub mod prelude { - pub use super::{external::*, utils::iterators::*, utils::naming::*}; + pub use super::{external::*, utils::naming::*}; pub use pest::Parser as PestParser; pub use std::convert::*; diff --git a/packages/core/src/utils/iterators.rs b/packages/core/src/utils/iterators.rs deleted file mode 100644 index 316c254e..00000000 --- a/packages/core/src/utils/iterators.rs +++ /dev/null @@ -1,24 +0,0 @@ -// `type Associated: IntoIterator;` is there because `impl Iterator` is not allowed inside trait [E0562] - -pub trait StateIterator: Iterator { - type Iter: IntoIterator; - type Map: IntoIterator; - - /// Filter by the current state - fn filter_from(self, state: &str) -> Self::Iter; - - /// Filter by the target/next state - fn filter_to(self, state: &str) -> Self::Iter; - - /// Group by the current state - fn group_by_from(self, state: &str) -> Self::Map; - - /// Group by the target/next state - fn group_by_to(self, state: &str) -> Self::Map; - - /// Remove duplicated current state - fn dedupe_from(self, state: &str) -> Self::Iter; - - /// Remove duplicated target/next state - fn dedupe_to(self, state: &str) -> Self::Iter; -} diff --git a/packages/core/src/utils/mod.rs b/packages/core/src/utils/mod.rs index 21ee31b9..3dff380c 100644 --- a/packages/core/src/utils/mod.rs +++ b/packages/core/src/utils/mod.rs @@ -1,3 +1 @@ -pub mod iterators; pub mod naming; -mod state; diff --git a/packages/core/src/utils/state/iterators.rs b/packages/core/src/utils/state/iterators.rs deleted file mode 100644 index d9830575..00000000 --- a/packages/core/src/utils/state/iterators.rs +++ /dev/null @@ -1,72 +0,0 @@ -use crate::{grammar::Rule, prelude::StateIterator, semantics::Transition}; -use pest::iterators::Pairs; -use std::{collections::HashMap, convert::TryFrom}; - -// TODO: Rewrite to https://stackoverflow.com/a/28036224/5221998 -impl<'p> StateIterator for Pairs<'p, Rule> { - type Iter = Vec; // beacuse `FromIterator` not implemented on `Pairs` 😢 - type Map = HashMap<&'p str, Self::Item>; - - fn filter_from(self, state: &str) -> Self::Iter { - self.filter(filtrate!(|t: Transition| t.from.name == state)).collect() - } - - fn filter_to(self, state: &str) -> Self::Iter { - self.filter(filtrate!(|t: Transition| t.to.name == state)).collect() - } - - fn group_by_from(self, _state: &str) -> Self::Map { - unimplemented!() - } - - fn group_by_to(self, _state: &str) -> Self::Map { - unimplemented!() - } - - fn dedupe_from(self, _state: &str) -> Self::Iter { - unimplemented!() - } - - fn dedupe_to(self, _state: &str) -> Self::Iter { - unimplemented!() - } -} - -#[cfg(test)] -mod pairs { - use crate::{prelude::StateIterator, test}; - - const FIXTURE: &str = r#" - A -> B - C -> B - A -> C @ D - "#; - - #[test] - fn filter_current_state() -> test::parse::Result { - test::parse::from(FIXTURE, |declaration| { - let expressions = declaration.filter_from("A"); - - assert_eq!(expressions.len(), 2); - assert!( - expressions.iter().all(|pair| &pair.as_str()[..4] == "A ->"), - "all(Transition.from == 'A')" - ); - Ok(()) - }) - } - - #[test] - fn filter_next_state() -> test::parse::Result { - test::parse::from(FIXTURE, |declaration| { - let expressions = declaration.filter_to("B"); - - assert_eq!(expressions.len(), 2); - assert!( - expressions.iter().all(|pair| &pair.as_str()[2..6] == "-> B"), - "all(Transition.to == 'B')" - ); - Ok(()) - }) - } -} diff --git a/packages/core/src/utils/state/macros.rs b/packages/core/src/utils/state/macros.rs deleted file mode 100644 index b467dde7..00000000 --- a/packages/core/src/utils/state/macros.rs +++ /dev/null @@ -1,10 +0,0 @@ -#![macro_use] - -macro_rules! filtrate { - ($condition:expr) => { - |pair| match Transition::try_from(pair.to_owned()) { - Ok(transition) => $condition(transition), - Err(_err) => false, - } - }; -} diff --git a/packages/core/src/utils/state/mod.rs b/packages/core/src/utils/state/mod.rs deleted file mode 100644 index 76dd6495..00000000 --- a/packages/core/src/utils/state/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[rustfmt::skip] -mod macros; -mod iterators; - -pub use iterators::*;