diff options
author | ZyX <kp-pav@yandex.ru> | 2017-05-23 00:46:57 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2017-05-25 16:27:40 +0300 |
commit | 97602371e6b00f280ede5e3f6b0e0c1144f46c72 (patch) | |
tree | 669833472c79750f8a590b766f0890b344a1f611 /src/nvim/lua/vim.lua | |
parent | a5a5c83608e6d4455ac40e8786fd16eaf817c608 (diff) | |
download | rneovim-97602371e6b00f280ede5e3f6b0e0c1144f46c72.tar.gz rneovim-97602371e6b00f280ede5e3f6b0e0c1144f46c72.tar.bz2 rneovim-97602371e6b00f280ede5e3f6b0e0c1144f46c72.zip |
lua: Add paths from &runtimepath to package.path and package.cpath
Diffstat (limited to 'src/nvim/lua/vim.lua')
-rw-r--r-- | src/nvim/lua/vim.lua | 57 |
1 files changed, 56 insertions, 1 deletions
diff --git a/src/nvim/lua/vim.lua b/src/nvim/lua/vim.lua index 8d1c5bdf4f..736182de11 100644 --- a/src/nvim/lua/vim.lua +++ b/src/nvim/lua/vim.lua @@ -1,2 +1,57 @@ -- TODO(ZyX-I): Create compatibility layer. -return {} +--{{{1 package.path updater function +-- Last inserted paths. Used to clear out items from package.[c]path when they +-- are no longer in &runtimepath. +local last_nvim_paths = {} +local function _update_package_paths() + local cur_nvim_paths = {} + local rtps = vim.api.nvim_list_runtime_paths() + local sep = package.config:sub(1, 1) + for _, key in ipairs({'path', 'cpath'}) do + local orig_str = package[key] .. ';' + local pathtrails = {} + local pathtrails_ordered = {} + local orig = {} + -- Note: ignores trailing item without trailing `;`. Not using something + -- simpler in order to preserve empty items (stand for default path). + for s in orig_str:gmatch('[^;]*;') do + s = s:sub(1, -2) -- Strip trailing semicolon + orig[#orig + 1] = s + -- Find out path patterns. pathtrail should contain something like + -- /?.so, /?/init.lua, /?.lua. This allows not to bother determining what + -- correct suffixes are. + local pathtrail = s:match('[/\\][^/\\]*%?.*$') + if pathtrail and not pathtrails[pathtrail] then + pathtrails[pathtrail] = true + pathtrails_ordered[#pathtrails_ordered + 1] = pathtrail + end + end + local new = {} + for _, rtp in ipairs(rtps) do + if not rtp:match(';') then + for _, pathtrail in pairs(pathtrails_ordered) do + local new_path = rtp .. sep .. 'lua' .. pathtrail + -- Always keep paths from &runtimepath at the start: + -- append them here disregarding orig possibly containing one of them. + new[#new + 1] = new_path + cur_nvim_paths[new_path] = true + end + end + end + for _, orig_path in ipairs(orig) do + -- Handle removing obsolete paths originating from &runtimepath: such + -- paths either belong to cur_nvim_paths and were already added above or + -- to last_nvim_paths and should not be added at all if corresponding + -- entry was removed from &runtimepath list. + if not (cur_nvim_paths[orig_path] or last_nvim_paths[orig_path]) then + new[#new + 1] = orig_path + end + end + package[key] = table.concat(new, ';') + end + last_nvim_paths = cur_nvim_paths +end +--{{{1 Module definition +return { + _update_package_paths = _update_package_paths, +} |