implements #295
This commit is contained in:
parent
1bc5ff6dc9
commit
f280ed1560
6 changed files with 37 additions and 12 deletions
|
|
@ -138,6 +138,26 @@ proc genRecComment(d: PDoc, n: PNode): PRope =
|
||||||
else:
|
else:
|
||||||
n.comment = nil
|
n.comment = nil
|
||||||
|
|
||||||
|
proc findDocComment(n: PNode): PNode =
|
||||||
|
if n == nil: return nil
|
||||||
|
if not isNil(n.comment) and startsWith(n.comment, "##"): return n
|
||||||
|
for i in countup(0, safeLen(n)-1):
|
||||||
|
result = findDocComment(n.sons[i])
|
||||||
|
if result != nil: return
|
||||||
|
|
||||||
|
proc extractDocComment*(s: PSym, d: PDoc = nil): string =
|
||||||
|
let n = findDocComment(s.ast)
|
||||||
|
result = ""
|
||||||
|
if not n.isNil:
|
||||||
|
if not d.isNil:
|
||||||
|
var dummyHasToc: bool
|
||||||
|
renderRstToOut(d[], parseRst(n.comment, toFilename(n.info),
|
||||||
|
toLineNumber(n.info), toColumn(n.info),
|
||||||
|
dummyHasToc, d.options + {roSkipPounds}),
|
||||||
|
result)
|
||||||
|
else:
|
||||||
|
result = n.comment.substr(2).replace("\n##", "\n").strip
|
||||||
|
|
||||||
proc isVisible(n: PNode): bool =
|
proc isVisible(n: PNode): bool =
|
||||||
result = false
|
result = false
|
||||||
if n.kind == nkPostfix:
|
if n.kind == nkPostfix:
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The Nimrod Compiler
|
# The Nimrod Compiler
|
||||||
# (c) Copyright 2012 Andreas Rumpf
|
# (c) Copyright 2013 Andreas Rumpf
|
||||||
#
|
#
|
||||||
# See the file "copying.txt", included in this
|
# See the file "copying.txt", included in this
|
||||||
# distribution, for details about the copyright.
|
# distribution, for details about the copyright.
|
||||||
|
|
@ -99,6 +99,8 @@ var
|
||||||
gWholeProject*: bool # for 'doc2': output any dependency
|
gWholeProject*: bool # for 'doc2': output any dependency
|
||||||
gListFullPaths*: bool
|
gListFullPaths*: bool
|
||||||
|
|
||||||
|
proc importantComments*(): bool {.inline.} = gCmd in {cmdDoc, cmdIdeTools}
|
||||||
|
|
||||||
const
|
const
|
||||||
genSubDir* = "nimcache"
|
genSubDir* = "nimcache"
|
||||||
NimExt* = "nim"
|
NimExt* = "nim"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The Nimrod Compiler
|
# The Nimrod Compiler
|
||||||
# (c) Copyright 2012 Andreas Rumpf
|
# (c) Copyright 2013 Andreas Rumpf
|
||||||
#
|
#
|
||||||
# See the file "copying.txt", included in this
|
# See the file "copying.txt", included in this
|
||||||
# distribution, for details about the copyright.
|
# distribution, for details about the copyright.
|
||||||
|
|
@ -247,7 +247,7 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
|
||||||
if a.kind != nkVarTuple:
|
if a.kind != nkVarTuple:
|
||||||
v.typ = typ
|
v.typ = typ
|
||||||
b = newNodeI(nkIdentDefs, a.info)
|
b = newNodeI(nkIdentDefs, a.info)
|
||||||
if gCmd == cmdDoc:
|
if importantComments():
|
||||||
# keep documentation information:
|
# keep documentation information:
|
||||||
b.comment = a.comment
|
b.comment = a.comment
|
||||||
addSon(b, newSymNode(v))
|
addSon(b, newSymNode(v))
|
||||||
|
|
@ -287,7 +287,7 @@ proc semConst(c: PContext, n: PNode): PNode =
|
||||||
v.ast = def # no need to copy
|
v.ast = def # no need to copy
|
||||||
if sfGenSym notin v.flags: addInterfaceDecl(c, v)
|
if sfGenSym notin v.flags: addInterfaceDecl(c, v)
|
||||||
var b = newNodeI(nkConstDef, a.info)
|
var b = newNodeI(nkConstDef, a.info)
|
||||||
if gCmd == cmdDoc: b.comment = a.comment
|
if importantComments(): b.comment = a.comment
|
||||||
addSon(b, newSymNode(v))
|
addSon(b, newSymNode(v))
|
||||||
addSon(b, ast.emptyNode) # no type description
|
addSon(b, ast.emptyNode) # no type description
|
||||||
addSon(b, copyTree(def))
|
addSon(b, copyTree(def))
|
||||||
|
|
@ -786,7 +786,7 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
|
||||||
n.sons[pragmasPos] = proto.ast.sons[pragmasPos]
|
n.sons[pragmasPos] = proto.ast.sons[pragmasPos]
|
||||||
if n.sons[namePos].kind != nkSym: InternalError(n.info, "semProcAux")
|
if n.sons[namePos].kind != nkSym: InternalError(n.info, "semProcAux")
|
||||||
n.sons[namePos].sym = proto
|
n.sons[namePos].sym = proto
|
||||||
if gCmd == cmdDoc and not isNil(proto.ast.comment):
|
if importantComments() and not isNil(proto.ast.comment):
|
||||||
n.comment = proto.ast.comment
|
n.comment = proto.ast.comment
|
||||||
proto.ast = n # needed for code generation
|
proto.ast = n # needed for code generation
|
||||||
popOwner()
|
popOwner()
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The Nimrod Compiler
|
# The Nimrod Compiler
|
||||||
# (c) Copyright 2012 Andreas Rumpf
|
# (c) Copyright 2013 Andreas Rumpf
|
||||||
#
|
#
|
||||||
# See the file "copying.txt", included in this
|
# See the file "copying.txt", included in this
|
||||||
# distribution, for details about the copyright.
|
# distribution, for details about the copyright.
|
||||||
|
|
@ -12,7 +12,8 @@
|
||||||
|
|
||||||
import
|
import
|
||||||
intsets, ast, astalgo, semdata, types, msgs, renderer, lookups, semtypinst,
|
intsets, ast, astalgo, semdata, types, msgs, renderer, lookups, semtypinst,
|
||||||
magicsys, condsyms, idents, lexer, options, parampatterns
|
magicsys, condsyms, idents, lexer, options, parampatterns, strutils,
|
||||||
|
docgen
|
||||||
|
|
||||||
type
|
type
|
||||||
TCandidateState* = enum
|
TCandidateState* = enum
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The Nimrod Compiler
|
# The Nimrod Compiler
|
||||||
# (c) Copyright 2012 Andreas Rumpf
|
# (c) Copyright 2013 Andreas Rumpf
|
||||||
#
|
#
|
||||||
# See the file "copying.txt", included in this
|
# See the file "copying.txt", included in this
|
||||||
# distribution, for details about the copyright.
|
# distribution, for details about the copyright.
|
||||||
|
|
@ -39,6 +39,8 @@ proc SymToStr(s: PSym, isLocal: bool, section: string, li: TLineInfo): string =
|
||||||
result.add($ToLinenumber(li))
|
result.add($ToLinenumber(li))
|
||||||
result.add(sep)
|
result.add(sep)
|
||||||
result.add($ToColumn(li))
|
result.add($ToColumn(li))
|
||||||
|
result.add(sep)
|
||||||
|
result.add(s.extractDocComment.escape)
|
||||||
|
|
||||||
proc SymToStr(s: PSym, isLocal: bool, section: string): string =
|
proc SymToStr(s: PSym, isLocal: bool, section: string): string =
|
||||||
result = SymToStr(s, isLocal, section, s.info)
|
result = SymToStr(s, isLocal, section, s.info)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The Nimrod Compiler
|
# The Nimrod Compiler
|
||||||
# (c) Copyright 2012 Andreas Rumpf
|
# (c) Copyright 2013 Andreas Rumpf
|
||||||
#
|
#
|
||||||
# See the file "copying.txt", included in this
|
# See the file "copying.txt", included in this
|
||||||
# distribution, for details about the copyright.
|
# distribution, for details about the copyright.
|
||||||
|
|
@ -150,7 +150,7 @@ proc transformVarSection(c: PTransf, v: PNode): PTransNode =
|
||||||
newVar.owner = getCurrOwner(c)
|
newVar.owner = getCurrOwner(c)
|
||||||
IdNodeTablePut(c.transCon.mapping, it.sons[0].sym, newSymNode(newVar))
|
IdNodeTablePut(c.transCon.mapping, it.sons[0].sym, newSymNode(newVar))
|
||||||
var defs = newTransNode(nkIdentDefs, it.info, 3)
|
var defs = newTransNode(nkIdentDefs, it.info, 3)
|
||||||
if gCmd == cmdDoc:
|
if importantComments():
|
||||||
# keep documentation information:
|
# keep documentation information:
|
||||||
pnode(defs).comment = it.comment
|
pnode(defs).comment = it.comment
|
||||||
defs[0] = newSymNode(newVar).PTransNode
|
defs[0] = newSymNode(newVar).PTransNode
|
||||||
|
|
@ -665,7 +665,7 @@ proc transform(c: PTransf, n: PNode): PTransNode =
|
||||||
of nkIdentDefs, nkConstDef:
|
of nkIdentDefs, nkConstDef:
|
||||||
result = transformSons(c, n)
|
result = transformSons(c, n)
|
||||||
# XXX comment handling really sucks:
|
# XXX comment handling really sucks:
|
||||||
if gCmd == cmdDoc:
|
if importantComments():
|
||||||
pnode(result).comment = n.comment
|
pnode(result).comment = n.comment
|
||||||
else:
|
else:
|
||||||
result = transformSons(c, n)
|
result = transformSons(c, n)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue