diff options
author | bfredl <bjorn.linse@gmail.com> | 2022-03-06 13:13:10 +0100 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2022-03-07 09:59:22 +0100 |
commit | f39a12d629500bdbacb389ed593adac34d058fcb (patch) | |
tree | ac980373621461b12b503beb573d4dff9b85c0eb | |
parent | 8e7446b3cbc5c82706f41d701239fa18ab5b2808 (diff) | |
download | rneovim-f39a12d629500bdbacb389ed593adac34d058fcb.tar.gz rneovim-f39a12d629500bdbacb389ed593adac34d058fcb.tar.bz2 rneovim-f39a12d629500bdbacb389ed593adac34d058fcb.zip |
refactor(lua): make vim submodule lazy loading declarative
This will allow us to also use the same logic for lua threads and
processes, later.
-rw-r--r-- | runtime/lua/vim/_editor.lua | 52 | ||||
-rw-r--r-- | runtime/lua/vim/_init_packages.lua | 20 | ||||
-rw-r--r-- | runtime/lua/vim/shared.lua | 8 | ||||
-rw-r--r-- | src/nvim/CMakeLists.txt | 1 |
4 files changed, 40 insertions, 41 deletions
diff --git a/runtime/lua/vim/_editor.lua b/runtime/lua/vim/_editor.lua index ddd1147468..2251aca004 100644 --- a/runtime/lua/vim/_editor.lua +++ b/runtime/lua/vim/_editor.lua @@ -3,9 +3,11 @@ -- Lua code lives in one of three places: -- 1. runtime/lua/vim/ (the runtime): For "nice to have" features, e.g. the -- `inspect` and `lpeg` modules. --- 2. runtime/lua/vim/shared.lua: Code shared between Nvim and tests. --- (This will go away if we migrate to nvim as the test-runner.) --- 3. runtime/lua/vim/_editor.lua: Compiled-into Nvim itself. +-- 2. runtime/lua/vim/shared.lua: pure lua functions which always +-- are available. Used in the test runner, as well as worker threads +-- and processes launched from Nvim. +-- 3. runtime/lua/vim/_editor.lua: Code which directly interacts with +-- the Nvim editor state. Only available in the main thread. -- -- Guideline: "If in doubt, put it in the runtime". -- @@ -35,43 +37,19 @@ -- - https://github.com/howl-editor/howl/tree/master/lib/howl/util local vim = assert(vim) -assert(vim.inspect) -- These are for loading runtime modules lazily since they aren't available in -- the nvim binary as specified in executor.c -setmetatable(vim, { - __index = function(t, key) - if key == 'treesitter' then - t.treesitter = require('vim.treesitter') - return t.treesitter - elseif key == 'filetype' then - t.filetype = require('vim.filetype') - return t.filetype - elseif key == 'F' then - t.F = require('vim.F') - return t.F - elseif require('vim.uri')[key] ~= nil then - -- Expose all `vim.uri` functions on the `vim` module. - t[key] = require('vim.uri')[key] - return t[key] - elseif key == 'lsp' then - t.lsp = require('vim.lsp') - return t.lsp - elseif key == 'highlight' then - t.highlight = require('vim.highlight') - return t.highlight - elseif key == 'diagnostic' then - t.diagnostic = require('vim.diagnostic') - return t.diagnostic - elseif key == 'keymap' then - t.keymap = require('vim.keymap') - return t.keymap - elseif key == 'ui' then - t.ui = require('vim.ui') - return t.ui - end - end -}) +for k,v in pairs { + treesitter=true; + filetype = true; + F=true; + lsp=true; + highlight=true; + diagnostic=true; + keymap=true; + ui=true; +} do vim._submodules[k] = v end vim.log = { levels = { diff --git a/runtime/lua/vim/_init_packages.lua b/runtime/lua/vim/_init_packages.lua index dcb402287c..7d27741f1b 100644 --- a/runtime/lua/vim/_init_packages.lua +++ b/runtime/lua/vim/_init_packages.lua @@ -50,7 +50,25 @@ table.insert(package.loaders, 2, vim._load_package) -- builtin functions which always should be available require'vim.shared' -vim.inspect = require'vim.inspect' + +vim._submodules = {inspect=true} + +-- These are for loading runtime modules in the vim namespace lazily. +setmetatable(vim, { + __index = function(t, key) + if vim._submodules[key] then + t[key] = require('vim.'..key) + return t[key] + elseif vim.startswith(key, 'uri_') then + local val = require('vim.uri')[key] + if val ~= nil then + -- Expose all `vim.uri` functions on the `vim` module. + t[key] = val + return t[key] + end + end + end +}) --- <Docs described in |vim.empty_dict()| > ---@private diff --git a/runtime/lua/vim/shared.lua b/runtime/lua/vim/shared.lua index 48d0bd3672..8124b23eb1 100644 --- a/runtime/lua/vim/shared.lua +++ b/runtime/lua/vim/shared.lua @@ -1,8 +1,10 @@ -- Functions shared by Nvim and its test-suite. -- --- The singular purpose of this module is to share code with the Nvim --- test-suite. If, in the future, Nvim itself is used to run the test-suite --- instead of "vanilla Lua", these functions could move to runtime/lua/vim/_editor.lua +-- These are "pure" lua functions not depending of the state of the editor. +-- Thus they should always be available whenever nvim-related lua code is run, +-- regardless if it is code in the editor itself, or in worker threads/processes, +-- or the test suite. (Eventually the test suite will be run in a worker process, +-- so this wouldn't be a separate case to consider) local vim = vim or {} diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 9abefbe02a..9f29cae29d 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -342,6 +342,7 @@ add_custom_command( ${LUA_KEYMAP_MODULE_SOURCE} "vim.keymap" DEPENDS ${CHAR_BLOB_GENERATOR} + ${LUA_INIT_PACKAGES_MODULE_SOURCE} ${LUA_EDITOR_MODULE_SOURCE} ${LUA_SHARED_MODULE_SOURCE} ${LUA_INSPECT_MODULE_SOURCE} |