summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2017-02-20 11:51:17 +0100
committerAndreas Rumpf <rumpf_a@web.de>2017-02-20 11:51:17 +0100
commit2d28a626f2113d3712ea541bbc7686afe13d8d90 (patch)
tree3abe85edef78bbc4bbfe1433d4230ac85e03ef1c
parent1ec96d735355708bf2739d52d28374d91cd260a4 (diff)
downloadNim-2d28a626f2113d3712ea541bbc7686afe13d8d90.tar.gz
nimsuggest: works with VS-Plugin again
-rw-r--r--tools/nimsuggest/nimsuggest.nim22
-rw-r--r--tools/nimsuggest/tester.nim17
2 files changed, 31 insertions, 8 deletions
diff --git a/tools/nimsuggest/nimsuggest.nim b/tools/nimsuggest/nimsuggest.nim
index 80ae58d95..db8b90541 100644
--- a/tools/nimsuggest/nimsuggest.nim
+++ b/tools/nimsuggest/nimsuggest.nim
@@ -286,6 +286,23 @@ proc replTcp(x: ThreadParams) {.thread.} =
     stdoutSocket.send("\c\L")
     stdoutSocket.close()
 
+proc argsToStr(x: SexpNode): string =
+  if x.kind != SList: return x.getStr
+  doAssert x.kind == SList
+  doAssert x.len >= 4
+  let file = x[0].getStr
+  let line = x[1].getNum
+  let col = x[2].getNum
+  let dirty = x[3].getStr
+  result = x[0].getStr.escape
+  if dirty.len > 0:
+    result.add ';'
+    result.add dirty.escape
+  result.add ':'
+  result.add line
+  result.add ':'
+  result.add col
+
 proc replEpc(x: ThreadParams) {.thread.} =
   var server = newSocket()
   let port = connectToNextFreePort(server, "localhost")
@@ -320,9 +337,10 @@ proc replEpc(x: ThreadParams) {.thread.} =
       of ideSug, ideCon, ideDef, ideUse, ideDus, ideOutline, ideHighlight:
         setVerbosity(0)
       else: discard
+      let cmd = $gIdeCmd & " " & args.argsToStr
       if gLogging:
-        logStr "MSG ARG: " & args.getStr
-      requests.send($gIdeCmd & " " & args.getStr)
+        logStr "MSG CMD: " & cmd
+      requests.send(cmd)
       toEpc(client, uid)
     of "methods":
       returnEpc(client, message[1].getNum, listEpc())
diff --git a/tools/nimsuggest/tester.nim b/tools/nimsuggest/tester.nim
index 4e12f329f..c4542e089 100644
--- a/tools/nimsuggest/tester.nim
+++ b/tools/nimsuggest/tester.nim
@@ -17,7 +17,7 @@ const
 
 template tpath(): untyped = getAppDir() / "tests"
 
-proc parseTest(filename: string): Test =
+proc parseTest(filename: string; epcMode=false): Test =
   const cursorMarker = "#[!]#"
   let nimsug = curDir & addFileExt("nimsuggest", ExeExt)
   result.dest = getTempDir() / extractFilename(filename)
@@ -31,7 +31,10 @@ proc parseTest(filename: string): Test =
   for x in lines(filename):
     let marker = x.find(cursorMarker)+1
     if marker > 0:
-      markers.add "\"" & filename & "\";\"" & result.dest & "\":" & $i & ":" & $marker
+      if epcMode:
+        markers.add "(\"" & filename & "\" " & $i & " " & $marker & " \"" & result.dest & "\")"
+      else:
+        markers.add "\"" & filename & "\";\"" & result.dest & "\":" & $i & ":" & $marker
       tmp.writeLine x.replace(cursorMarker, "")
     else:
       tmp.writeLine x
@@ -136,9 +139,11 @@ proc smartCompare(pattern, x: string): bool =
 proc sendEpcStr(socket: Socket; cmd: string) =
   let s = cmd.find(' ')
   doAssert s > 0
-  let cmd = "(call 567 " & cmd.substr(0, s) & escapeJson(cmd.substr(s+1)) & ")"
-  socket.send toHex(cmd.len, 6)
-  socket.send cmd
+  var args = cmd.substr(s+1)
+  if not args.startsWith("("): args = escapeJson(args)
+  let c = "(call 567 " & cmd.substr(0, s) & args & ")"
+  socket.send toHex(c.len, 6)
+  socket.send c
 
 proc recvEpc(socket: Socket): string =
   var L = newStringOfCap(6)
@@ -216,7 +221,7 @@ proc doReport(filename, answer, resp: string; report: var string) =
       report.add "\n  But got:   " & answer
 
 proc runEpcTest(filename: string): int =
-  let s = parseTest filename
+  let s = parseTest(filename, true)
   for cmd in s.startup:
     if not runCmd(cmd, s.dest):
       quit "invalid command: " & cmd