diff options
Diffstat (limited to 'runtime/lua/vim')
| -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 | 
3 files changed, 39 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 {} | 
