This fixes `jsondoc0` so that it has comments in the output as described by the documentation. It also fixes `jsondoc`/`jsondoc2` as it stored it's output in a file with an html extension. Along with this it also adds a new field `moduleDescription` to `jsondoc`/`jsondoc2` which contains the module description.
This commit is contained in:
parent
e8cf289bee
commit
db95fad6fa
4 changed files with 28 additions and 12 deletions
|
|
@ -35,6 +35,9 @@
|
||||||
|
|
||||||
|
|
||||||
### Tool changes
|
### Tool changes
|
||||||
|
- `jsondoc` now include a `moduleDescription` field with the module
|
||||||
|
description. `jsondoc0` shows comments as it's own objects as shown in the
|
||||||
|
documentation.
|
||||||
|
|
||||||
### Compiler changes
|
### Compiler changes
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -787,13 +787,13 @@ proc generateDoc*(d: PDoc, n, orig: PNode) =
|
||||||
proc add(d: PDoc; j: JsonNode) =
|
proc add(d: PDoc; j: JsonNode) =
|
||||||
if j != nil: d.jArray.add j
|
if j != nil: d.jArray.add j
|
||||||
|
|
||||||
proc generateJson*(d: PDoc, n: PNode) =
|
proc generateJson*(d: PDoc, n: PNode, includeComments: bool = true) =
|
||||||
case n.kind
|
case n.kind
|
||||||
of nkCommentStmt:
|
of nkCommentStmt:
|
||||||
if startsWith(n.comment, "##"):
|
if includeComments:
|
||||||
let stripped = n.comment.substr(2).strip
|
d.add %*{"comment": genComment(d, n)}
|
||||||
d.add %{ "comment": %stripped, "line": %n.info.line.int,
|
else:
|
||||||
"col": %n.info.col }
|
add(d.modDesc, genComment(d, n))
|
||||||
of nkProcDef:
|
of nkProcDef:
|
||||||
when useEffectSystem: documentRaises(d.cache, n)
|
when useEffectSystem: documentRaises(d.cache, n)
|
||||||
d.add genJsonItem(d, n, n.sons[namePos], skProc)
|
d.add genJsonItem(d, n, n.sons[namePos], skProc)
|
||||||
|
|
@ -821,11 +821,11 @@ proc generateJson*(d: PDoc, n: PNode) =
|
||||||
succ(skType, ord(n.kind)-ord(nkTypeSection)))
|
succ(skType, ord(n.kind)-ord(nkTypeSection)))
|
||||||
of nkStmtList:
|
of nkStmtList:
|
||||||
for i in countup(0, sonsLen(n) - 1):
|
for i in countup(0, sonsLen(n) - 1):
|
||||||
generateJson(d, n.sons[i])
|
generateJson(d, n.sons[i], includeComments)
|
||||||
of nkWhenStmt:
|
of nkWhenStmt:
|
||||||
# generate documentation for the first branch only:
|
# generate documentation for the first branch only:
|
||||||
if not checkForFalse(n.sons[0].sons[0]):
|
if not checkForFalse(n.sons[0].sons[0]):
|
||||||
generateJson(d, lastSon(n.sons[0]))
|
generateJson(d, lastSon(n.sons[0]), includeComments)
|
||||||
else: discard
|
else: discard
|
||||||
|
|
||||||
proc genTagsItem(d: PDoc, n, nameNode: PNode, k: TSymKind): string =
|
proc genTagsItem(d: PDoc, n, nameNode: PNode, k: TSymKind): string =
|
||||||
|
|
@ -951,8 +951,12 @@ proc writeOutput*(d: PDoc, useWarning = false) =
|
||||||
outfile.string)
|
outfile.string)
|
||||||
|
|
||||||
proc writeOutputJson*(d: PDoc, useWarning = false) =
|
proc writeOutputJson*(d: PDoc, useWarning = false) =
|
||||||
|
var modDesc: string
|
||||||
|
for desc in d.modDesc:
|
||||||
|
modDesc &= desc
|
||||||
let content = %*{"orig": d.filename,
|
let content = %*{"orig": d.filename,
|
||||||
"nimble": getPackageName(d.conf, d.filename),
|
"nimble": getPackageName(d.conf, d.filename),
|
||||||
|
"moduleDescription": modDesc,
|
||||||
"entries": d.jArray}
|
"entries": d.jArray}
|
||||||
if optStdout in d.conf.globalOptions:
|
if optStdout in d.conf.globalOptions:
|
||||||
write(stdout, $content)
|
write(stdout, $content)
|
||||||
|
|
@ -962,7 +966,9 @@ proc writeOutputJson*(d: PDoc, useWarning = false) =
|
||||||
write(f, $content)
|
write(f, $content)
|
||||||
close(f)
|
close(f)
|
||||||
else:
|
else:
|
||||||
discard "fixme: error report"
|
localError(d.conf, newLineInfo(d.conf, AbsoluteFile d.filename, -1, -1),
|
||||||
|
warnUser, "unable to open file \"" & d.destFile.string &
|
||||||
|
"\" for writing")
|
||||||
|
|
||||||
proc commandDoc*(cache: IdentCache, conf: ConfigRef) =
|
proc commandDoc*(cache: IdentCache, conf: ConfigRef) =
|
||||||
var ast = parseFile(conf.projectMainIdx, cache, conf)
|
var ast = parseFile(conf.projectMainIdx, cache, conf)
|
||||||
|
|
|
||||||
|
|
@ -55,20 +55,26 @@ proc processNodeJson(c: PPassContext, n: PNode): PNode =
|
||||||
result = n
|
result = n
|
||||||
var g = PGen(c)
|
var g = PGen(c)
|
||||||
if shouldProcess(g):
|
if shouldProcess(g):
|
||||||
generateJson(g.doc, n)
|
generateJson(g.doc, n, false)
|
||||||
|
|
||||||
proc myOpen(graph: ModuleGraph; module: PSym): PPassContext =
|
template myOpenImpl(ext: untyped) {.dirty.} =
|
||||||
var g: PGen
|
var g: PGen
|
||||||
new(g)
|
new(g)
|
||||||
g.module = module
|
g.module = module
|
||||||
var d = newDocumentor(AbsoluteFile toFullPath(graph.config, FileIndex module.position),
|
var d = newDocumentor(AbsoluteFile toFullPath(graph.config, FileIndex module.position),
|
||||||
graph.cache, graph.config)
|
graph.cache, graph.config, ext)
|
||||||
d.hasToc = true
|
d.hasToc = true
|
||||||
g.doc = d
|
g.doc = d
|
||||||
result = g
|
result = g
|
||||||
|
|
||||||
|
proc myOpen(graph: ModuleGraph; module: PSym): PPassContext =
|
||||||
|
myOpenImpl(HtmlExt)
|
||||||
|
|
||||||
|
proc myOpenJson(graph: ModuleGraph; module: PSym): PPassContext =
|
||||||
|
myOpenImpl(JsonExt)
|
||||||
|
|
||||||
const docgen2Pass* = makePass(open = myOpen, process = processNode, close = close)
|
const docgen2Pass* = makePass(open = myOpen, process = processNode, close = close)
|
||||||
const docgen2JsonPass* = makePass(open = myOpen, process = processNodeJson,
|
const docgen2JsonPass* = makePass(open = myOpenJson, process = processNodeJson,
|
||||||
close = closeJson)
|
close = closeJson)
|
||||||
|
|
||||||
proc finishDoc2Pass*(project: string) =
|
proc finishDoc2Pass*(project: string) =
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,7 @@ Output::
|
||||||
{
|
{
|
||||||
"orig": "docgen_sample.nim",
|
"orig": "docgen_sample.nim",
|
||||||
"nimble": "",
|
"nimble": "",
|
||||||
|
"moduleDescription": "This module is a sample",
|
||||||
"entries": [
|
"entries": [
|
||||||
{
|
{
|
||||||
"name": "helloWorld",
|
"name": "helloWorld",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue