aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/program/aedifex
diff options
context:
space:
mode:
authorEduardo Julian2020-08-12 01:01:30 -0400
committerEduardo Julian2020-08-12 01:01:30 -0400
commitddcc768d9d2e798814989037a286df9951840bcd (patch)
tree1db8ae1685671765dc71358853b412b279007f1d /stdlib/source/program/aedifex
parent56fa0ab84c1112ea297c46814e580ca8d11b101e (diff)
WIP: New build-tool named Aedifex (can read project descriptions).
Diffstat (limited to 'stdlib/source/program/aedifex')
-rw-r--r--stdlib/source/program/aedifex/dependency.lux14
-rw-r--r--stdlib/source/program/aedifex/parser.lux140
-rw-r--r--stdlib/source/program/aedifex/project.lux68
3 files changed, 222 insertions, 0 deletions
diff --git a/stdlib/source/program/aedifex/dependency.lux b/stdlib/source/program/aedifex/dependency.lux
new file mode 100644
index 000000000..2507ad589
--- /dev/null
+++ b/stdlib/source/program/aedifex/dependency.lux
@@ -0,0 +1,14 @@
+(.module:
+ [lux (#- Type)])
+
+(type: #export Type
+ Text)
+
+(template [<type> <name>]
+ [(def: #export <name>
+ Type
+ <type>)]
+
+ ["tar" lux-library]
+ ["jar" jvm-library]
+ )
diff --git a/stdlib/source/program/aedifex/parser.lux b/stdlib/source/program/aedifex/parser.lux
new file mode 100644
index 000000000..f3bdbe34f
--- /dev/null
+++ b/stdlib/source/program/aedifex/parser.lux
@@ -0,0 +1,140 @@
+(.module:
+ [lux (#- type)
+ [abstract
+ [monad (#+ do)]]
+ [control
+ ["<>" parser
+ ["<c>" code (#+ Parser)]]]
+ [data
+ ["." text]]
+ [world
+ [net (#+ URL)]]]
+ [//
+ ["/" project]
+ ["//." dependency]])
+
+(def: group
+ (Parser /.Group)
+ <c>.text)
+
+(def: name
+ (Parser /.Name)
+ <c>.text)
+
+(def: version
+ (Parser /.Version)
+ <c>.text)
+
+(def: artifact'
+ (Parser /.Artifact)
+ ($_ <>.and ..group ..name ..version))
+
+(def: artifact
+ (Parser /.Artifact)
+ (<c>.tuple ..artifact'))
+
+(def: url
+ (Parser URL)
+ <c>.text)
+
+(def: scm
+ (Parser /.SCM)
+ ..url)
+
+(def: license
+ (Parser /.License)
+ (<c>.tuple ($_ <>.and
+ ..name
+ ..url
+ (<>.default #/.Repo
+ (<>.or (<c>.this! (' #repo))
+ (<c>.this! (' #manual)))))))
+
+(def: organization
+ (Parser /.Organization)
+ (<| <c>.form
+ (<>.after (<c>.this! (' #organization)))
+ ($_ <>.and
+ ..name
+ ..url)))
+
+(def: developer'
+ (Parser /.Developer)
+ ($_ <>.and
+ ..name
+ ..url
+ (<>.maybe ..organization)
+ ))
+
+(def: developer
+ (Parser /.Developer)
+ (<| <c>.form
+ (<>.after (<c>.this! (' #developer)))
+ ..developer'))
+
+(def: contributor
+ (Parser /.Contributor)
+ (<| <c>.form
+ (<>.after (<c>.this! (' #contributor)))
+ ..developer'))
+
+(def: no-info
+ /.Info
+ {#/.url #.None
+ #/.scm #.None
+ #/.description #.None
+ #/.licenses (list)
+ #/.organization #.None
+ #/.developers (list)
+ #/.contributors (list)})
+
+(def: (bundle tag parser)
+ (All [a] (-> Code (Parser a) (Parser (List a))))
+ (<c>.form (<>.after (<c>.this! tag)
+ (<>.some parser))))
+
+(def: info
+ (Parser /.Info)
+ ($_ <>.and
+ (<>.maybe ..url)
+ (<>.maybe ..scm)
+ (<>.maybe <c>.text)
+ (<>.default (list) (..bundle (' #licenses) ..license))
+ (<>.maybe ..organization)
+ (<>.default (list) (..bundle (' #developers) ..developer))
+ (<>.default (list) (..bundle (' #contributors) ..contributor))
+ ))
+
+(def: repository
+ (Parser /.Repository)
+ ..url)
+
+(def: type
+ (Parser //dependency.Type)
+ <c>.text)
+
+(def: dependency
+ (Parser /.Dependency)
+ (<c>.tuple
+ ($_ <>.and
+ ..artifact'
+ (<>.default //dependency.lux-library ..type)
+ )))
+
+(def: #export project
+ (Parser /.Project)
+ (<| <c>.form
+ (<>.after (<c>.this! (' project:)))
+ (`` ($_ <>.and
+ ..artifact
+ (<| (<>.default ..no-info)
+ <c>.form
+ (<>.after (<c>.this! (' #info)))
+ ..info)
+ (<| (<>.default (list))
+ (..bundle (' #repositories))
+ ..repository)
+ (<| (<>.default (list))
+ (..bundle (' #dependencies))
+ ..dependency)
+ ))))
diff --git a/stdlib/source/program/aedifex/project.lux b/stdlib/source/program/aedifex/project.lux
new file mode 100644
index 000000000..a0891951f
--- /dev/null
+++ b/stdlib/source/program/aedifex/project.lux
@@ -0,0 +1,68 @@
+(.module:
+ [lux (#- Name Info)
+ [world
+ [net (#+ URL)]]]
+ [//
+ ["." dependency]])
+
+(type: #export Group
+ Text)
+
+(type: #export Name
+ Text)
+
+(type: #export Version
+ Text)
+
+(type: #export Artifact
+ {#group Group
+ #name Name
+ #version Version})
+
+(type: #export Distribution
+ #Repo
+ #Manual)
+
+(type: #export License
+ [Name
+ URL
+ Distribution])
+
+(type: #export SCM
+ URL)
+
+(type: #export Organization
+ [Name
+ URL])
+
+(type: #export Email
+ Text)
+
+(type: #export Developer
+ [Name
+ Email
+ (Maybe Organization)])
+
+(type: #export Contributor
+ Developer)
+
+(type: #export Info
+ {#url (Maybe URL)
+ #scm (Maybe SCM)
+ #description (Maybe Text)
+ #licenses (List License)
+ #organization (Maybe Organization)
+ #developers (List Developer)
+ #contributors (List Contributor)})
+
+(type: #export Repository
+ URL)
+
+(type: #export Dependency
+ [Artifact dependency.Type])
+
+(type: #export Project
+ {#identity Artifact
+ #info Info
+ #repositories (List Repository)
+ #dependencies (List Dependency)})