From eb5d15e3838f53e2fcd25989c88db87458e9f984 Mon Sep 17 00:00:00 2001 From: dundargoc Date: Sun, 7 Jan 2024 13:05:03 +0100 Subject: refactor: rewrite python provider in lua --- runtime/autoload/provider/python3.vim | 44 ++++++----------------------------- 1 file changed, 7 insertions(+), 37 deletions(-) (limited to 'runtime/autoload/provider/python3.vim') diff --git a/runtime/autoload/provider/python3.vim b/runtime/autoload/provider/python3.vim index 38ef0cccfc..d4ffeab155 100644 --- a/runtime/autoload/provider/python3.vim +++ b/runtime/autoload/provider/python3.vim @@ -1,45 +1,15 @@ -" The Python3 provider uses a Python3 host to emulate an environment for running -" python3 plugins. :help provider -" -" Associating the plugin with the Python3 host is the first step because -" plugins will be passed as command-line arguments - if exists('g:loaded_python3_provider') finish endif -let [s:prog, s:err] = provider#pythonx#Detect(3) -let g:loaded_python3_provider = empty(s:prog) ? 1 : 2 -function! provider#python3#Prog() abort - return s:prog +function! provider#python3#Call(method, args) abort + return v:lua.require'vim.provider.python'.call(a:method, a:args) endfunction -function! provider#python3#Error() abort - return s:err +function! provider#python3#Require(host) abort + return v:lua.require'vim.provider.python'.require(a:host) endfunction -" The Python3 provider plugin will run in a separate instance of the Python3 -" host. -call remote#host#RegisterClone('legacy-python3-provider', 'python3') -call remote#host#RegisterPlugin('legacy-python3-provider', 'script_host.py', []) - -function! provider#python3#Call(method, args) abort - if s:err != '' - return - endif - if !exists('s:host') - let s:rpcrequest = function('rpcrequest') - - " Ensure that we can load the Python3 host before bootstrapping - try - let s:host = remote#host#Require('legacy-python3-provider') - catch - let s:err = v:exception - echohl WarningMsg - echomsg v:exception - echohl None - return - endtry - endif - return call(s:rpcrequest, insert(insert(a:args, 'python_'.a:method), s:host)) -endfunction +let s:prog = v:lua.require'vim.provider.python'.detect_by_module('neovim') +let g:loaded_python3_provider = empty(s:prog) ? 1 : 2 +call v:lua.require'vim.provider.python'.start() -- cgit From 2e982f1aad9f1a03562b7a451d642f76b04c37cb Mon Sep 17 00:00:00 2001 From: dundargoc Date: Mon, 22 Jan 2024 18:23:28 +0100 Subject: refactor: create function for deferred loading The benefit of this is that users only pay for what they use. If e.g. only `vim.lsp.buf_get_clients()` is called then they don't need to load all modules under `vim.lsp` which could lead to significant startuptime saving. Also `vim.lsp.module` is a bit nicer to user compared to `require("vim.lsp.module")`. This isn't used for some nested modules such as `filetype` as it breaks tests with error messages such as "attempt to index field 'detect'". It's not entirely certain the reason for this, but it is likely it is due to filetype being precompiled which would imply deferred loading isn't needed for performance reasons. --- runtime/autoload/provider/python3.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'runtime/autoload/provider/python3.vim') diff --git a/runtime/autoload/provider/python3.vim b/runtime/autoload/provider/python3.vim index d4ffeab155..43c14122d0 100644 --- a/runtime/autoload/provider/python3.vim +++ b/runtime/autoload/provider/python3.vim @@ -3,13 +3,13 @@ if exists('g:loaded_python3_provider') endif function! provider#python3#Call(method, args) abort - return v:lua.require'vim.provider.python'.call(a:method, a:args) + return v:lua.vim.provider.python.call(a:method, a:args) endfunction function! provider#python3#Require(host) abort - return v:lua.require'vim.provider.python'.require(a:host) + return v:lua.vim.provider.python.require(a:host) endfunction -let s:prog = v:lua.require'vim.provider.python'.detect_by_module('neovim') +let s:prog = v:lua.vim.provider.python.detect_by_module('neovim') let g:loaded_python3_provider = empty(s:prog) ? 1 : 2 call v:lua.require'vim.provider.python'.start() -- cgit