diff options
-rwxr-xr-x | compiler/docgen.nim | 22 | ||||
-rwxr-xr-x | compiler/options.nim | 4 | ||||
-rwxr-xr-x | compiler/semstmts.nim | 8 | ||||
-rwxr-xr-x | compiler/sigmatch.nim | 5 | ||||
-rwxr-xr-x | compiler/suggest.nim | 4 | ||||
-rwxr-xr-x | compiler/transf.nim | 6 |
6 files changed, 37 insertions, 12 deletions
diff --git a/compiler/docgen.nim b/compiler/docgen.nim index aff77cc1f..4911f3103 100755 --- a/compiler/docgen.nim +++ b/compiler/docgen.nim @@ -137,7 +137,27 @@ proc genRecComment(d: PDoc, n: PNode): PRope = if result != nil: return else: 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 = result = false if n.kind == nkPostfix: diff --git a/compiler/options.nim b/compiler/options.nim index 28382f9ba..0d783cee2 100755 --- a/compiler/options.nim +++ b/compiler/options.nim @@ -1,7 +1,7 @@ # # # The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. @@ -99,6 +99,8 @@ var gWholeProject*: bool # for 'doc2': output any dependency gListFullPaths*: bool +proc importantComments*(): bool {.inline.} = gCmd in {cmdDoc, cmdIdeTools} + const genSubDir* = "nimcache" NimExt* = "nim" diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index abd064a62..d78112ee5 100755 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -1,7 +1,7 @@ # # # The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. @@ -247,7 +247,7 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode = if a.kind != nkVarTuple: v.typ = typ b = newNodeI(nkIdentDefs, a.info) - if gCmd == cmdDoc: + if importantComments(): # keep documentation information: b.comment = a.comment addSon(b, newSymNode(v)) @@ -287,7 +287,7 @@ proc semConst(c: PContext, n: PNode): PNode = v.ast = def # no need to copy if sfGenSym notin v.flags: addInterfaceDecl(c, v) 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, ast.emptyNode) # no type description addSon(b, copyTree(def)) @@ -786,7 +786,7 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind, n.sons[pragmasPos] = proto.ast.sons[pragmasPos] if n.sons[namePos].kind != nkSym: InternalError(n.info, "semProcAux") 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 proto.ast = n # needed for code generation popOwner() diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index 2fecda427..953dcfa74 100755 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -1,7 +1,7 @@ # # # The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. @@ -12,7 +12,8 @@ import intsets, ast, astalgo, semdata, types, msgs, renderer, lookups, semtypinst, - magicsys, condsyms, idents, lexer, options, parampatterns + magicsys, condsyms, idents, lexer, options, parampatterns, strutils, + docgen type TCandidateState* = enum diff --git a/compiler/suggest.nim b/compiler/suggest.nim index 404f1c1bb..130666f4d 100755 --- a/compiler/suggest.nim +++ b/compiler/suggest.nim @@ -1,7 +1,7 @@ # # # The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # 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(sep) result.add($ToColumn(li)) + result.add(sep) + result.add(s.extractDocComment.escape) proc SymToStr(s: PSym, isLocal: bool, section: string): string = result = SymToStr(s, isLocal, section, s.info) diff --git a/compiler/transf.nim b/compiler/transf.nim index dfa4095b4..6633d7755 100755 --- a/compiler/transf.nim +++ b/compiler/transf.nim @@ -1,7 +1,7 @@ # # # The Nimrod Compiler -# (c) Copyright 2012 Andreas Rumpf +# (c) Copyright 2013 Andreas Rumpf # # See the file "copying.txt", included in this # distribution, for details about the copyright. @@ -150,7 +150,7 @@ proc transformVarSection(c: PTransf, v: PNode): PTransNode = newVar.owner = getCurrOwner(c) IdNodeTablePut(c.transCon.mapping, it.sons[0].sym, newSymNode(newVar)) var defs = newTransNode(nkIdentDefs, it.info, 3) - if gCmd == cmdDoc: + if importantComments(): # keep documentation information: pnode(defs).comment = it.comment defs[0] = newSymNode(newVar).PTransNode @@ -665,7 +665,7 @@ proc transform(c: PTransf, n: PNode): PTransNode = of nkIdentDefs, nkConstDef: result = transformSons(c, n) # XXX comment handling really sucks: - if gCmd == cmdDoc: + if importantComments(): pnode(result).comment = n.comment else: result = transformSons(c, n) |