diff --git a/addon-info.json b/addon-info.json new file mode 100644 index 0000000..a2bf165 --- /dev/null +++ b/addon-info.json @@ -0,0 +1,10 @@ +{ + "name": "requirements", + "description": "the Requirements File Format syntax support for Vim", + "version": "1.7.1", + "author": "raimon", + "repository": { + "type": "git", + "url": "https://github.com/raimon49/requirements.txt.vim" + } +} diff --git a/autoload/coc/source/requirements.vim b/autoload/coc/source/requirements.vim new file mode 100644 index 0000000..ea778d8 --- /dev/null +++ b/autoload/coc/source/requirements.vim @@ -0,0 +1,20 @@ +"" +" https://github.com/neoclide/coc.nvim/wiki/Create-custom-source +function! coc#source#requirements#init() abort + return { + \ 'shortcut': 'pip', + \ 'priority': 9, + \ 'filetypes': ['requirements'], + \ } +endfunction + +"" +" https://github.com/neoclide/coc.nvim/wiki/Create-custom-source +" +" Completion pip option and PYPI package names. +" Note: completion PYPI package names need install pip-cache from PYPI, +" and run `pip-cache update` first to generate cache. +function! coc#source#requirements#complete(opt, cb) abort + call a:cb(g:requirements#items) +endfunction +" vim: et sw=4 ts=4 sts=4: diff --git a/autoload/requirements.vim b/autoload/requirements.vim new file mode 100644 index 0000000..326d0a0 --- /dev/null +++ b/autoload/requirements.vim @@ -0,0 +1,44 @@ +"" +" @section Introduction, intro +" @library +" is generated by . +" See for more information about installation and screenshots. + +"" +" Update cache. +function! requirements#update_cache() abort + let s:items = [] + let l:pip_items = split(system('COMP_WORDS="pip install -" COMP_CWORD=2 PIP_AUTO_COMPLETE=1 pip')) + let l:pypi_items = split(system('pip-cache pkgnames')) + for l:item in l:pip_items + let s:items += [{'word': l:item, 'menu': 'pip'}] + endfor + for l:item in l:pypi_items + let s:items += [{'word': l:item, 'menu': 'pypi'}] + endfor + call writefile([json_encode(s:items)], s:cache) +endfunction + +if exists('*stdpath') + let s:cache_dir_home = stdpath('cache') +else + let s:cache_dir_home = $HOME . '/.cache/nvim' +endif +let s:cache_dir = s:cache_dir_home . '/requirements.vim' +call mkdir(s:cache_dir, 'p') +"" +" Completion cache path. +call g:requirements#utils#plugin.Flag('g:requirements#cache', + \ s:cache_dir . '/requirements.json' + \ ) +let s:cache = g:requirements#cache +try + let s:items = json_decode(readfile(s:cache)[0]) +catch /\v^Vim%(\(\a+\))?:E(684|484|491):/ + call requirements#update_cache() + let s:items = json_decode(readfile(s:cache)[0]) +endtry +"" +" Completion cache contents. For program. +call g:requirements#utils#plugin.Flag('g:requirements#items', s:items) +" vim: et sw=4 ts=4 sts=4: diff --git a/autoload/requirements/utils.vim b/autoload/requirements/utils.vim new file mode 100644 index 0000000..dbe8c9f --- /dev/null +++ b/autoload/requirements/utils.vim @@ -0,0 +1,11 @@ +"" +" @section Configuration, config + +function! s:Flag(name, default) abort + let l:scope = get(split(a:name, ':'), 0, 'g:') + let l:name = get(split(a:name, ':'), -1) + let {l:scope}:{l:name} = get({l:scope}:, l:name, a:default) +endfunction + +let g:requirements#utils#plugin = {'Flag': funcref('s:Flag')} +" vim: et sw=4 ts=4 sts=4: diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 0000000..120f485 --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1,2 @@ +* +!/.gitignore