diff options
author | Eduardo Julian | 2020-08-12 01:01:30 -0400 |
---|---|---|
committer | Eduardo Julian | 2020-08-12 01:01:30 -0400 |
commit | ddcc768d9d2e798814989037a286df9951840bcd (patch) | |
tree | 1db8ae1685671765dc71358853b412b279007f1d /stdlib/source/program/aedifex | |
parent | 56fa0ab84c1112ea297c46814e580ca8d11b101e (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.lux | 14 | ||||
-rw-r--r-- | stdlib/source/program/aedifex/parser.lux | 140 | ||||
-rw-r--r-- | stdlib/source/program/aedifex/project.lux | 68 |
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)}) |