docgen: sort symbols (fix #17910) (#18560)

* docgen: sort symbols (fix #17910)

* add workaround + change naming

* switch to a dedicated sort comparator

* fix numbers with unequal string lengths

* dedicated `sortName` instead of `plainNameEsc`:

* more compact names for non-overloaded symbols
* more predictable Ascii sort (e.g. `<` instead of `&lt;`)
This commit is contained in:
Andrey Makarov 2021-07-26 00:01:19 +03:00 • committed by GitHub
commit 10da888c07
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 432 additions and 362 deletions

View file

@ -11,7 +11,7 @@
# by knowing how the anchors are going to be named. # by knowing how the anchors are going to be named.
import import
ast, strutils, strtabs, options, msgs, os, idents, ast, strutils, strtabs, algorithm, sequtils, options, msgs, os, idents,
wordrecg, syntaxes, renderer, lexer, wordrecg, syntaxes, renderer, lexer,
packages/docutils/rst, packages/docutils/rstgen, packages/docutils/rst, packages/docutils/rstgen,
json, xmltree, trees, types, json, xmltree, trees, types,
@ -43,11 +43,15 @@ type
descRst: ItemPre ## Description of the item (may contain descRst: ItemPre ## Description of the item (may contain
## runnableExamples). ## runnableExamples).
substitutions: seq[string] ## Variable names in `doc.item`... substitutions: seq[string] ## Variable names in `doc.item`...
sortName: string ## The string used for sorting in output
ModSection = object ## Section like Procs, Types, etc. ModSection = object ## Section like Procs, Types, etc.
secItems: seq[Item] ## Pre-processed items. secItems: seq[Item] ## Pre-processed items.
finalMarkup: string ## The items, after RST pass 2 and rendering. finalMarkup: string ## The items, after RST pass 2 and rendering.
ModSections = array[TSymKind, ModSection] ModSections = array[TSymKind, ModSection]
TSections = array[TSymKind, string] TocItem = object ## HTML TOC item
content: string
sortName: string
TocSectionsFinal = array[TSymKind, string]
ExampleGroup = ref object ExampleGroup = ref object
## a group of runnableExamples with same rdoccmd ## a group of runnableExamples with same rdoccmd
rdoccmd: string ## from 1st arg in `runnableExamples(rdoccmd): body` rdoccmd: string ## from 1st arg in `runnableExamples(rdoccmd): body`
@ -64,8 +68,13 @@ type
module: PSym module: PSym
modDeprecationMsg: string modDeprecationMsg: string
section: ModSections # entries of ``.nim`` file (for `proc`s, etc) section: ModSections # entries of ``.nim`` file (for `proc`s, etc)
toc, toc2: TSections # toc2 - grouped TOC tocSimple: array[TSymKind, seq[TocItem]]
tocTable: array[TSymKind, Table[string, string]] # TOC entries for non-overloadable symbols (e.g. types, constants)...
tocTable: array[TSymKind, Table[string, seq[TocItem]]]
# ...otherwise (e.g. procs)
toc2: TocSectionsFinal # TOC `content`, which is probably wrapped
# in `doc.section.toc2`
toc: TocSectionsFinal # final TOC (wrapped in `doc.section.toc`)
indexValFilename: string indexValFilename: string
analytics: string # Google Analytics javascript, "" if doesn't exist analytics: string # Google Analytics javascript, "" if doesn't exist
seenSymbols: StringTableRef # avoids duplicate symbol generation for HTML. seenSymbols: StringTableRef # avoids duplicate symbol generation for HTML.
@ -88,6 +97,51 @@ type
proc add(dest: var ItemPre, rst: PRstNode) = dest.add ItemFragment(isRst: true, rst: rst) proc add(dest: var ItemPre, rst: PRstNode) = dest.add ItemFragment(isRst: true, rst: rst)
proc add(dest: var ItemPre, str: string) = dest.add ItemFragment(isRst: false, str: str) proc add(dest: var ItemPre, str: string) = dest.add ItemFragment(isRst: false, str: str)
proc cmpDecimalsIgnoreCase(a, b: string): int =
## For sorting with correct handling of cases like 'uint8' and 'uint16'.
## Also handles leading zeros well (however note that leading zeros are
## significant when lengths of numbers mismatch, e.g. 'bar08' > 'bar8' !).
runnableExamples:
doAssert cmpDecimalsIgnoreCase("uint8", "uint16") < 0
doAssert cmpDecimalsIgnoreCase("val00032", "val16suffix") > 0
doAssert cmpDecimalsIgnoreCase("val16suffix", "val16") > 0
doAssert cmpDecimalsIgnoreCase("val_08_32", "val_08_8") > 0
doAssert cmpDecimalsIgnoreCase("val_07_32", "val_08_8") < 0
doAssert cmpDecimalsIgnoreCase("ab8", "ab08") < 0
doAssert cmpDecimalsIgnoreCase("ab8de", "ab08c") < 0 # sanity check
let aLen = a.len
let bLen = b.len
var
iA = 0
iB = 0
while iA < aLen and iB < bLen:
if isDigit(a[iA]) and isDigit(b[iB]):
var
limitA = iA # index after the last (least significant) digit
limitB = iB
while limitA < aLen and isDigit(a[limitA]): inc limitA
while limitB < bLen and isDigit(b[limitB]): inc limitB
var pos = max(limitA-iA, limitB-iA)
while pos > 0:
if limitA-pos < iA: # digit in `a` is 0 effectively
result = ord('0') - ord(b[limitB-pos])
elif limitB-pos < iB: # digit in `b` is 0 effectively
result = ord(a[limitA-pos]) - ord('0')
else:
result = ord(a[limitA-pos]) - ord(b[limitB-pos])
if result != 0: return
dec pos
result = (limitA - iA) - (limitB - iB) # consider 'bar08' > 'bar8'
if result != 0: return
iA = limitA
iB = limitB
else:
result = ord(toLowerAscii(a[iA])) - ord(toLowerAscii(b[iB]))
if result != 0: return
inc iA
inc iB
result = (aLen - iA) - (bLen - iB)
proc prettyString(a: object): string = proc prettyString(a: object): string =
# xxx pending std/prettyprint refs https://github.com/nim-lang/RFCs/issues/203#issuecomment-602534906 # xxx pending std/prettyprint refs https://github.com/nim-lang/RFCs/issues/203#issuecomment-602534906
for k, v in fieldPairs(a): for k, v in fieldPairs(a):
@ -862,6 +916,7 @@ proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind, docFlags: DocFlags) =
let let
plainNameEsc = esc(d.target, plainName.strip) plainNameEsc = esc(d.target, plainName.strip)
uniqueName = if k in routineKinds: plainNameEsc else: name uniqueName = if k in routineKinds: plainNameEsc else: name
sortName = if k in routineKinds: plainName.strip else: name
cleanPlainSymbol = renderPlainSymbolName(nameNode) cleanPlainSymbol = renderPlainSymbolName(nameNode)
complexSymbol = complexName(k, n, cleanPlainSymbol) complexSymbol = complexName(k, n, cleanPlainSymbol)
plainSymbolEnc = encodeUrl(cleanPlainSymbol) plainSymbolEnc = encodeUrl(cleanPlainSymbol)
@ -874,7 +929,10 @@ proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind, docFlags: DocFlags) =
let seeSrc = genSeeSrc(d, toFullPath(d.conf, n.info), n.info.line.int) let seeSrc = genSeeSrc(d, toFullPath(d.conf, n.info), n.info.line.int)
d.section[k].secItems.add Item(descRst: comm, substitutions: @[ d.section[k].secItems.add Item(
descRst: comm,
sortName: sortName,
substitutions: @[
"name", name, "uniqueName", uniqueName, "name", name, "uniqueName", uniqueName,
"header", result, "itemID", $d.id, "header", result, "itemID", $d.id,
"header_plain", plainNameEsc, "itemSym", cleanPlainSymbol, "header_plain", plainNameEsc, "itemSym", cleanPlainSymbol,
@ -898,12 +956,15 @@ proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind, docFlags: DocFlags) =
setIndexTerm(d[], external, symbolOrId, plain, nameNode.sym.name.s & '.' & plain, setIndexTerm(d[], external, symbolOrId, plain, nameNode.sym.name.s & '.' & plain,
xmltree.escape(getPlainDocstring(e).docstringSummary)) xmltree.escape(getPlainDocstring(e).docstringSummary))
d.toc[k].add(getConfigVar(d.conf, "doc.item.toc") % [ d.tocSimple[k].add TocItem(
sortName: sortName,
content: getConfigVar(d.conf, "doc.item.toc") % [
"name", name, "header_plain", plainNameEsc, "name", name, "header_plain", plainNameEsc,
"itemSymOrIDEnc", symbolOrIdEnc]) "itemSymOrIDEnc", symbolOrIdEnc])
d.tocTable[k].mgetOrPut(cleanPlainSymbol, "").add( d.tocTable[k].mgetOrPut(cleanPlainSymbol, newSeq[TocItem]()).add TocItem(
getConfigVar(d.conf, "doc.item.tocTable") % [ sortName: sortName,
content: getConfigVar(d.conf, "doc.item.tocTable") % [
"name", name, "header_plain", plainNameEsc, "name", name, "header_plain", plainNameEsc,
"itemSymOrID", symbolOrId.replace(",", ",<wbr>"), "itemSymOrID", symbolOrId.replace(",", ",<wbr>"),
"itemSymOrIDEnc", symbolOrIdEnc]) "itemSymOrIDEnc", symbolOrIdEnc])
@ -1143,8 +1204,9 @@ proc finishGenerateDoc*(d: var PDoc) =
var resolved = resolveSubs(d.sharedState, f.rst) var resolved = resolveSubs(d.sharedState, f.rst)
renderRstToOut(d[], resolved, result) renderRstToOut(d[], resolved, result)
of false: result &= f.str of false: result &= f.str
proc cmp(x, y: Item): int = cmpDecimalsIgnoreCase(x.sortName, y.sortName)
for k in TSymKind: for k in TSymKind:
for item in d.section[k].secItems: for item in d.section[k].secItems.sorted(cmp):
var itemDesc: string var itemDesc: string
renderItemPre(d, item.descRst, itemDesc) renderItemPre(d, item.descRst, itemDesc)
d.section[k].finalMarkup.add( d.section[k].finalMarkup.add(
@ -1262,18 +1324,26 @@ proc genSection(d: PDoc, kind: TSymKind, groupedToc = false) =
"sectionid", $ord(kind), "sectionTitle", title, "sectionid", $ord(kind), "sectionTitle", title,
"sectionTitleID", $(ord(kind) + 50), "content", d.section[kind].finalMarkup] "sectionTitleID", $(ord(kind) + 50), "content", d.section[kind].finalMarkup]
var tocSource = d.toc proc cmp(x, y: TocItem): int = cmpDecimalsIgnoreCase(x.sortName, y.sortName)
if groupedToc: if groupedToc:
for p in d.tocTable[kind].keys: let overloadableNames = toSeq(keys(d.tocTable[kind]))
for plainName in overloadableNames.sorted(cmpDecimalsIgnoreCase):
var overloadChoices = d.tocTable[kind][plainName]
overloadChoices.sort(cmp)
var content: string
for item in overloadChoices:
content.add item.content
d.toc2[kind].add getConfigVar(d.conf, "doc.section.toc2") % [ d.toc2[kind].add getConfigVar(d.conf, "doc.section.toc2") % [
"sectionid", $ord(kind), "sectionTitle", title, "sectionid", $ord(kind), "sectionTitle", title,
"sectionTitleID", $(ord(kind) + 50), "sectionTitleID", $(ord(kind) + 50),
"content", d.tocTable[kind][p], "plainName", p] "content", content, "plainName", plainName]
tocSource = d.toc2 else:
for item in d.tocSimple[kind].sorted(cmp):
d.toc2[kind].add item.content
d.toc[kind] = getConfigVar(d.conf, "doc.section.toc") % [ d.toc[kind] = getConfigVar(d.conf, "doc.section.toc") % [
"sectionid", $ord(kind), "sectionTitle", title, "sectionid", $ord(kind), "sectionTitle", title,
"sectionTitleID", $(ord(kind) + 50), "content", tocSource[kind]] "sectionTitleID", $(ord(kind) + 50), "content", d.toc2[kind]]
proc relLink(outDir: AbsoluteDir, destFile: AbsoluteFile, linkto: RelativeFile): string = proc relLink(outDir: AbsoluteDir, destFile: AbsoluteFile, linkto: RelativeFile): string =
$relativeTo(outDir / linkto, destFile.splitFile().dir, '/') $relativeTo(outDir / linkto, destFile.splitFile().dir, '/')

View file

@ -130,16 +130,16 @@ window.addEventListener('DOMContentLoaded', main);
<li><a class="reference" href="#aEnum.t" <li><a class="reference" href="#aEnum.t"
title="aEnum(): untyped">aEnum(): untyped</a></li> title="aEnum(): untyped">aEnum(): untyped</a></li>
</ul>
<ul class="simple nested-toc-section">fromUtilsGen
<li><a class="reference" href="#fromUtilsGen.t"
title="fromUtilsGen(): untyped">fromUtilsGen(): untyped</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">bEnum <ul class="simple nested-toc-section">bEnum
<li><a class="reference" href="#bEnum.t" <li><a class="reference" href="#bEnum.t"
title="bEnum(): untyped">bEnum(): untyped</a></li> title="bEnum(): untyped">bEnum(): untyped</a></li>
</ul>
<ul class="simple nested-toc-section">fromUtilsGen
<li><a class="reference" href="#fromUtilsGen.t"
title="fromUtilsGen(): untyped">fromUtilsGen(): untyped</a></li>
</ul> </ul>
</ul> </ul>

View file

@ -107,9 +107,7 @@ window.addEventListener('DOMContentLoaded', main);
<li> <li>
<a class="reference reference-toplevel" href="#7" id="57">Types</a> <a class="reference reference-toplevel" href="#7" id="57">Types</a>
<ul class="simple simple-toc-section"> <ul class="simple simple-toc-section">
<li><a class="reference" href="#FooBuzz" <li><a class="reference" href="#A"
title="FooBuzz {.deprecated: &quot;FooBuzz msg&quot;.} = int">FooBuzz</a></li>
<li><a class="reference" href="#A"
title="A {.inject.} = enum title="A {.inject.} = enum
aA">A</a></li> aA">A</a></li>
<li><a class="reference" href="#B" <li><a class="reference" href="#B"
@ -118,6 +116,8 @@ window.addEventListener('DOMContentLoaded', main);
<li><a class="reference" href="#Foo" <li><a class="reference" href="#Foo"
title="Foo = enum title="Foo = enum
enumValueA2">Foo</a></li> enumValueA2">Foo</a></li>
<li><a class="reference" href="#FooBuzz"
title="FooBuzz {.deprecated: &quot;FooBuzz msg&quot;.} = int">FooBuzz</a></li>
<li><a class="reference" href="#Shapes" <li><a class="reference" href="#Shapes"
title="Shapes = enum title="Shapes = enum
Circle, ## A circle Circle, ## A circle
@ -129,10 +129,10 @@ window.addEventListener('DOMContentLoaded', main);
<li> <li>
<a class="reference reference-toplevel" href="#8" id="58">Vars</a> <a class="reference reference-toplevel" href="#8" id="58">Vars</a>
<ul class="simple simple-toc-section"> <ul class="simple simple-toc-section">
<li><a class="reference" href="#someVariable" <li><a class="reference" href="#aVariable"
title="someVariable: bool">someVariable</a></li>
<li><a class="reference" href="#aVariable"
title="aVariable: array[1, int]">aVariable</a></li> title="aVariable: array[1, int]">aVariable</a></li>
<li><a class="reference" href="#someVariable"
title="someVariable: bool">someVariable</a></li>
</ul> </ul>
</li> </li>
@ -153,35 +153,57 @@ window.addEventListener('DOMContentLoaded', main);
<li> <li>
<a class="reference reference-toplevel" href="#12" id="62">Procs</a> <a class="reference reference-toplevel" href="#12" id="62">Procs</a>
<ul class="simple simple-toc-section"> <ul class="simple simple-toc-section">
<ul class="simple nested-toc-section">z10 <ul class="simple nested-toc-section">addfBug14485
<li><a class="reference" href="#z10" <li><a class="reference" href="#addfBug14485"
title="z10()">z10()</a></li> title="addfBug14485()">addfBug14485()</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">tripleStrLitTest <ul class="simple nested-toc-section">anything
<li><a class="reference" href="#tripleStrLitTest" <li><a class="reference" href="#anything"
title="tripleStrLitTest()">tripleStrLitTest()</a></li> title="anything()">anything()</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">z17 <ul class="simple nested-toc-section">asyncFun1
<li><a class="reference" href="#z17" <li><a class="reference" href="#asyncFun1"
title="z17()">z17()</a></li> title="asyncFun1(): Future[int]">asyncFun1(): Future[int]</a></li>
</ul>
<ul class="simple nested-toc-section">asyncFun2
<li><a class="reference" href="#asyncFun2"
title="asyncFun2(): owned(Future[void])">asyncFun2(): owned(Future[void])</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">asyncFun3 <ul class="simple nested-toc-section">asyncFun3
<li><a class="reference" href="#asyncFun3" <li><a class="reference" href="#asyncFun3"
title="asyncFun3(): owned(Future[void])">asyncFun3(): owned(Future[void])</a></li> title="asyncFun3(): owned(Future[void])">asyncFun3(): owned(Future[void])</a></li>
</ul>
<ul class="simple nested-toc-section">z2
<li><a class="reference" href="#z2"
title="z2()">z2()</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">bar <ul class="simple nested-toc-section">bar
<li><a class="reference" href="#bar%2CT%2CT" <li><a class="reference" href="#bar%2CT%2CT"
title="bar[T](a, b: T): T">bar[T](a, b: T): T</a></li> title="bar[T](a, b: T): T">bar[T](a, b: T): T</a></li>
</ul>
<ul class="simple nested-toc-section">baz
<li><a class="reference" href="#baz"
title="baz()">baz()</a></li>
<li><a class="reference" href="#baz%2CT%2CT"
title="baz[T](a, b: T): T">baz[T](a, b: T): T</a></li>
</ul>
<ul class="simple nested-toc-section">buzz
<li><a class="reference" href="#buzz%2CT%2CT"
title="buzz[T](a, b: T): T">buzz[T](a, b: T): T</a></li>
</ul>
<ul class="simple nested-toc-section">c_nonexistent
<li><a class="reference" href="#c_nonexistent%2Ccstring"
title="c_nonexistent(frmt: cstring): cint">c_nonexistent(frmt: cstring): cint</a></li>
</ul>
<ul class="simple nested-toc-section">c_printf
<li><a class="reference" href="#c_printf%2Ccstring"
title="c_printf(frmt: cstring): cint">c_printf(frmt: cstring): cint</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">fromUtils3 <ul class="simple nested-toc-section">fromUtils3
<li><a class="reference" href="#fromUtils3" <li><a class="reference" href="#fromUtils3"
@ -192,92 +214,20 @@ window.addEventListener('DOMContentLoaded', main);
<li><a class="reference" href="#isValid%2CT" <li><a class="reference" href="#isValid%2CT"
title="isValid[T](x: T): bool">isValid[T](x: T): bool</a></li> title="isValid[T](x: T): bool">isValid[T](x: T): bool</a></li>
</ul>
<ul class="simple nested-toc-section">z6
<li><a class="reference" href="#z6"
title="z6(): int">z6(): int</a></li>
</ul>
<ul class="simple nested-toc-section">anything
<li><a class="reference" href="#anything"
title="anything()">anything()</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">low <ul class="simple nested-toc-section">low
<li><a class="reference" href="#low%2CT" <li><a class="reference" href="#low%2CT"
title="low[T: Ordinal | enum | range](x: T): T">low[T: Ordinal | enum | range](x: T): T</a></li> title="low[T: Ordinal | enum | range](x: T): T">low[T: Ordinal | enum | range](x: T): T</a></li>
</ul>
<ul class="simple nested-toc-section">p1
<li><a class="reference" href="#p1"
title="p1()">p1()</a></li>
</ul>
<ul class="simple nested-toc-section">z11
<li><a class="reference" href="#z11"
title="z11()">z11()</a></li>
</ul>
<ul class="simple nested-toc-section">c_nonexistent
<li><a class="reference" href="#c_nonexistent%2Ccstring"
title="c_nonexistent(frmt: cstring): cint">c_nonexistent(frmt: cstring): cint</a></li>
</ul>
<ul class="simple nested-toc-section">buzz
<li><a class="reference" href="#buzz%2CT%2CT"
title="buzz[T](a, b: T): T">buzz[T](a, b: T): T</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">low2 <ul class="simple nested-toc-section">low2
<li><a class="reference" href="#low2%2CT" <li><a class="reference" href="#low2%2CT"
title="low2[T: Ordinal | enum | range](x: T): T">low2[T: Ordinal | enum | range](x: T): T</a></li> title="low2[T: Ordinal | enum | range](x: T): T">low2[T: Ordinal | enum | range](x: T): T</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">z7 <ul class="simple nested-toc-section">p1
<li><a class="reference" href="#z7" <li><a class="reference" href="#p1"
title="z7(): int">z7(): int</a></li> title="p1()">p1()</a></li>
</ul>
<ul class="simple nested-toc-section">z13
<li><a class="reference" href="#z13"
title="z13()">z13()</a></li>
</ul>
<ul class="simple nested-toc-section">baz
<li><a class="reference" href="#baz%2CT%2CT"
title="baz[T](a, b: T): T">baz[T](a, b: T): T</a></li>
<li><a class="reference" href="#baz"
title="baz()">baz()</a></li>
</ul>
<ul class="simple nested-toc-section">addfBug14485
<li><a class="reference" href="#addfBug14485"
title="addfBug14485()">addfBug14485()</a></li>
</ul>
<ul class="simple nested-toc-section">c_printf
<li><a class="reference" href="#c_printf%2Ccstring"
title="c_printf(frmt: cstring): cint">c_printf(frmt: cstring): cint</a></li>
</ul>
<ul class="simple nested-toc-section">z12
<li><a class="reference" href="#z12"
title="z12(): int">z12(): int</a></li>
</ul>
<ul class="simple nested-toc-section">z3
<li><a class="reference" href="#z3"
title="z3()">z3()</a></li>
</ul>
<ul class="simple nested-toc-section">z9
<li><a class="reference" href="#z9"
title="z9()">z9()</a></li>
</ul>
<ul class="simple nested-toc-section">z4
<li><a class="reference" href="#z4"
title="z4()">z4()</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">someFunc <ul class="simple nested-toc-section">someFunc
@ -285,29 +235,79 @@ window.addEventListener('DOMContentLoaded', main);
title="someFunc()">someFunc()</a></li> title="someFunc()">someFunc()</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">z8 <ul class="simple nested-toc-section">tripleStrLitTest
<li><a class="reference" href="#z8" <li><a class="reference" href="#tripleStrLitTest"
title="z8(): int">z8(): int</a></li> title="tripleStrLitTest()">tripleStrLitTest()</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">z1 <ul class="simple nested-toc-section">z1
<li><a class="reference" href="#z1" <li><a class="reference" href="#z1"
title="z1(): Foo">z1(): Foo</a></li> title="z1(): Foo">z1(): Foo</a></li>
</ul>
<ul class="simple nested-toc-section">z2
<li><a class="reference" href="#z2"
title="z2()">z2()</a></li>
</ul>
<ul class="simple nested-toc-section">z3
<li><a class="reference" href="#z3"
title="z3()">z3()</a></li>
</ul>
<ul class="simple nested-toc-section">z4
<li><a class="reference" href="#z4"
title="z4()">z4()</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">z5 <ul class="simple nested-toc-section">z5
<li><a class="reference" href="#z5" <li><a class="reference" href="#z5"
title="z5(): int">z5(): int</a></li> title="z5(): int">z5(): int</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">asyncFun2 <ul class="simple nested-toc-section">z6
<li><a class="reference" href="#asyncFun2" <li><a class="reference" href="#z6"
title="asyncFun2(): owned(Future[void])">asyncFun2(): owned(Future[void])</a></li> title="z6(): int">z6(): int</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">asyncFun1 <ul class="simple nested-toc-section">z7
<li><a class="reference" href="#asyncFun1" <li><a class="reference" href="#z7"
title="asyncFun1(): Future[int]">asyncFun1(): Future[int]</a></li> title="z7(): int">z7(): int</a></li>
</ul>
<ul class="simple nested-toc-section">z8
<li><a class="reference" href="#z8"
title="z8(): int">z8(): int</a></li>
</ul>
<ul class="simple nested-toc-section">z9
<li><a class="reference" href="#z9"
title="z9()">z9()</a></li>
</ul>
<ul class="simple nested-toc-section">z10
<li><a class="reference" href="#z10"
title="z10()">z10()</a></li>
</ul>
<ul class="simple nested-toc-section">z11
<li><a class="reference" href="#z11"
title="z11()">z11()</a></li>
</ul>
<ul class="simple nested-toc-section">z12
<li><a class="reference" href="#z12"
title="z12(): int">z12(): int</a></li>
</ul>
<ul class="simple nested-toc-section">z13
<li><a class="reference" href="#z13"
title="z13()">z13()</a></li>
</ul>
<ul class="simple nested-toc-section">z17
<li><a class="reference" href="#z17"
title="z17()">z17()</a></li>
</ul> </ul>
@ -316,7 +316,12 @@ window.addEventListener('DOMContentLoaded', main);
<li> <li>
<a class="reference reference-toplevel" href="#14" id="64">Methods</a> <a class="reference reference-toplevel" href="#14" id="64">Methods</a>
<ul class="simple simple-toc-section"> <ul class="simple simple-toc-section">
<ul class="simple nested-toc-section">method2 <ul class="simple nested-toc-section">method1
<li><a class="reference" href="#method1.e%2CMoo"
title="method1(self: Moo)">method1(self: Moo)</a></li>
</ul>
<ul class="simple nested-toc-section">method2
<li><a class="reference" href="#method2.e%2CMoo" <li><a class="reference" href="#method2.e%2CMoo"
title="method2(self: Moo): int">method2(self: Moo): int</a></li> title="method2(self: Moo): int">method2(self: Moo): int</a></li>
@ -325,11 +330,6 @@ window.addEventListener('DOMContentLoaded', main);
<li><a class="reference" href="#method3.e%2CMoo" <li><a class="reference" href="#method3.e%2CMoo"
title="method3(self: Moo): int">method3(self: Moo): int</a></li> title="method3(self: Moo): int">method3(self: Moo): int</a></li>
</ul>
<ul class="simple nested-toc-section">method1
<li><a class="reference" href="#method1.e%2CMoo"
title="method1(self: Moo)">method1(self: Moo)</a></li>
</ul> </ul>
</ul> </ul>
@ -337,12 +337,7 @@ window.addEventListener('DOMContentLoaded', main);
<li> <li>
<a class="reference reference-toplevel" href="#15" id="65">Iterators</a> <a class="reference reference-toplevel" href="#15" id="65">Iterators</a>
<ul class="simple simple-toc-section"> <ul class="simple simple-toc-section">
<ul class="simple nested-toc-section">iter2 <ul class="simple nested-toc-section">fromUtils1
<li><a class="reference" href="#iter2.i%2Cint"
title="iter2(n: int): int">iter2(n: int): int</a></li>
</ul>
<ul class="simple nested-toc-section">fromUtils1
<li><a class="reference" href="#fromUtils1.i" <li><a class="reference" href="#fromUtils1.i"
title="fromUtils1(): int">fromUtils1(): int</a></li> title="fromUtils1(): int">fromUtils1(): int</a></li>
@ -351,6 +346,11 @@ window.addEventListener('DOMContentLoaded', main);
<li><a class="reference" href="#iter1.i%2Cint" <li><a class="reference" href="#iter1.i%2Cint"
title="iter1(n: int): int">iter1(n: int): int</a></li> title="iter1(n: int): int">iter1(n: int): int</a></li>
</ul>
<ul class="simple nested-toc-section">iter2
<li><a class="reference" href="#iter2.i%2Cint"
title="iter2(n: int): int">iter2(n: int): int</a></li>
</ul> </ul>
</ul> </ul>
@ -362,16 +362,16 @@ window.addEventListener('DOMContentLoaded', main);
<li><a class="reference" href="#bar.m" <li><a class="reference" href="#bar.m"
title="bar(): untyped">bar(): untyped</a></li> title="bar(): untyped">bar(): untyped</a></li>
</ul>
<ul class="simple nested-toc-section">z18
<li><a class="reference" href="#z18.m"
title="z18(): int">z18(): int</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">z16 <ul class="simple nested-toc-section">z16
<li><a class="reference" href="#z16.m" <li><a class="reference" href="#z16.m"
title="z16()">z16()</a></li> title="z16()">z16()</a></li>
</ul>
<ul class="simple nested-toc-section">z18
<li><a class="reference" href="#z18.m"
title="z18(): int">z18(): int</a></li>
</ul> </ul>
</ul> </ul>
@ -379,10 +379,25 @@ window.addEventListener('DOMContentLoaded', main);
<li> <li>
<a class="reference reference-toplevel" href="#18" id="68">Templates</a> <a class="reference reference-toplevel" href="#18" id="68">Templates</a>
<ul class="simple simple-toc-section"> <ul class="simple simple-toc-section">
<ul class="simple nested-toc-section">fromUtils2 <ul class="simple nested-toc-section">foo
<li><a class="reference" href="#foo.t%2CSomeType%2CSomeType"
title="foo(a, b: SomeType)">foo(a, b: SomeType)</a></li>
</ul>
<ul class="simple nested-toc-section">fromUtils2
<li><a class="reference" href="#fromUtils2.t" <li><a class="reference" href="#fromUtils2.t"
title="fromUtils2()">fromUtils2()</a></li> title="fromUtils2()">fromUtils2()</a></li>
</ul>
<ul class="simple nested-toc-section">myfn
<li><a class="reference" href="#myfn.t"
title="myfn()">myfn()</a></li>
</ul>
<ul class="simple nested-toc-section">testNimDocTrailingExample
<li><a class="reference" href="#testNimDocTrailingExample.t"
title="testNimDocTrailingExample()">testNimDocTrailingExample()</a></li>
</ul> </ul>
<ul class="simple nested-toc-section">z6t <ul class="simple nested-toc-section">z6t
<li><a class="reference" href="#z6t.t" <li><a class="reference" href="#z6t.t"
@ -398,21 +413,6 @@ window.addEventListener('DOMContentLoaded', main);
<li><a class="reference" href="#z15.t" <li><a class="reference" href="#z15.t"
title="z15()">z15()</a></li> title="z15()">z15()</a></li>
</ul>
<ul class="simple nested-toc-section">foo
<li><a class="reference" href="#foo.t%2CSomeType%2CSomeType"
title="foo(a, b: SomeType)">foo(a, b: SomeType)</a></li>
</ul>
<ul class="simple nested-toc-section">myfn
<li><a class="reference" href="#myfn.t"
title="myfn()">myfn()</a></li>
</ul>
<ul class="simple nested-toc-section">testNimDocTrailingExample
<li><a class="reference" href="#testNimDocTrailingExample.t"
title="testNimDocTrailingExample()">testNimDocTrailingExample()</a></li>
</ul> </ul>
</ul> </ul>
@ -447,16 +447,6 @@ window.addEventListener('DOMContentLoaded', main);
<div class="section" id="7"> <div class="section" id="7">
<h1><a class="toc-backref" href="#7">Types</a></h1> <h1><a class="toc-backref" href="#7">Types</a></h1>
<dl class="item"> <dl class="item">
<a id="FooBuzz"></a>
<dt><pre><a href="testproject.html#FooBuzz"><span class="Identifier">FooBuzz</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">deprecated</span><span class="Other">:</span> <span class="StringLit">&quot;FooBuzz msg&quot;</span></span>.} <span class="Other">=</span> <span class="Identifier">int</span></pre></dt>
<dd>
<div class="deprecation-message">
<b>Deprecated:</b> FooBuzz msg
</div>
</dd>
<a id="A"></a> <a id="A"></a>
<dt><pre><a href="testproject.html#A"><span class="Identifier">A</span></a> {.<span class="Identifier">inject</span>.} <span class="Other">=</span> <span class="Keyword">enum</span> <dt><pre><a href="testproject.html#A"><span class="Identifier">A</span></a> {.<span class="Identifier">inject</span>.} <span class="Other">=</span> <span class="Keyword">enum</span>
<span class="Identifier">aA</span></pre></dt> <span class="Identifier">aA</span></pre></dt>
@ -480,6 +470,16 @@ The enum B.
</dd>
<a id="FooBuzz"></a>
<dt><pre><a href="testproject.html#FooBuzz"><span class="Identifier">FooBuzz</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">deprecated</span><span class="Other">:</span> <span class="StringLit">&quot;FooBuzz msg&quot;</span></span>.} <span class="Other">=</span> <span class="Identifier">int</span></pre></dt>
<dd>
<div class="deprecation-message">
<b>Deprecated:</b> FooBuzz msg
</div>
</dd> </dd>
<a id="Shapes"></a> <a id="Shapes"></a>
<dt><pre><a href="testproject.html#Shapes"><span class="Identifier">Shapes</span></a> <span class="Other">=</span> <span class="Keyword">enum</span> <dt><pre><a href="testproject.html#Shapes"><span class="Identifier">Shapes</span></a> <span class="Other">=</span> <span class="Keyword">enum</span>
@ -496,19 +496,19 @@ Some shapes.
<div class="section" id="8"> <div class="section" id="8">
<h1><a class="toc-backref" href="#8">Vars</a></h1> <h1><a class="toc-backref" href="#8">Vars</a></h1>
<dl class="item"> <dl class="item">
<a id="someVariable"></a>
<dt><pre><a href="testproject.html#someVariable"><span class="Identifier">someVariable</span></a><span class="Other">:</span> <span class="Identifier">bool</span></pre></dt>
<dd>
This should be visible.
</dd>
<a id="aVariable"></a> <a id="aVariable"></a>
<dt><pre><a href="testproject.html#aVariable"><span class="Identifier">aVariable</span></a><span class="Other">:</span> <span class="Identifier">array</span><span class="Other">[</span><span class="DecNumber">1</span><span class="Other">,</span> <span class="Identifier">int</span><span class="Other">]</span></pre></dt> <dt><pre><a href="testproject.html#aVariable"><span class="Identifier">aVariable</span></a><span class="Other">:</span> <span class="Identifier">array</span><span class="Other">[</span><span class="DecNumber">1</span><span class="Other">,</span> <span class="Identifier">int</span><span class="Other">]</span></pre></dt>
<dd> <dd>
</dd>
<a id="someVariable"></a>
<dt><pre><a href="testproject.html#someVariable"><span class="Identifier">someVariable</span></a><span class="Other">:</span> <span class="Identifier">bool</span></pre></dt>
<dd>
This should be visible.
</dd> </dd>
</dl></div> </dl></div>
@ -548,12 +548,69 @@ This should be visible.
<div class="section" id="12"> <div class="section" id="12">
<h1><a class="toc-backref" href="#12">Procs</a></h1> <h1><a class="toc-backref" href="#12">Procs</a></h1>
<dl class="item"> <dl class="item">
<a id="addfBug14485"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#addfBug14485"><span class="Identifier">addfBug14485</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
Some proc
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span> <span class="StringLit">&quot;foo() = &quot;</span> <span class="Operator">&amp;</span> <span class="Operator">$</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">]</span>
<span class="LongComment">#[
0: let's also add some broken html to make sure this won't break in future
1: &lt;/span&gt;
2: &lt;/span&gt;
3: &lt;/span
4: &lt;/script&gt;
5: &lt;/script
6: &lt;/script
7: end of broken html
]#</span></pre>
</dd>
<a id="anything"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#anything"><span class="Identifier">anything</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
There is no block quote after blank lines at the beginning.
</dd>
<a id="asyncFun1"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#asyncFun1"><span class="Identifier">asyncFun1</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">int</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span>
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
ok1
</dd>
<a id="asyncFun2"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#asyncFun2"><span class="Identifier">asyncFun2</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span><span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
</dd>
<a id="asyncFun3"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#asyncFun3"><span class="Identifier">asyncFun3</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span><span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span></pre>ok1
</dd>
<a id="bar,T,T"></a> <a id="bar,T,T"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#bar%2CT%2CT"><span class="Identifier">bar</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">a</span><span class="Other">,</span> <span class="Identifier">b</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt> <dt><pre><span class="Keyword">proc</span> <a href="#bar%2CT%2CT"><span class="Identifier">bar</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">a</span><span class="Other">,</span> <span class="Identifier">b</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt>
<dd> <dd>
</dd>
<a id="baz"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#baz"><span class="Identifier">baz</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
</dd> </dd>
<a id="baz,T,T"></a> <a id="baz,T,T"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#baz%2CT%2CT"><span class="Identifier">baz</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">a</span><span class="Other">,</span> <span class="Identifier">b</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">deprecated</span></span>.}</pre></dt> <dt><pre><span class="Keyword">proc</span> <a href="#baz%2CT%2CT"><span class="Identifier">baz</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">a</span><span class="Other">,</span> <span class="Identifier">b</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">deprecated</span></span>.}</pre></dt>
@ -575,11 +632,20 @@ This is deprecated without message.
This is deprecated with a message. This is deprecated with a message.
</dd> </dd>
<a id="someFunc"></a> <a id="c_nonexistent,cstring"></a>
<dt><pre><span class="Keyword">func</span> <a href="#someFunc"><span class="Identifier">someFunc</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt> <dt><pre><span class="Keyword">proc</span> <a href="#c_nonexistent%2Ccstring"><span class="Identifier">c_nonexistent</span></a><span class="Other">(</span><span class="Identifier">frmt</span><span class="Other">:</span> <span class="Identifier">cstring</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">cint</span> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">&quot;nonexistent&quot;</span><span class="Other">,</span>
<span class="Identifier">header</span><span class="Other">:</span> <span class="StringLit">&quot;&lt;stdio.h&gt;&quot;</span><span class="Other">,</span> <span class="Identifier">varargs</span><span class="Other">,</span> <span class="Identifier">discardable</span>.}</pre></dt>
<dd> <dd>
My someFunc. Stuff in <tt class="docutils literal"><span class="pre"><span class="Identifier">quotes</span></span></tt> here. <a class="reference external" href="https://nim-lang.org">Some link</a>
</dd>
<a id="c_printf,cstring"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#c_printf%2Ccstring"><span class="Identifier">c_printf</span></a><span class="Other">(</span><span class="Identifier">frmt</span><span class="Other">:</span> <span class="Identifier">cstring</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">cint</span> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">&quot;printf&quot;</span><span class="Other">,</span> <span class="Identifier">header</span><span class="Other">:</span> <span class="StringLit">&quot;&lt;stdio.h&gt;&quot;</span><span class="Other">,</span>
<span class="Identifier">varargs</span><span class="Other">,</span> <span class="Identifier">discardable</span>.}</pre></dt>
<dd>
the c printf. etc.
</dd> </dd>
<a id="fromUtils3"></a> <a id="fromUtils3"></a>
@ -598,6 +664,103 @@ came form utils but should be shown where <tt class="docutils literal"><span cla
</dd>
<a id="low2,T"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#low2%2CT"><span class="Identifier">low2</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <span class="Identifier">Ordinal</span> <span class="Operator">|</span> <span class="Keyword">enum</span> <span class="Operator">|</span> <span class="Identifier">range</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.<span class="Identifier">magic</span><span class="Other">:</span> <span class="StringLit">&quot;Low&quot;</span><span class="Other">,</span> <span class="Identifier">noSideEffect</span>.}</pre></dt>
<dd>
<p>Returns the lowest possible value of an ordinal value <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt>. As a special semantic rule, <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt> may also be a type identifier.</p>
<p>See also:</p>
<ul class="simple"><li><a class="reference external" href="#low,T">low(T)</a></li>
</ul>
<pre class="listing"><span class="Identifier">low2</span><span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">)</span> <span class="Comment"># =&gt; -9223372036854775808</span></pre>
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span> <span class="StringLit">&quot;in low2&quot;</span></pre>
</dd>
<a id="low,T"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#low%2CT"><span class="Identifier">low</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <span class="Identifier">Ordinal</span> <span class="Operator">|</span> <span class="Keyword">enum</span> <span class="Operator">|</span> <span class="Identifier">range</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.<span class="Identifier">magic</span><span class="Other">:</span> <span class="StringLit">&quot;Low&quot;</span><span class="Other">,</span> <span class="Identifier">noSideEffect</span>.}</pre></dt>
<dd>
<p>Returns the lowest possible value of an ordinal value <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt>. As a special semantic rule, <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt> may also be a type identifier.</p>
<p>See also:</p>
<ul class="simple"><li><a class="reference external" href="#low2,T">low2(T)</a></li>
</ul>
<pre class="listing"><span class="Identifier">low</span><span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">)</span> <span class="Comment"># =&gt; -9223372036854775808</span></pre>
</dd>
<a id="p1"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#p1"><span class="Identifier">p1</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
cp1
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Identifier">doAssert</span> <span class="DecNumber">1</span> <span class="Operator">==</span> <span class="DecNumber">1</span> <span class="Comment"># regular comments work here</span></pre>c4
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Comment"># c5 regular comments before 1st token work</span>
<span class="Comment"># regular comment</span>
<span class="LongComment">#[
nested regular comment
]#</span>
<span class="Identifier">doAssert</span> <span class="DecNumber">2</span> <span class="Operator">==</span> <span class="DecNumber">2</span> <span class="Comment"># c8</span>
<span class="Comment">## this is a non-nested doc comment</span>
<span class="LongComment">##[
this is a nested doc comment
]##</span>
<span class="Keyword">discard</span> <span class="StringLit">&quot;c9&quot;</span>
<span class="Comment"># also work after</span></pre>
</dd>
<a id="someFunc"></a>
<dt><pre><span class="Keyword">func</span> <a href="#someFunc"><span class="Identifier">someFunc</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
My someFunc. Stuff in <tt class="docutils literal"><span class="pre"><span class="Identifier">quotes</span></span></tt> here. <a class="reference external" href="https://nim-lang.org">Some link</a>
</dd>
<a id="tripleStrLitTest"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#tripleStrLitTest"><span class="Identifier">tripleStrLitTest</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
<p><strong class="examples_text">Example: cmd: --hint:XDeclaredButNotUsed:off</strong></p>
<pre class="listing"><span class="Comment">## mullitline string litterals are tricky as their indentation can span</span>
<span class="Comment">## below that of the runnableExamples</span>
<span class="Keyword">let</span> <span class="Identifier">s1a</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;
should appear at indent 0
at indent 2
at indent 0
&quot;&quot;&quot;</span>
<span class="Comment"># make sure this works too</span>
<span class="Keyword">let</span> <span class="Identifier">s1b</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;start at same line
at indent 2
at indent 0
&quot;&quot;&quot;</span> <span class="Comment"># comment after</span>
<span class="Keyword">let</span> <span class="Identifier">s2</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;sandwich &quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s3</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;&quot;&quot;&quot;</span>
<span class="Keyword">when</span> <span class="Identifier">false</span><span class="Punctuation">:</span>
<span class="Keyword">let</span> <span class="Identifier">s5</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;
in s5 &quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s3b</span> <span class="Operator">=</span> <span class="Punctuation">[</span><span class="LongStringLit">&quot;&quot;&quot;
%!? #[...] # inside a multiline ...
&quot;&quot;&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;foo&quot;</span><span class="Punctuation">]</span>
<span class="Comment">## make sure handles trailing spaces</span>
<span class="Keyword">let</span> <span class="Identifier">s4</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;
&quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s5</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot; x
&quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s6</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot; &quot;&quot;
&quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s7</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s8</span> <span class="Operator">=</span> <span class="Punctuation">[</span><span class="LongStringLit">&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</span><span class="Punctuation">,</span> <span class="LongStringLit">&quot;&quot;&quot;
&quot;&quot;&quot;</span> <span class="Punctuation">]</span>
<span class="Keyword">discard</span>
<span class="Comment"># should be in</span></pre>
</dd> </dd>
<a id="z1"></a> <a id="z1"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#z1"><span class="Identifier">z1</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="testproject.html#Foo"><span class="Identifier">Foo</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt> <dt><pre><span class="Keyword">proc</span> <a href="#z1"><span class="Identifier">z1</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <a href="testproject.html#Foo"><span class="Identifier">Foo</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
@ -701,13 +864,6 @@ cz13
<p><strong class="examples_text">Example:</strong></p> <p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span></pre> <pre class="listing"><span class="Keyword">discard</span></pre>
</dd>
<a id="baz"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#baz"><span class="Identifier">baz</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
</dd> </dd>
<a id="z17"></a> <a id="z17"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#z17"><span class="Identifier">z17</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt> <dt><pre><span class="Keyword">proc</span> <a href="#z17"><span class="Identifier">z17</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
@ -717,162 +873,6 @@ cz17 rest
<p><strong class="examples_text">Example:</strong></p> <p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span> <span class="DecNumber">1</span></pre>rest <pre class="listing"><span class="Keyword">discard</span> <span class="DecNumber">1</span></pre>rest
</dd>
<a id="p1"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#p1"><span class="Identifier">p1</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
cp1
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Identifier">doAssert</span> <span class="DecNumber">1</span> <span class="Operator">==</span> <span class="DecNumber">1</span> <span class="Comment"># regular comments work here</span></pre>c4
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Comment"># c5 regular comments before 1st token work</span>
<span class="Comment"># regular comment</span>
<span class="LongComment">#[
nested regular comment
]#</span>
<span class="Identifier">doAssert</span> <span class="DecNumber">2</span> <span class="Operator">==</span> <span class="DecNumber">2</span> <span class="Comment"># c8</span>
<span class="Comment">## this is a non-nested doc comment</span>
<span class="LongComment">##[
this is a nested doc comment
]##</span>
<span class="Keyword">discard</span> <span class="StringLit">&quot;c9&quot;</span>
<span class="Comment"># also work after</span></pre>
</dd>
<a id="addfBug14485"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#addfBug14485"><span class="Identifier">addfBug14485</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
Some proc
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span> <span class="StringLit">&quot;foo() = &quot;</span> <span class="Operator">&amp;</span> <span class="Operator">$</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">]</span>
<span class="LongComment">#[
0: let's also add some broken html to make sure this won't break in future
1: &lt;/span&gt;
2: &lt;/span&gt;
3: &lt;/span
4: &lt;/script&gt;
5: &lt;/script
6: &lt;/script
7: end of broken html
]#</span></pre>
</dd>
<a id="c_printf,cstring"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#c_printf%2Ccstring"><span class="Identifier">c_printf</span></a><span class="Other">(</span><span class="Identifier">frmt</span><span class="Other">:</span> <span class="Identifier">cstring</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">cint</span> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">&quot;printf&quot;</span><span class="Other">,</span> <span class="Identifier">header</span><span class="Other">:</span> <span class="StringLit">&quot;&lt;stdio.h&gt;&quot;</span><span class="Other">,</span>
<span class="Identifier">varargs</span><span class="Other">,</span> <span class="Identifier">discardable</span>.}</pre></dt>
<dd>
the c printf. etc.
</dd>
<a id="c_nonexistent,cstring"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#c_nonexistent%2Ccstring"><span class="Identifier">c_nonexistent</span></a><span class="Other">(</span><span class="Identifier">frmt</span><span class="Other">:</span> <span class="Identifier">cstring</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">cint</span> {.<span class="Identifier">importc</span><span class="Other">:</span> <span class="StringLit">&quot;nonexistent&quot;</span><span class="Other">,</span>
<span class="Identifier">header</span><span class="Other">:</span> <span class="StringLit">&quot;&lt;stdio.h&gt;&quot;</span><span class="Other">,</span> <span class="Identifier">varargs</span><span class="Other">,</span> <span class="Identifier">discardable</span>.}</pre></dt>
<dd>
</dd>
<a id="low,T"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#low%2CT"><span class="Identifier">low</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <span class="Identifier">Ordinal</span> <span class="Operator">|</span> <span class="Keyword">enum</span> <span class="Operator">|</span> <span class="Identifier">range</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.<span class="Identifier">magic</span><span class="Other">:</span> <span class="StringLit">&quot;Low&quot;</span><span class="Other">,</span> <span class="Identifier">noSideEffect</span>.}</pre></dt>
<dd>
<p>Returns the lowest possible value of an ordinal value <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt>. As a special semantic rule, <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt> may also be a type identifier.</p>
<p>See also:</p>
<ul class="simple"><li><a class="reference external" href="#low2,T">low2(T)</a></li>
</ul>
<pre class="listing"><span class="Identifier">low</span><span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">)</span> <span class="Comment"># =&gt; -9223372036854775808</span></pre>
</dd>
<a id="low2,T"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#low2%2CT"><span class="Identifier">low2</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">:</span> <span class="Identifier">Ordinal</span> <span class="Operator">|</span> <span class="Keyword">enum</span> <span class="Operator">|</span> <span class="Identifier">range</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.<span class="Identifier">magic</span><span class="Other">:</span> <span class="StringLit">&quot;Low&quot;</span><span class="Other">,</span> <span class="Identifier">noSideEffect</span>.}</pre></dt>
<dd>
<p>Returns the lowest possible value of an ordinal value <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt>. As a special semantic rule, <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt> may also be a type identifier.</p>
<p>See also:</p>
<ul class="simple"><li><a class="reference external" href="#low,T">low(T)</a></li>
</ul>
<pre class="listing"><span class="Identifier">low2</span><span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">)</span> <span class="Comment"># =&gt; -9223372036854775808</span></pre>
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span> <span class="StringLit">&quot;in low2&quot;</span></pre>
</dd>
<a id="tripleStrLitTest"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#tripleStrLitTest"><span class="Identifier">tripleStrLitTest</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
<p><strong class="examples_text">Example: cmd: --hint:XDeclaredButNotUsed:off</strong></p>
<pre class="listing"><span class="Comment">## mullitline string litterals are tricky as their indentation can span</span>
<span class="Comment">## below that of the runnableExamples</span>
<span class="Keyword">let</span> <span class="Identifier">s1a</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;
should appear at indent 0
at indent 2
at indent 0
&quot;&quot;&quot;</span>
<span class="Comment"># make sure this works too</span>
<span class="Keyword">let</span> <span class="Identifier">s1b</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;start at same line
at indent 2
at indent 0
&quot;&quot;&quot;</span> <span class="Comment"># comment after</span>
<span class="Keyword">let</span> <span class="Identifier">s2</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;sandwich &quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s3</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;&quot;&quot;&quot;</span>
<span class="Keyword">when</span> <span class="Identifier">false</span><span class="Punctuation">:</span>
<span class="Keyword">let</span> <span class="Identifier">s5</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;
in s5 &quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s3b</span> <span class="Operator">=</span> <span class="Punctuation">[</span><span class="LongStringLit">&quot;&quot;&quot;
%!? #[...] # inside a multiline ...
&quot;&quot;&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;foo&quot;</span><span class="Punctuation">]</span>
<span class="Comment">## make sure handles trailing spaces</span>
<span class="Keyword">let</span> <span class="Identifier">s4</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;
&quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s5</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot; x
&quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s6</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot; &quot;&quot;
&quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s7</span> <span class="Operator">=</span> <span class="LongStringLit">&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</span>
<span class="Keyword">let</span> <span class="Identifier">s8</span> <span class="Operator">=</span> <span class="Punctuation">[</span><span class="LongStringLit">&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</span><span class="Punctuation">,</span> <span class="LongStringLit">&quot;&quot;&quot;
&quot;&quot;&quot;</span> <span class="Punctuation">]</span>
<span class="Keyword">discard</span>
<span class="Comment"># should be in</span></pre>
</dd>
<a id="asyncFun1"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#asyncFun1"><span class="Identifier">asyncFun1</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">int</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span>
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
ok1
</dd>
<a id="asyncFun2"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#asyncFun2"><span class="Identifier">asyncFun2</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span><span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
</dd>
<a id="asyncFun3"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#asyncFun3"><span class="Identifier">asyncFun3</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span><span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span></pre>ok1
</dd>
<a id="anything"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#anything"><span class="Identifier">anything</span></a><span class="Other">(</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
<dd>
There is no block quote after blank lines at the beginning.
</dd> </dd>
</dl></div> </dl></div>
@ -967,6 +967,13 @@ cz18
<div class="section" id="18"> <div class="section" id="18">
<h1><a class="toc-backref" href="#18">Templates</a></h1> <h1><a class="toc-backref" href="#18">Templates</a></h1>
<dl class="item"> <dl class="item">
<a id="foo.t,SomeType,SomeType"></a>
<dt><pre><span class="Keyword">template</span> <a href="#foo.t%2CSomeType%2CSomeType"><span class="Identifier">foo</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">,</span> <span class="Identifier">b</span><span class="Other">:</span> <a href="subdir/subdir_b/utils.html#SomeType"><span class="Identifier">SomeType</span></a><span class="Other">)</span></pre></dt>
<dd>
This does nothing
</dd>
<a id="fromUtils2.t"></a> <a id="fromUtils2.t"></a>
<dt><pre><span class="Keyword">template</span> <a href="#fromUtils2.t"><span class="Identifier">fromUtils2</span></a><span class="Other">(</span><span class="Other">)</span></pre></dt> <dt><pre><span class="Keyword">template</span> <a href="#fromUtils2.t"><span class="Identifier">fromUtils2</span></a><span class="Other">(</span><span class="Other">)</span></pre></dt>
<dd> <dd>
@ -976,20 +983,6 @@ ok3
<pre class="listing"><span class="Keyword">discard</span> <span class="LongStringLit">&quot;&quot;&quot;should be shown as examples for fromUtils2 <pre class="listing"><span class="Keyword">discard</span> <span class="LongStringLit">&quot;&quot;&quot;should be shown as examples for fromUtils2
in module calling fromUtilsGen&quot;&quot;&quot;</span></pre> in module calling fromUtilsGen&quot;&quot;&quot;</span></pre>
</dd>
<a id="z6t.t"></a>
<dt><pre><span class="Keyword">template</span> <a href="#z6t.t"><span class="Identifier">z6t</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">int</span></pre></dt>
<dd>
cz6t
</dd>
<a id="foo.t,SomeType,SomeType"></a>
<dt><pre><span class="Keyword">template</span> <a href="#foo.t%2CSomeType%2CSomeType"><span class="Identifier">foo</span></a><span class="Other">(</span><span class="Identifier">a</span><span class="Other">,</span> <span class="Identifier">b</span><span class="Other">:</span> <a href="subdir/subdir_b/utils.html#SomeType"><span class="Identifier">SomeType</span></a><span class="Other">)</span></pre></dt>
<dd>
This does nothing
</dd> </dd>
<a id="myfn.t"></a> <a id="myfn.t"></a>
<dt><pre><span class="Keyword">template</span> <a href="#myfn.t"><span class="Identifier">myfn</span></a><span class="Other">(</span><span class="Other">)</span></pre></dt> <dt><pre><span class="Keyword">template</span> <a href="#myfn.t"><span class="Identifier">myfn</span></a><span class="Other">(</span><span class="Other">)</span></pre></dt>
@ -1012,6 +1005,22 @@ bar
<span class="Keyword">discard</span> <span class="HexNumber">0xff</span> <span class="Comment"># elu par cette crapule</span> <span class="Keyword">discard</span> <span class="HexNumber">0xff</span> <span class="Comment"># elu par cette crapule</span>
<span class="Comment"># should be in</span></pre>should be still in <span class="Comment"># should be in</span></pre>should be still in
</dd>
<a id="testNimDocTrailingExample.t"></a>
<dt><pre><span class="Keyword">template</span> <a href="#testNimDocTrailingExample.t"><span class="Identifier">testNimDocTrailingExample</span></a><span class="Other">(</span><span class="Other">)</span></pre></dt>
<dd>
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span> <span class="DecNumber">2</span></pre>
</dd>
<a id="z6t.t"></a>
<dt><pre><span class="Keyword">template</span> <a href="#z6t.t"><span class="Identifier">z6t</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">int</span></pre></dt>
<dd>
cz6t
</dd> </dd>
<a id="z14.t"></a> <a id="z14.t"></a>
<dt><pre><span class="Keyword">template</span> <a href="#z14.t"><span class="Identifier">z14</span></a><span class="Other">(</span><span class="Other">)</span></pre></dt> <dt><pre><span class="Keyword">template</span> <a href="#z14.t"><span class="Identifier">z14</span></a><span class="Other">(</span><span class="Other">)</span></pre></dt>
@ -1038,15 +1047,6 @@ cz15
<p><strong class="examples_text">Example:</strong></p> <p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span> <span class="DecNumber">1</span></pre>in or out? <pre class="listing"><span class="Keyword">discard</span> <span class="DecNumber">1</span></pre>in or out?
</dd>
<a id="testNimDocTrailingExample.t"></a>
<dt><pre><span class="Keyword">template</span> <a href="#testNimDocTrailingExample.t"><span class="Identifier">testNimDocTrailingExample</span></a><span class="Other">(</span><span class="Other">)</span></pre></dt>
<dd>
<p><strong class="examples_text">Example:</strong></p>
<pre class="listing"><span class="Keyword">discard</span> <span class="DecNumber">2</span></pre>
</dd> </dd>
</dl></div> </dl></div>