hydra-0.1.0: src/main/haskell/Hydra/Impl/Haskell/Sources/Util/Codetree/Ast.hs
module Hydra.Impl.Haskell.Sources.Util.Codetree.Ast where
import Hydra.All
import Hydra.Impl.Haskell.Dsl.Types as Types
import Hydra.Impl.Haskell.Dsl.Standard
import Hydra.Impl.Haskell.Sources.Core
codetreeAstModule :: Module Meta
codetreeAstModule = Module ns elements [] $
Just "A model which provides a common syntax tree for Hydra serializers"
where
ns = Namespace "hydra/util/codetree/ast"
def = datatype ns
ast = nsref ns
elements = [
def "Associativity" $
doc "Operator associativity" $
enum ["none", "left", "right", "both"],
def "BlockStyle" $
doc "Formatting option for code blocks" $
record [
"indent">: boolean,
"newlineBeforeContent">: boolean,
"newlineAfterContent">: boolean],
def "BracketExpr" $
doc "An expression enclosed by brackets" $
record [
"brackets">: ast "Brackets",
"enclosed">: ast "Expr",
"style">: ast "BlockStyle"],
def "Brackets" $
doc "Matching open and close bracket symbols" $
record [
"open">: ast "Symbol",
"close">: ast "Symbol"],
def "Expr" $
doc "An abstract expression" $
union [
"const">: ast "Symbol",
"op">: ast "OpExpr",
"brackets">: ast "BracketExpr"],
def "Op" $
doc "An operator symbol" $
record [
"symbol">: ast "Symbol",
"padding">: ast "Padding",
"precedence">: ast "Precedence",
"associativity">: ast "Associativity"],
def "OpExpr" $
doc "An operator expression" $
record [
"op">: ast "Op",
"lhs">: ast "Expr",
"rhs">: ast "Expr"],
def "Padding" $
doc "Left and right padding for an operator" $
record [
"left">: ast "Ws",
"right">: ast "Ws"],
def "Precedence" $
doc "Operator precedence" $
int32,
def "Symbol" $
doc "Any symbol"
string,
def "Ws" $
doc "One of several classes of whitespace" $
enum ["none", "space", "break", "breakAndIndent", "doubleBreak"]]