packages feed

jsonnet-0.1.0.0: src/Language/Jsonnet/Syntax/Annotated.hs

-- |
module Language.Jsonnet.Syntax.Annotated where

import Data.Fix
import Data.Functor.Sum
import Data.List.NonEmpty
import Data.Semigroup.Foldable
import Language.Jsonnet.Annotate
import Language.Jsonnet.Common
import Language.Jsonnet.Parser.SrcSpan
import Language.Jsonnet.Syntax

-- annotated syntax tree with resolved imports
type Expr = Ann ExprF SrcSpan

-- annotated syntax tree with unresolved imports
type Expr' = Ann ExprF' SrcSpan

mkApply :: Expr' -> Args Expr' -> Expr'
mkApply a@(Fix (AnnF _ ann)) args =
  Fix $ AnnF (InL $ EApply a args) ann

--mkApply a@(Fix (AnnF _ ann)) b =
--  Fix $ AnnF (InL $ EApply a b) (fold1 (ann <| fmap attrib (fromList b)))

mkLookup :: Expr' -> Expr' -> Expr'
mkLookup a@(Fix (AnnF _ ann1)) b@(Fix (AnnF _ ann2)) =
  Fix $ AnnF (InL $ ELookup a b) (ann1 <> ann2)

mkIndex :: Expr' -> Expr' -> Expr'
mkIndex a@(Fix (AnnF _ ann1)) b@(Fix (AnnF _ ann2)) =
  Fix $ AnnF (InL $ EIndex a b) (ann1 <> ann2)

mkSlice :: Maybe Expr' -> Maybe Expr' -> Maybe Expr' -> Expr' -> Expr'
mkSlice i n s e@(Fix (AnnF _ ann1)) =
  Fix $ AnnF (InL $ ESlice e i n s) ann1

mkBinOp :: BinOp -> Expr' -> Expr' -> Expr'
mkBinOp op a@(Fix (AnnF _ ann1)) b@(Fix (AnnF _ ann2)) =
  Fix $ AnnF (InL $ EBinOp op a b) (ann1 <> ann2)

-- FIXME we are manually here updating the span
mkUnyOp :: UnyOp -> Expr' -> Expr'
mkUnyOp op a@(Fix (AnnF _ ann)) =
  Fix $ AnnF (InL $ EUnyOp op a) ann