nimsuggest: works with VS-Plugin again

This commit is contained in:
Andreas Rumpf
2017-02-20 11:51:17 +01:00
parent 1ec96d7353
commit 2d28a626f2
2 changed files with 31 additions and 8 deletions

View File

@@ -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())

View File

@@ -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