diff options
author | PMunch <peterme@peterme.net> | 2018-12-01 09:38:18 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-12-01 09:38:18 +0100 |
commit | 3f546b70edab2930452a467368c6d34694cea22a (patch) | |
tree | eb1e014f0cea604cf6fe839bb64dc845c4df5878 | |
parent | abbafe606ee51146709cff099a771e5cdcb2e197 (diff) | |
download | Nim-3f546b70edab2930452a467368c6d34694cea22a.tar.gz |
Moved some code around in nimsuggest to avoid crash when run as library (#9818)
* Moved some code around in nimsuggest to avoid crash when run as library * Moved the common executecallback setting to a procedure * Fixed slight issue
-rw-r--r-- | nimsuggest/nimsuggest.nim | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/nimsuggest/nimsuggest.nim b/nimsuggest/nimsuggest.nim index 89b5bf4ed..c8c6101d7 100644 --- a/nimsuggest/nimsuggest.nim +++ b/nimsuggest/nimsuggest.nim @@ -159,19 +159,13 @@ proc symFromInfo(graph: ModuleGraph; trackPos: TLineInfo): PSym = if m != nil and m.ast != nil: result = findNode(m.ast, trackPos) -proc execute(cmd: IdeCmd, file, dirtyfile: AbsoluteFile, line, col: int; +proc executeNoHooks(cmd: IdeCmd, file, dirtyfile: AbsoluteFile, line, col: int; graph: ModuleGraph) = let conf = graph.config myLog("cmd: " & $cmd & ", file: " & file.string & ", dirtyFile: " & dirtyfile.string & "[" & $line & ":" & $col & "]") conf.ideCmd = cmd - if cmd == ideChk: - conf.structuredErrorHook = errorHook - conf.writelnHook = myLog - else: - conf.structuredErrorHook = nil - conf.writelnHook = myLog if cmd == ideUse and conf.suggestVersion != 0: graph.resetAllModules() var isKnownFile = true @@ -204,6 +198,16 @@ proc execute(cmd: IdeCmd, file, dirtyfile: AbsoluteFile, line, col: int; else: localError(conf, conf.m.trackPos, "found no symbol at this position " & (conf $ conf.m.trackPos)) +proc execute(cmd: IdeCmd, file, dirtyfile: AbsoluteFile, line, col: int; + graph: ModuleGraph) = + if cmd == ideChk: + graph.config.structuredErrorHook = errorHook + graph.config.writelnHook = myLog + else: + graph.config.structuredErrorHook = nil + graph.config.writelnHook = myLog + executeNoHooks(cmd, file, dirtyfile, line, col, graph) + proc executeEpc(cmd: IdeCmd, args: SexpNode; graph: ModuleGraph) = let @@ -707,10 +711,20 @@ else: retval.add(Suggest(section: ideMsg, doc: line)) conf.suggestionResultHook = proc (s: Suggest) = retval.add(s) + conf.writelnHook = proc (s: string) = + stderr.write s & "\n" if conf.ideCmd == ideKnown: retval.add(Suggest(section: ideKnown, quality: ord(fileInfoKnown(conf, file)))) else: if conf.ideCmd == ideChk: for cm in nimsuggest.cachedMsgs: errorHook(conf, cm.info, cm.msg, cm.sev) - execute(conf.ideCmd, file, dirtyfile, line, col, nimsuggest.graph) + if conf.ideCmd == ideChk: + conf.structuredErrorHook = proc (conf: ConfigRef; info: TLineInfo; msg: string; sev: Severity) = + retval.add(Suggest(section: ideChk, filePath: toFullPath(conf, info), + line: toLinenumber(info), column: toColumn(info), doc: msg, + forth: $sev)) + + else: + conf.structuredErrorHook = nil + executeNoHooks(conf.ideCmd, file, dirtyfile, line, col, nimsuggest.graph) return retval |