From 49d1822c8f1cfd418e978a5c9c58343369d9f956 Mon Sep 17 00:00:00 2001 From: Timothee Cour Date: Mon, 13 Jan 2020 13:05:38 -0800 Subject: [PATCH] fixes #13100 nim doc now treats `export localSymbol` correctly (#13123) [backport] * fix #13100 nim doc now treats `export localSymbol` correctly * use owner instead --- compiler/docgen.nim | 38 +++++++++++++++++++++++++------------- compiler/docgen2.nim | 2 +- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/compiler/docgen.nim b/compiler/docgen.nim index 5eaaed120..e4325aaaf 100644 --- a/compiler/docgen.nim +++ b/compiler/docgen.nim @@ -26,6 +26,7 @@ type TSections = array[TSymKind, Rope] TDocumentor = object of rstgen.RstGenerator modDesc: Rope # module description + module: PSym modDeprecationMsg: Rope toc, section: TSections indexValFilename: string @@ -115,9 +116,10 @@ proc getOutFile2(conf: ConfigRef; filename: RelativeFile, else: result = getOutFile(conf, filename, ext) -proc newDocumentor*(filename: AbsoluteFile; cache: IdentCache; conf: ConfigRef, outExt: string = HtmlExt): PDoc = +proc newDocumentor*(filename: AbsoluteFile; cache: IdentCache; conf: ConfigRef, outExt: string = HtmlExt, module: PSym = nil): PDoc = declareClosures() new(result) + result.module = module result.conf = conf result.cache = cache initRstGenerator(result[], (if conf.cmd != cmdRst2tex: outHtml else: outLatex), @@ -630,8 +632,12 @@ proc genDeprecationMsg(d: PDoc, n: PNode): Rope = else: doAssert false -proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind) = - if not isVisible(d, nameNode): return +type DocFlags = enum + kDefault + kForceExport + +proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind, docFlags: DocFlags) = + if (docFlags != kForceExport) and not isVisible(d, nameNode): return let name = getName(d, nameNode) nameRope = name.rope @@ -847,7 +853,9 @@ proc documentRaises*(cache: IdentCache; n: PNode) = if p4 != nil: n[pragmasPos].add p4 if p5 != nil: n[pragmasPos].add p5 -proc generateDoc*(d: PDoc, n, orig: PNode) = +proc generateDoc*(d: PDoc, n, orig: PNode, docFlags: DocFlags = kDefault) = + template genItemAux(skind) = + genItem(d, n, n[namePos], skind, docFlags) case n.kind of nkPragma: let pragmaNode = findPragma(n, wDeprecated) @@ -855,27 +863,27 @@ proc generateDoc*(d: PDoc, n, orig: PNode) = of nkCommentStmt: d.modDesc.add(genComment(d, n)) of nkProcDef: when useEffectSystem: documentRaises(d.cache, n) - genItem(d, n, n[namePos], skProc) + genItemAux(skProc) of nkFuncDef: when useEffectSystem: documentRaises(d.cache, n) - genItem(d, n, n[namePos], skFunc) + genItemAux(skFunc) of nkMethodDef: when useEffectSystem: documentRaises(d.cache, n) - genItem(d, n, n[namePos], skMethod) + genItemAux(skMethod) of nkIteratorDef: when useEffectSystem: documentRaises(d.cache, n) - genItem(d, n, n[namePos], skIterator) - of nkMacroDef: genItem(d, n, n[namePos], skMacro) - of nkTemplateDef: genItem(d, n, n[namePos], skTemplate) + genItemAux(skIterator) + of nkMacroDef: genItemAux(skMacro) + of nkTemplateDef: genItemAux(skTemplate) of nkConverterDef: when useEffectSystem: documentRaises(d.cache, n) - genItem(d, n, n[namePos], skConverter) + genItemAux(skConverter) of nkTypeSection, nkVarSection, nkLetSection, nkConstSection: for i in 0..