summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'compiler')
-rw-r--r--compiler/options.nim10
-rw-r--r--compiler/pretty.nim28
-rw-r--r--compiler/prettybase.nim6
3 files changed, 28 insertions, 16 deletions
diff --git a/compiler/options.nim b/compiler/options.nim
index cb2173554..69067b7c4 100644
--- a/compiler/options.nim
+++ b/compiler/options.nim
@@ -337,6 +337,16 @@ proc findFile*(f: string): string {.procvar.} =
 
 proc findModule*(modulename, currentModule: string): string =
   # returns path to module
+  when defined(nimfix):
+    # '.nimfix' modules are preferred over '.nim' modules so that specialized
+    # versions can be kept for 'nimfix'.
+    block:
+      let m = addFileExt(modulename, "nimfix")
+      let currentPath = currentModule.splitFile.dir
+      result = currentPath / m
+      if not existsFile(result):
+        result = findFile(m)
+        if existsFile(result): return result
   let m = addFileExt(modulename, NimExt)
   let currentPath = currentModule.splitFile.dir
   result = currentPath / m
diff --git a/compiler/pretty.nim b/compiler/pretty.nim
index b7265b946..436181bbc 100644
--- a/compiler/pretty.nim
+++ b/compiler/pretty.nim
@@ -31,20 +31,20 @@ type
 proc overwriteFiles*() =
   let doStrip = options.getConfigVar("pretty.strip").normalize == "on"
   for i in 0 .. high(gSourceFiles):
-    if not gSourceFiles[i].dirty: continue
-    let newFile = if gOverWrite: gSourceFiles[i].fullpath
-                  else: gSourceFiles[i].fullpath.changeFileExt(".pretty.nim")
-    try:
-      var f = open(newFile, fmWrite)
-      for line in gSourceFiles[i].lines:
-        if doStrip:
-          f.write line.strip(leading = false, trailing = true)
-        else:
-          f.write line
-        f.write("\L")
-      f.close
-    except IOError:
-      rawMessage(errCannotOpenFile, newFile)
+    if gSourceFiles[i].dirty and not gSourceFiles[i].isNimfixFile:
+      let newFile = if gOverWrite: gSourceFiles[i].fullpath
+                    else: gSourceFiles[i].fullpath.changeFileExt(".pretty.nim")
+      try:
+        var f = open(newFile, fmWrite)
+        for line in gSourceFiles[i].lines:
+          if doStrip:
+            f.write line.strip(leading = false, trailing = true)
+          else:
+            f.write line
+          f.write("\L")
+        f.close
+      except IOError:
+        rawMessage(errCannotOpenFile, newFile)
 
 proc `=~`(s: string, a: openArray[string]): bool =
   for x in a:
diff --git a/compiler/prettybase.nim b/compiler/prettybase.nim
index eb0cf983d..e3c1e6ae9 100644
--- a/compiler/prettybase.nim
+++ b/compiler/prettybase.nim
@@ -8,11 +8,12 @@
 #
 
 import ast, msgs, strutils, idents
+from os import splitFile
 
 type
   TSourceFile* = object
     lines*: seq[string]
-    dirty*: bool
+    dirty*, isNimfixFile*: bool
     fullpath*: string
 
 var
@@ -26,7 +27,8 @@ proc loadFile*(info: TLineInfo) =
     gSourceFiles[i].lines = @[]
     let path = info.toFullPath
     gSourceFiles[i].fullpath = path
-    # we want to die here for EIO:
+    gSourceFiles[i].isNimfixFile = path.splitFile.ext == "nimfix"
+    # we want to die here for IOError:
     for line in lines(path):
       gSourceFiles[i].lines.add(line)