1
1
mirror of https://github.com/anoma/juvix.git synced 2024-12-14 08:27:03 +03:00
juvix/app/Commands/Dev/Highlight.hs

35 lines
1.7 KiB
Haskell
Raw Normal View History

2022-09-14 17:16:15 +03:00
module Commands.Dev.Highlight where
import Commands.Base
import Commands.Dev.Highlight.Options
import Juvix.Compiler.Concrete.Data.Highlight qualified as Highlight
import Juvix.Compiler.Concrete.Data.InfoTable qualified as Scoper
import Juvix.Compiler.Concrete.Translation.FromParsed.Analysis.Scoping qualified as Scoper
import Juvix.Compiler.Concrete.Translation.FromSource qualified as Parser
import Juvix.Compiler.Internal.Translation.FromInternal.Analysis.TypeChecking.Data.Context qualified as Internal
2022-09-14 17:16:15 +03:00
runCommand :: Members '[Embed IO, App] r => HighlightOptions -> Sem r ()
2022-09-14 17:16:15 +03:00
runCommand HighlightOptions {..} = do
res <- fmap snd <$> runPipelineEither _highlightInputFile upToInternalTyped
inputFile <- someBaseToAbs' (_highlightInputFile ^. pathPath)
2022-09-14 17:16:15 +03:00
case res of
Left err -> do
let filterByFile = filter ((== inputFile) . (^. intervalFile))
2022-09-14 17:16:15 +03:00
genOpts <- askGenericOptions
sayRaw (Highlight.goErrors _highlightBackend (filterByFile . run . runReader genOpts $ errorIntervals err))
2022-09-14 17:16:15 +03:00
Right r -> do
let scoperResult = r ^. Internal.internalTypedResultScoped
tbl = scoperResult ^. Scoper.resultParserResult . Parser.resultTable
2022-09-14 17:16:15 +03:00
items = tbl ^. Parser.infoParsedItems
names = scoperResult ^. Scoper.resultScoperTable . Scoper.infoNames
2022-09-14 17:16:15 +03:00
hinput =
Highlight.filterInput
inputFile
Highlight.HighlightInput
{ _highlightNames = names,
_highlightParsed = items,
_highlightDoc = scoperResult ^. Scoper.resultScoperTable . Scoper.infoDoc,
_highlightTypes = r ^. Internal.resultIdenTypes
2022-09-14 17:16:15 +03:00
}
sayRaw (Highlight.highlight _highlightBackend hinput)