diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/docgen.nim | 22 | ||||
-rw-r--r-- | compiler/docgen2.nim | 14 |
2 files changed, 24 insertions, 12 deletions
diff --git a/compiler/docgen.nim b/compiler/docgen.nim index 07f0e0378..de2a9831d 100644 --- a/compiler/docgen.nim +++ b/compiler/docgen.nim @@ -787,13 +787,13 @@ proc generateDoc*(d: PDoc, n, orig: PNode) = proc add(d: PDoc; j: JsonNode) = 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 of nkCommentStmt: - if startsWith(n.comment, "##"): - let stripped = n.comment.substr(2).strip - d.add %{ "comment": %stripped, "line": %n.info.line.int, - "col": %n.info.col } + if includeComments: + d.add %*{"comment": genComment(d, n)} + else: + add(d.modDesc, genComment(d, n)) of nkProcDef: when useEffectSystem: documentRaises(d.cache, n) 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))) of nkStmtList: for i in countup(0, sonsLen(n) - 1): - generateJson(d, n.sons[i]) + generateJson(d, n.sons[i], includeComments) of nkWhenStmt: # generate documentation for the first branch only: if not checkForFalse(n.sons[0].sons[0]): - generateJson(d, lastSon(n.sons[0])) + generateJson(d, lastSon(n.sons[0]), includeComments) else: discard proc genTagsItem(d: PDoc, n, nameNode: PNode, k: TSymKind): string = @@ -951,8 +951,12 @@ proc writeOutput*(d: PDoc, useWarning = false) = outfile.string) proc writeOutputJson*(d: PDoc, useWarning = false) = + var modDesc: string + for desc in d.modDesc: + modDesc &= desc let content = %*{"orig": d.filename, "nimble": getPackageName(d.conf, d.filename), + "moduleDescription": modDesc, "entries": d.jArray} if optStdout in d.conf.globalOptions: write(stdout, $content) @@ -962,7 +966,9 @@ proc writeOutputJson*(d: PDoc, useWarning = false) = write(f, $content) close(f) 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) = var ast = parseFile(conf.projectMainIdx, cache, conf) diff --git a/compiler/docgen2.nim b/compiler/docgen2.nim index 2171a7194..f2ac6c1a9 100644 --- a/compiler/docgen2.nim +++ b/compiler/docgen2.nim @@ -55,20 +55,26 @@ proc processNodeJson(c: PPassContext, n: PNode): PNode = result = n var g = PGen(c) 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 new(g) g.module = module var d = newDocumentor(AbsoluteFile toFullPath(graph.config, FileIndex module.position), - graph.cache, graph.config) + graph.cache, graph.config, ext) d.hasToc = true g.doc = d 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 docgen2JsonPass* = makePass(open = myOpen, process = processNodeJson, +const docgen2JsonPass* = makePass(open = myOpenJson, process = processNodeJson, close = closeJson) proc finishDoc2Pass*(project: string) = |