From 0d68ef9f1135e934e6b7af4d69fa6e4e5f61d15b Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Mon, 3 Sep 2018 00:40:56 +0200 Subject: runnableExample: put each example to its own file; fixes #7285 --- compiler/docgen.nim | 37 +++++++++++++++---------------------- compiler/docgen2.nim | 20 ++++++++++++-------- 2 files changed, 27 insertions(+), 30 deletions(-) (limited to 'compiler') diff --git a/compiler/docgen.nim b/compiler/docgen.nim index 968a955f6..c38b9b87c 100644 --- a/compiler/docgen.nim +++ b/compiler/docgen.nim @@ -31,7 +31,7 @@ type isPureRst: bool conf*: ConfigRef cache*: IdentCache - runnableExamples*: PNode + exampleCounter: int PDoc* = ref TDocumentor ## Alias to type less. @@ -285,29 +285,26 @@ proc nodeToHighlightedHtml(d: PDoc; n: PNode; result: var Rope; renderFlags: TRe dispA(d.conf, result, "$1", "\\spanOther{$1}", [rope(esc(d.target, literal))]) -proc testExamples*(d: PDoc) = - if d.runnableExamples == nil or d.conf.errorCounter > 0: return +proc testExample(d: PDoc; ex: PNode) = + if d.conf.errorCounter > 0: return let outputDir = d.conf.getNimcacheDir / "runnableExamples" createDir(outputDir) - let inp = toFullPath(d.conf, d.runnableExamples.info) - let outp = outputDir / extractFilename(inp.changeFileExt"" & "_examples.nim") - let nimcache = outp.changeFileExt"" & "_nimcache" - renderModule(d.runnableExamples, inp, outp, conf = d.conf) + inc d.exampleCounter + let outp = outputDir / extractFilename(d.filename.changeFileExt"" & + "_examples" & $d.exampleCounter & ".nim") + #let nimcache = outp.changeFileExt"" & "_nimcache" + renderModule(ex, d.filename, outp, conf = d.conf) let backend = if isDefined(d.conf, "js"): "js" elif isDefined(d.conf, "cpp"): "cpp" elif isDefined(d.conf, "objc"): "objc" else: "c" if os.execShellCmd(os.getAppFilename() & " " & backend & - " --nimcache:" & nimcache & " -r " & outp) != 0: + " --nimcache:" & outputDir & " -r " & outp) != 0: quit "[Examples] failed: see " & outp else: # keep generated source file `outp` to allow inspection. rawMessage(d.conf, hintSuccess, ["runnableExamples: " & outp]) removeFile(outp.changeFileExt(ExeExt)) - try: - removeDir(nimcache) - except OSError: - discard proc extractImports(n: PNode; result: PNode) = if n.kind in {nkImportStmt, nkImportExceptStmt, nkFromStmt}: @@ -317,16 +314,15 @@ proc extractImports(n: PNode; result: PNode) = for i in 0..