diff options
author | sumneko <sumneko@hotmail.com> | 2019-05-06 20:03:02 +0800 |
---|---|---|
committer | sumneko <sumneko@hotmail.com> | 2019-05-06 20:03:02 +0800 |
commit | aa17d5ab935f3963b6a24edb77860dc4f622e31c (patch) | |
tree | db5c8686f0b39501418b033f236322eaa831f040 /server/src/emmy | |
parent | ce0e466279ccd237ec8b3df5e7ed9275b166e1c7 (diff) | |
download | lua-language-server-aa17d5ab935f3963b6a24edb77860dc4f622e31c.zip |
alias支持字面量
Diffstat (limited to 'server/src/emmy')
-rw-r--r-- | server/src/emmy/alias.lua | 11 | ||||
-rw-r--r-- | server/src/emmy/manager.lua | 10 |
2 files changed, 21 insertions, 0 deletions
diff --git a/server/src/emmy/alias.lua b/server/src/emmy/alias.lua index cec23b78..be47cb4f 100644 --- a/server/src/emmy/alias.lua +++ b/server/src/emmy/alias.lua @@ -21,11 +21,22 @@ function mt:bindType(type) end end +function mt:addEnum(enum) + self._enum[#self._enum+1] = enum +end + +function mt:eachEnum(callback) + for _, enum in ipairs(self._enum) do + callback(enum) + end +end + return function (manager, source) local self = setmetatable({ name = source[1][1], source = source.id, _manager = manager, + _enum = {}, }, mt) return self end diff --git a/server/src/emmy/manager.lua b/server/src/emmy/manager.lua index 85f25bd1..cce1e0e4 100644 --- a/server/src/emmy/manager.lua +++ b/server/src/emmy/manager.lua @@ -128,6 +128,9 @@ function mt:addAlias(source, typeObj) aliasObj:bindType(typeObj) local list = self:getClass(aliasName) list[source.id] = aliasObj + for i = 3, #source do + aliasObj:addEnum(source[i][1]) + end return aliasObj end @@ -135,6 +138,13 @@ function mt:addParam(source, bind) local paramObj = newParam(self, source) if bind.type == 'emmy.type' then paramObj:bindType(bind) + self:eachClass(bind:getName(), function (class) + if class.type == 'emmy.alias' then + class:eachEnum(function (enum) + paramObj:addEnum(enum) + end) + end + end) elseif bind.type == 'emmy.generic' then paramObj:bindGeneric(bind) end |