* fix #13100 nim doc now treats `export localSymbol` correctly * use owner instead
This commit is contained in:
parent
d9640ed075
commit
49d1822c8f
2 changed files with 26 additions and 14 deletions
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue