blob: 508550a2aa7af0c3e122dc862e1d9dd7c8d82c46 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
(.module:
[lux (#- type)
[abstract
[monad (#+ do)]]
[control
["<>" parser
["<c>" code (#+ Parser)]]]
[data
["." text]]
[world
[net (#+ URL)]]]
[//
["/" project]
["//." artifact (#+ Artifact)]
["//." dependency]])
(def: group
(Parser //artifact.Group)
<c>.text)
(def: name
(Parser //artifact.Name)
<c>.text)
(def: version
(Parser //artifact.Version)
<c>.text)
(def: artifact'
(Parser //artifact.Artifact)
($_ <>.and ..group ..name ..version))
(def: artifact
(Parser //artifact.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: (singular tag parser)
(All [a] (-> Code (Parser a) (Parser a)))
(<c>.form (<>.after (<c>.this! tag) parser)))
(def: (plural 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) (..plural (' #licenses) ..license))
(<>.maybe ..organization)
(<>.default (list) (..plural (' #developers) ..developer))
(<>.default (list) (..plural (' #contributors) ..contributor))
))
(def: repository
(Parser //dependency.Repository)
..url)
(def: type
(Parser //dependency.Type)
<c>.text)
(def: dependency
(Parser //dependency.Dependency)
(<c>.tuple
($_ <>.and
..artifact'
(<>.default //dependency.lux-library ..type)
)))
(def: source
(Parser /.Source)
<c>.text)
(def: #export project
(Parser /.Project)
(<| <c>.form
(<>.after (<c>.this! (' project:)))
(`` ($_ <>.and
..artifact
(<| (<>.default ..no-info)
(..singular (' #info) ..info))
(<| (<>.default (list))
(..plural (' #repositories))
..repository)
(<| (<>.default (list))
(..plural (' #dependencies))
..dependency)
(<| (<>.default (list "source"))
(..plural (' #sources))
..source)
(<| (<>.default "target")
(..singular (' #target) <c>.text))
(<>.maybe (..singular (' #program) <c>.text))
(<>.maybe (..singular (' #test) <c>.text))
))))
|