From 16bac44171cee06c1ec2b1876e5f0546ff29e8fb Mon Sep 17 00:00:00 2001 From: Peter Murphy <26548438+ptrfrncsmrph@users.noreply.github.com> Date: Wed, 4 Oct 2023 09:15:51 -0400 Subject: [PATCH 1/4] Add group functions Fixes #41 --- src/Effect/Class/Console.purs | 9 +++++++++ src/Effect/Console.js | 16 ++++++++++++++++ src/Effect/Console.purs | 10 ++++++++++ 3 files changed, 35 insertions(+) diff --git a/src/Effect/Class/Console.purs b/src/Effect/Class/Console.purs index 8f22f8e..bb0ffca 100644 --- a/src/Effect/Class/Console.purs +++ b/src/Effect/Class/Console.purs @@ -47,3 +47,12 @@ timeEnd = liftEffect <<< EffConsole.timeEnd clear :: forall m. MonadEffect m => m Unit clear = liftEffect EffConsole.clear + +group :: forall m. MonadEffect m => String -> m Unit +group = liftEffect <<< EffConsole.group + +groupCollapsed :: forall m. MonadEffect m => String -> m Unit +groupCollapsed = liftEffect <<< EffConsole.groupCollapsed + +groupEnd :: forall m. MonadEffect m => m Unit +groupEnd = liftEffect EffConsole.groupEnd diff --git a/src/Effect/Console.js b/src/Effect/Console.js index b96fed8..8db1f20 100644 --- a/src/Effect/Console.js +++ b/src/Effect/Console.js @@ -49,3 +49,19 @@ export const timeEnd = function (s) { export const clear = function () { console.clear(); }; + +export const group = function (s) { + return function () { + console.group(s); + }; +}; + +export const groupCollapsed = function (s) { + return function () { + console.groupCollapsed(s); + }; +}; + +export const groupEnd = function () { + console.groupEnd(); +}; diff --git a/src/Effect/Console.purs b/src/Effect/Console.purs index 9aec0ed..d69f8d3 100644 --- a/src/Effect/Console.purs +++ b/src/Effect/Console.purs @@ -66,3 +66,13 @@ foreign import timeEnd :: String -> Effect Unit -- | Clears the console foreign import clear :: Effect Unit + +-- | Creates a new inline group in the console. This indents following console +-- | messages by an additional level, until `groupEnd` is called. +foreign import group :: String -> Effect Unit + +-- | Same as `group`, but groups are collapsed by default. +foreign import groupCollapsed :: String -> Effect Unit + +-- | Exits the current inline group in the console. +foreign import groupEnd :: Effect Unit From ad12832af350c827f75c1c0355f95ccedb7dd4bf Mon Sep 17 00:00:00 2001 From: Peter Murphy <26548438+ptrfrncsmrph@users.noreply.github.com> Date: Wed, 4 Oct 2023 09:24:34 -0400 Subject: [PATCH 2/4] Add test --- test/Main.purs | 6 ++++++ test/expected_output.txt | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/test/Main.purs b/test/Main.purs index f4947f1..a32b833 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -12,3 +12,9 @@ main = do Console.error "error" Console.info "info" Console.debug "debug" + Console.group "group" + Console.log "log in group" + Console.groupCollapsed "groupCollapsed" + Console.log "log in groupCollapsed" + Console.groupEnd + Console.groupEnd diff --git a/test/expected_output.txt b/test/expected_output.txt index 2c91449..4f322e8 100644 --- a/test/expected_output.txt +++ b/test/expected_output.txt @@ -3,3 +3,7 @@ warn error info debug +group + log in group + groupCollapsed + log in groupCollapsed From 3103b8922a4d6d0736fbfa322c49f057779ce5cd Mon Sep 17 00:00:00 2001 From: Peter Murphy <26548438+ptrfrncsmrph@users.noreply.github.com> Date: Wed, 4 Oct 2023 09:24:40 -0400 Subject: [PATCH 3/4] Add to CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4018d87..924de61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ Notable changes to this project are documented in this file. The format is based Breaking changes: New features: +- Added `group`, `groupCollapsed`, and `groupEnd` (#42 by @pete-murphy) Bugfixes: From 22ab796be713c524f2dbcab4babc8d1fe7580cce Mon Sep 17 00:00:00 2001 From: Peter Murphy <26548438+ptrfrncsmrph@users.noreply.github.com> Date: Wed, 4 Oct 2023 18:46:09 -0400 Subject: [PATCH 4/4] Add grouped function --- src/Effect/Class/Console.purs | 8 ++++++++ src/Effect/Console.purs | 10 ++++++++++ test/Main.purs | 2 ++ test/expected_output.txt | 2 ++ 4 files changed, 22 insertions(+) diff --git a/src/Effect/Class/Console.purs b/src/Effect/Class/Console.purs index bb0ffca..d11db86 100644 --- a/src/Effect/Class/Console.purs +++ b/src/Effect/Class/Console.purs @@ -1,5 +1,6 @@ module Effect.Class.Console where +import Control.Bind (discard, bind, pure) import Data.Function ((<<<)) import Data.Show (class Show) import Data.Unit (Unit) @@ -56,3 +57,10 @@ groupCollapsed = liftEffect <<< EffConsole.groupCollapsed groupEnd :: forall m. MonadEffect m => m Unit groupEnd = liftEffect EffConsole.groupEnd + +grouped :: forall m a. MonadEffect m => String -> m a -> m a +grouped name inner = do + group name + result <- inner + groupEnd + pure result diff --git a/src/Effect/Console.purs b/src/Effect/Console.purs index d69f8d3..f3d08df 100644 --- a/src/Effect/Console.purs +++ b/src/Effect/Console.purs @@ -1,5 +1,6 @@ module Effect.Console where +import Control.Bind (discard, bind, pure) import Effect (Effect) import Data.Show (class Show, show) @@ -76,3 +77,12 @@ foreign import groupCollapsed :: String -> Effect Unit -- | Exits the current inline group in the console. foreign import groupEnd :: Effect Unit + +-- | Perform an effect within the context of an inline group in the console. +-- | Calls `group` and `groupEnd` before and after the effect, respectively. +grouped :: forall a. String -> Effect a -> Effect a +grouped name inner = do + group name + result <- inner + groupEnd + pure result diff --git a/test/Main.purs b/test/Main.purs index a32b833..fee924f 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -18,3 +18,5 @@ main = do Console.log "log in groupCollapsed" Console.groupEnd Console.groupEnd + Console.grouped "grouped" do + Console.log "log in grouped" diff --git a/test/expected_output.txt b/test/expected_output.txt index 4f322e8..08e6d63 100644 --- a/test/expected_output.txt +++ b/test/expected_output.txt @@ -7,3 +7,5 @@ group log in group groupCollapsed log in groupCollapsed +grouped + log in grouped