Ok, I've had this kicking around for months.
It has taken me until now to get around to actually packaging it up so that 
anyone could use it.

Check it out: https://github.com/JuliaEditorSupport/deoplete-julia

It actually works pretty well (even if I can't write reasonable code in 
demos):
https://asciinema.org/a/688g8iyhj1idrtz8ooptr6iso

Neovim <https://neovim.io/>is very close to vim in functionality -- it can 
run all the same extensions etc.
If you run vim, you should not really even notice the change to neovim, as 
a used.
As a plug-in developer though, things have gotten way better.
Writing a smart syntax completer for regular vim was historically nearly 
impossible, because vim didn't support background tasks.
Neovim supports background takes out of the box, and these are used by Deoplete 
<https://github.com/Shougo/deoplete.nvim>completion engine,
which this plugin extends.


Syntax completion is loaded from what is exported from any modules you 
`using`,
as well as from `Base` and `Core`.
It also spits out help text, as it goes (as you can see in the demo)


The way it works is a little bit (maybe a lot evil).
`jltag` loads up every module you `using` and generates a semantic tagfile 
(technically a legal exuberant-ctags file even, I think).
It uses reflection to dump out all kinds of useful info, like docstrings 
and constant values and a bunch of other stuff.
It caches this in a file, which is then loaded by a small chunck of python 
code, that runs in deoplete.
If your dependency modules change the cache is regenerated.
`jltag`  and the files it generated could be ported to be used with another 
syntax completion engine.
I think you could with only a little work, get normal Vim YouCompleteMe 
<https://github.com/Valloric/YouCompleteMe>syntax completion working, by 
telling it to load from these tag files. but YCM has a terrifying codebase, 
and overall architecture.
You could probably get a bunch of other syntax completers that accept tag 
files working too.
(or you could use the ctagger from julialang/julia/contrib 
<https://github.com/JuliaLang/julia/blob/master/contrib/ctags> to do that)


Anyway,
if you are a Vim user, I suggest grabbing Neovim, and Deoplete and then 
firing this up.
Let me know what you think, and raise some issues over in the repo.


Reply via email to