clojure-vim / async-clj-omni

Async Clojure Completion for various (n)vim completion engines
49 stars 7 forks source link
asyncomplete coc deoplete ncm ncm2-source

clj-async.nvim

Provides async clojure completion for:

Trying to use Fireplace's omnicompletion with auto-complete is painfully slow at times, making typing blocked. Using this module will be faster as it does not block, it runs in it's own thread.

Installation

CIDER

For this plugin to work, your nREPL must have CIDER available. You can install it for lein and boot.

Deoplete

Follow the install instructions for deoplete.nvim. Then just include with your favourite plugin manager, mine is vim-plug

Plug 'clojure-vim/async-clj-omni'

You also need to include the following line in your init.vim:

call deoplete#custom#option('keyword_patterns', {'clojure': '[\w!$%&*+/:<=>?@\^_~\-\.#]*'})

Nvim Completion Manager 2

  1. Follow the install instructions for ncm2.
  2. Add this plugin using your favourite plugin manager,
    Plug 'clojure-vim/async-clj-omni'

asyncomplete.vim

Registration:

au User asyncomplete_setup call asyncomplete#register_source({
    \ 'name': 'async_clj_omni',
    \ 'whitelist': ['clojure'],
    \ 'completor': function('async_clj_omni#sources#complete'),
    \ })

coc.nvim

  1. Follow the install instructions for coc.nvim.
  2. Add this plugin using your favourite plugin manager,
    Plug 'clojure-vim/async-clj-omni'

nvim-cmp

  1. Follow the install instructions for nvim-cmp.
  2. Add { name = 'async_clj_omni' }, a complete example:
    cmp.setup({
     sources = {
       { name = 'async_clj_omni' },
     }
    })

Developing

Deoplete

A few snippets and tidbits for development:

:call deoplete#custom#set('async_clj', 'debug_enabled', 1)
:call deoplete#enable_logging("DEBUG", "/tmp/deopletelog")

Then you can this command to watch debug statements:

$ tail -f /tmp/deopletelog

Debug statements can be made in the source via:

self.debug(msg)

Nvim Completion Manager

NVIM_PYTHON_LOG_FILE=logfile NVIM_PYTHON_LOG_LEVEL=DEBUG nvim

FAQ

  1. Why do you include nrepl-python-client via submodule.

    I made the decision that it was more complex to have users try and manage a version of nrepl-python-client, than it was for them to "just" have it included. In an ideal world, I'd be able to use virtualenv with the Python/Neovim, but this isn't currently a realistic expectation for all users to be able to use.