Copyright | Copyright 2017 Awake Security |
---|---|
License | Apache-2.0 |
Maintainer | opensource@awakesecurity.com |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Language.Ninja.AST0.1.0
Contents
Description
The Ninja build language after parsing.
This module re-exports all of the modules under the Language.Ninja.AST namespace for convenience.
It is recommended that you import it with the following style:
import qualified Language.Ninja.AST as AST
- data Ninja ann
- makeNinja :: Monoid ann => Ninja ann
- ninjaRules :: Lens' (Ninja ann) (HashMap Text (Rule ann))
- ninjaSingles :: Lens' (Ninja ann) (HashMap Text (Build ann))
- ninjaMultiples :: Lens' (Ninja ann) (HashMap Outputs (Build ann))
- ninjaPhonys :: Lens' (Ninja ann) (HashMap Text (HashSet Text))
- ninjaDefaults :: Lens' (Ninja ann) (HashSet Text)
- ninjaPools :: Lens' (Ninja ann) (HashMap Text Int)
- ninjaSpecials :: Lens' (Ninja ann) (HashMap Text Text)
- data Build ann
- makeBuild :: Monoid ann => Text -> Env Text Text -> Build ann
- buildRule :: Lens' (Build ann) Text
- buildEnv :: Lens' (Build ann) (Env Text Text)
- buildDeps :: Lens' (Build ann) (Deps ann)
- buildBind :: Lens' (Build ann) (HashMap Text Text)
- data Deps ann
- makeDeps :: Monoid ann => Deps ann
- depsNormal :: Lens' (Deps ann) (HashSet Text)
- depsImplicit :: Lens' (Deps ann) (HashSet Text)
- depsOrderOnly :: Lens' (Deps ann) (HashSet Text)
- data Rule ann
- makeRule :: Monoid ann => Rule ann
- ruleBind :: Lens' (Rule ann) (HashMap Text (Expr ann))
- data Expr ann
- _Exprs :: Prism' (Expr ann) (ann, [Expr ann])
- _Lit :: Prism' (Expr ann) (ann, Text)
- _Var :: Prism' (Expr ann) (ann, Text)
- askVar :: Env Text Text -> Text -> Text
- askExpr :: Env Text Text -> Expr ann -> Text
- addBind :: Text -> Expr ann -> Env Text Text -> Env Text Text
- addBinds :: [(Text, Expr ann)] -> Env Text Text -> Env Text Text
- normalizeExpr :: forall ann. Monoid ann => Expr ann -> Expr ann
- data Env k v
- makeEnv :: Env k v
- fromEnv :: Iso' (Env k v) (Maps k v)
- addEnv :: Key k => k -> v -> Env k v -> Env k v
- askEnv :: Key k => Env k v -> k -> Maybe v
- scopeEnv :: Env k v -> Env k v
Language.Ninja.AST.Ninja
A parsed Ninja file.
Instances
Functor Ninja | #Source | |
Foldable Ninja | #Source | |
Traversable Ninja | #Source | |
Annotated Ninja | #Source | The usual definition for |
(Monad m, NinjaConstraint (Serial m) ann) => Serial m (Ninja ann) | #Source | |
(Monad m, NinjaConstraint (CoSerial m) ann) => CoSerial m (Ninja ann) | #Source | |
Eq ann => Eq (Ninja ann) | #Source | |
Show ann => Show (Ninja ann) | #Source | |
Generic (Ninja ann) | #Source | |
(Arbitrary ann, NinjaConstraint Arbitrary ann) => Arbitrary (Ninja ann) | #Source | |
Hashable ann => Hashable (Ninja ann) | #Source | |
ToJSON ann => ToJSON (Ninja ann) | #Source | Converts to
|
FromJSON ann => FromJSON (Ninja ann) | #Source | Inverse of the |
NFData ann => NFData (Ninja ann) | #Source | |
type Rep (Ninja ann) | #Source | |
ninjaRules :: Lens' (Ninja ann) (HashMap Text (Rule ann)) Source 0.1.0#
The rules defined in a parsed Ninja file.
ninjaSingles :: Lens' (Ninja ann) (HashMap Text (Build ann)) Source 0.1.0#
The set of build
declarations with precisely one output.
ninjaMultiples :: Lens' (Ninja ann) (HashMap Outputs (Build ann)) Source 0.1.0#
The set of build
declarations with two or more outputs.
ninjaPhonys :: Lens' (Ninja ann) (HashMap Text (HashSet Text)) Source 0.1.0#
The set of phony build
declarations.
ninjaPools :: Lens' (Ninja ann) (HashMap Text Int) Source 0.1.0#
A mapping from pool names to pool depth integers.
ninjaSpecials :: Lens' (Ninja ann) (HashMap Text Text) Source 0.1.0#
A map from "special" top-level variables to their values.
Language.Ninja.AST.Build
A parsed Ninja build
declaration.
Instances
Functor Build | #Source | |
Foldable Build | #Source | |
Traversable Build | #Source | |
Annotated Build | #Source | The usual definition for |
(Monad m, BuildConstraint (Serial m) ann) => Serial m (Build ann) | #Source | |
(Monad m, BuildConstraint (CoSerial m) ann) => CoSerial m (Build ann) | #Source | |
Eq ann => Eq (Build ann) | #Source | |
Show ann => Show (Build ann) | #Source | |
Generic (Build ann) | #Source | |
(Arbitrary ann, BuildConstraint Arbitrary ann) => Arbitrary (Build ann) | #Source | |
Hashable ann => Hashable (Build ann) | #Source | |
ToJSON ann => ToJSON (Build ann) | #Source | Converts to |
FromJSON ann => FromJSON (Build ann) | #Source | Inverse of the |
NFData ann => NFData (Build ann) | #Source | |
type Rep (Build ann) | #Source | |
Construct a Build
with all default values.
buildEnv :: Lens' (Build ann) (Env Text Text) Source 0.1.0#
A lens into the environment associated with a Build
.
buildDeps :: Lens' (Build ann) (Deps ann) Source 0.1.0#
A lens into the dependencies associated with a Build
.
buildBind :: Lens' (Build ann) (HashMap Text Text) Source 0.1.0#
A lens into the bindings associated with a Build
.
Language.Ninja.AST.Deps
A set of Ninja build dependencies.
Instances
Functor Deps | #Source | |
Foldable Deps | #Source | |
Traversable Deps | #Source | |
Annotated Deps | #Source | The usual definition for |
(Monad m, DepsConstraint (Serial m) ann) => Serial m (Deps ann) | #Source | |
(Monad m, DepsConstraint (CoSerial m) ann) => CoSerial m (Deps ann) | #Source | |
Eq ann => Eq (Deps ann) | #Source | |
Show ann => Show (Deps ann) | #Source | |
Generic (Deps ann) | #Source | |
(Arbitrary ann, DepsConstraint Arbitrary ann) => Arbitrary (Deps ann) | #Source | |
Hashable ann => Hashable (Deps ann) | #Source | |
ToJSON ann => ToJSON (Deps ann) | #Source | Converts to |
FromJSON ann => FromJSON (Deps ann) | #Source | Inverse of the |
NFData ann => NFData (Deps ann) | #Source | |
type Rep (Deps ann) | #Source | |
depsNormal :: Lens' (Deps ann) (HashSet Text) Source 0.1.0#
A lens into the set of normal dependencies in a Deps
.
depsImplicit :: Lens' (Deps ann) (HashSet Text) Source 0.1.0#
A lens into the set of implicit dependencies in a Deps
.
depsOrderOnly :: Lens' (Deps ann) (HashSet Text) Source 0.1.0#
A lens into the set of order-only dependencies in a Deps
.
Language.Ninja.AST.Rule
A parsed Ninja rule
declaration.
Instances
Functor Rule | #Source | |
Foldable Rule | #Source | |
Traversable Rule | #Source | |
Annotated Rule | #Source | The usual definition for |
(Monad m, RuleConstraint (Serial m) ann) => Serial m (Rule ann) | #Source | |
(Monad m, RuleConstraint (CoSerial m) ann) => CoSerial m (Rule ann) | #Source | |
Eq ann => Eq (Rule ann) | #Source | |
Show ann => Show (Rule ann) | #Source | |
Generic (Rule ann) | #Source | |
(Arbitrary ann, RuleConstraint Arbitrary ann) => Arbitrary (Rule ann) | #Source | |
Hashable ann => Hashable (Rule ann) | #Source | |
ToJSON ann => ToJSON (Rule ann) | #Source | Converts to |
FromJSON ann => FromJSON (Rule ann) | #Source | Inverse of the |
NFData ann => NFData (Rule ann) | #Source | |
type Rep (Rule ann) | #Source | |
ruleBind :: Lens' (Rule ann) (HashMap Text (Expr ann)) Source 0.1.0#
The set of bindings in scope during the execution of this rule.
Language.Ninja.AST.Expr
An expression containing variable references in the Ninja language.
Constructors
0.1.0Exprs !ann ![Expr ann] | Sequencing of expressions. |
0.1.0Lit !ann !Text | A literal string. |
0.1.0Var !ann !Text | A variable reference. |
Instances
Functor Expr | #Source | |
Foldable Expr | #Source | |
Traversable Expr | #Source | |
Annotated Expr | #Source | The usual definition for |
(Monad m, ExprConstraint (Serial m) ann) => Serial m (Expr ann) | #Source | |
(Monad m, ExprConstraint (CoSerial m) ann) => CoSerial m (Expr ann) | #Source | |
Eq ann => Eq (Expr ann) | #Source | |
Data ann => Data (Expr ann) | #Source | |
Show ann => Show (Expr ann) | #Source | |
Generic (Expr ann) | #Source | |
(Arbitrary ann, ExprConstraint Arbitrary ann) => Arbitrary (Expr ann) | #Source | |
Hashable ann => Hashable (Expr ann) | #Source | |
ToJSON ann => ToJSON (Expr ann) | #Source | Converts |
FromJSON ann => FromJSON (Expr ann) | #Source | Inverse of the |
NFData ann => NFData (Expr ann) | #Source | |
Data ann => Plated (Expr ann) | #Source | The usual definition for |
type Rep (Expr ann) | #Source | |
askVar :: Env Text Text -> Text -> Text Source 0.1.0#
Look up the given variable in the given context, returning the empty string if the variable was not found.
addBinds :: [(Text, Expr ann)] -> Env Text Text -> Env Text Text Source 0.1.0#
Add bindings from a list. Note that this function evaluates all the right-hand-sides first, and then adds them all to the environment.
For example:
>>>
:set -XOverloadedStrings
>>>
let binds = [("x", Lit () "5"), ("y", Var () "x")]
>>>
AST.headEnv (addBinds binds AST.makeEnv)
fromList [("x","5"),("y","")]
normalizeExpr :: forall ann. Monoid ann => Expr ann -> Expr ann Source 0.1.0#
Normalize an Expr
by recursively flattening any Exprs
nodes, removing
empty Lit
nodes, combining adjacent Lit
nodes, and pulling out the
interior of the top-level Exprs
node if it has only one subnode.
The number of Exprs
nodes in the output is guaranteed to be 0 or 1.
If it is 0, then there is exactly one node of any type in the output.
The output is thus isomorphic to (Maybe ann, [(ann, Either Text Text)])
,
where the Maybe ann
represents the annotation of the top-level Exprs
node if it exists.
Language.Ninja.AST.Env
A Ninja-style environment, basically a nonempty list of hash tables.
Instances
(Monad m, EnvConstraint (Serial m) k v) => Serial m (Env k v) | #Source | Uses the underlying |
(Monad m, EnvConstraint (CoSerial m) k v) => CoSerial m (Env k v) | #Source | Uses the underlying |
(Eq v, Eq k) => Eq (Env k v) | #Source | |
(Show v, Show k) => Show (Env k v) | #Source | |
Generic (Env k v) | #Source | |
(Key k, Arbitrary k, Arbitrary v) => Arbitrary (Env k v) | #Source | |
(Hashable k, Hashable v) => Hashable (Env k v) | #Source | |
(ToJSONKey k, ToJSON v) => ToJSON (Env k v) | #Source | Converts to a (nonempty) array of JSON objects.0.1.0 |
(Key k, FromJSONKey k, FromJSON v) => FromJSON (Env k v) | #Source | Inverse of the |
(NFData k, NFData v) => NFData (Env k v) | #Source | |
type Rep (Env k v) | #Source | |