summaryrefslogtreecommitdiff
path: root/xmake/core/language/language.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2016-12-20 09:16:03 +0800
committerruki <[email protected]>2017-01-06 17:20:08 +0800
commitf0c81e8d818b3d0d5177ac4b39ff59562f133886 (patch)
treeb687c5a34f1543492605ce7d23f6f36f5aaaedf3 /xmake/core/language/language.lua
parent42ff9b62aa8ef799d8a9cfc064a40311671bee54 (diff)
load language apis
Diffstat (limited to 'xmake/core/language/language.lua')
-rw-r--r--xmake/core/language/language.lua32
1 files changed, 30 insertions, 2 deletions
diff --git a/xmake/core/language/language.lua b/xmake/core/language/language.lua
index 1b042d871..43b77898e 100644
--- a/xmake/core/language/language.lua
+++ b/xmake/core/language/language.lua
@@ -139,7 +139,7 @@ end
function language._directory()
-- the directory
- return path.join(xmake._PROGRAM_DIR, "languages"))
+ return path.join(xmake._PROGRAM_DIR, "languages")
end
-- the interpreter
@@ -160,6 +160,9 @@ function language._interpreter()
-- register api: on_load()
interp:api_register_on_script("language", "load")
+ -- register api: set_values() to language
+ interp:api_register_set_values("language", "sourcekinds")
+
-- save interpreter
language._INTERPRETER = interp
@@ -172,7 +175,7 @@ function language.load(name)
-- load all languages
if not name then
- for _, name in ipairs(table.wrap(os.match(language._directory(), true))) do
+ for _, name in ipairs(table.wrap(os.match(path.join(language._directory(), "*"), true))) do
local instance, errors = language.load(path.basename(name))
if not instance then
return nil, errors
@@ -263,5 +266,30 @@ function language.load_from_kind(kind)
return result
end
+-- load the language apis
+function language.apis()
+
+ -- load all languages
+ local languages, errors = language.load()
+ if not languages then
+ return nil, errors
+ end
+
+ -- merge apis for each language
+ local apis = {values = {}, pathes = {}}
+ for _, instance in pairs(languages) do
+ local instance_apis = instance:get("apis")
+ if instance_apis then
+ table.join2(apis.values, table.wrap(instance_apis.values))
+ table.join2(apis.pathes, table.wrap(instance_apis.pathes))
+ end
+ end
+ apis.values = table.unique(apis.values)
+ apis.pathes = table.unique(apis.pathes)
+
+ -- ok
+ return apis
+end
+
-- return module
return language