From 02862ee691abef752971bb9240bb9b6d806b9e79 Mon Sep 17 00:00:00 2001 From: baabelfish Date: Wed, 10 Feb 2016 02:55:18 +0200 Subject: [PATCH] Async fixes --- README.md | 9 +++---- autoload/features/definition.vim | 12 +++------- autoload/features/info.vim | 4 ++-- autoload/features/outline.vim | 2 +- autoload/features/rename.vim | 11 +-------- autoload/features/usages.vim | 6 ++--- autoload/highlighter.vim | 3 ++- autoload/suggest.vim | 41 +++++++++++++------------------- ftdetect/nim.vim | 4 ++-- ftplugin/nim.vim | 2 +- plugin/nim.vim | 4 ++-- 11 files changed, 37 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index 901d778..f3463ae 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # nvim-nim [![Build Status](https://travis-ci.org/baabelfish/nvim-nim.svg?branch=master)](https://travis-ci.org/baabelfish/nvim-nim) -Nim support for vim and advanced support for neovim. +Nim support for vim and advanced support for neovim. Still in heavy development. -DON'T INSTALL YET, STILL UNDER VERY HEAVY DEVELOPMENT. ## Features +- Asynchronous - Syntax highlighting - Normal vim highlight - More intelligent highlight with nimsuggest @@ -17,7 +17,7 @@ DON'T INSTALL YET, STILL UNDER VERY HEAVY DEVELOPMENT. - Get symbol information (type, module, file, signature, etc...) - Find usages (file and/or project) - Autocompletion - - Nimsuggest autocompletion + - Nimsuggest omnicompletion - Autocomplete module names - IDE like stuff - Outline listing all symbols in the module (like tagbar) @@ -29,9 +29,10 @@ DON'T INSTALL YET, STILL UNDER VERY HEAVY DEVELOPMENT. - Send current buffer - Send selection + ![something](https://raw.githubusercontent.com/baabelfish/nvim-nim/master/other/pic1.png) ## Planned features - Debugger support -- All features will work asynchronously +- Async autocomplete with deoplete (maybe a seperate plugin) diff --git a/autoload/features/definition.vim b/autoload/features/definition.vim index 19a5ea1..8cf07c6 100644 --- a/autoload/features/definition.vim +++ b/autoload/features/definition.vim @@ -8,17 +8,11 @@ let s:DefinitionImpl = {} function! s:DefinitionImpl.run(data) - if len(a:data.lines) > 0 - let res = util#ParseV1(a:data.lines[0]) - call util#JumpToLocation(res.file, res.line, res.col + 1) - else - echohl Comment | echo "Not found" - endif + let res = util#ParseV1(a:data.lines[0]) + call util#JumpToLocation(res.file, res.line, res.col + 1) endfunction function! features#definition#run() - call suggest#New("def", 1, 0, s:DefinitionImpl) + call suggest#New("def", 0, 0, s:DefinitionImpl) endfunction - - diff --git a/autoload/features/info.vim b/autoload/features/info.vim index 65c8779..6f4d23d 100644 --- a/autoload/features/info.vim +++ b/autoload/features/info.vim @@ -49,10 +49,10 @@ endfunction function! features#info#web() - call suggest#New("def", 1, 0, s:New(1)) + call suggest#New("def", 0, 0, s:New(1)) endfunction function! features#info#run() - call suggest#New("def", 1, 0, s:New(0)) + call suggest#New("def", 0, 0, s:New(0)) endfunction diff --git a/autoload/features/outline.vim b/autoload/features/outline.vim index 67c820b..e0a64e6 100644 --- a/autoload/features/outline.vim +++ b/autoload/features/outline.vim @@ -191,7 +191,7 @@ endfunction function! features#outline#run(isUpdating) if !a:isUpdating || s:IsOpen() - call suggest#New("outline", 1, 1, s:OutlineImpl) + call suggest#New("outline", 0, 1, s:OutlineImpl) endif endfunction diff --git a/autoload/features/rename.vim b/autoload/features/rename.vim index 3d24e6c..dea675b 100644 --- a/autoload/features/rename.vim +++ b/autoload/features/rename.vim @@ -7,19 +7,10 @@ let s:RenameImpl = {} function! s:RenameImpl.run(data) - if len(a:data.lines) == 1 - return - endif - let oldName = split(split(util#FirstNonEmpty(a:data.lines), " ")[2], "\\.")[-1] let newName = input("Rename symbol: ", oldName) for line in a:data.lines - if len(line) == 0 - continue - endif - - let res = util#ParseV2(line) if !s:findInProject && res.file != expand("%:p") continue @@ -42,6 +33,6 @@ endfunction function! features#rename#run(inProject) let s:findInProject = a:inProject - call suggest#New("use", 1, 1, s:RenameImpl) + call suggest#New("use", 0, 1, s:RenameImpl) endfunction diff --git a/autoload/features/usages.vim b/autoload/features/usages.vim index 5cf39d1..f8431d9 100644 --- a/autoload/features/usages.vim +++ b/autoload/features/usages.vim @@ -46,15 +46,13 @@ endfunction let s:UsagesDefinitionImpl = {} function! s:UsagesDefinitionImpl.run(data) - " let res = util#ParseV1(a:data.lines[0]) - " call suggest#NewKnown("use", 1, res.file, res.line, res.col + 1, s:UsagesImpl) - call suggest#New("use", 1, 1, s:UsagesImpl) + call suggest#NewKnown("use", 0, 1, a:data.file, a:data.line, a:data.col, s:UsagesImpl) endfunction function! features#usages#run(findInProject) cclose call setqflist([]) let s:findInProject = a:findInProject - call suggest#New("def", 1, 1, s:UsagesDefinitionImpl) + call suggest#New("def", 0, 1, s:UsagesDefinitionImpl) endfunction diff --git a/autoload/highlighter.vim b/autoload/highlighter.vim index ddeabd7..a8e706d 100644 --- a/autoload/highlighter.vim +++ b/autoload/highlighter.vim @@ -97,11 +97,12 @@ endfunction function highlighter#New() let result = copy(s:NimHighlighter) let result.lines = [] - let result.job = jobstart([g:nvim_nim_exec_nimsuggest, '--v2', '--stdin', expand("%:p")], result) let result.file = expand("%:p") let result.tempfile = util#WriteMemfile() + let result.job = jobstart([g:nvim_nim_exec_nimsuggest, '--v2', '--stdin', result.file], result) call jobsend(result.job, "highlight " . result.file . ";" . result.tempfile . ":1:1\nquit\n") + if !exists("b:highlights") let b:highlights = [] endif diff --git a/autoload/suggest.vim b/autoload/suggest.vim index e0a6d04..9b6ea7d 100644 --- a/autoload/suggest.vim +++ b/autoload/suggest.vim @@ -5,25 +5,8 @@ let s:loaded = 1 let s:findInProject = 1 -let s:NimSuggestServer = { - \ 'pty': 1, - \ } - -function! s:NimSuggestServer.on_stdout(job, chunk) - " echoerr join(a:chunk, "\n") -endfunction -function! s:NimSuggestServer.on_stderr(job, chunk) - " echoerr join(a:chunk, "\n") -endfunction -function! s:NimSuggestServer.on_exit() - " call jobstop(self.job_server) -endfunction - - - -" NimSuggest let s:NimSuggest = { - \ 'pty': 1, + \ 'pty': 0, \ } function! s:NimSuggest.on_stdout(job, chunk) @@ -33,15 +16,23 @@ endfunction function! s:NimSuggest.on_stderr(job, chunk) endfunction + function! s:NimSuggest.on_exit() + echo "" let self.lines = util#FilterCompletions(self.lines) if len(self.lines) > 0 call self.handler.run(self) else - echo "" + echohl Comment | echo "Got nothing" | echohl Normal endif endfunction + +function! suggest#CreateJob(useV2, file, callbacks) + return jobstart([g:nvim_nim_exec_nimsuggest, '--stdin', (a:useV2 ? '--v2' : ''), a:file], a:callbacks) +endfunction + + function! suggest#NewKnown(command, sync, useV2, file, line, col, handler) let result = copy(s:NimSuggest) let result.lines = [] @@ -59,16 +50,16 @@ function! suggest#NewKnown(command, sync, useV2, file, line, col, handler) let result.lines = util#FilterCompletions(split(system(fullcmd), "\n")) if len(result.lines) > 0 call a:handler.run(result) + else + echohl Comment | echo "Got nothing" | echohl Normal endif else call util#StartQuery() - let result.job_server = jobstart([g:nvim_nim_exec_nimsuggest, '--port:5999', '--address:localhost', (a:useV2 ? '--v2' : ''), result.file], s:NimSuggestServer) - if result.job_server < 1 - echoerr "Unable to start server" + let result.job = suggest#CreateJob(a:useV2, result.file, result) + if result.job > 0 + call jobsend(result.job, query . "\nquit\n") else - " FIXME: Telnet is not possibly the best way to communicate :S - let result.job_suggest = jobstart(['telnet', 'localhost', '5999'], result) - call jobsend(result.job_suggest, query . "\n") + echoerr "Unable to start server" endif endif return result diff --git a/ftdetect/nim.vim b/ftdetect/nim.vim index 560930f..25c9273 100644 --- a/ftdetect/nim.vim +++ b/ftdetect/nim.vim @@ -1,7 +1,7 @@ -if exists("s:loaded") +if exists("g:nvim_nim_ftdetect_loaded") finish endif -let s:loaded = 1 +let g:nvim_nim_ftdetect_loaded = 1 au BufNewFile,BufRead *.nim setlocal filetype=nim au BufNewFile,BufRead *.nims setlocal filetype=nims diff --git a/ftplugin/nim.vim b/ftplugin/nim.vim index 4d2dd25..87a2637 100644 --- a/ftplugin/nim.vim +++ b/ftplugin/nim.vim @@ -51,6 +51,6 @@ vnoremap af :call util#SelectNimProc(0)gv vnoremap if :call util#SelectNimProc(1)gv autocmd! BufReadPost,BufWritePost,CursorHold,InsertLeave,TextChanged,InsertEnter *.nim call highlighter#guard() -autocmd! BufWinEnter,BufWritePost,FileWritePost *.nim call features#outline#run(1) +autocmd! CursorHold,BufWritePost,FileWritePost *.nim call features#outline#run(1) autocmd! VimResized,WinEnter * call features#outline#render() call highlighter#guard() diff --git a/plugin/nim.vim b/plugin/nim.vim index 146720f..f426238 100644 --- a/plugin/nim.vim +++ b/plugin/nim.vim @@ -1,7 +1,7 @@ -if exists("s:loaded") +if exists("g:nvim_nim_loaded") finish endif -let s:loaded = 1 +let g:nvim_nim_loaded = 1 function! CheckDependency(command)