Skip to content
Snippets Groups Projects
Commit e2767b3b authored by stuebinm's avatar stuebinm
Browse files

add zoom function for LintWriter

parent 2ffe0630
No related branches found
No related tags found
1 merge request!1Extended scripts support
...@@ -16,6 +16,7 @@ module LintWriter ...@@ -16,6 +16,7 @@ module LintWriter
, LintWriter' , LintWriter'
, LintResult , LintResult
, invertLintResult , invertLintResult
, zoom
-- * working with lint results -- * working with lint results
, resultToDeps , resultToDeps
, resultToOffers , resultToOffers
...@@ -43,9 +44,9 @@ module LintWriter ...@@ -43,9 +44,9 @@ module LintWriter
import Data.Text (Text) import Data.Text (Text)
import Badges (Badge) import Badges (Badge)
import Control.Monad.State (StateT, modify) import Control.Monad.State (StateT, modify, MonadState (put))
import Control.Monad.Trans.Reader (Reader, asks, runReader) import Control.Monad.Trans.Reader (Reader, asks, runReader)
import Control.Monad.Trans.State (runStateT) import Control.Monad.Trans.State (runStateT, get)
import Control.Monad.Writer.Lazy (lift) import Control.Monad.Writer.Lazy (lift)
import Data.Bifunctor (Bifunctor (second)) import Data.Bifunctor (Bifunctor (second))
import Data.Map (Map, fromListWith) import Data.Map (Map, fromListWith)
...@@ -86,6 +87,22 @@ runLintWriter config context depth linter = LinterState ...@@ -86,6 +87,22 @@ runLintWriter config context depth linter = LinterState
$ (depth, context, config) $ (depth, context, config)
where runstate = runStateT linter (LinterState ([], context)) where runstate = runStateT linter (LinterState ([], context))
zoom :: (a -> b) -> (b -> a) -> LintWriter a -> LintWriter' b a
zoom embed extract operation = do
config <- lintConfig id
depth <- askFileDepth
let result ctxt = runLintWriter config ctxt depth operation
LinterState (lints,a) <- get
let res = result . extract $ a
put $ LinterState
. (resultToLints res <> lints,)
. embed
. resultToAdjusted
$ res
pure $ resultToAdjusted res
-- | "invert" a linter's result, grouping lints by their messages -- | "invert" a linter's result, grouping lints by their messages
invertLintResult :: HasName ctxt => LintResult ctxt -> Map Hint [ctxt] invertLintResult :: HasName ctxt => LintResult ctxt -> Map Hint [ctxt]
invertLintResult (LinterState (lints, ctxt)) = invertLintResult (LinterState (lints, ctxt)) =
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment