zwirn-0.2.2.0: src/zwirn-lang/Zwirn/Language/LSP/Eval.hs
module Zwirn.Language.LSP.Eval where
import Control.Monad.State (get)
import qualified Data.Text as T
import Zwirn.Language.Compiler
import Zwirn.Language.Macro (CodeEdit)
evalBlockAt :: T.Text -> Int -> CI (([CodeEdit], [T.Text]), Environment)
evalBlockAt doc l = do
sys <- getSyntaxBlock l doc
r <- mapM (runSyntax True) sys
e <- get
return (getOutput r, e)
getOutput :: [CompilerOutput] -> ([CodeEdit], [T.Text])
getOutput = foldl f ([], [])
where
f (es, ms) (OutMessage m) = (es, m : ms)
f (es, ms) (OutEdits e) = (e ++ es, ms)
f (es, ms) _ = (es, ms)