fixes #13100 nim doc now treats export localSymbol correctly (#13123) [backport]

* fix #13100 nim doc now treats `export localSymbol` correctly
* use owner instead
This commit is contained in:
Timothee Cour 2020-01-13 13:05:38 -08:00 • committed by Andreas Rumpf
commit 49d1822c8f
2 changed files with 26 additions and 14 deletions

View file

@ -26,6 +26,7 @@ type
TSections = array[TSymKind, Rope] TSections = array[TSymKind, Rope]
TDocumentor = object of rstgen.RstGenerator TDocumentor = object of rstgen.RstGenerator
modDesc: Rope # module description modDesc: Rope # module description
module: PSym
modDeprecationMsg: Rope modDeprecationMsg: Rope
toc, section: TSections toc, section: TSections
indexValFilename: string indexValFilename: string
@ -115,9 +116,10 @@ proc getOutFile2(conf: ConfigRef; filename: RelativeFile,
else: else:
result = getOutFile(conf, filename, ext) 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() declareClosures()
new(result) new(result)
result.module = module
result.conf = conf result.conf = conf
result.cache = cache result.cache = cache
initRstGenerator(result[], (if conf.cmd != cmdRst2tex: outHtml else: outLatex), initRstGenerator(result[], (if conf.cmd != cmdRst2tex: outHtml else: outLatex),
@ -630,8 +632,12 @@ proc genDeprecationMsg(d: PDoc, n: PNode): Rope =
else: else:
doAssert false doAssert false
proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind) = type DocFlags = enum
if not isVisible(d, nameNode): return kDefault
kForceExport
proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind, docFlags: DocFlags) =
if (docFlags != kForceExport) and not isVisible(d, nameNode): return
let let
name = getName(d, nameNode) name = getName(d, nameNode)
nameRope = name.rope nameRope = name.rope
@ -847,7 +853,9 @@ proc documentRaises*(cache: IdentCache; n: PNode) =
if p4 != nil: n[pragmasPos].add p4 if p4 != nil: n[pragmasPos].add p4
if p5 != nil: n[pragmasPos].add p5 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 case n.kind
of nkPragma: of nkPragma:
let pragmaNode = findPragma(n, wDeprecated) 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 nkCommentStmt: d.modDesc.add(genComment(d, n))
of nkProcDef: of nkProcDef:
when useEffectSystem: documentRaises(d.cache, n) when useEffectSystem: documentRaises(d.cache, n)
genItem(d, n, n[namePos], skProc) genItemAux(skProc)
of nkFuncDef: of nkFuncDef:
when useEffectSystem: documentRaises(d.cache, n) when useEffectSystem: documentRaises(d.cache, n)
genItem(d, n, n[namePos], skFunc) genItemAux(skFunc)
of nkMethodDef: of nkMethodDef:
when useEffectSystem: documentRaises(d.cache, n) when useEffectSystem: documentRaises(d.cache, n)
genItem(d, n, n[namePos], skMethod) genItemAux(skMethod)
of nkIteratorDef: of nkIteratorDef:
when useEffectSystem: documentRaises(d.cache, n) when useEffectSystem: documentRaises(d.cache, n)
genItem(d, n, n[namePos], skIterator) genItemAux(skIterator)
of nkMacroDef: genItem(d, n, n[namePos], skMacro) of nkMacroDef: genItemAux(skMacro)
of nkTemplateDef: genItem(d, n, n[namePos], skTemplate) of nkTemplateDef: genItemAux(skTemplate)
of nkConverterDef: of nkConverterDef:
when useEffectSystem: documentRaises(d.cache, n) when useEffectSystem: documentRaises(d.cache, n)
genItem(d, n, n[namePos], skConverter) genItemAux(skConverter)
of nkTypeSection, nkVarSection, nkLetSection, nkConstSection: of nkTypeSection, nkVarSection, nkLetSection, nkConstSection:
for i in 0..<n.len: for i in 0..<n.len:
if n[i].kind != nkCommentStmt: if n[i].kind != nkCommentStmt:
# order is always 'type var let const': # order is always 'type var let const':
genItem(d, n[i], n[i][0], genItem(d, n[i], n[i][0],
succ(skType, ord(n.kind)-ord(nkTypeSection))) succ(skType, ord(n.kind)-ord(nkTypeSection)), docFlags)
of nkStmtList: of nkStmtList:
for i in 0..<n.len: generateDoc(d, n[i], orig) for i in 0..<n.len: generateDoc(d, n[i], orig)
of nkWhenStmt: of nkWhenStmt:
@ -886,7 +894,11 @@ proc generateDoc*(d: PDoc, n, orig: PNode) =
for it in n: traceDeps(d, it) for it in n: traceDeps(d, it)
of nkExportStmt: of nkExportStmt:
for it in n: for it in n:
if it.kind == nkSym: exportSym(d, it.sym) if it.kind == nkSym:
if d.module != nil and d.module == it.sym.owner:
generateDoc(d, it.sym.ast, orig, kForceExport)
else:
exportSym(d, it.sym)
of nkExportExceptStmt: discard "transformed into nkExportStmt by semExportExcept" of nkExportExceptStmt: discard "transformed into nkExportStmt by semExportExcept"
of nkFromStmt, nkImportExceptStmt: traceDeps(d, n[0]) of nkFromStmt, nkImportExceptStmt: traceDeps(d, n[0])
of nkCallKinds: of nkCallKinds:

View file

@ -62,7 +62,7 @@ template myOpenImpl(ext: untyped) {.dirty.} =
g.module = module g.module = module
g.config = graph.config g.config = graph.config
var d = newDocumentor(AbsoluteFile toFullPath(graph.config, FileIndex module.position), var d = newDocumentor(AbsoluteFile toFullPath(graph.config, FileIndex module.position),
graph.cache, graph.config, ext) graph.cache, graph.config, ext, module)
d.hasToc = true d.hasToc = true
g.doc = d g.doc = d
result = g result = g