Skip to content

Commit fdb0dfd

Browse files
committed
fix #13100 nim doc now treats export localSymbol correctly
1 parent a33b72a commit fdb0dfd

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

compiler/docgen.nim

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -630,8 +630,12 @@ proc genDeprecationMsg(d: PDoc, n: PNode): Rope =
630630
else:
631631
doAssert false
632632

633-
proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind) =
634-
if not isVisible(d, nameNode): return
633+
type DocFlags = enum
634+
kDefault
635+
kForceExport
636+
637+
proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind, docFlags: DocFlags) =
638+
if (docFlags != kForceExport) and not isVisible(d, nameNode): return
635639
let
636640
name = getName(d, nameNode)
637641
nameRope = name.rope
@@ -847,35 +851,37 @@ proc documentRaises*(cache: IdentCache; n: PNode) =
847851
if p4 != nil: n[pragmasPos].add p4
848852
if p5 != nil: n[pragmasPos].add p5
849853

850-
proc generateDoc*(d: PDoc, n, orig: PNode) =
854+
proc generateDoc*(d: PDoc, n, orig: PNode, docFlags: DocFlags = kDefault) =
855+
template genItemAux(skind) =
856+
genItem(d, n, n[namePos], skind, docFlags)
851857
case n.kind
852858
of nkPragma:
853859
let pragmaNode = findPragma(n, wDeprecated)
854860
d.modDeprecationMsg.add(genDeprecationMsg(d, pragmaNode))
855861
of nkCommentStmt: d.modDesc.add(genComment(d, n))
856862
of nkProcDef:
857863
when useEffectSystem: documentRaises(d.cache, n)
858-
genItem(d, n, n[namePos], skProc)
864+
genItemAux(skProc)
859865
of nkFuncDef:
860866
when useEffectSystem: documentRaises(d.cache, n)
861-
genItem(d, n, n[namePos], skFunc)
867+
genItemAux(skFunc)
862868
of nkMethodDef:
863869
when useEffectSystem: documentRaises(d.cache, n)
864-
genItem(d, n, n[namePos], skMethod)
870+
genItemAux(skMethod)
865871
of nkIteratorDef:
866872
when useEffectSystem: documentRaises(d.cache, n)
867-
genItem(d, n, n[namePos], skIterator)
868-
of nkMacroDef: genItem(d, n, n[namePos], skMacro)
869-
of nkTemplateDef: genItem(d, n, n[namePos], skTemplate)
873+
genItemAux(skIterator)
874+
of nkMacroDef: genItemAux(skMacro)
875+
of nkTemplateDef: genItemAux(skTemplate)
870876
of nkConverterDef:
871877
when useEffectSystem: documentRaises(d.cache, n)
872-
genItem(d, n, n[namePos], skConverter)
878+
genItemAux(skConverter)
873879
of nkTypeSection, nkVarSection, nkLetSection, nkConstSection:
874880
for i in 0..<n.len:
875881
if n[i].kind != nkCommentStmt:
876882
# order is always 'type var let const':
877883
genItem(d, n[i], n[i][0],
878-
succ(skType, ord(n.kind)-ord(nkTypeSection)))
884+
succ(skType, ord(n.kind)-ord(nkTypeSection)), docFlags)
879885
of nkStmtList:
880886
for i in 0..<n.len: generateDoc(d, n[i], orig)
881887
of nkWhenStmt:
@@ -886,7 +892,12 @@ proc generateDoc*(d: PDoc, n, orig: PNode) =
886892
for it in n: traceDeps(d, it)
887893
of nkExportStmt:
888894
for it in n:
889-
if it.kind == nkSym: exportSym(d, it.sym)
895+
if it.kind == nkSym:
896+
let ast = it.sym.ast
897+
if it.info.fileIndex == ast.info.fileIndex:
898+
generateDoc(d, ast, orig, kForceExport)
899+
else:
900+
exportSym(d, it.sym)
890901
of nkExportExceptStmt: discard "transformed into nkExportStmt by semExportExcept"
891902
of nkFromStmt, nkImportExceptStmt: traceDeps(d, n[0])
892903
of nkCallKinds:

0 commit comments

Comments
 (0)