summaryrefslogtreecommitdiff
path: root/script/emmy/param.lua
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2019-11-23 00:05:30 +0800
committer最萌小汐 <sumneko@hotmail.com>2019-11-23 00:05:30 +0800
commit6da2b175e20ed3c03b0dfcfc9046de1e0e5d4444 (patch)
treefdc22d78150fd1c5edc46732c8b151ccfefb519f /script/emmy/param.lua
parentd0ff66c9abe9d6abbca12fd811e0c3cb69c1033a (diff)
downloadlua-language-server-6da2b175e20ed3c03b0dfcfc9046de1e0e5d4444.zip
正路目录
Diffstat (limited to 'script/emmy/param.lua')
-rw-r--r--script/emmy/param.lua70
1 files changed, 70 insertions, 0 deletions
diff --git a/script/emmy/param.lua b/script/emmy/param.lua
new file mode 100644
index 00000000..12ac0633
--- /dev/null
+++ b/script/emmy/param.lua
@@ -0,0 +1,70 @@
+local listMgr = require 'vm.list'
+
+---@class EmmyParam
+local mt = {}
+mt.__index = mt
+mt.type = 'emmy.param'
+
+function mt:getName()
+ return self.name
+end
+
+function mt:getType()
+ if self._bindType then
+ return self._bindType:getType()
+ else
+ return 'any'
+ end
+end
+
+function mt:getSource()
+ return listMgr.get(self.source)
+end
+
+function mt:bindType(type)
+ if type then
+ self._bindType = type
+ else
+ return self._bindType
+ end
+end
+
+function mt:bindGeneric(generic)
+ if generic then
+ self._bindGeneric = generic
+ else
+ return self._bindGeneric
+ 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
+
+function mt:setOption(option)
+ self._option = option
+end
+
+function mt:getOption()
+ return self._option
+end
+
+return function (manager, source)
+ local self = setmetatable({
+ source = source.id,
+ _manager = manager,
+ _enum = {},
+ }, mt)
+ if source.type == 'emmyParam' then
+ self.name = source[1][1]
+ elseif source.type == 'emmyVararg' then
+ self.name = '...'
+ end
+ return self
+end