Added support for preloaded modules.
This commit is contained in:
parent
4fddf72901
commit
2d66b5d216
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user