summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/main.nim6
-rw-r--r--compiler/msgs.nim6
-rw-r--r--compiler/suggest.nim10
-rw-r--r--tests/caas/completion_dot_syntax.txt7
4 files changed, 21 insertions, 8 deletions
diff --git a/compiler/main.nim b/compiler/main.nim
index 6df21f660..7cfc6d406 100644
--- a/compiler/main.nim
+++ b/compiler/main.nim
@@ -210,7 +210,11 @@ proc CommandSuggest =
     msgs.gErrorMax = high(int)  # do not stop after first error
     semanticPasses()
     rodPass()
-    compileProject()
+    # XXX: this handles the case when the dirty buffer is the main file,
+    # but doesn't handle the case when it's imported module
+    var projFile = if gProjectMainIdx == gDirtyOriginalIdx: gDirtyBufferIdx
+                   else: gProjectMainIdx
+    compileProject(projFile)
 
 proc wantMainModule =
   if gProjectFull.len == 0:
diff --git a/compiler/msgs.nim b/compiler/msgs.nim
index 711a3c733..73481940c 100644
--- a/compiler/msgs.nim
+++ b/compiler/msgs.nim
@@ -413,7 +413,7 @@ type
   TFileInfo*{.final.} = object 
     fullPath*: string          # This is a canonical full filesystem path
     projPath*: string          # This is relative to the project's root
-    
+    shortName*: string         # short name of the module
     quotedName*: PRope         # cached quoted short name for codegen
                                # purpoes
     
@@ -473,7 +473,9 @@ proc newFileInfo(fullPath, projPath: string): TFileInfo =
   #shallow(result.fullPath)
   result.projPath = projPath
   #shallow(result.projPath)
-  result.quotedName = projPath.extractFilename.makeCString
+  let fileName = projPath.extractFilename
+  result.shortName = fileName.changeFileExt("")
+  result.quotedName = fileName.makeCString
   if optEmbedOrigSrc in gGlobalOptions or true:
     result.lines = @[]
 
diff --git a/compiler/suggest.nim b/compiler/suggest.nim
index 57e373fd5..76a6c21d9 100644
--- a/compiler/suggest.nim
+++ b/compiler/suggest.nim
@@ -22,6 +22,12 @@ const
 
 #template sectionSuggest(): expr = "##begin\n" & getStackTrace() & "##end\n"
 
+proc origModuleName(m: PSym): string =
+  result = if m.position == gDirtyBufferIdx:
+             fileInfos[gDirtyOriginalIdx].shortName
+           else:
+             m.name.s
+
 proc SymToStr(s: PSym, isLocal: bool, section: string, li: TLineInfo): string = 
   result = section
   result.add(sep)
@@ -31,9 +37,9 @@ proc SymToStr(s: PSym, isLocal: bool, section: string, li: TLineInfo): string =
     let ow = s.owner
     if ow.kind != skModule and ow.owner != nil:
       let ow2 = ow.owner
-      result.add(ow2.name.s)
+      result.add(ow2.origModuleName)
       result.add('.')
-    result.add(ow.name.s)
+    result.add(ow.origModuleName)
     result.add('.')
   result.add(s.name.s)
   result.add(sep)
diff --git a/tests/caas/completion_dot_syntax.txt b/tests/caas/completion_dot_syntax.txt
index dbffe265c..4a975e5df 100644
--- a/tests/caas/completion_dot_syntax.txt
+++ b/tests/caas/completion_dot_syntax.txt
@@ -2,7 +2,8 @@ completion_dot_syntax_main.nim
 > idetools --track:$TESTNIM,24,15 --def
 def\tskProc\t$MODULE.echoRemainingDollars
 > idetools --trackDirty:completion_dot_syntax_dirty.nim,$TESTNIM,25,12 --suggest
-sug\tskProc\tcompletion_dot_syntax_dirty.echoRemainingDollars
+sug\tskProc\techoRemainingDollars
 # The suggestion should not mention the other echoRemaining* variants.
-!sug\tskProc\tcompletion_dot_syntax_dirty.echoRemainingEuros
-!sug\tskProc\tcompletion_dot_syntax_dirty.echoRemainingBugs
+!echoRemainingEuros
+!echoRemainingBugs
+