Skip to content
Snippets Groups Projects

Extended scripts support

All threads resolved!

Files

+ 19
2
@@ -16,6 +16,7 @@ module LintWriter
, LintWriter'
, LintResult
, invertLintResult
, zoom
-- * working with lint results
, resultToDeps
, resultToOffers
@@ -43,9 +44,9 @@ module LintWriter
import Data.Text (Text)
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.State (runStateT)
import Control.Monad.Trans.State (runStateT, get)
import Control.Monad.Writer.Lazy (lift)
import Data.Bifunctor (Bifunctor (second))
import Data.Map (Map, fromListWith)
@@ -86,6 +87,22 @@ runLintWriter config context depth linter = LinterState
$ (depth, context, config)
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
invertLintResult :: HasName ctxt => LintResult ctxt -> Map Hint [ctxt]
invertLintResult (LinterState (lints, ctxt)) =
Loading