packages feed

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)