1
0

Added support for preloaded modules.

This commit is contained in:
Jon Michael Aanes 2017-09-30 14:39:53 +02:00
parent 4fddf72901
commit 2d66b5d216

View File

@ -2,7 +2,7 @@
-- This is a tiny library to discover which modules can be imported using -- This is a tiny library to discover which modules can be imported using
-- `require`. It's intended to be included in an auto-complete system for Lua. -- `require`. It's intended to be included in an auto-complete system for Lua.
-- Not sure if it works on a system without GNU find :/ -- Not sure if it works on a system without GNU find
--- ---
-- Constants -- Constants
@ -84,6 +84,13 @@ local function get_loaded_module_names ()
return l return l
end end
local function get_preloaded_module_names ()
-- Get the names of preloaded modules.
local l = {}
for k in pairs(package.loaded) do l[#l+1] = k end
return l
end
local function get_module_names_from_path () local function get_module_names_from_path ()
local paths = get_module_paths(package.path) local paths = get_module_paths(package.path)
@ -106,20 +113,28 @@ local function get_c_module_names_from_path ()
return modules return modules
end end
local PACKAGE_SEARCH_METHODS = {
get_loaded_module_names,
get_preloaded_module_names,
get_module_names_from_path,
get_c_module_names_from_path,
}
local function get_available_module_names () local function get_available_module_names ()
-- Searches through the package system to determine which modules can be
-- imported by using `require`. Returns a sequence of strings, each of which
-- can be directly used by `require` to import the module.
assert(type(package) == 'table') assert(type(package) == 'table')
local names_loaded = get_loaded_module_names() -- Find and Dedub
local names_path = get_module_names_from_path()
local names_cpath = get_c_module_names_from_path()
--
-- Dedub and Sort
local dedub = {} local dedub = {}
for i = 1, #names_loaded do dedub[names_loaded[i]] = true end for _, method in ipairs(PACKAGE_SEARCH_METHODS) do
for i = 1, #names_path do dedub[names_path[i]] = true end for _, name in ipairs(method()) do dedub[name] = true end
for i = 1, #names_cpath do dedub[names_cpath[i]] = true end end
-- Sort
local module_names = {} local module_names = {}
for name in pairs(dedub) do module_names[#module_names+1] = name end for name in pairs(dedub) do module_names[#module_names+1] = name end
table.sort(module_names) table.sort(module_names)