[ANN]: Deoplete-Julia: Fairly decent syntax completions in Neovim

129 views
Skip to first unread message

Lyndon White

unread,
Sep 25, 2016, 11:15:13 AM9/25/16
to julia-users
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 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 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 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 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.


El suisse

unread,
Sep 25, 2016, 12:34:45 PM9/25/16
to julia...@googlegroups.com
Cool!!! Thanks for sharing!!!
Reply all
Reply to author
Forward
0 new messages