Skip to content

Commit 7435044

Browse files
timotheecournarimiran
authored andcommitted
fixes nim-lang#13100 nim doc now treats export localSymbol correctly (nim-lang#13123) [backport]
* fix nim-lang#13100 nim doc now treats `export localSymbol` correctly * use owner instead (cherry picked from commit 49d1822)
1 parent 83c1ec4 commit 7435044

File tree

2 files changed

+27
-15
lines changed

2 files changed

+27
-15
lines changed

compiler/docgen.nim

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type
2626
TSections = array[TSymKind, Rope]
2727
TDocumentor = object of rstgen.RstGenerator
2828
modDesc: Rope # module description
29+
module: PSym
2930
modDeprecationMsg: Rope
3031
toc, section: TSections
3132
indexValFilename: string
@@ -115,9 +116,10 @@ proc getOutFile2(conf: ConfigRef; filename: RelativeFile,
115116
else:
116117
result = getOutFile(conf, filename, ext)
117118

118-
proc newDocumentor*(filename: AbsoluteFile; cache: IdentCache; conf: ConfigRef, outExt: string = HtmlExt): PDoc =
119+
proc newDocumentor*(filename: AbsoluteFile; cache: IdentCache; conf: ConfigRef, outExt: string = HtmlExt, module: PSym = nil): PDoc =
119120
declareClosures()
120121
new(result)
122+
result.module = module
121123
result.conf = conf
122124
result.cache = cache
123125
initRstGenerator(result[], (if conf.cmd != cmdRst2tex: outHtml else: outLatex),
@@ -631,8 +633,12 @@ proc genDeprecationMsg(d: PDoc, n: PNode): Rope =
631633
else:
632634
doAssert false
633635

634-
proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind) =
635-
if not isVisible(d, nameNode): return
636+
type DocFlags = enum
637+
kDefault
638+
kForceExport
639+
640+
proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind, docFlags: DocFlags) =
641+
if (docFlags != kForceExport) and not isVisible(d, nameNode): return
636642
let
637643
name = getName(d, nameNode)
638644
nameRope = name.rope
@@ -848,35 +854,37 @@ proc documentRaises*(cache: IdentCache; n: PNode) =
848854
if p4 != nil: n.sons[pragmasPos].add p4
849855
if p5 != nil: n.sons[pragmasPos].add p5
850856

851-
proc generateDoc*(d: PDoc, n, orig: PNode) =
857+
proc generateDoc*(d: PDoc, n, orig: PNode, docFlags: DocFlags = kDefault) =
858+
template genItemAux(skind) =
859+
genItem(d, n, n[namePos], skind, docFlags)
852860
case n.kind
853861
of nkPragma:
854862
let pragmaNode = findPragma(n, wDeprecated)
855863
add(d.modDeprecationMsg, genDeprecationMsg(d, pragmaNode))
856864
of nkCommentStmt: add(d.modDesc, genComment(d, n))
857865
of nkProcDef:
858866
when useEffectSystem: documentRaises(d.cache, n)
859-
genItem(d, n, n.sons[namePos], skProc)
867+
genItemAux(skProc)
860868
of nkFuncDef:
861869
when useEffectSystem: documentRaises(d.cache, n)
862-
genItem(d, n, n.sons[namePos], skFunc)
870+
genItemAux(skFunc)
863871
of nkMethodDef:
864872
when useEffectSystem: documentRaises(d.cache, n)
865-
genItem(d, n, n.sons[namePos], skMethod)
873+
genItemAux(skMethod)
866874
of nkIteratorDef:
867875
when useEffectSystem: documentRaises(d.cache, n)
868-
genItem(d, n, n.sons[namePos], skIterator)
869-
of nkMacroDef: genItem(d, n, n.sons[namePos], skMacro)
870-
of nkTemplateDef: genItem(d, n, n.sons[namePos], skTemplate)
876+
genItemAux(skIterator)
877+
of nkMacroDef: genItemAux(skMacro)
878+
of nkTemplateDef: genItemAux(skTemplate)
871879
of nkConverterDef:
872880
when useEffectSystem: documentRaises(d.cache, n)
873-
genItem(d, n, n.sons[namePos], skConverter)
881+
genItemAux(skConverter)
874882
of nkTypeSection, nkVarSection, nkLetSection, nkConstSection:
875883
for i in 0 ..< len(n):
876884
if n.sons[i].kind != nkCommentStmt:
877885
# order is always 'type var let const':
878-
genItem(d, n.sons[i], n.sons[i].sons[0],
879-
succ(skType, ord(n.kind)-ord(nkTypeSection)))
886+
genItem(d, n[i], n[i][0],
887+
succ(skType, ord(n.kind)-ord(nkTypeSection)), docFlags)
880888
of nkStmtList:
881889
for i in 0 ..< len(n): generateDoc(d, n.sons[i], orig)
882890
of nkWhenStmt:
@@ -887,7 +895,11 @@ proc generateDoc*(d: PDoc, n, orig: PNode) =
887895
for it in n: traceDeps(d, it)
888896
of nkExportStmt:
889897
for it in n:
890-
if it.kind == nkSym: exportSym(d, it.sym)
898+
if it.kind == nkSym:
899+
if d.module != nil and d.module == it.sym.owner:
900+
generateDoc(d, it.sym.ast, orig, kForceExport)
901+
else:
902+
exportSym(d, it.sym)
891903
of nkExportExceptStmt: discard "transformed into nkExportStmt by semExportExcept"
892904
of nkFromStmt, nkImportExceptStmt: traceDeps(d, n.sons[0])
893905
of nkCallKinds:

compiler/docgen2.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ template myOpenImpl(ext: untyped) {.dirty.} =
6262
g.module = module
6363
g.config = graph.config
6464
var d = newDocumentor(AbsoluteFile toFullPath(graph.config, FileIndex module.position),
65-
graph.cache, graph.config, ext)
65+
graph.cache, graph.config, ext, module)
6666
d.hasToc = true
6767
g.doc = d
6868
result = g

0 commit comments

Comments
 (0)