Skip to content

Commit 4b15624

Browse files
committed
feat: generate better XQDoc
- add arity - add annotations - add return with occurrence (return in comment left intact) - add parameters with occurrence (param elements in comment left intact)
1 parent b92f842 commit 4b15624

File tree

1 file changed

+43
-4
lines changed

1 file changed

+43
-4
lines changed

src/main/xar-resources/modules/generate.xqm

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ declare %private function generate:has-definition($module-info as array(*)) as x
7171
declare %private function generate:generate-and-store-xqdoc ($module-info as array(*)) {
7272
let $filename := concat(util:hash($module-info?1, "md5"), ".xml"),
7373
$xqdoc := generate:module-to-xqdoc($module-info?2)
74+
7475
return
7576
xmldb:store($generate:doc-collection, $filename, $xqdoc)
7677
=> xs:anyURI()
@@ -98,8 +99,19 @@ declare %private function generate:module-to-xqdoc($module as element(module)) a
9899
else
99100
<xqdoc:author>{$module/author/string()}</xqdoc:author>
100101
}
102+
{
103+
if (empty($module/see)) then ()
104+
else
105+
<xqdoc:see>{$module/see/string()}</xqdoc:see>
106+
}
101107
</xqdoc:comment>
102108
</xqdoc:module>
109+
<xqdoc:variables>
110+
{
111+
for $variable in $module/variable
112+
return <xqdoc:variable><xqdoc:name>{ $variable/@name/string() }</xqdoc:name></xqdoc:variable>
113+
}
114+
</xqdoc:variables>
103115
<xqdoc:functions>
104116
{
105117
for $function in $module/function
@@ -113,15 +125,34 @@ declare %private function generate:function-to-xqdoc($function as element(functi
113125
<xqdoc:function>
114126
<xqdoc:name>{$function/@name/string()}</xqdoc:name>
115127
<xqdoc:signature>{generate:signature($function)}</xqdoc:signature>
128+
<xqdoc:parameters>{$function/argument ! generate:parameter(.)}</xqdoc:parameters>
129+
<xqdoc:arity>{count($function/argument)}</xqdoc:arity>
130+
<xqdoc:return>
131+
<xqdoc:type occurrence="{generate:cardinality($function/returns/@cardinality)}">{
132+
$function/returns/@type/string() }</xqdoc:type>
133+
</xqdoc:return>
134+
{
135+
if (empty($function/annotation)) then () else
136+
<xqdoc:annotations>
137+
{
138+
for $annotation in $function/annotation
139+
return
140+
<xqdoc:annotation>
141+
<xqdoc:name>{ $annotation/@name/string() }</xqdoc:name>
142+
<xqdoc:literal>{
143+
if (empty($annotation/value)) then () else
144+
"(" || string-join($annotation/value, ", ") || ")"
145+
}</xqdoc:literal>
146+
</xqdoc:annotation>
147+
}
148+
</xqdoc:annotations>
149+
}
116150
<xqdoc:comment>
117151
<xqdoc:description>{$function/description/string()}</xqdoc:description>
118152
{
119153
for $argument in $function/argument
120154
return
121-
<xqdoc:param>{
122-
"$" || $argument/@var || generate:cardinality($argument/@cardinality) ||
123-
" " || $argument/text()
124-
}</xqdoc:param>
155+
<xqdoc:param>{ "$" || $argument/@var || " " || $argument/text() }</xqdoc:param>
125156
}
126157
<xqdoc:return>
127158
{
@@ -148,6 +179,14 @@ declare %private function generate:cardinality($cardinality as xs:string) as xs:
148179
default return ()
149180
};
150181

182+
declare %private function generate:parameter($argument as element(argument)) as element(xqdoc:parameter) {
183+
<xqdoc:parameter>
184+
<xqdoc:name>{ "$" || $argument/@var }</xqdoc:name>
185+
<xqdoc:type occurrence="{generate:cardinality($argument/@cardinality)}">{
186+
$argument/@type/string() }</xqdoc:type>
187+
</xqdoc:parameter>
188+
};
189+
151190
declare %private function generate:signature($function as element(function)) as xs:string {
152191
let $arguments :=
153192
for $argument in $function/argument

0 commit comments

Comments
 (0)