summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--appveyor.yml1
-rw-r--r--compiler/layouter.nim7
-rw-r--r--compiler/pathutils.nim11
-rw-r--r--nimpretty/nimpretty.nim6
4 files changed, 16 insertions, 9 deletions
diff --git a/appveyor.yml b/appveyor.yml
index cb4ac9e00..001c7c98f 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -59,6 +59,7 @@ build_script:
 
 test_script:
   - tests\testament\tester --pedantic all -d:nimCoroutines
+  - nim c -r nimdoc\tester
 #  - koch csource
 #  - koch zip
 
diff --git a/compiler/layouter.nim b/compiler/layouter.nim
index 36ad08696..cc6ec48b7 100644
--- a/compiler/layouter.nim
+++ b/compiler/layouter.nim
@@ -9,7 +9,8 @@
 
 ## Layouter for nimpretty.
 
-import idents, lexer, lineinfos, llstream, options, msgs, strutils
+import idents, lexer, lineinfos, llstream, options, msgs, strutils,
+  pathutils
 from os import changeFileExt
 
 const
@@ -39,7 +40,7 @@ type
 
 proc openEmitter*(em: var Emitter, cache: IdentCache;
                   config: ConfigRef, fileIdx: FileIndex) =
-  let fullPath = config.toFullPath(fileIdx)
+  let fullPath = Absolutefile config.toFullPath(fileIdx)
   em.indWidth = getIndentWidth(fileIdx, llStreamOpen(fullPath, fmRead),
                                cache, config)
   if em.indWidth == 0: em.indWidth = 2
@@ -55,7 +56,7 @@ proc openEmitter*(em: var Emitter, cache: IdentCache;
 proc closeEmitter*(em: var Emitter) =
   var f = llStreamOpen(em.config.outFile, fmWrite)
   if f == nil:
-    rawMessage(em.config, errGenerated, "cannot open file: " & em.config.outFile)
+    rawMessage(em.config, errGenerated, "cannot open file: " & em.config.outFile.string)
   f.llStreamWrite em.content
   llStreamClose(f)
 
diff --git a/compiler/pathutils.nim b/compiler/pathutils.nim
index b27981159..e5317d5c3 100644
--- a/compiler/pathutils.nim
+++ b/compiler/pathutils.nim
@@ -111,11 +111,12 @@ proc canon(x: string; result: var string; state: var int) =
       # f/..
       while d > (state and 1) and result[d-1] != DirSep:
         dec d
-      setLen(result, d)
+      setLen(result, d-1)
     elif isDot(x, b):
       discard "discard the dot"
-    else:
-      if result.len > (state and 1): result.add DirSep
+    elif b[1] > b[0]:
+      if result.len > 0 and result[^1] != DirSep:
+        result.add DirSep
       result.add substr(x, b[0], b[1])
     inc state, 2
 
@@ -253,3 +254,7 @@ when isMainModule and defined(posix):
 
   doAssert AbsoluteDir"/Users/me///" / RelativeFile"z.nim" == AbsoluteFile"/Users/me/z.nim"
   doAssert relativeTo("/foo/bar.nim", "/foo/") == "bar.nim"
+
+when isMainModule and defined(windows):
+  let nasty = string(AbsoluteDir(r"C:\Users\rumpf\projects\nim\tests\nimble\nimbleDir\linkedPkgs\pkgB-#head\../../simplePkgs/pkgB-#head/") / RelativeFile"pkgA/module.nim")
+  doAssert nasty == r"C:\Users\rumpf\projects\nim\tests\nimble\nimbleDir\simplePkgs\pkgB-#head\pkgA\module.nim"
diff --git a/nimpretty/nimpretty.nim b/nimpretty/nimpretty.nim
index aa9756c45..fb2b8637f 100644
--- a/nimpretty/nimpretty.nim
+++ b/nimpretty/nimpretty.nim
@@ -12,7 +12,7 @@
 when not defined(nimpretty):
   {.error: "This needs to be compiled with --define:nimPretty".}
 
-import ../compiler / [idents, msgs, ast, syntaxes, renderer, options]
+import ../compiler / [idents, msgs, ast, syntaxes, renderer, options, pathutils]
 
 import parseopt, strutils, os
 
@@ -42,8 +42,8 @@ proc writeVersion() =
 
 proc prettyPrint(infile, outfile: string) =
   var conf = newConfigRef()
-  let fileIdx = fileInfoIdx(conf, infile)
-  conf.outFile = outfile
+  let fileIdx = fileInfoIdx(conf, AbsoluteFile infile)
+  conf.outFile = AbsoluteFile outfile
   when defined(nimpretty2):
     discard parseFile(fileIdx, newIdentCache(), conf)
   else: