Add signatures object to jsondoc for routine types (#13530)
jsondoc is meant to be read by computers, but yet the signatures of procedures where simply a string of the whole thing. This adds a signature object that unpacks this information into an object so it's easier to analyse the documented signatures.
This commit is contained in:
parent
653de5f27a
commit
05e9473f80
1 changed files with 29 additions and 0 deletions
|
|
@ -794,6 +794,35 @@ proc genJsonItem(d: PDoc, n, nameNode: PNode, k: TSymKind): JsonNode =
|
||||||
result["description"] = %comm
|
result["description"] = %comm
|
||||||
if r.buf.len > 0:
|
if r.buf.len > 0:
|
||||||
result["code"] = %r.buf
|
result["code"] = %r.buf
|
||||||
|
if k in routineKinds:
|
||||||
|
result["signature"] = newJObject()
|
||||||
|
if n[paramsPos][0].kind != nkEmpty:
|
||||||
|
result["signature"]["return"] = %($n[paramsPos][0])
|
||||||
|
if n[paramsPos].len > 1:
|
||||||
|
result["signature"]["arguments"] = newJArray()
|
||||||
|
for paramIdx in 1 ..< n[paramsPos].len:
|
||||||
|
for identIdx in 0 ..< n[paramsPos][paramIdx].len - 2:
|
||||||
|
let
|
||||||
|
paramName = $n[paramsPos][paramIdx][identIdx]
|
||||||
|
paramType = $n[paramsPos][paramIdx][^2]
|
||||||
|
if n[paramsPos][paramIdx][^1].kind != nkEmpty:
|
||||||
|
let paramDefault = $n[paramsPos][paramIdx][^1]
|
||||||
|
result["signature"]["arguments"].add %{"name": %paramName, "type": %paramType, "default": %paramDefault}
|
||||||
|
else:
|
||||||
|
result["signature"]["arguments"].add %{"name": %paramName, "type": %paramType}
|
||||||
|
if n[pragmasPos].kind != nkEmpty:
|
||||||
|
result["signature"]["pragmas"] = newJArray()
|
||||||
|
for pragma in n[pragmasPos]:
|
||||||
|
result["signature"]["pragmas"].add %($pragma)
|
||||||
|
if n[genericParamsPos].kind != nkEmpty:
|
||||||
|
result["signature"]["genericParams"] = newJArray()
|
||||||
|
for genericParam in n[genericParamsPos]:
|
||||||
|
var param = %{"name": %($genericParam)}
|
||||||
|
if genericParam.sym.typ.sons.len > 0:
|
||||||
|
param["types"] = newJArray()
|
||||||
|
for kind in genericParam.sym.typ.sons:
|
||||||
|
param["types"].add %($kind)
|
||||||
|
result["signature"]["genericParams"].add param
|
||||||
|
|
||||||
proc checkForFalse(n: PNode): bool =
|
proc checkForFalse(n: PNode): bool =
|
||||||
result = n.kind == nkIdent and cmpIgnoreStyle(n.ident.s, "false") == 0
|
result = n.kind == nkIdent and cmpIgnoreStyle(n.ident.s, "false") == 0
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue